#include <stdio.h>
/* Compute checksums from stdin. */
int main(int argc, char **argv) {
unsigned int sz, sum, crc16;
int c;
sz = sum = crc16 = 0;
c = getchar();
while (c != EOF) {
sz++;
sum += c;
crc16 = crc16 ^ c << 8;
for (int i=0; i<8; i++) {
if (crc16 & 0x8000) {
crc16 = crc16 << 1 ^ 0x1021;
} else {
crc16 = crc16 << 1;
}
}
c = getchar();
}
printf("Size: %04x (%d)\n", sz, sz);
printf("Simple sum: %04x (%d, %d)\n", sum & 0xffff, sum & 0xffff, sum);
printf("CRC16: %04x\n", crc16 & 0xffff);
}