extern void *bbmalloc(int); extern void bbfree(void *, int); extern int bbonstack(void); extern void bbexec(void(*)(void), int, int); /* * Graphics types */ typedef struct GBitmap GBitmap; typedef struct GFont GFont; typedef struct GSubfont GSubfont; typedef struct GCacheinfo GCacheinfo; struct GBitmap { ulong *base; /* pointer to start of data */ long zero; /* base+zero=&word containing (0,0) */ ulong width; /* width in 32 bit words of total data area */ int ldepth; /* log base 2 of number of bits per pixel */ Rectangle r; /* rectangle in data area, local coords */ Rectangle clipr; /* clipping region */ GBitmap *cache; /* zero; distinguishes bitmap from layer */ }; /* * GFont etc. are not used in the library, only in devbit.c. * GSubfont is only barely used. */ struct GSubfont { short n; /* number of chars in font */ char height; /* height of bitmap */ char ascent; /* top of bitmap to baseline */ Fontchar *info; /* n+1 character descriptors */ GBitmap *bits; /* where the characters are */ }; struct GCacheinfo { ulong xright; /* right edge of bits */ Fontchar; }; struct GFont { uchar height; /* max height of bitmap, interline spacing */ char ascent; /* top of bitmap to baseline */ char width; /* widest so far; used in caching only */ char ldepth; /* of images */ short id; /* of font */ int ncache; /* number of entries in cache */ GCacheinfo *cache; /* cached characters */ GBitmap *b; /* cached images */ }; extern ulong *gaddr(GBitmap*, Point); extern uchar *gbaddr(GBitmap*, Point); extern void gbitblt(GBitmap*, Point, GBitmap*, Rectangle, Fcode); extern void gbitbltclip(void*); extern void gtexture(GBitmap*, Rectangle, GBitmap*, Fcode); extern Point gsubfstrsize(GSubfont*, char*); extern int gsubfstrwidth(GSubfont*, char*); extern Point gsubfstring(GBitmap*, Point, GSubfont*, char*, Fcode); extern Point gbitbltstring(GBitmap*, Point, GSubfont*, char*, Fcode); extern void gsegment(GBitmap*, Point, Point, int, Fcode); extern void gpoint(GBitmap*, Point, int, Fcode); extern void gflushcpucache(void); extern GBitmap* gballoc(Rectangle, int); extern void gbfree(GBitmap*);