]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
crc16 slice-by-8 table generator code included for reference
authorWolfgang Bumiller <wry.git@bumiller.com>
Sat, 23 Nov 2013 10:58:20 +0000 (11:58 +0100)
committerWolfgang Bumiller <wry.git@bumiller.com>
Sat, 23 Nov 2013 10:58:20 +0000 (11:58 +0100)
util.c

diff --git a/util.c b/util.c
index 19377b150ea109b2384a0bc3037f444d558e3d64..761d75316b10dd0a72d195e17f0f01f1bc71e0aa 100644 (file)
--- a/util.c
+++ b/util.c
@@ -449,6 +449,40 @@ uint16_t util_crc16(uint16_t current, const char *k, size_t len) {
     return h;
 }
 
+#if 0
+/* for reference: table generated with this: */
+/* compile with cc -std=c99 */
+int main(void) {
+    for (unsigned i = 0; i < 0x100; ++i) {
+        uint16_t x = i << 8;
+        for (int j = 0; j < 8; ++j)
+            x = (x << 1) ^ ((x & 0x8000) ? 0x1021 : 0);
+        tab[0][i] = x;
+    }
+    for (unsigned i = 0; i < 0x100; ++i) {
+        uint16_t c = tab[0][i];
+        for (unsigned j = 1; j < 8; ++j) {
+            c = tab[0][c >> 8] ^ (c << 8);
+            tab[j][i] = c;
+        }
+    }
+
+    printf("static const uint16_t util_crc16_table[8][256] = {");
+    for (int i = 0; i < 8; ++i) {
+        printf("{\n");
+        for (int j = 0; j < 0x100; ++j) {
+            printf((j & 7) ? " " : "    ");
+            printf((j != 0x100-1) ? "0x%04X," : "0x%04X", tab[i][j]);
+            if ((j & 7) == 7)
+                printf("\n");
+        }
+        printf((i != 7) ? "}," : "}");
+    }
+    printf("};\n");
+    return 0;
+}
+#endif
+
 /*
  * modifier is the match to make and the transposition from it, while add is the upper-value that determines the
  * transposition from uppercase to lower case.