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); };