Annotation of researchv10no/cmd/wc.c, revision 1.1.1.1

1.1       root        1: #include       <stdio.h>
                      2: 
                      3: #define                NBUF            (64*1024)
                      4: int space[256];
                      5: char   *opt="lwc";
                      6: long   twords;
                      7: long   tlines;
                      8: long   tchars;
                      9: 
                     10: main(argc, argv)
                     11:        char *argv[];
                     12: {
                     13:        register i, fd, status=0;
                     14:        if(argc>1 && argv[1][0]=='-'){
                     15:                opt=++argv[1];
                     16:                --argc, argv++;
                     17:        }
                     18:        for(i = 0; i < 256; i++)
                     19:                space[i] = 0;
                     20:        space[' '] = space['\t'] = space['\n'] = 1;
                     21:        if(argc==1)
                     22:                count(0, (char *)0);
                     23:        else for(i=1; i<argc; i++){
                     24:                fd=open(argv[i], 0);
                     25:                if(fd<0){
                     26:                        fprintf(stderr, "wc: ");
                     27:                        perror(argv[i]);
                     28:                        status=1;
                     29:                        continue;
                     30:                }
                     31:                count(fd, argv[i]);     
                     32:        }
                     33:        if(argc>2)
                     34:                printout(tchars, twords, tlines, "total");
                     35:        return status;
                     36: }
                     37: unsigned char buf[NBUF+2];     /* 2 for sentinels */
                     38: count(fd, name)
                     39:        char *name;
                     40: {
                     41:        register n;
                     42:        register unsigned char *cp, *cpend;
                     43:        register long chars=0, lines=0, words=0;
                     44: 
                     45:        for(;;){
                     46:                if((n=read(fd, buf, NBUF))<=0)
                     47:                        goto done;
                     48:                chars+=n;
                     49:                cp=buf;
                     50:                *(cpend = buf+n) = ' ';
                     51:                cpend[1] = 'a';
                     52: dospace:
                     53:                for(;;){
                     54:                        if(*cp == '\n')
                     55:                                lines++;
                     56:                        if(space[*cp++] == 0){
                     57:                                if(cp > cpend)
                     58:                                        break;
                     59:                                goto doword;
                     60:                        }
                     61:                }
                     62:        }
                     63:        for(;;){
                     64:                if((n=read(fd, buf, NBUF))<=0)
                     65:                        goto done;
                     66:                chars+=n;
                     67:                cp=buf;
                     68:                *(cpend = buf+n) = ' ';
                     69:                cpend[1] = 'a';
                     70: doword:
                     71:                for(;;){
                     72:                        if(space[*cp++]){
                     73:                                if(cp > cpend)
                     74:                                        break;
                     75:                                words++;
                     76:                                if(cp[-1] == '\n')
                     77:                                        lines++;
                     78:                                goto dospace;
                     79:                        }
                     80:                }
                     81:        }
                     82: done:
                     83:        close(fd);
                     84:        printout(chars, words, lines, name);
                     85:        tchars+=chars;
                     86:        twords+=words;
                     87:        tlines+=lines;
                     88: }
                     89: printout(charct, wordct, linect, name)
                     90:        long charct, wordct, linect;
                     91:        char *name;
                     92: {
                     93:        register char *wd=opt;
                     94:        while (*wd) switch (*wd++) {
                     95:        case 'l':
                     96:                printf("%7ld ", linect);
                     97:                break;
                     98: 
                     99:        case 'w':
                    100:                printf("%7ld ", wordct);
                    101:                break;
                    102: 
                    103:        case 'c':
                    104:                printf("%7ld", charct);
                    105:                break;
                    106:        }
                    107:        if(name)
                    108:                printf(" %s\n", name);
                    109:        else
                    110:                printf("\n");
                    111: }
                    112: 

unix.superglobalmegacorp.com

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