BSD 4 release
[unix-history] / usr / src / cmd / uucp / chksum.c
CommitLineData
d2fa86ad
BJ
1main()
2{
3 int i, j;
4 char buf[300];
5
6 for (i = 0; i < 300; i++)
7 buf[i] = i;
8 printf("%o\n", chksum(buf, 300));
9}
10
11chksum(s,n)
12register char *s;
13register n;
14{
15 register short sum;
16 register unsigned t;
17 register x;
18
19 sum = -1;
20 x = 0;
21
22 do {
23 if (sum<0) {
24 sum <<= 1;
25 sum++;
26 } else
27 sum <<= 1;
28 t = sum;
29 sum += (unsigned)*s++;
30 x += sum^n;
31 if ((unsigned)sum <= t) {
32 sum ^= x;
33 }
34 } while (--n > 0);
35
36 return(sum);
37}