Research V7 development
[unix-history] / usr / src / cmd / sum.c
CommitLineData
a570deab
KT
1/*
2 * Sum bytes in file mod 2^16
3 */
4
5#include <stdio.h>
6
7main(argc,argv)
8char **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}