pub const GLYPH_WIDTH: usize = 5;
pub const GLYPH_HEIGHT: usize = 7;
pub const CELL_WIDTH: usize = 7; pub const CELL_HEIGHT: usize = 10;
const FALLBACK: [u8; GLYPH_HEIGHT] = [
0b00000, 0b00000, 0b00000, 0b00100, 0b00000, 0b00000, 0b00000,
];
const TABLE: [(u8, [u8; GLYPH_HEIGHT]); 95] = [
(0x20, [0, 0, 0, 0, 0, 0, 0]),
(
0x21,
[0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0, 0b00100],
), (0x22, [0b01010, 0b01010, 0, 0, 0, 0, 0]), (
0x23,
[
0b01010, 0b01010, 0b11111, 0b01010, 0b11111, 0b01010, 0b01010,
],
), (
0x24,
[
0b00100, 0b01111, 0b10100, 0b01110, 0b00101, 0b11110, 0b00100,
],
), (
0x25,
[
0b11000, 0b11001, 0b00010, 0b00100, 0b01000, 0b10011, 0b00011,
],
), (
0x26,
[
0b01100, 0b10010, 0b10100, 0b01000, 0b10101, 0b10010, 0b01101,
],
), (0x27, [0b00100, 0b00100, 0, 0, 0, 0, 0]), (
0x28,
[
0b00010, 0b00100, 0b01000, 0b01000, 0b01000, 0b00100, 0b00010,
],
), (
0x29,
[
0b01000, 0b00100, 0b00010, 0b00010, 0b00010, 0b00100, 0b01000,
],
), (0x2A, [0, 0b00100, 0b10101, 0b01110, 0b10101, 0b00100, 0]), (0x2B, [0, 0b00100, 0b00100, 0b11111, 0b00100, 0b00100, 0]), (0x2C, [0, 0, 0, 0, 0b00100, 0b00100, 0b01000]), (0x2D, [0, 0, 0, 0b11111, 0, 0, 0]), (0x2E, [0, 0, 0, 0, 0, 0b00100, 0b00100]), (
0x2F,
[
0b00001, 0b00010, 0b00010, 0b00100, 0b01000, 0b01000, 0b10000,
],
), (
0x30,
[
0b01110, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b01110,
],
), (
0x31,
[
0b00100, 0b01100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110,
],
), (
0x32,
[
0b01110, 0b10001, 0b00001, 0b00010, 0b00100, 0b01000, 0b11111,
],
), (
0x33,
[
0b11111, 0b00010, 0b00100, 0b00010, 0b00001, 0b10001, 0b01110,
],
), (
0x34,
[
0b00010, 0b00110, 0b01010, 0b10010, 0b11111, 0b00010, 0b00010,
],
), (
0x35,
[
0b11111, 0b10000, 0b11110, 0b00001, 0b00001, 0b10001, 0b01110,
],
), (
0x36,
[
0b00110, 0b01000, 0b10000, 0b11110, 0b10001, 0b10001, 0b01110,
],
), (
0x37,
[
0b11111, 0b00001, 0b00010, 0b00100, 0b01000, 0b01000, 0b01000,
],
), (
0x38,
[
0b01110, 0b10001, 0b10001, 0b01110, 0b10001, 0b10001, 0b01110,
],
), (
0x39,
[
0b01110, 0b10001, 0b10001, 0b01111, 0b00001, 0b00010, 0b01100,
],
), (0x3A, [0, 0b00100, 0b00100, 0, 0b00100, 0b00100, 0]), (0x3B, [0, 0b00100, 0b00100, 0, 0b00100, 0b00100, 0b01000]), (
0x3C,
[
0b00010, 0b00100, 0b01000, 0b10000, 0b01000, 0b00100, 0b00010,
],
), (0x3D, [0, 0, 0b11111, 0, 0b11111, 0, 0]), (
0x3E,
[
0b01000, 0b00100, 0b00010, 0b00001, 0b00010, 0b00100, 0b01000,
],
), (
0x3F,
[0b01110, 0b10001, 0b00001, 0b00010, 0b00100, 0, 0b00100],
), (
0x40,
[
0b01110, 0b10001, 0b00001, 0b01101, 0b10101, 0b10101, 0b01110,
],
), (
0x41,
[
0b01110, 0b10001, 0b10001, 0b10001, 0b11111, 0b10001, 0b10001,
],
), (
0x42,
[
0b11110, 0b10001, 0b10001, 0b11110, 0b10001, 0b10001, 0b11110,
],
), (
0x43,
[
0b01110, 0b10001, 0b10000, 0b10000, 0b10000, 0b10001, 0b01110,
],
), (
0x44,
[
0b11100, 0b10010, 0b10001, 0b10001, 0b10001, 0b10010, 0b11100,
],
), (
0x45,
[
0b11111, 0b10000, 0b10000, 0b11110, 0b10000, 0b10000, 0b11111,
],
), (
0x46,
[
0b11111, 0b10000, 0b10000, 0b11110, 0b10000, 0b10000, 0b10000,
],
), (
0x47,
[
0b01110, 0b10001, 0b10000, 0b10111, 0b10001, 0b10001, 0b01110,
],
), (
0x48,
[
0b10001, 0b10001, 0b10001, 0b11111, 0b10001, 0b10001, 0b10001,
],
), (
0x49,
[
0b01110, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110,
],
), (
0x4A,
[
0b00111, 0b00010, 0b00010, 0b00010, 0b00010, 0b10010, 0b01100,
],
), (
0x4B,
[
0b10001, 0b10010, 0b10100, 0b11000, 0b10100, 0b10010, 0b10001,
],
), (
0x4C,
[
0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b11111,
],
), (
0x4D,
[
0b10001, 0b11011, 0b10101, 0b10101, 0b10001, 0b10001, 0b10001,
],
), (
0x4E,
[
0b10001, 0b10001, 0b11001, 0b10101, 0b10011, 0b10001, 0b10001,
],
), (
0x4F,
[
0b01110, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110,
],
), (
0x50,
[
0b11110, 0b10001, 0b10001, 0b11110, 0b10000, 0b10000, 0b10000,
],
), (
0x51,
[
0b01110, 0b10001, 0b10001, 0b10001, 0b10101, 0b10010, 0b01101,
],
), (
0x52,
[
0b11110, 0b10001, 0b10001, 0b11110, 0b10100, 0b10010, 0b10001,
],
), (
0x53,
[
0b01111, 0b10000, 0b10000, 0b01110, 0b00001, 0b00001, 0b11110,
],
), (
0x54,
[
0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100,
],
), (
0x55,
[
0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110,
],
), (
0x56,
[
0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01010, 0b00100,
],
), (
0x57,
[
0b10001, 0b10001, 0b10001, 0b10101, 0b10101, 0b10101, 0b01010,
],
), (
0x58,
[
0b10001, 0b10001, 0b01010, 0b00100, 0b01010, 0b10001, 0b10001,
],
), (
0x59,
[
0b10001, 0b10001, 0b10001, 0b01010, 0b00100, 0b00100, 0b00100,
],
), (
0x5A,
[
0b11111, 0b00001, 0b00010, 0b00100, 0b01000, 0b10000, 0b11111,
],
), (
0x5B,
[
0b01110, 0b01000, 0b01000, 0b01000, 0b01000, 0b01000, 0b01110,
],
), (
0x5C,
[
0b10000, 0b01000, 0b01000, 0b00100, 0b00010, 0b00010, 0b00001,
],
), (
0x5D,
[
0b01110, 0b00010, 0b00010, 0b00010, 0b00010, 0b00010, 0b01110,
],
), (0x5E, [0b00100, 0b01010, 0b10001, 0, 0, 0, 0]), (0x5F, [0, 0, 0, 0, 0, 0, 0b11111]), (0x60, [0b01000, 0b00100, 0b00010, 0, 0, 0, 0]), (0x61, [0, 0, 0b01110, 0b00001, 0b01111, 0b10001, 0b01111]), (
0x62,
[
0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b10001, 0b11110,
],
), (0x63, [0, 0, 0b01110, 0b10001, 0b10000, 0b10001, 0b01110]), (
0x64,
[
0b00001, 0b00001, 0b01111, 0b10001, 0b10001, 0b10001, 0b01111,
],
), (0x65, [0, 0, 0b01110, 0b10001, 0b11111, 0b10000, 0b01110]), (
0x66,
[
0b00110, 0b01000, 0b01000, 0b11100, 0b01000, 0b01000, 0b01000,
],
), (0x67, [0, 0, 0b01111, 0b10001, 0b01111, 0b00001, 0b01110]), (
0x68,
[
0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b10001, 0b10001,
],
), (
0x69,
[0b00100, 0, 0b01100, 0b00100, 0b00100, 0b00100, 0b01110],
), (
0x6A,
[0b00010, 0, 0b00110, 0b00010, 0b00010, 0b10010, 0b01100],
), (
0x6B,
[
0b10000, 0b10000, 0b10010, 0b10100, 0b11000, 0b10100, 0b10010,
],
), (
0x6C,
[
0b01100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110,
],
), (0x6D, [0, 0, 0b11010, 0b10101, 0b10101, 0b10101, 0b10001]), (0x6E, [0, 0, 0b11110, 0b10001, 0b10001, 0b10001, 0b10001]), (0x6F, [0, 0, 0b01110, 0b10001, 0b10001, 0b10001, 0b01110]), (0x70, [0, 0, 0b11110, 0b10001, 0b11110, 0b10000, 0b10000]), (0x71, [0, 0, 0b01111, 0b10001, 0b01111, 0b00001, 0b00001]), (0x72, [0, 0, 0b10110, 0b11001, 0b10000, 0b10000, 0b10000]), (0x73, [0, 0, 0b01111, 0b10000, 0b01110, 0b00001, 0b11110]), (
0x74,
[
0b01000, 0b01000, 0b11100, 0b01000, 0b01000, 0b01000, 0b00110,
],
), (0x75, [0, 0, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110]), (0x76, [0, 0, 0b10001, 0b10001, 0b10001, 0b01010, 0b00100]), (0x77, [0, 0, 0b10001, 0b10001, 0b10101, 0b10101, 0b01010]), (0x78, [0, 0, 0b10001, 0b01010, 0b00100, 0b01010, 0b10001]), (0x79, [0, 0, 0b10001, 0b10001, 0b01111, 0b00001, 0b01110]), (0x7A, [0, 0, 0b11111, 0b00010, 0b00100, 0b01000, 0b11111]), (
0x7B,
[
0b00010, 0b00100, 0b00100, 0b01000, 0b00100, 0b00100, 0b00010,
],
), (
0x7C,
[
0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100,
],
), (
0x7D,
[
0b01000, 0b00100, 0b00100, 0b00010, 0b00100, 0b00100, 0b01000,
],
), (0x7E, [0, 0b01001, 0b10110, 0, 0, 0, 0]), ];
pub fn glyph(code: u8) -> [u8; GLYPH_HEIGHT] {
if code == 0 {
return [0; GLYPH_HEIGHT];
}
for (c, rows) in TABLE.iter() {
if *c == code {
return *rows;
}
}
FALLBACK
}
pub fn pixel_lit(code: u8, col: usize, row: usize) -> bool {
if col >= GLYPH_WIDTH || row >= GLYPH_HEIGHT {
return false;
}
let rows = glyph(code);
let bit = (GLYPH_WIDTH - 1) - col;
(rows[row] >> bit) & 1 == 1
}