Bell 32V development
[unix-history] / usr / src / cmd / wc.c
CommitLineData
3b600ead
TL
1/* wc line and word count */
2
3#include <stdio.h>
4
5main(argc, argv)
6char **argv;
7{
8 int i, token;
9 register FILE *fp;
10 long linect, wordct, charct;
11 long tlinect=0, twordct=0, tcharct=0;
12 char *wd;
13 register int c;
14
15 wd = "lwc";
16 if(argc > 1 && *argv[1] == '-') {
17 wd = ++argv[1];
18 argc--;
19 argv++;
20 }
21
22 i = 1;
23 fp = stdin;
24 do {
25 if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) {
26 fprintf(stderr, "wc: can't open %s\n", argv[i]);
27 continue;
28 }
29 linect = 0;
30 wordct = 0;
31 charct = 0;
32 token = 0;
33 for(;;) {
34 c = getc(fp);
35 if (c == EOF)
36 break;
37 charct++;
38 if(' '<c&&c<0177) {
39 if(!token) {
40 wordct++;
41 token++;
42 }
43 continue;
44 }
45 if(c=='\n')
46 linect++;
47 else if(c!=' '&&c!='\t')
48 continue;
49 token = 0;
50 }
51 /* print lines, words, chars */
52 wcp(wd, charct, wordct, linect);
53 if(argc>1) {
54 printf(" %s\n", argv[i]);
55 } else
56 printf("\n");
57 fclose(fp);
58 tlinect += linect;
59 twordct += wordct;
60 tcharct += charct;
61 } while(++i<argc);
62 if(argc > 2) {
63 wcp(wd, tcharct, twordct, tlinect);
64 printf(" total\n");
65 }
66 exit(0);
67}
68
69wcp(wd, charct, wordct, linect)
70register char *wd;
71long charct; long wordct; long linect;
72{
73 while (*wd) switch (*wd++) {
74 case 'l':
75 printf("%7ld", linect);
76 break;
77
78 case 'w':
79 printf("%7ld ", wordct);
80 break;
81
82 case 'c':
83 printf("%7ld", charct);
84 break;
85 }
86}