home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / wc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.3 KB  |  87 lines

  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. }
  87.