/* This program generates the XMODEM CRC table in XMDMTAB ASSEMBLE. */
/* Peter DiCamillo, June, 1987 */
 
#include "stdio.h"
 
main()
¤
FILE *io;
unsigned int array[256];
register char x1, x2, x3, x4, x5, x6, x7, x8;
int count;
int i, j, k;
char ioline[132], iobuff[80];
 
count = 0;
 
for (x8=0; x8 < 2; x8++)
 for (x7=0; x7 < 2; x7++)
  for (x6=0; x6 < 2; x6++)
   for (x5=0; x5 < 2; x5++)
    for (x4=0; x4 < 2; x4++)
     for (x3=0; x3 < 2; x3++)
      for (x2=0; x2 < 2; x2++)
       for (x1=0; x1 < 2; x1++) ¤
        array[count] = 0;
        if (x8 ^ x4) array[count] += 0x8000;
        if (x7 ^ x3) array[count] += 0x4000;
        if (x6 ^ x2) array[count] += 0x2000;
        if (x8 ^ x5 ^ x1) array[count] += 0x1000;
        if (x7) array[count] += 0x0800;
        if (x6) array[count] += 0x0400;
        if (x5) array[count] += 0x0200;
        if (x8 ^ x4) array[count] += 0x0100;
        if (x8 ^ x7 ^ x3) array[count] += 0x0080;
        if (x7 ^ x6 ^ x2) array[count] += 0x0040;
        if (x6 ^ x5 ^ x1) array[count] += 0x0020;
        if (x5) array[count] += 0x0010;
        if (x8 ^ x4) array[count] += 0x0008;
        if (x7 ^ x3) array[count] += 0x0004;
        if (x6 ^ x2) array[count] += 0x0002;
        if (x5 ^ x1) array[count] += 0x0001;
        count++;
        ‡
/* Output assemble file with the table */
 
io = fopen("xmdmtab assemble a (lrecl 80 recfm f","w");
j = 6;      /* number of contants on current line */
strcpy(ioline,"XMDMTAB  CSECT");
for (i = 0; i < 256; i++) ¤
    if (j == 6) ¤
       fprintf(io, "%s\n", ioline);
       j = 0;
       strcpy(ioline,"         DC    ");
       ‡
    if (j != 0) strcat(ioline,",");
    sprintf(iobuff,"X'%04x'",array[i]);
    strcat(ioline,iobuff);
    j++;
    ‡
if (j != 0) fprintf(io, "%s\n", ioline);
fclose(io);
‡
