typedef struct Ident Ident; typedef struct Win Win; typedef struct Wintab Wintab; typedef struct Pal Pal; typedef struct Spr Spr; typedef struct File File; enum { BORDSIZ = 5, MINSIZ = 3 * BORDSIZ, SELSIZ = 2, SCRBSIZ = 11, SCRTSIZ = 14, RUNEBLK = 4096, }; enum { DISB = NCOL, NCOLS }; enum { CMD, PAL, SPR, NTYPES }; struct Wintab { int (*init)(Win *); void (*die)(Win *); void (*click)(Win *, Mousectl *); void (*menu)(Win *, Mousectl *); int (*rmb)(Win *, Mousectl *); void (*key)(Win *, Rune); void (*draw)(Win *); void (*zerox)(Win *, Win *); u32int hexcols[NCOLS]; Image *cols[NCOLS]; }; struct Win { Rectangle entire; Rectangle inner; Image *im; Win *next, *prev; Win *wnext, *wprev; int type; Wintab *tab; Frame fr; Rune *runes; int nrunes, arunes, opoint; int toprune; int zoom; Point scr; File *f; Rectangle sprr; }; struct Ident { uint type, dev; Qid; }; struct File { int type; Ref; File *next, *prev; char *name; int change; Ident id; Win wins; }; struct Pal { File; int ncol; u32int *cols; Image **ims; int sel; }; struct Spr { File; Pal *pal; int w, h; u32int *data; char *palfile; }; extern Win wlist; extern File flist; extern Win *actw, *actf, *cmdw; extern Screen *scr; extern Image *invcol; extern int quitok;