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