home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s2 / wc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1975-05-13  |  1.2 KB  |  74 lines

  1. /* wc line and word count */
  2.  
  3. int    buf[259];
  4. int wordct[2];
  5. int twordct[2];
  6. int linect[2];
  7. int tlinect[2];
  8.  
  9. main(argc,argv)
  10. char **argv;
  11. {
  12.     int i, token;
  13.     register char *p1, *p2;
  14.     register int c;
  15.  
  16.     i = 1;
  17.     do {
  18.         if(argc<=1) buf[0] = 0;
  19.         else if(fopen(argv[i],buf)<0) {
  20.             diag(argv[i]);
  21.             diag(": cannot open\n");
  22.             continue;
  23.         }
  24.         p1 = 0;
  25.         p2 = 0;
  26.         linect[0] = linect[1] = 0;
  27.         wordct[0] = wordct[1] = 0;
  28.         token = 0;
  29.         for(;;) {
  30.             if(p1 >= p2) {
  31.                 p1 = &buf[1];
  32.                 c = read(buf[0], p1, 512);
  33.                 if(c <= 0)
  34.                     break;
  35.                 p2 = p1+c;
  36.             }
  37.             c = 0;
  38.             c =| *p1++;
  39.             if(' '<c&&c<0177) {
  40.                 if(!token++) {
  41.                     if(++wordct[1]==0)
  42.                         wordct[0]++;
  43.                 }
  44.             } else {
  45.                 if(c=='\n') {
  46.                     if(++linect[1]==0)
  47.                         linect[0]++;
  48.                 }
  49.                 else if(c!=' '&&c!='\t')
  50.                     continue;
  51.                 token = 0;
  52.             }
  53.         }
  54.         printf("%7s ",locv(linect[0],linect[1]));
  55.         printf("%7s ",locv(wordct[0],wordct[1]));
  56.         printf("%s\n", argc<=1?"":argv[i]);
  57.         close(buf[0]);
  58.         ladd(tlinect, tlinect, linect);
  59.         ladd(twordct, twordct, wordct);
  60.     } while(++i<argc);
  61.     if(argc > 2) {
  62.         printf("%7s ",locv(tlinect[0],tlinect[1]));
  63.         printf("%7s ",locv(twordct[0],twordct[1]));
  64.         printf("total\n");
  65.     }
  66. }
  67.  
  68. diag(s)
  69. char *s;
  70. {
  71.     while(*s)
  72.         write(2,s++,1);
  73. }
  74.