PWB1/type/croff/tacct.c

Compare this file to the similar file:
Show the results in this format:

float paper[256];
struct	passwd {
	char	*pw_name;
	char	*pw_passwd;
	int	pw_uid;
	int	pw_gid;
	char	*pw_gecos;
	char	*pw_dir;
	char	*pw_shell;
};
int ibuf1[259];
int ibuf2[259];
int *ip1 ibuf1;
int *ip2 ibuf2;
int pu[2];
char acctname[] "/usr/actg/data/troffactg";
int xxx;

main(argc,argv)
int argc;
char **argv;
{

	register int i;
	int lastu;
	register struct passwd *p;
	char date[40];
	float total;

	if(fopen("/etc/passwd",ip2) <0){
		printf("Cannot open /etc/passwd\n");
		exit();
	}
	if(argc == 2)acctname[9] = (++argv)[0][0];
	if(fopen(acctname,ip1) < 0){
		printf("Cannot open: %s\n",acctname);
		exit();
	}
	i=0;
	while(1){
		date[i] = getc(ip1);
		if(date[i++] == '\n')break;
	}
	date[i]=0;

	while(getn(pu,3) == 3){
		paper[pu[1]] =+ pu[0]/1728.;
		total =+ pu[0]/1728.;
		lastu = pu[1];
	}

	printf("%s",date);
	printf("UID	Feet of paper\n");
	i=0;
	while(i<256){
		if(paper[i++] != 0.0){
			while(p=getpwent()){
				if(p->pw_uid == (i-1)){
					if(lastu == p->pw_uid)
					  printf("_\b");
					printf("%s\t%8.1f\n",
					p->pw_name,paper[i-1]);
					break;
				}
			}
			if(p == 0){
				printf("%d\t%8.1f\n",
				i-1,paper[i-1]);
				seek(*ip2,0,0);
				ibuf2[1] = ibuf2[2] = 0;
			}
		}
	}
	printf("Total\t%8.1f\n",total);
}
getpwent()
{
	register char *p;
	register c;
	static struct passwd passwd;
	static char line[100];

	p = line;
	while((c=getc(ip2)) != '\n') {
		if(c <= 0)
			return(0);
		if(p < line+98)
			*p++ = c;
	}
	*p = 0;
	p = line;
	passwd.pw_name = p;
	p = pwskip(p);
	passwd.pw_passwd = p;
	p = pwskip(p);
	passwd.pw_uid = atoi(p);
	p = pwskip(p);
	passwd.pw_gid = atoi(p);
	p = pwskip(p);
	passwd.pw_gecos = p;
	p = pwskip(p);
	passwd.pw_dir = p;
	p = pwskip(p);
	passwd.pw_shell = p;
	return(&passwd);
}

pwskip(ap)
char *ap;
{
	register char *p;

	p = ap;
	while(*p != ':') {
		if(*p == 0)
			return(p);
		p++;
	}
	*p++ = 0;
	return(p);
}
getn(p,n)
char *p;
int n;
{
	register i;

	for(i=0; i<n; i++){
		if((p[i]=getc(ip1)) == -1)break;
	}
	return(i);
}