PWB1/sys/source/s2/wc.c

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

/* wc line and word count */

int	buf[256];
int	file;
int	lflg;
long int wordct;
long int linect;

main(argc,argv)
char **argv;
{
	int i, token;
	register char *p1, *p2;
	register int c;

	if(--argc>0 & **++argv=='-') {
		if(argv[0][1]=='l')
			lflg++;
		argc--;
		argv++;
	}
	i = 0;
	do {
		if(argc<=0) buf[0] = 0;
		else if((file=open(argv[i],0))<0) {
			diag(argv[i]);
			diag(": cannot open\n");
			continue;
		}
		p1 = 0;
		p2 = 0;
		linect = 0;
		wordct = 0;
		token = 0;
		for(;;) {
			if(p1 >= p2) {
				p1 = &buf;
				c = read(file, p1, 512);
				if(c <= 0)
					break;
				p2 = p1+c;
			}
			c = 0;
			c =| *p1++;
			if(' '<c&&c<0177) {
				if(!token++) {
					wordct++;
				}
			} else {
				if(c=='\n') {
					linect++;
				}
				else if(c!=' '&&c!='\t')
					continue;
				token = 0;
			}
		}
		printf("%7s ",locv(linect));
		if(lflg==0)
		printf("%7s ",locv(wordct));
		printf("%s\n", argc<=0?"":argv[i]);
		close(file);
	} while(++i<argc);
}

diag(s)
char *s;
{
	while(*s)
		write(2,s++,1);
}

putchar(c)
{
	write(1,&c,1);
}