home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 10 / crcf.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-11-16  |  3.1 KB  |  73 lines

  1. procedure CRC (var CRCreg : Word; var Buff : Buffer; Count : Integer);
  2. {------------------------------------------------------------
  3.   File       : CRC.PAS  Vers. 1.0
  4.   Last Edit  : 16.10.88
  5.   Autor      : (c) G. Born
  6.   Progr. Spr.: Turbo Pascal 4.0 / 5.0
  7.  
  8.   Hilfprogramm zur Berechnung der CRC - Summe in Turbo Pascal.
  9.   Es wird das Polynom y = x^16 + x^15 + x^2 + 1 verwendet.
  10.   Der Aufruf der Routine erfolgt mit:
  11.  
  12.    CRC (CRCreg, Buff, Count)
  13.  
  14.    CRCreg = Word mit dem CRC Ergebnis
  15.    Buff   = Feld mit den Ausgabebytes
  16.    Count  = Integer * 2 Variable mit der Zahl der Zeichen
  17.  
  18. Der Algorithmus benutzt nachfolgende Tabelle zur Berechnung der
  19. CRC - Summe.
  20. ------------------------------------------------------------}
  21. {* Tabelle mit Codes zur CRC -  Berechnung *}
  22.  
  23. CONST Table : array [0 .. 255] of word =
  24.  ($0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241,
  25.   $C601, $06C0, $0780, $C741, $0500, $C5C1, $C481, $0440, 
  26.   $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1, $CE81, $0E40,
  27.   $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $0880, $C841,
  28.   $D801, $18C0, $1980, $D941, $1B00, $DBC1, $DA81, $1A40,
  29.   $1E00, $DEC1, $DF81, $1F40, $DD01, $1DC0, $1C80, $DC41,
  30.   $1400, $D4C1, $D581, $1540, $D701, $17C0, $1680, $D641, 
  31.   $D201, $12C0, $1380, $D341, $1100, $D1C1, $D081, $1040,
  32.   $F001, $30C0, $3180, $F141, $3300, $F3C1, $F281, $3240,
  33.   $3600, $F6C1, $F781, $3740, $F501, $35C0, $3480, $F441,
  34.   $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $3E80, $FE41,
  35.   $FA01, $3AC0, $3B80, $FB41, $3900, $F9C1, $F881, $3840, 
  36.   $2800, $E8C1, $E981, $2940, $EB01, $2BC0, $2A80, $EA41,
  37.   $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1, $EC81, $2C40,
  38.   $E401, $24C0, $2580, $E541, $2700, $E7C1, $E681, $2640,
  39.   $2200, $E2C1, $E381, $2340, $E101, $21C0, $2080, $E041,
  40.   $A001, $60C0, $6180, $A141, $6300, $A3C1, $A281, $6240, 
  41.   $6600, $A6C1, $A781, $6740, $A501, $65C0, $6480, $A441,
  42.   $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $6E80, $AE41,
  43.   $AA01, $6AC0, $6B80, $AB41, $6900, $A9C1, $A881, $6840,
  44.   $7800, $B8C1, $B981, $7940, $BB01, $7BC0, $7A80, $BA41,
  45.   $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40,
  46.   $B401, $74C0, $7580, $B541, $7700, $B7C1, $B681, $7640,
  47.   $7200, $B2C1, $B381, $7340, $B101, $71C0, $7080, $B041,
  48.   $5000, $90C1, $9181, $5140, $9301, $53C0, $5280, $9241,
  49.   $9601, $56C0, $5780, $9741, $5500, $95C1, $9481, $5440,
  50.   $9C01, $5CC0, $5D80, $9D41, $5F00, $9FC1, $9E81, $5E40,
  51.   $5A00, $9AC1, $9B81, $5B40, $9901, $59C0, $5880, $9841,
  52.   $8801, $48C0, $4980, $8941, $4B00, $8BC1, $8A81, $4A40,
  53.   $4E00, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41,
  54.   $4400, $84C1, $8581, $4540, $8701, $47C0, $4680, $8641,
  55.   $8201, $42C0, $4380, $8341, $4100, $81C1, $8081, $4040);
  56.  
  57.  
  58. VAR i : Integer;
  59.     ptr, entry : word;
  60. begin
  61.  
  62.  for i := 1 TO Count do                     { lese alle Zeichen }
  63.   begin
  64.    ptr := (CRCreg XOR Buff[i]) AND $00FF;   { zchn XOR CRC LByte}
  65.    entry := Table[ptr];                     { hole Code         }
  66.    CRCreg := CRCreg AND $FF00;              { clear Low Byte    }
  67.    CRCreg := Swap(CRCreg);                  { change Bytes      }
  68.    CRCreg := CRCreg XOR entry;              { CRC XOR Code      }
  69.   end;
  70.  
  71. end;{ crcf }
  72.  
  73.