FONT(9.5) FONT(9.5) NAME font - jerq font layouts SYNOPSIS #include <jerq.h> #include <font.h> typedef struct Fontchar Fontchar; typedef struct Font Font; extern Font defont; DESCRIPTION A Font is a character set, stored as a single Bitmap with the characters placed side-by-side. It is described by the following data structures. typedef struct Fontchar { short x; /* left edge of bits */ unsigned char top; /* first non-zero scan-line */ unsigned char bottom; /* last non-zero scan-line */ char left; /* offset of baseline */ unsigned char width; /* width of baseline */ } Fontchar; typedef struct Font { short n; /* number of chars in font */ char height; /* height of bitmap */ char ascent; /* top of bitmap to baseline */ long unused; Bitmap *bits; /* where the characters are */ Fontchar info[n+1]; /* n+1 character descriptors */ } Font; Characters in bits abut exactly, so the displayed width of the character c is Font.info[c+1].x-Font.info[c].x. The first left columns of pixels in a character overlap the pre- vious character. The upper left corner of the nonempty columns appears at (x,0) in the bitmap. Width is the dis- tance to move horizontally after drawing a character. The font bitmap has a fixed height; parameters top and bottom may be used to optimize the copying of a character in some circumstances. A character drawn at point p in an arbitrary Bitmap has its upper-leftmost dot, including empty space above it in the Bitmap, at p. To copy character c from font f to point p do Fontchar *i = f->info + c; FONT(9.5) FONT(9.5) bitblt(f->bits, Rect(i->x, i->top, (i+1)->x, i->bottom), Pt(p.x+i->left, p.y+i->top), fc); p.x += i->width; The above example is correct for XOR and OR mode. For STORE mode, the bitblt call is different because all the scan lines must be drawn: bitblt(f->bits, Rect(i->x, 0, (i+1)->x, f->height), Pt(p.x+left, p.y), fc); Fonts are stored on disk in binary with byte order that of the terminal. First in the file is the first eight bytes (up to unused) of the Font strcture, then the array of Fontchar structures, then the data for the bitmap Font.bits. The header for the bitmap must be inferred from Font.height and Font.info[Font.n].x. See string(9.3) for a description of how to read and write font files. SEE ALSO jf(9.1), string(9.3), infont(9.3)