|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.