Annotation of researchv9/cmd/wc.c, revision 1.1

1.1     ! root        1: #include       <stdio.h>
        !             2: 
        !             3: #define        NL      0
        !             4: #define        SP      1
        !             5: #define        ORD     2
        !             6: #define        JUNK    3
        !             7: #define        TOKEN   4
        !             8: 
        !             9: char type[]={
        !            10:      /* 000 nul|001 soh|002 stx|003 etx|004 eot|005 enq|006 ack|007 bel| */
        !            11:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            12:      /* 010 bs |011 ht |012 nl |013 vt |014 np |015 cr |016 so |017 si | */
        !            13:        JUNK,   SP,     NL,     JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            14:      /* 020 dle|021 dc1|022 dc2|023 dc3|024 dc4|025 nak|026 syn|027 etb| */
        !            15:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            16:      /* 030 can|031 em |032 sub|033 esc|034 fs |035 gs |036 rs |037 us | */
        !            17:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            18:      /* 040 sp |041  ! |042  " |043  # |044  $ |045  % |046  & |047  ' | */
        !            19:        SP,     ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            20:      /* 050  ( |051  ) |052  * |053  + |054  , |055  - |056  . |057  / | */
        !            21:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            22:      /* 060  0 |061  1 |062  2 |063  3 |064  4 |065  5 |066  6 |067  7 | */
        !            23:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            24:      /* 070  8 |071  9 |072  : |073  ; |074  < |075  = |076  > |077  ? | */
        !            25:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            26:      /* 100  @ |101  A |102  B |103  C |104  D |105  E |106  F |107  G | */
        !            27:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            28:      /* 110  H |111  I |112  J |113  K |114  L |115  M |116  N |117  O | */
        !            29:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            30:      /* 120  P |121  Q |122  R |123  S |124  T |125  U |126  V |127  W | */
        !            31:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            32:      /* 130  X |131  Y |132  Z |133  [ |134  \ |135  ] |136  ^ |137  _ | */
        !            33:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            34:      /* 140  ` |141  a |142  b |143  c |144  d |145  e |146  f |147  g | */
        !            35:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            36:      /* 150  h |151  i |152  j |153  k |154  l |155  m |156  n |157  o | */
        !            37:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            38:      /* 160  p |161  q |162  r |163  s |164  t |165  u |166  v |167  w | */
        !            39:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,
        !            40:      /* 170  x |171  y |172  z |173  { |174  | |175  } |176  ~ |177 del| */
        !            41:        ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    ORD,    JUNK,
        !            42:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            43:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            44:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            45:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            46:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            47:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            48:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            49:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            50:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            51:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            52:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            53:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            54:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            55:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            56:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            57:        JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,   JUNK,
        !            58: };
        !            59: char   *opt="lwc";
        !            60: long   twords;
        !            61: long   tlines;
        !            62: long   tchars;
        !            63: main(argc, argv)
        !            64:        char *argv[];
        !            65: {
        !            66:        register i, fd, status=0;
        !            67:        if(argc>1 && argv[1][0]=='-'){
        !            68:                opt= ++argv[1];
        !            69:                --argc, argv++;
        !            70:        }
        !            71:        if(argc==1)
        !            72:                count(0, (char *)0);
        !            73:        else for(i=1; i<argc; i++){
        !            74:                fd=open(argv[i], 0);
        !            75:                if(fd<0){
        !            76:                        fprintf(stderr, "wc: ");
        !            77:                        perror(argv[i]);
        !            78:                        status=1;
        !            79:                        continue;
        !            80:                }
        !            81:                count(fd, argv[i]);     
        !            82:        }
        !            83:        if(argc>2)
        !            84:                print(tchars, twords, tlines, "total");
        !            85:        return status;
        !            86: }
        !            87: unsigned char buf[BUFSIZ];
        !            88: count(fd, name)
        !            89:        char *name;
        !            90: {
        !            91:        register token=0, n;
        !            92:        register unsigned char *cp;
        !            93:        register long chars=0, lines=0, words=0;
        !            94:        while((n=read(fd, buf, sizeof buf))>0){
        !            95:                chars+=n;
        !            96:                cp=buf;
        !            97:                while(--n>=0)
        !            98:                        switch(type[*cp++]|token){
        !            99:                        case NL:
        !           100:                                lines++;
        !           101:                                break;
        !           102:                        case NL|TOKEN:
        !           103:                                lines++;
        !           104:                                token=0;
        !           105:                                break;
        !           106:                        case SP:
        !           107:                                break;
        !           108:                        case SP|TOKEN:
        !           109:                                token=0;
        !           110:                                break;
        !           111:                        case ORD:
        !           112:                                token=TOKEN;
        !           113:                                words++;
        !           114:                                break;
        !           115:                        case ORD|TOKEN:
        !           116:                                break;
        !           117:                        case JUNK:
        !           118:                        case JUNK|TOKEN:
        !           119:                                break;
        !           120:                        }
        !           121:        }
        !           122:        close(fd);
        !           123:        print(chars, words, lines, name);
        !           124:        tchars+=chars;
        !           125:        twords+=words;
        !           126:        tlines+=lines;
        !           127: }
        !           128: print(charct, wordct, linect, name)
        !           129:        long charct, wordct, linect;
        !           130:        char *name;
        !           131: {
        !           132:        register char *wd=opt;
        !           133:        while (*wd) switch (*wd++) {
        !           134:        case 'l':
        !           135:                printf("%7ld ", linect);
        !           136:                break;
        !           137: 
        !           138:        case 'w':
        !           139:                printf("%7ld ", wordct);
        !           140:                break;
        !           141: 
        !           142:        case 'c':
        !           143:                printf("%7ld", charct);
        !           144:                break;
        !           145:        }
        !           146:        if(name)
        !           147:                printf(" %s\n", name);
        !           148:        else
        !           149:                printf("\n");
        !           150: }
        !           151: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.