get paid to paste

library crc;

uses
  ShareMem,dialogs,
  SysUtils;

{$R *.res}
type 
  Long = record 
    LoWord: Word; 
    HiWord: Word; 
  end; 

const 
  CRCPOLY = $EDB88320; 

var 
  CRCTable: array[0..512] Of Longint; 

procedure BuildCRCTable;  
var
  i, j: Word; 
  r: Longint; 
begin 
  FillChar(CRCTable, SizeOf(CRCTable), 0); 
  for i := 0 to 255 do 
  begin 
    r := i shl 1; 
    for j := 8 downto 0 do 
      if (r and 1) <> 0 then 
        r := (r Shr 1) xor CRCPOLY 
      else
        r := r shr 1; 
    CRCTable[i] := r; 
   end; 
end; 

function RecountCRC(b: byte; CrcOld: Longint): Longint; 
begin 
  RecountCRC := CRCTable[byte(CrcOld xor Longint(b))] xor ((CrcOld shr 8) and $00FFFFFF) 
end; 

function HextW(w: Word): string; stdcall; 
const 
  h: array[0..15] Of char = '0123456789ABCDEF'; 
begin 
  HextW := ''; 
  HextW := h[Hi(w) shr 4] + h[Hi(w) and $F] + h[Lo(w) shr 4]+h[Lo(w) and $F]; 
end; 

function HextL(l: Longint): string; 
begin 
  with Long(l) do 
    HextL := HextW(HiWord) + HextW(LoWord); 
end; 

function CrcKontrol(FileName: string): Boolean; stdcall;
var
  Buffer: PChar; 
  f: File of Byte; 
  b: array[0..255] of Byte; 
  CRC: Longint; 
  e, i: Integer; 
begin 
  BuildCRCTable; 
  CRC := $FFFFFFFF;
  AssignFile(F, FileName); 
  FileMode := 0; 
  Reset(F); 
  GetMem(Buffer, SizeOf(B)); 
  repeat 
    FillChar(b, SizeOf(b), 0); 
    BlockRead(F, b, SizeOf(b), e); 
    for i := 0 to (e-1) do 
     CRC := RecountCRC(b[i], CRC); 
  until (e < 255) or (IOresult <> 0); 
  FreeMem(Buffer, SizeOf(B)); 
  CloseFile(F); 
  CRC := Not CRC;
       ShowMessage(HextL(CRC));
  if HextL(CRC) = '6A97568C' Then 
  Result:= True
  Else 
  Result:= False; 
end; 

Exports
CrcKontrol;

end.

Pasted: Jun 5, 2011, 5:13:51 pm
Views: 33