Annotation of 3BSD/cmd/sum.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Sum bytes in file mod 2^16
                      3:  */
                      4: 
                      5: #include <stdio.h>
                      6: 
                      7: main(argc,argv)
                      8: char **argv;
                      9: {
                     10:        register unsigned sum;
                     11:        register i, c;
                     12:        register FILE *f;
                     13:        register long nbytes;
                     14:        int errflg = 0;
                     15: 
                     16:        i = 1;
                     17:        do {
                     18:                if(i < argc) {
                     19:                        if ((f = fopen(argv[i], "r")) == NULL) {
                     20:                                fprintf(stderr, "sum: Can't open %s\n", argv[i]);
                     21:                                errflg += 10;
                     22:                                continue;
                     23:                        }
                     24:                } else
                     25:                        f = stdin;
                     26:                sum = 0;
                     27:                nbytes = 0;
                     28:                while ((c = getc(f)) != EOF) {
                     29:                        nbytes++;
                     30:                        if (sum&01)
                     31:                                sum = (sum>>1) + 0x8000;
                     32:                        else
                     33:                                sum >>= 1;
                     34:                        sum += c;
                     35:                        sum &= 0xFFFF;
                     36:                }
                     37:                if (ferror(f)) {
                     38:                        errflg++;
                     39:                        fprintf(stderr, "sum: read error on %s\n", argc>1?argv[i]:"-");
                     40:                }
                     41:                printf("%05u%6ld", sum, (nbytes+BUFSIZ-1)/BUFSIZ);
                     42:                if(argc > 2)
                     43:                        printf(" %s", argv[i]);
                     44:                printf("\n");
                     45:                fclose(f);
                     46:        } while(++i < argc);
                     47:        exit(errflg);
                     48: }

unix.superglobalmegacorp.com

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