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