Annotation of researchv10no/cmd/sum/old/sysv.sum.c, revision 1.1.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.