Commit | Line | Data |
---|---|---|
b9dc0bb8 | 1 | static char *sccsid = "@(#)wc.c 4.6 (Berkeley) %G%"; |
66690d0f BJ |
2 | /* wc line and word count */ |
3 | ||
4 | #include <stdio.h> | |
5 | long linect, wordct, charct, pagect; | |
6 | long tlinect, twordct, tcharct, tpagect; | |
66690d0f | 7 | char *wd = "lwc"; |
66690d0f BJ |
8 | |
9 | main(argc, argv) | |
10 | char **argv; | |
11 | { | |
12 | int i, token; | |
13 | register FILE *fp; | |
14 | register int c; | |
15 | char *p; | |
16 | ||
17 | while (argc > 1 && *argv[1] == '-') { | |
18 | switch (argv[1][1]) { | |
b9dc0bb8 | 19 | case 'l': case 'w': case 'c': |
66690d0f BJ |
20 | wd = argv[1]+1; |
21 | break; | |
8d8b30ec MH |
22 | default: |
23 | usage: | |
b9dc0bb8 | 24 | fprintf(stderr, "Usage: wc [-lwc] [files]\n"); |
8d8b30ec | 25 | exit(1); |
66690d0f BJ |
26 | } |
27 | argc--; | |
28 | argv++; | |
29 | } | |
30 | ||
66690d0f BJ |
31 | i = 1; |
32 | fp = stdin; | |
33 | do { | |
34 | if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) { | |
6404bb88 | 35 | perror(argv[i]); |
66690d0f BJ |
36 | continue; |
37 | } | |
38 | linect = 0; | |
39 | wordct = 0; | |
40 | charct = 0; | |
66690d0f BJ |
41 | token = 0; |
42 | for(;;) { | |
43 | c = getc(fp); | |
44 | if (c == EOF) | |
45 | break; | |
46 | charct++; | |
47 | if(' '<c&&c<0177) { | |
48 | if(!token) { | |
49 | wordct++; | |
50 | token++; | |
51 | } | |
52 | continue; | |
53 | } | |
54 | if(c=='\n') { | |
55 | linect++; | |
66690d0f BJ |
56 | } |
57 | else if(c!=' '&&c!='\t') | |
58 | continue; | |
59 | token = 0; | |
60 | } | |
61 | /* print lines, words, chars */ | |
b9dc0bb8 | 62 | wcp(wd, charct, wordct, linect); |
66690d0f BJ |
63 | if(argc>1) { |
64 | printf(" %s\n", argv[i]); | |
65 | } else | |
66 | printf("\n"); | |
67 | fclose(fp); | |
68 | tlinect += linect; | |
69 | twordct += wordct; | |
70 | tcharct += charct; | |
66690d0f BJ |
71 | } while(++i<argc); |
72 | if(argc > 2) { | |
b9dc0bb8 | 73 | wcp(wd, tcharct, twordct, tlinect); |
66690d0f BJ |
74 | printf(" total\n"); |
75 | } | |
76 | exit(0); | |
77 | } | |
78 | ||
b9dc0bb8 | 79 | wcp(wd, charct, wordct, linect) |
66690d0f | 80 | register char *wd; |
b9dc0bb8 | 81 | long charct; long wordct; long linect; |
66690d0f BJ |
82 | { |
83 | while (*wd) switch (*wd++) { | |
84 | case 'l': | |
85 | ipr(linect); | |
86 | break; | |
87 | ||
88 | case 'w': | |
89 | ipr(wordct); | |
90 | break; | |
91 | ||
92 | case 'c': | |
93 | ipr(charct); | |
94 | break; | |
95 | ||
66690d0f BJ |
96 | } |
97 | } | |
98 | ||
99 | ipr(num) | |
100 | long num; | |
101 | { | |
b9dc0bb8 | 102 | printf(" %7ld", num); |
66690d0f BJ |
103 | } |
104 |