+/*
+ * pq - print the quota file affecting you most immediately
+ *
+ * Kurt Shoens UCB July, 1977
+ */
+ struct {
+ char minor; /* +0: minor device of i-node */
+ char major; /* +1: major device */
+ int inumber; /* +2 */
+ int flags; /* +4: see below */
+ char nlinks; /* +6: number of links to file */
+ char uid; /* +7: user ID of owner */
+ char gid; /* +8: group ID of owner */
+ char size0; /* +9: high byte of 24-bit size */
+ int size1; /* +10: low word of 24-bit size */
+ int addr[8]; /* +12: block numbers or device number */
+ int actime[2]; /* +28: time of last access */
+ int modtime[2]; /* +32: time of last modification */
+ } inode;
+main(ct,av)
+ char **av;
+{
+ int i,lastnode;
+ if (ct==1)
+ {
+ lastnode=0;
+ stat(".",&inode);
+ while (lastnode != inode.inumber)
+ {
+ lastnode=inode.inumber;
+ if (quota(".q"))
+ {
+ pq(".q");
+ exit(0);
+ }
+ chdir("..");
+ stat(".",&inode);
+ }
+ exit(9);
+ }
+ for (i=1;i<ct;++i) pq(av[i]);
+}
+
+pq(cp)
+ char *cp;
+{
+ float cut,a,b;
+ if (stat(cp,&inode))
+ {
+ perror(cp);
+ return;
+ }
+ if (!quota(cp))
+ {
+ printf("%s: not a q-file.\n",cp);
+ return;
+ }
+ a = inode.addr[1];
+ b = inode.addr[2];
+ cut = 100.0*a/b;
+ printf("%d/%d %3.0f%%\n",inode.addr[1],inode.addr[2],cut);
+ return;
+}
+
+quota(cp)
+ char *cp;
+{
+ if (stat(cp,&inode)) return(0);
+ if (((inode.flags & 060000) != 020000) || (inode.addr[0]!= -1))
+ return(0);
+ return(-1);
+}