|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)chksum.c 4.2 (Berkeley) 6/19/85"; ! 3: #endif ! 4: ! 5: #ifndef pdp11 ! 6: chksum (s, n) ! 7: register char *s; ! 8: register n; ! 9: { ! 10: register long sum, x, t; ! 11: ! 12: sum = 0xffff; ! 13: x = 0; ! 14: do { ! 15: /* Rotate left, copying bit 15 to bit 0 */ ! 16: sum <<= 1; ! 17: if (sum & 0x10000) ! 18: sum ^= 0x10001; ! 19: t = sum; ! 20: sum = (sum + (*s++ & 0377)) & 0xffff; ! 21: x += sum ^ n; ! 22: if (sum <= t) ! 23: sum = (sum ^ x) & 0xffff; ! 24: } while (--n > 0); ! 25: ! 26: return (long) (short) sum; ! 27: } ! 28: #else pdp11 ! 29: chksum(s,n) ! 30: register char *s; ! 31: register n; ! 32: { ! 33: register unsigned sum, t; ! 34: register x; ! 35: ! 36: sum = -1; ! 37: x = 0; ! 38: ! 39: do { ! 40: if (sum&0x8000) { ! 41: sum <<= 1; ! 42: sum++; ! 43: } else ! 44: sum <<= 1; ! 45: t = sum; ! 46: sum += (unsigned)*s++ & 0377; ! 47: x += sum^n; ! 48: if ((sum&0xffff) <= (t&0xffff)) { ! 49: sum ^= x; ! 50: } ! 51: } while (--n > 0); ! 52: ! 53: return sum & 0xffff; ! 54: } ! 55: ! 56: #endif pdp11
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.