1*368c31abSDavid du Colombier typedef struct Whack Whack; 2*368c31abSDavid du Colombier typedef struct Unwhack Unwhack; 3*368c31abSDavid du Colombier 4*368c31abSDavid du Colombier enum 5*368c31abSDavid du Colombier { 6*368c31abSDavid du Colombier WhackStats = 8, 7*368c31abSDavid du Colombier WhackErrLen = 64, /* max length of error message from thwack or unthwack */ 8*368c31abSDavid du Colombier WhackMaxOff = 16*1024, /* max allowed offset */ 9*368c31abSDavid du Colombier 10*368c31abSDavid du Colombier HashLog = 14, 11*368c31abSDavid du Colombier HashSize = 1<<HashLog, 12*368c31abSDavid du Colombier HashMask = HashSize - 1, 13*368c31abSDavid du Colombier 14*368c31abSDavid du Colombier MinMatch = 3, /* shortest match possible */ 15*368c31abSDavid du Colombier 16*368c31abSDavid du Colombier MinDecode = 8, /* minimum bits to decode a match or lit; >= 8 */ 17*368c31abSDavid du Colombier 18*368c31abSDavid du Colombier MaxSeqMask = 8, /* number of bits in coding block mask */ 19*368c31abSDavid du Colombier MaxSeqStart = 256 /* max offset of initial coding block */ 20*368c31abSDavid du Colombier }; 21*368c31abSDavid du Colombier 22*368c31abSDavid du Colombier struct Whack 23*368c31abSDavid du Colombier { 24*368c31abSDavid du Colombier ushort begin; /* time of first byte in hash */ 25*368c31abSDavid du Colombier ushort hash[HashSize]; 26*368c31abSDavid du Colombier ushort next[WhackMaxOff]; 27*368c31abSDavid du Colombier uchar *data; 28*368c31abSDavid du Colombier }; 29*368c31abSDavid du Colombier 30*368c31abSDavid du Colombier struct Unwhack 31*368c31abSDavid du Colombier { 32*368c31abSDavid du Colombier char err[WhackErrLen]; 33*368c31abSDavid du Colombier }; 34*368c31abSDavid du Colombier 35*368c31abSDavid du Colombier void whackinit(Whack*, int level); 36*368c31abSDavid du Colombier void unwhackinit(Unwhack*); 37*368c31abSDavid du Colombier int whack(Whack*, uchar *dst, uchar *src, int nsrc, ulong stats[WhackStats]); 38*368c31abSDavid du Colombier int unwhack(Unwhack*, uchar *dst, int ndst, uchar *src, int nsrc); 39*368c31abSDavid du Colombier 40*368c31abSDavid du Colombier int whackblock(uchar *dst, uchar *src, int ssize); 41