| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- (*Start of JPI directives :*)
- (*$D DATA*)
- (*$M RepLvl1*)
- (* End of JPI directives*)
- IMPLEMENTATION MODULE CRC;
- (*
- * REPERTOIRE
- * Release 1.5
- * By Charles Bradford and Cole Brecheen
- * (c) Copyright 1985, 1986, 1987, 1988 PMI
- * Portland, Oregon
- * All rights reserved
- * (503) 777-8844
- *
- *
- * Written and contributed by David Tingler of
- * Telepath Systems, Inc., in Norman, Oklahoma.
- *
- *)
- IMPORT LowLevel;
- IMPORT SYSTEM;
- VAR
- crctab: ARRAY [0..255] OF BITSET;
- (*$S-*)
- (*$R-*)
- (*$T-*)
- PROCEDURE CalcCRC( BufAdr: SYSTEM.ADDRESS; BufSize: CARDINAL ): CARDINAL;
- VAR
- segm, offs, h, i, crc: CARDINAL;
- BEGIN
- crc := 0;
- i := 0;
- h := BufSize - 1;
- segm := LowLevel.seg( BufAdr );
- offs := LowLevel.ofs( BufAdr );
- FOR i := 0 TO h DO
- AddCRC(crc, LowLevel.PeekByte(segm, offs + i));
- END;
- RETURN crc;
- END CalcCRC;
- PROCEDURE AddCRC(VAR crc: CARDINAL; ch: SYSTEM.BYTE);
- VAR
- CRC, c: BITSET;
- tab: CARDINAL;
- BEGIN
- c := BITSET( ORD(ch) );
- CRC := BITSET( crc );
- tab := CARDINAL( (CRC / c) * {0..7} );
- (* (crc XOR c) AND 0FFH *)
- CRC := (BITSET(CARDINAL(CRC) * 256) * {0..7}) / crctab[tab];
- (* (SHIFT(crc, -8) AND 0FFH) OR crctab[tab] *)
- crc := CARDINAL(CRC);
- END AddCRC;
- VAR i: CARDINAL;
- PROCEDURE Init(x: CARDINAL);
- BEGIN
- crctab[i] := BITSET(x);
- INC(i);
- END Init;
- BEGIN
- i := 0;
- Init(00000H); Init(0C0C1H); Init(0C181H); Init(00140H);
- Init(0C301H); Init(003C0H); Init(00280H); Init(0C241H);
- Init(0C601H); Init(006C0H); Init(00780H); Init(0C741H);
- Init(00500H); Init(0C5C1H); Init(0C481H); Init(00440H);
- Init(0CC01H); Init(00CC0H); Init(00D80H); Init(0CD41H);
- Init(00F00H); Init(0CFC1H); Init(0CE81H); Init(00E40H);
- Init(00A00H); Init(0CAC1H); Init(0CB81H); Init(00B40H);
- Init(0C901H); Init(009C0H); Init(00880H); Init(0C841H);
- Init(0D801H); Init(018C0H); Init(01980H); Init(0D941H);
- Init(01B00H); Init(0DBC1H); Init(0DA81H); Init(01A40H);
- Init(01E00H); Init(0DEC1H); Init(0DF81H); Init(01F40H);
- Init(0DD01H); Init(01DC0H); Init(01C80H); Init(0DC41H);
- Init(01400H); Init(0D4C1H); Init(0D581H); Init(01540H);
- Init(0D701H); Init(017C0H); Init(01680H); Init(0D641H);
- Init(0D201H); Init(012C0H); Init(01380H); Init(0D341H);
- Init(01100H); Init(0D1C1H); Init(0D081H); Init(01040H);
- Init(0F001H); Init(030C0H); Init(03180H); Init(0F141H);
- Init(03300H); Init(0F3C1H); Init(0F281H); Init(03240H);
- Init(03600H); Init(0F6C1H); Init(0F781H); Init(03740H);
- Init(0F501H); Init(035C0H); Init(03480H); Init(0F441H);
- Init(03C00H); Init(0FCC1H); Init(0FD81H); Init(03D40H);
- Init(0FF01H); Init(03FC0H); Init(03E80H); Init(0FE41H);
- Init(0FA01H); Init(03AC0H); Init(03B80H); Init(0FB41H);
- Init(03900H); Init(0F9C1H); Init(0F881H); Init(03840H);
- Init(02800H); Init(0E8C1H); Init(0E981H); Init(02940H);
- Init(0EB01H); Init(02BC0H); Init(02A80H); Init(0EA41H);
- Init(0EE01H); Init(02EC0H); Init(02F80H); Init(0EF41H);
- Init(02D00H); Init(0EDC1H); Init(0EC81H); Init(02C40H);
- Init(0E401H); Init(024C0H); Init(02580H); Init(0E541H);
- Init(02700H); Init(0E7C1H); Init(0E681H); Init(02640H);
- Init(02200H); Init(0E2C1H); Init(0E381H); Init(02340H);
- Init(0E101H); Init(021C0H); Init(02080H); Init(0E041H);
- Init(0A001H); Init(060C0H); Init(06180H); Init(0A141H);
- Init(06300H); Init(0A3C1H); Init(0A281H); Init(06240H);
- Init(06600H); Init(0A6C1H); Init(0A781H); Init(06740H);
- Init(0A501H); Init(065C0H); Init(06480H); Init(0A441H);
- Init(06C00H); Init(0ACC1H); Init(0AD81H); Init(06D40H);
- Init(0AF01H); Init(06FC0H); Init(06E80H); Init(0AE41H);
- Init(0AA01H); Init(06AC0H); Init(06B80H); Init(0AB41H);
- Init(06900H); Init(0A9C1H); Init(0A881H); Init(06840H);
- Init(07800H); Init(0B8C1H); Init(0B981H); Init(07940H);
- Init(0BB01H); Init(07BC0H); Init(07A80H); Init(0BA41H);
- Init(0BE01H); Init(07EC0H); Init(07F80H); Init(0BF41H);
- Init(07D00H); Init(0BDC1H); Init(0BC81H); Init(07C40H);
- Init(0B401H); Init(074C0H); Init(07580H); Init(0B541H);
- Init(07700H); Init(0B7C1H); Init(0B681H); Init(07640H);
- Init(07200H); Init(0B2C1H); Init(0B381H); Init(07340H);
- Init(0B101H); Init(071C0H); Init(07080H); Init(0B041H);
- Init(05000H); Init(090C1H); Init(09181H); Init(05140H);
- Init(09301H); Init(053C0H); Init(05280H); Init(09241H);
- Init(09601H); Init(056C0H); Init(05780H); Init(09741H);
- Init(05500H); Init(095C1H); Init(09481H); Init(05440H);
- Init(09C01H); Init(05CC0H); Init(05D80H); Init(09D41H);
- Init(05F00H); Init(09FC1H); Init(09E81H); Init(05E40H);
- Init(05A00H); Init(09AC1H); Init(09B81H); Init(05B40H);
- Init(09901H); Init(059C0H); Init(05880H); Init(09841H);
- Init(08801H); Init(048C0H); Init(04980H); Init(08941H);
- Init(04B00H); Init(08BC1H); Init(08A81H); Init(04A40H);
- Init(04E00H); Init(08EC1H); Init(08F81H); Init(04F40H);
- Init(08D01H); Init(04DC0H); Init(04C80H); Init(08C41H);
- Init(04400H); Init(084C1H); Init(08581H); Init(04540H);
- Init(08701H); Init(047C0H); Init(04680H); Init(08641H);
- Init(08201H); Init(042C0H); Init(04380H); Init(08341H);
- Init(04100H); Init(081C1H); Init(08081H); Init(04040H);
- END CRC.
|