added writesize
[tridge/junkcode.git] / crc32.c
1 static unsigned crc_32_tab[256];
2
3 static void
4 makecrc(void)
5 {
6 /* Not copyrighted 1990 Mark Adler      */
7
8   unsigned long c;      /* crc shift register */
9   unsigned long e;      /* polynomial exclusive-or pattern */
10   int i;                /* counter for all possible eight bit values */
11   int k;                /* byte being shifted into crc apparatus */
12
13   /* terms of polynomial defining this crc (except x^32): */
14   static const int p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
15
16   /* Make exclusive-or pattern from polynomial */
17   e = 0;
18   for (i = 0; i < sizeof(p)/sizeof(int); i++)
19     e |= 1L << (31 - p[i]);
20
21   c = crc_32_tab[0] = 0;
22
23   printf("0x%08x, ", c);
24
25   for (i = 1; i < 256; i++)
26   {
27     c = 0;
28     for (k = i | 256; k != 1; k >>= 1)
29     {
30       c = c & 1 ? (c >> 1) ^ e : c >> 1;
31       if (k & 1)
32         c ^= e;
33     }
34     crc_32_tab[i] = c;
35     printf("0x%08x, ", c);
36     if (i % 8 == 7) printf("\n");
37   }
38
39 }
40
41 main()
42 {
43         makecrc();
44 }