long Chk(s, n, ctrl) register unsigned char *s; register n; unsigned ctrl; { register unsigned long sum, x, t; sum = 0xffff; x = 0; do { sum <<= 1; if (sum & 0x10000) sum ^= 0x10001; t = sum; sum = (sum + (*s++ & 0xff)) & 0xffff; x += sum ^ n; if (sum <= t) sum = (sum ^ x) & 0xffff; } while (--n > 0); sum = 0xaaaaL - (sum ^ (ctrl & 0xffL)); return 0xffffL & sum; }