1 {-Tab generation prog for FCRC32, we 27.06.07}
2 
3 program t_by4;
4 
5 {$i STD.INC}
6 
7 {$ifdef APPCONS}
8   {$apptype console}
9 {$endif}
10 
11 
12 uses {$ifdef WINCRT} WinCRT, {$endif}
13      mem_util;
14 
15 
16 const
17   CRCPoly  = longint($EDB88320);
18 
19 type
20   TCRC32Tab  = array[byte] of longint;
21 
22 var
23   tab0,tab1,tab2,tab3: TCRC32Tab;
24 
25 
26 {---------------------------------------------------------------------------}
27 procedure maketabs;
28   {-Create the slicing-by-4 tables}
29 var
30   i,n: integer;
31   c: longint;
32 begin
33   for n:=0 to 255 do begin
34     c := n;
35     for i:=0 to 7 do begin
36       if odd(c) then c := CRCPoly xor (c shr 1)
37       else c := c shr 1;
38     end;
39     tab0[n] := c;
40   end;
41   for n:=0 to 255 do begin
42     c := tab0[n];
43     c := tab0[c and $ff] xor (c shr 8);  tab1[n] := c;
44     c := tab0[c and $ff] xor (c shr 8);  tab2[n] := c;
45     c := tab0[c and $ff] xor (c shr 8);  tab3[n] := c;
46   end;
47 end;
48 
49 
50 {---------------------------------------------------------------------------}
51 procedure dumptab(Nr: integer; var Tab: TCRC32Tab);
52   {-dump tables for as const arrays}
53 var
54   i:integer;
55 begin
56   writeln;
57   writeln('  CTab',Nr,': array[0..255] of longint = (');
58   write('':4);
59   for i:=0 to 255 do begin
60     write('$',HexLong(Tab[i]));
61     if i and 7 = 7 then begin
62       if i<>255 then begin
63         writeln(',');
64         write('':4);
65       end
66       else writeln(');');
67     end
68     else write(',');
69   end;
70 end;
71 
72 
73 begin
74   MakeTabs;
75   DumpTab(0,Tab0);
76   DumpTab(1,Tab1);
77   DumpTab(2,Tab2);
78   DumpTab(3,Tab3);
79 end.
80