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