Commit | Line | Data |
---|---|---|
d2fa86ad BJ |
1 | main() |
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 | ||
11 | chksum(s,n) | |
12 | register char *s; | |
13 | register 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 | } |