PWB1/sys/source/s2/wc.c
/* 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);
}