recalculate nvis after move
[unix-history] / usr / src / usr.bin / wc / wc.c
CommitLineData
b9dc0bb8 1static char *sccsid = "@(#)wc.c 4.6 (Berkeley) %G%";
66690d0f
BJ
2/* wc line and word count */
3
4#include <stdio.h>
5long linect, wordct, charct, pagect;
6long tlinect, twordct, tcharct, tpagect;
66690d0f 7char *wd = "lwc";
66690d0f
BJ
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]) {
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 79wcp(wd, charct, wordct, linect)
66690d0f 80register char *wd;
b9dc0bb8 81long 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
99ipr(num)
100long num;
101{
b9dc0bb8 102 printf(" %7ld", num);
66690d0f
BJ
103}
104