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