1 static char *sccsid = "@(#)wc.c 4.6 (Berkeley) 06/01/83"; 2 /* wc line and word count */ 3 4 #include <stdio.h> 5 long linect, wordct, charct, pagect; 6 long tlinect, twordct, tcharct, tpagect; 7 char *wd = "lwc"; 8 9 main(argc, argv) 10 char **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 79 wcp(wd, charct, wordct, linect) 80 register char *wd; 81 long 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 99 ipr(num) 100 long num; 101 { 102 printf(" %7ld", num); 103 } 104 105