/* psf.h */ /* * Format of a psf font file: * * 1. The header * 2. The font * 3. Unicode information */ /* * Format of the Unicode information: * * For each font position ** * where is a 2-byte little endian Unicode value, * = *, = psf1 ? 0xFFFE : 0xFE, * = psf1 ? 0xFFFF : 0xFF. * and * denotes zero or more occurrences of the preceding item. * * Semantics: * The leading * part gives Unicode symbols that are all * represented by this font position. The following sequences * are sequences of Unicode symbols - probably a symbol * together with combining accents - also represented by * this font position. * * Example: * At the font position for a capital A-ring glyph, we * may have: * 00C5,212B,FFFE,0041,030A,FFFF * Some font positions may be described by sequences only, * namely when there is no precomposed Unicode value for the glyph. */ #ifndef _PSF_H #define _PSF_H #define PSF1_MAGIC0 0x36 #define PSF1_MAGIC1 0x04 #define PSF1_MODE512 0x01 #define PSF1_MODEHASTAB 0x02 #define PSF1_MODEHASSEQ 0x04 #define PSF1_MAXMODE 0x05 #define PSF1_SEPARATOR 0xFFFF #define PSF1_STARTSEQ 0xFFFE struct psf1_header { unsigned char magic[2]; /* Magic number */ unsigned char mode; /* PSF font mode */ unsigned char charsize; /* Character size */ }; /* * Format and semantics of psf2 version 0 are as psf (with PSF_MAXMODE == 5). * However, this allows one to specify the length. * It turns out to be very useful to be able to work with fonts * with a few symbols or even only one (like the Euro), and * with very large fonts (like several thousand Unicode symbols * done in the same style). * Following hpa's suggestion, psf2 uses UTF-8 rather than UCS-2, * and has 32-bit magic 0x864ab572. * The integers here are little endian 4-byte integers. */ #define PSF2_MAGIC0 0x72 #define PSF2_MAGIC1 0xb5 #define PSF2_MAGIC2 0x4a #define PSF2_MAGIC3 0x86 struct psf2_header { unsigned char magic[4]; unsigned int version; unsigned int headersize; /* offset of bitmaps in file */ unsigned int flags; unsigned int length; /* number of glyphs */ unsigned int charsize; /* number of bytes for each character */ unsigned int height, width; /* max dimensions of glyphs */ /* charsize = height * ((width + 7) / 8) */ }; /* bits used in flags */ #define PSF2_HAS_UNICODE_TABLE 0x01 /* max version recognized so far */ #define PSF2_MAXVERSION 0 /* UTF8 separators */ #define PSF2_SEPARATOR 0xFF #define PSF2_STARTSEQ 0xFE #define PSF1_MAGIC_OK(x) ((x)[0] == PSF1_MAGIC0 && (x)[1] == PSF1_MAGIC1) #define PSF2_MAGIC_OK(x) ((x)[0] == PSF2_MAGIC0 && (x)[1] == PSF2_MAGIC1 && (x)[2] == PSF2_MAGIC2 && (x)[3] == PSF2_MAGIC3) #endif /* _PSF_H */