The libcaca font format (version 1)
All types are big endian.
struct { magic: uint8_t caca_header[2]; // "\xCA\xCA" uint8_t caca_file_type[2]; // "FT" font_header: uint32_t control_size; // Control size (font_data - font_header) uint32_t data_size; // Data size (EOF - font_data) uint16_t version; // Font format version // bit 0: set to 1 if font is compatible // with version 1 of the format // bits 1-15: unused yet, must be 0 uint16_t blocks; // Number of blocks in the font uint32_t glyphs; // Total number of glyphs in the font uint16_t bpp; // Bits per pixel for glyph data (valid // Values are 1, 2, 4 and 8) uint16_t width; // Standard glyph width uint16_t height; // Standard glyph height uint16_t maxwidth; // Maximum glyph width uint16_t maxheight; // Maximum glyph height uint16_t flags; // Feature flags // bit 0: set to 1 if font is fixed width // bits 1-15: unused yet, must be 0 block_info: struct { uint32_t start; // Unicode index of the first glyph uint32_t stop; // Unicode index of the last glyph + 1 uint32_t index; // Glyph info index of the first glyph } block_list[blocks]; glyph_info: struct { uint16_t width; // Glyph width in pixels uint16_t height; // Glyph height in pixels uint32_t data_offset; // Offset (starting from data) to the data // for the first character } glyph_list[glyphs]; control_extension_1: control_extension_2: ... control_extension_N: ... // reserved for future use font_data: uint8_t data[data_size]; // glyph data data_extension_1: data_extension_2: ... data_extension_N: ... // reserved for future use };