recalculate nvis after move
[unix-history] / usr / src / usr.bin / wc / wc.c
... / ...
CommitLineData
1static char *sccsid = "@(#)wc.c 4.6 (Berkeley) %G%";
2/* wc line and word count */
3
4#include <stdio.h>
5long linect, wordct, charct, pagect;
6long tlinect, twordct, tcharct, tpagect;
7char *wd = "lwc";
8
9main(argc, argv)
10char **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]) {
19 case 'l': case 'w': case 'c':
20 wd = argv[1]+1;
21 break;
22 default:
23 usage:
24 fprintf(stderr, "Usage: wc [-lwc] [files]\n");
25 exit(1);
26 }
27 argc--;
28 argv++;
29 }
30
31 i = 1;
32 fp = stdin;
33 do {
34 if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) {
35 perror(argv[i]);
36 continue;
37 }
38 linect = 0;
39 wordct = 0;
40 charct = 0;
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++;
56 }
57 else if(c!=' '&&c!='\t')
58 continue;
59 token = 0;
60 }
61 /* print lines, words, chars */
62 wcp(wd, charct, wordct, linect);
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;
71 } while(++i<argc);
72 if(argc > 2) {
73 wcp(wd, tcharct, twordct, tlinect);
74 printf(" total\n");
75 }
76 exit(0);
77}
78
79wcp(wd, charct, wordct, linect)
80register char *wd;
81long charct; long wordct; long linect;
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
96 }
97}
98
99ipr(num)
100long num;
101{
102 printf(" %7ld", num);
103}
104