87 lines
1.3 KiB
C
87 lines
1.3 KiB
C
|
/* wc line and word count */
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
main(argc, argv)
|
||
|
char **argv;
|
||
|
{
|
||
|
int i, token;
|
||
|
register FILE *fp;
|
||
|
long linect, wordct, charct;
|
||
|
long tlinect=0, twordct=0, tcharct=0;
|
||
|
char *wd;
|
||
|
register int c;
|
||
|
|
||
|
wd = "lwc";
|
||
|
if(argc > 1 && *argv[1] == '-') {
|
||
|
wd = ++argv[1];
|
||
|
argc--;
|
||
|
argv++;
|
||
|
}
|
||
|
|
||
|
i = 1;
|
||
|
fp = stdin;
|
||
|
do {
|
||
|
if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) {
|
||
|
fprintf(stderr, "wc: can't open %s\n", argv[i]);
|
||
|
continue;
|
||
|
}
|
||
|
linect = 0;
|
||
|
wordct = 0;
|
||
|
charct = 0;
|
||
|
token = 0;
|
||
|
for(;;) {
|
||
|
c = getc(fp);
|
||
|
if (c == EOF)
|
||
|
break;
|
||
|
charct++;
|
||
|
if(' '<c&&c<0177) {
|
||
|
if(!token) {
|
||
|
wordct++;
|
||
|
token++;
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
if(c=='\n')
|
||
|
linect++;
|
||
|
else if(c!=' '&&c!='\t')
|
||
|
continue;
|
||
|
token = 0;
|
||
|
}
|
||
|
/* print lines, words, chars */
|
||
|
wcp(wd, charct, wordct, linect);
|
||
|
if(argc>1) {
|
||
|
printf(" %s\n", argv[i]);
|
||
|
} else
|
||
|
printf("\n");
|
||
|
fclose(fp);
|
||
|
tlinect += linect;
|
||
|
twordct += wordct;
|
||
|
tcharct += charct;
|
||
|
} while(++i<argc);
|
||
|
if(argc > 2) {
|
||
|
wcp(wd, tcharct, twordct, tlinect);
|
||
|
printf(" total\n");
|
||
|
}
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
wcp(wd, charct, wordct, linect)
|
||
|
register char *wd;
|
||
|
long charct; long wordct; long linect;
|
||
|
{
|
||
|
while (*wd) switch (*wd++) {
|
||
|
case 'l':
|
||
|
printf("%7ld", linect);
|
||
|
break;
|
||
|
|
||
|
case 'w':
|
||
|
printf("%7ld ", wordct);
|
||
|
break;
|
||
|
|
||
|
case 'c':
|
||
|
printf("%7ld", charct);
|
||
|
break;
|
||
|
}
|
||
|
}
|