Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef struct Whack            Whack;
typedef struct Unwhack          Unwhack;

enum
{
        WhackStats      = 8,
        WhackErrLen     = 64,           /* max length of error message from thwack or unthwack */
        WhackMaxOff     = 16*1024,      /* max allowed offset */

        HashLog         = 14,
        HashSize        = 1<<HashLog,
        HashMask        = HashSize - 1,

        MinMatch        = 3,            /* shortest match possible */

        MinDecode       = 8,            /* minimum bits to decode a match or lit; >= 8 */

        MaxSeqMask      = 8,            /* number of bits in coding block mask */
        MaxSeqStart     = 256           /* max offset of initial coding block */
};

struct Whack
{
        ushort          begin;                  /* time of first byte in hash */
        ushort          hash[HashSize];
        ushort          next[WhackMaxOff];
        uchar           *data;
};

struct Unwhack
{
        char            err[WhackErrLen];
};

void    whackinit(Whack*, int level);
void    unwhackinit(Unwhack*);
int     whack(Whack*, uchar *dst, uchar *src, int nsrc, ulong stats[WhackStats]);
int     unwhack(Unwhack*, uchar *dst, int ndst, uchar *src, int nsrc);

int     whackblock(uchar *dst, uchar *src, int ssize);