home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TPCRC.ZIP / CRC.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-09-02  |  4.0 KB  |  87 lines

  1. { CRC }
  2.  
  3. { Copyright 1988 by Mark R. Boler  -  All Rights Reserved }
  4.  
  5. { --------------------------------------------------------------------------- }
  6. { This unit can be compiled in two ways, the first method, which is the       }
  7. { default, compiles so that the crc calculation is fast, but not the fastest. }
  8. { The benefit is that the .EXE file is about 500 bytes smaller.  The second   }
  9. { method, which is the fastest, uses a look-up table in the data segment and  }
  10. { the .EXE file will have 512 bytes of initialized data in it.  Use the first }
  11. { method for the majority of calculations but if you have enough data segment }
  12. { and your .EXE file is not too big already, use the faster method.  The      }
  13. { faster method is compiled by specifying a compile definition of "FASTCRC".  }
  14. { --------------------------------------------------------------------------- }
  15.  
  16. {$B-}    { Boolean complete evaluation off }
  17. {$D+}    { Debug information on            }
  18. {$I-}    { I/O checking off                }
  19. {$L+}    { Linker uses memory for a buffer }
  20. {$N-}    { No numeric coprocessor          }
  21. {$R-}    { Range checking off              }
  22. {$S-}    { Stack checking off              }
  23. {$V-}    { No VAR-String checks            }
  24.  
  25. {-----------------------------------------------------------------------------}
  26.  
  27. UNIT Crc;
  28.  
  29. INTERFACE
  30.  
  31. PROCEDURE CalcCrc(b: BYTE; VAR TheCrc: WORD);
  32.  
  33. IMPLEMENTATION
  34.  
  35. {$IFDEF FASTCRC}
  36.  
  37. CONST
  38.       CrcTable: ARRAY[0..255] OF WORD =
  39.                 (     0,  4129,  8258, 12387, 16516, 20645, 24774, 28903,
  40.                   33032, 37161, 41290, 45419, 49548, 53677, 57806, 61935,
  41.                    4657,   528, 12915,  8786, 21173, 17044, 29431, 25302,
  42.                   37689, 33560, 45947, 41818, 54205, 50076, 62463, 58334,
  43.                    9314, 13379,  1056,  5121, 25830, 29895, 17572, 21637,
  44.                   42346, 46411, 34088, 38153, 58862, 62927, 50604, 54669,
  45.                   13907,  9842,  5649,  1584, 30423, 26358, 22165, 18100,
  46.                   46939, 42874, 38681, 34616, 63455, 59390, 55197, 51132,
  47.                   18628, 22757, 26758, 30887,  2112,  6241, 10242, 14371,
  48.                   51660, 55789, 59790, 63919, 35144, 39273, 43274, 47403,
  49.                   23285, 19156, 31415, 27286,  6769,  2640, 14899, 10770,
  50.                   56317, 52188, 64447, 60318, 39801, 35672, 47931, 43802,
  51.                   27814, 31879, 19684, 23749, 11298, 15363,  3168,  7233,
  52.                   60846, 64911, 52716, 56781, 44330, 48395, 36200, 40265,
  53.                   32407, 28342, 24277, 20212, 15891, 11826,  7761,  3696,
  54.                   65439, 61374, 57309, 53244, 48923, 44858, 40793, 36728,
  55.                   37256, 33193, 45514, 41451, 53516, 49453, 61774, 57711,
  56.                    4224,   161, 12482,  8419, 20484, 16421, 28742, 24679,
  57.                   33721, 37784, 41979, 46042, 49981, 54044, 58239, 62302,
  58.                     689,  4752,  8947, 13010, 16949, 21012, 25207, 29270,
  59.                   46570, 42443, 38312, 34185, 62830, 58703, 54572, 50445,
  60.                   13538,  9411,  5280,  1153, 29798, 25671, 21540, 17413,
  61.                   42971, 47098, 34713, 38840, 59231, 63358, 50973, 55100,
  62.                    9939, 14066,  1681,  5808, 26199, 30326, 17941, 22068,
  63.                   55628, 51565, 63758, 59695, 39368, 35305, 47498, 43435,
  64.                   22596, 18533, 30726, 26663,  6336,  2273, 14466, 10403,
  65.                   52093, 56156, 60223, 64286, 35833, 39896, 43963, 48026,
  66.                   19061, 23124, 27191, 31254,  2801,  6864, 10931, 14994,
  67.                   64814, 60687, 56684, 52557, 48554, 44427, 40424, 36297,
  68.                   31782, 27655, 23652, 19525, 15522, 11395,  7392,  3265,
  69.                   61215, 65342, 53085, 57212, 44955, 49082, 36825, 40952,
  70.                   28183, 32310, 20053, 24180, 11923, 16050,  3793,  7920);
  71.  
  72. {$ENDIF}
  73.  
  74. PROCEDURE CalcCrc(b: BYTE; VAR TheCrc: WORD); EXTERNAL;
  75.  
  76. {$IFDEF FASTCRC}
  77.  
  78. {$L CRCFAST.OBJ}
  79.  
  80. {$ELSE}
  81.  
  82. {$L CRC.OBJ}
  83.  
  84. {$ENDIF}
  85.  
  86. END. {Unit Crc}
  87.