xref: /minix3/external/bsd/flex/dist/examples/fastwc/mywc.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*357f1050SThomas Veerman /* A simple but fairly efficient C version of the Unix "wc" tool */
2*357f1050SThomas Veerman 
3*357f1050SThomas Veerman #include <stdio.h>
4*357f1050SThomas Veerman #include <ctype.h>
5*357f1050SThomas Veerman 
main()6*357f1050SThomas Veerman main()
7*357f1050SThomas Veerman {
8*357f1050SThomas Veerman 	register int c, cc = 0, wc = 0, lc = 0;
9*357f1050SThomas Veerman 	FILE *f = stdin;
10*357f1050SThomas Veerman 
11*357f1050SThomas Veerman 	while ((c = getc(f)) != EOF) {
12*357f1050SThomas Veerman 		++cc;
13*357f1050SThomas Veerman 		if (isgraph(c)) {
14*357f1050SThomas Veerman 			++wc;
15*357f1050SThomas Veerman 			do {
16*357f1050SThomas Veerman 				c = getc(f);
17*357f1050SThomas Veerman 				if (c == EOF)
18*357f1050SThomas Veerman 					goto done;
19*357f1050SThomas Veerman 				++cc;
20*357f1050SThomas Veerman 			} while (isgraph(c));
21*357f1050SThomas Veerman 		}
22*357f1050SThomas Veerman 		if (c == '\n')
23*357f1050SThomas Veerman 			++lc;
24*357f1050SThomas Veerman 	}
25*357f1050SThomas Veerman done:	printf( "%8d%8d%8d\n", lc, wc, cc );
26*357f1050SThomas Veerman }
27