#! /usr/bin/tcc -run /* -*-c-*- */ #include #include #include #include #include int main(int argc, char *argv[]) { unsigned long ck = 0, t = 0; unsigned long ns = 0; unsigned long x; unsigned f = 0; #define F_ROLLING 1u for (;;) { int opt = getopt(argc, argv, "b:r"); if (opt < 0) break; switch (opt) { case 'b': ns = strtoul(optarg, 0, 0); break; case 'r': f |= F_ROLLING; break; default: exit(1); } } for (;;) { unsigned char b[4]; if (!fread(b, 4, 1, stdin)) break; x = (b[0] << 0) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24); ck += x*++ns; t += x; } if (ferror(stdin)) { fprintf(stderr, "%s: read error: %s\n", argv[0], strerror(errno)); exit(1); } printf("%08lx", ck & 0xffffffff); if (f & F_ROLLING) printf(" %lu", t & 0xffffffff); putchar('\n'); return (0); }