wc

Count words in <50 lines of C
Log | Files | Refs | README

unix-v7-wc.c (1356B)


      1 /* wc line and word count */
      2 
      3 #include <stdio.h>
      4 
      5 main(argc, argv)
      6 char **argv;
      7 {
      8 	int i, token;
      9 	register FILE *fp;
     10 	long linect, wordct, charct;
     11 	long tlinect=0, twordct=0, tcharct=0;
     12 	char *wd;
     13 	register int c;
     14 
     15 	wd = "lwc";
     16 	if(argc > 1 && *argv[1] == '-') {
     17 		wd = ++argv[1];
     18 		argc--;
     19 		argv++;
     20 	}
     21 
     22 	i = 1;
     23 	fp = stdin;
     24 	do {
     25 		if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) {
     26 			fprintf(stderr, "wc: can't open %s\n", argv[i]);
     27 			continue;
     28 		}
     29 		linect = 0;
     30 		wordct = 0;
     31 		charct = 0;
     32 		token = 0;
     33 		for(;;) {
     34 			c = getc(fp);
     35 			if (c == EOF)
     36 				break;
     37 			charct++;
     38 			if(' '<c&&c<0177) {
     39 				if(!token) {
     40 					wordct++;
     41 					token++;
     42 				}
     43 				continue;
     44 			}
     45 			if(c=='\n')
     46 				linect++;
     47 			else if(c!=' '&&c!='\t')
     48 				continue;
     49 			token = 0;
     50 		}
     51 		/* print lines, words, chars */
     52 		wcp(wd, charct, wordct, linect);
     53 		if(argc>1) {
     54 			printf(" %s\n", argv[i]);
     55 		} else
     56 			printf("\n");
     57 		fclose(fp);
     58 		tlinect += linect;
     59 		twordct += wordct;
     60 		tcharct += charct;
     61 	} while(++i<argc);
     62 	if(argc > 2) {
     63 		wcp(wd, tcharct, twordct, tlinect);
     64 		printf(" total\n");
     65 	}
     66 	exit(0);
     67 }
     68 
     69 wcp(wd, charct, wordct, linect)
     70 register char *wd;
     71 long charct; long wordct; long linect;
     72 {
     73 	while (*wd) switch (*wd++) {
     74 	case 'l':
     75 		printf("%7ld", linect);
     76 		break;
     77 
     78 	case 'w':
     79 		printf("%7ld ", wordct);
     80 		break;
     81 
     82 	case 'c':
     83 		printf("%7ld", charct);
     84 		break;
     85 	}
     86 }