1BSD/s6/pq.c
/*
* 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);
}