Pad out with zeros.
[uccvend-snackrom.git] / ROM2 / crctest.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef unsigned short u16;
4 typedef unsigned char bool;
5 #include "crctab.h"
6
7 unsigned short
8 docrc (unsigned char *p, int len, bool pad, unsigned short crcstart)
9 {
10   int len2 = len;
11   unsigned short crc = crcstart;
12
13   while (len-- > 0)
14     crc = (crc << 8) ^ crctab[(crc >> 8) ^ *p++];
15   if (pad && len2 < 128) {
16     len = 128-len;
17     while (len-- > 0)
18       crc = (crc << 8) ^ crctab[(crc >> 8) ^ 0x1a];
19   }
20
21   return crc;
22 }
23
24 int main(int argc, char** argv) {
25         unsigned short crc;
26         unsigned short msgid;
27         char *password, *message;
28         if (argc != 4) {
29                 fprintf(stderr, "Usage: %s <id> <password> <message>\n", argv[0]);
30                 return 1;
31         }
32         msgid = strtol(argv[1], NULL, 16);
33         password = argv[2];
34         message = argv[3];
35         crc = docrc(((char*)&msgid)+1, 1, 0, 0);
36         crc = docrc(((char*)&msgid), 1, 0, crc);
37         crc = docrc(password, strlen(password), 0, crc);
38         crc = docrc(message, strlen(message), 0, crc);
39         printf("%04x\n", crc);
40         return 0;
41 }

UCC git Repository :: git.ucc.asn.au