polynomial. Also fix output formatting when there aren't enough entries
to fill a line.
- * $Id: crc-mktab.c,v 1.3 2001/01/20 12:06:01 mdw Exp $
+ * $Id: crc-mktab.c,v 1.4 2001/03/10 10:59:21 mdw Exp $
/*----- Revision history --------------------------------------------------*
*
* $Log: crc-mktab.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: crc-mktab.c,v $
+ * Revision 1.4 2001/03/10 10:59:21 mdw
+ * Fix generating tables where the chunk size is longer than the
+ * polynomial. Also fix output formatting when there aren't enough entries
+ * to fill a line.
+ *
* Revision 1.3 2001/01/20 12:06:01 mdw
* Define flags with macros, to ensure unsignedness.
*
* Revision 1.3 2001/01/20 12:06:01 mdw
* Define flags with macros, to ensure unsignedness.
*
if ((flags & f_ctab) && !type)
type = bits > 16 ? "unsigned long" : "unsigned short";
if ((flags & f_ctab) && !type)
type = bits > 16 ? "unsigned long" : "unsigned short";
guard = p;
for (q = file; *q; p++, q++) {
if (isalnum((unsigned char)*q))
guard = p;
for (q = file; *q; p++, q++) {
if (isalnum((unsigned char)*q))
+ *p = toupper((unsigned char)*q);
while (2 + n * (nw + 4) < BSCOL)
n <<= 1;
n >>= 1;
while (2 + n * (nw + 4) < BSCOL)
n <<= 1;
n >>= 1;
+ max = 1 << chunk;
+ if (n > max)
+ n = max;
t = 0;
while (((1 + n * (nw + 4)) & ~7) + 8 * t < BSCOL)
t++;
/* --- Start grinding --- */
t = 0;
while (((1 + n * (nw + 4)) & ~7) + 8 * t < BSCOL)
t++;
/* --- Start grinding --- */
mask = 0xffffffff >> (32 - bits);
fputc(' ', fp);
for (i = 0; i < max; i++) {
mask = 0xffffffff >> (32 - bits);
fputc(' ', fp);
for (i = 0; i < max; i++) {
-
- x = reflect(i, chunk) << (bits - chunk);
- for (j = 0; j < chunk; j++)
- x = ((x << 1) ^ (x & (1 << (bits - 1)) ? poly : 0)) & mask;
- x = reflect(x, bits);
+ unsigned ni, nn;
+
+ x = reflect(i, chunk);
+ y = 0;
+ nn = chunk;
+ while (nn) {
+ ni = bits;
+ if (ni > nn)
+ ni = nn;
+ z = (x >> (nn - ni)) & (0xffffffff >> (32 - ni));
+ y ^= z << (bits - ni);
+ for (j = 0; j < ni; j++)
+ y = ((y << 1) ^ (y & (1 << (bits - 1)) ? poly : 0)) & mask;
+ nn -= ni;
+ }
+ x = reflect(y, bits);
fprintf(fp, " 0x%0*lx", nw, x);
if (i == max - 1) {
fprintf(fp, " 0x%0*lx", nw, x);
if (i == max - 1) {