/*->h.code */

typedef os_error * (*putfn)(buffer * b,int c);
typedef os_error * (*getfn)(buffer * b,int * c);

typedef os_error * (*getlinefn)(void * cx,int * eof);
typedef os_error * (*putlinefn)(void * cx,int pad,int copies);
typedef os_error * (*puteopfn)(void * cx);


typedef struct codestr
{
 buffer             *  bf;
 int                   width;
 int                   height;
 int                   line;
 int                   run;
 short unsigned int *  runs;
 int                   code;
 int                   ref;
 int                   type; /* compression type */

 int                   K;        /* K factor */
 int                   kcount;   /* 0..K     */

 getlinefn             getline;
 putlinefn             putline;
 putfn                 putbyte;
 getfn                 getbyte;
 puteopfn              puteop;

 int                   allocated:1;
 int                   newbuffer:1;
 int                   good;         /* good line ? */

 int                   colour;
 int                   column;
 int                   crun;
 int                   bitrev;

 int                   x[3];     /* spare */

} codestr;


extern os_error * codefinit(codestr * cx);
extern os_error * codeinit(codestr * cx);
extern os_error * decodefinit(codestr * cx);
extern os_error * decodeinit(codestr * cx);

extern void codebitstart(codestr * cx);
extern void codebitend(codestr * cx);
extern void codebit(codestr * cx,int bit);


