Annotation of researchv10no/cmd/sum/old/sysv.sum.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Sum bytes in file mod 2^16
        !             3:  */
        !             4: 
        !             5: char xxxnotused[] = "@(#)sum.c 1.5";
        !             6: 
        !             7: #define WDMSK 0177777L
        !             8: #define BUFSIZE 512
        !             9: #include <stdio.h>
        !            10: struct part {
        !            11:        short unsigned hi,lo;
        !            12: };
        !            13: union hilo { /* this only works right in case short is 1/2 of long */
        !            14:        struct part hl;
        !            15:        long    lg;
        !            16: } tempa, suma;
        !            17: 
        !            18: main(argc,argv)
        !            19: char **argv;
        !            20: {
        !            21:        register unsigned sum;
        !            22:        register i, c;
        !            23:        register FILE *f;
        !            24:        register long nbytes;
        !            25:        int     alg, ca, errflg = 0;
        !            26:        unsigned lsavhi,lsavlo;
        !            27: 
        !            28:        alg = 0;
        !            29:        i = 1;
        !            30:        if(argv[1][0]=='-' && argv[1][1]=='r') {
        !            31:                alg = 1;
        !            32:                i = 2;
        !            33:        }
        !            34: 
        !            35:        do {
        !            36:                if(i < argc) {
        !            37:                        if((f = fopen(argv[i], "r")) == NULL) {
        !            38:                                (void) fprintf(stderr, "sum: Can't open %s\n", argv[i]);
        !            39:                                errflg += 10;
        !            40:                                continue;
        !            41:                        }
        !            42:                } else
        !            43:                        f = stdin;
        !            44:                sum = 0;
        !            45:                suma.lg = 0;
        !            46:                nbytes = 0;
        !            47:                if(alg == 1) {
        !            48:                        while((c = getc(f)) != EOF) {
        !            49:                                nbytes++;
        !            50:                                if(sum & 01)
        !            51:                                        sum = (sum >> 1) + 0x8000;
        !            52:                                else
        !            53:                                        sum >>= 1;
        !            54:                                sum += c;
        !            55:                                sum &= 0xFFFF;
        !            56:                        }
        !            57:                } else {
        !            58:                        while((ca = getc(f)) != EOF) {
        !            59:                                nbytes++;
        !            60:                                suma.lg += ca & WDMSK;
        !            61:                        }
        !            62:                }
        !            63:                if(ferror(f)) {
        !            64:                        errflg++;
        !            65:                        (void) fprintf(stderr, "sum: read error on %s\n", argc>1?argv[i]:"-");
        !            66:                }
        !            67:                if (alg == 1)
        !            68:                        (void) printf("%.5u%6ld", sum, (nbytes+BUFSIZE-1)/BUFSIZE);
        !            69:                else {
        !            70:                        tempa.lg = (suma.hl.lo & WDMSK) + (suma.hl.hi & WDMSK);
        !            71:                        lsavhi = (unsigned) tempa.hl.hi;
        !            72:                        lsavlo = (unsigned) tempa.hl.lo;
        !            73:                        (void) printf("%u %ld", (unsigned)(lsavhi + lsavlo), (nbytes+BUFSIZE-1)/BUFSIZE);
        !            74:                }
        !            75:                if(argc > 1)
        !            76:                        (void) printf(" %s", argv[i]==(char *)0?"":argv[i]);
        !            77:                (void) printf("\n");
        !            78:                (void) fclose(f);
        !            79:        } while(++i < argc);
        !            80:        exit(errflg);
        !            81: }

unix.superglobalmegacorp.com

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