**ref:** b502a62da2ec6058923db94f87ecc2d29db2fa77

**dir:** /module/crc.m/

Crc: module { PATH: con "/dis/lib/crc.dis"; CRCstate: adt { crc: int; crctab: array of int; reg: int; }; # setup crc table with given polynomial (if 0 default polynomial used) # (the polynomial has an implicit top bit set) # reg is the initial value of the CRC register # (usually 0 but 16rfffffffrf in the CRC32 algorithm for example) init: fn(poly: int, reg: int): ref CRCstate; # calculate crc of first nb bytes in given array of bytes and return its value # may be called repeatedly to calculate crc of a series of arrays of bytes crc : fn(state: ref CRCstate, buf: array of byte, nb: int): int; # reset crc state to its initial value reset: fn(state: ref CRCstate); };