const unsigned char ucase_glyphs[512] = { /* : 0x40 @ */ 0x1c, 0x22, 0x2a, 0x3a, 0x1a, 0x02, 0x3c, 0x00, /* : 0x41 A */ 0x08, 0x14, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x00, /* : 0x42 B */ 0x1e, 0x22, 0x22, 0x1e, 0x22, 0x22, 0x1e, 0x00, /* : 0x43 C */ 0x1c, 0x22, 0x02, 0x02, 0x02, 0x22, 0x1c, 0x00, /* : 0x44 D */ 0x1e, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x00, /* : 0x45 E */ 0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x3e, 0x00, /* : 0x46 F */ 0x3e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x00, /* : 0x47 G */ 0x3c, 0x02, 0x02, 0x02, 0x32, 0x22, 0x3c, 0x00, /* : 0x48 H */ 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22, 0x00, /* : 0x49 I */ 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, /* : 0x4a */ 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x1c, 0x00, /* : 0x4b */ 0x22, 0x12, 0x0a, 0x06, 0x0a, 0x12, 0x22, 0x00, /* : 0x4c */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x3e, 0x00, /* : 0x4d */ 0x22, 0x36, 0x2a, 0x2a, 0x22, 0x22, 0x22, 0x00, /* : 0x4e */ 0x22, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x22, 0x00, /* : 0x4f */ 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, /* : 0x50 */ 0x1e, 0x22, 0x22, 0x1e, 0x02, 0x02, 0x02, 0x00, /* : 0x51 */ 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x12, 0x2c, 0x00, /* : 0x52 */ 0x1e, 0x22, 0x22, 0x1e, 0x0a, 0x12, 0x22, 0x00, /* : 0x53 */ 0x1c, 0x22, 0x02, 0x1c, 0x20, 0x22, 0x1c, 0x00, /* : 0x54 */ 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /* : 0x55 */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00, /* : 0x56 */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08, 0x00, /* : 0x57 */ 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22, 0x00, /* : 0x58 */ 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00, /* : 0x59 */ 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00, /* : 0x5a */ 0x3e, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3e, 0x00, /* : 0x5b */ 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e, 0x00, /* : 0x5c */ 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, /* : 0x5d */ 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00, /* : 0x5e */ 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, /* : 0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, /* : 0x20 space */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x21 ! */ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, /* : 0x22 */ 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x23 */ 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14, 0x00, /* : 0x24 */ 0x08, 0x3c, 0x0a, 0x1c, 0x28, 0x1e, 0x08, 0x00, /* : 0x25 */ 0x06, 0x26, 0x10, 0x08, 0x04, 0x32, 0x30, 0x00, /* : 0x26 */ 0x04, 0x0a, 0x0a, 0x04, 0x2a, 0x12, 0x2c, 0x00, /* : 0x27 */ 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x28 */ 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, /* : 0x29 */ 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, /* : 0x2a */ 0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08, 0x00, /* : 0x2b */ 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00, 0x00, /* : 0x2c */ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x00, /* : 0x2d */ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, /* : 0x2e */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* : 0x2f */ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00, /* : 0x30 */ 0x1c, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x1c, 0x00, /* : 0x31 */ 0x08, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, /* : 0x32 */ 0x1c, 0x22, 0x20, 0x18, 0x04, 0x02, 0x3e, 0x00, /* : 0x33 */ 0x3e, 0x20, 0x10, 0x18, 0x20, 0x22, 0x1c, 0x00, /* : 0x34 */ 0x10, 0x18, 0x14, 0x12, 0x3e, 0x10, 0x10, 0x00, /* : 0x35 */ 0x3e, 0x02, 0x1e, 0x20, 0x20, 0x22, 0x1c, 0x00, /* : 0x36 */ 0x38, 0x04, 0x02, 0x1e, 0x22, 0x22, 0x1c, 0x00, /* : 0x37 */ 0x3e, 0x20, 0x10, 0x08, 0x04, 0x04, 0x04, 0x00, /* : 0x38 */ 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c, 0x00, /* : 0x39 */ 0x1c, 0x22, 0x22, 0x3c, 0x20, 0x10, 0x0e, 0x00, /* : 0x3a */ 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, /* : 0x3b */ 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x04, 0x00, /* : 0x3c */ 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, /* : 0x3d */ 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00, 0x00, /* : 0x3e */ 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, /* : 0x3f */ 0x1c, 0x22, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00 }; const unsigned char lcase_glyphs[256] = { /* : 0x60 \ */ 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x61 a */ 0x00, 0x00, 0x1c, 0x20, 0x3c, 0x22, 0x3c, 0x00, /* : 0x62 b */ 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x00, /* : 0x63 c */ 0x00, 0x00, 0x3c, 0x02, 0x02, 0x02, 0x3c, 0x00, /* : 0x64 d */ 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x00, /* : 0x65 e */ 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x02, 0x3c, 0x00, /* : 0x66 f */ 0x18, 0x24, 0x04, 0x0e, 0x04, 0x04, 0x04, 0x00, /* : 0x67 g */ 0x00, 0x00, 0x1c, 0x22, 0x22, 0x3c, 0x20, 0x1c, /* : 0x68 h */ 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00, /* : 0x69 i */ 0x08, 0x00, 0x0c, 0x08, 0x08, 0x08, 0x1c, 0x00, /* : 0x6a j */ 0x10, 0x00, 0x18, 0x10, 0x10, 0x10, 0x12, 0x0c, /* : 0x6b k */ 0x02, 0x02, 0x22, 0x12, 0x0e, 0x12, 0x22, 0x00, /* : 0x6c l */ 0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, /* : 0x6d m */ 0x00, 0x00, 0x16, 0x2a, 0x2a, 0x2a, 0x2a, 0x00, /* : 0x6e n */ 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x00, /* : 0x6f o */ 0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x00, /* : 0x70 p */ 0x00, 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x02, 0x02, /* : 0x71 q */ 0x00, 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20, /* : 0x72 r */ 0x00, 0x00, 0x3a, 0x06, 0x02, 0x02, 0x02, 0x00, /* : 0x73 s */ 0x00, 0x00, 0x3c, 0x02, 0x1c, 0x20, 0x1e, 0x00, /* : 0x74 t */ 0x04, 0x04, 0x3e, 0x04, 0x04, 0x24, 0x18, 0x00, /* : 0x75 u */ 0x00, 0x00, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x00, /* : 0x76 v */ 0x00, 0x00, 0x22, 0x22, 0x22, 0x14, 0x08, 0x00, /* : 0x77 w */ 0x00, 0x00, 0x22, 0x2a, 0x2a, 0x2a, 0x14, 0x00, /* : 0x78 x */ 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, /* : 0x79 y */ 0x00, 0x00, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x1c, /* : 0x7a z */ 0x00, 0x00, 0x3e, 0x10, 0x08, 0x04, 0x3e, 0x00, /* : 0x7b { */ 0x38, 0x0c, 0x0c, 0x06, 0x0c, 0x0c, 0x38, 0x00, /* : 0x7c flat colon */ 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x08, 0x00, /* : 0x7d } */ 0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00, /* : 0x7e ~ */ 0x2c, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x7f delete block */ 0x00, 0x2a, 0x14, 0x2a, 0x14, 0x2a, 0x00, 0x00 }; const unsigned char mousetext_glyphs[256] = { /* : 0x00 closed apple */ 0x10, 0x08, 0x36, 0x7f, 0x3f, 0x3f, 0x7e, 0x36, /* : 0x01 open apple */ 0x10, 0x08, 0x36, 0x41, 0x21, 0x21, 0x4a, 0x36, /* : 0x02 mouse pointer arrow */ 0x00, 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x36, 0x42, /* : 0x03 hourglass */ 0x7f, 0x22, 0x14, 0x08, 0x08, 0x14, 0x22, 0x7f, /* : 0x04 checkmark */ 0x00, 0x40, 0x20, 0x11, 0x0a, 0x04, 0x04, 0x00, /* : 0x05 inverted checkmark */ 0x7f, 0x3f, 0x5f, 0x6e, 0x75, 0x7b, 0x7b, 0x7f, /* : 0x06 left half of running person */ 0x70, 0x60, 0x7e, 0x31, 0x79, 0x30, 0x3f, 0x02, /* : 0x07 right half of running person */ 0x00, 0x18, 0x07, 0x00, 0x07, 0x0c, 0x08, 0x70, /* : 0x08 left arrow */ 0x08, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x08, 0x00, /* : 0x09 ... */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, /* : 0x0a down arrow */ 0x08, 0x08, 0x08, 0x08, 0x49, 0x2a, 0x1c, 0x08, /* : 0x0b up arrow */ 0x08, 0x1c, 0x2a, 0x49, 0x08, 0x08, 0x08, 0x08, /* : 0x0c overscore */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* : 0x0d carriage return arrow */ 0x40, 0x40, 0x40, 0x44, 0x46, 0x7f, 0x06, 0x04, /* : 0x0e solid block */ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, /* : 0x0f inline left arrow */ 0x13, 0x18, 0x1c, 0x7e, 0x1c, 0x18, 0x10, 0x6f, /* : 0x10 inline right arrow */ 0x64, 0x0c, 0x1c, 0x3f, 0x1c, 0x0c, 0x04, 0x7b, /* : 0x11 inline down arrow */ 0x40, 0x48, 0x08, 0x7f, 0x3e, 0x1c, 0x48, 0x40, /* : 0x12 inline up arrow */ 0x40, 0x48, 0x1c, 0x3e, 0x7f, 0x08, 0x48, 0x40, /* : 0x13 dash */ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, /* : 0x14 left/bottom border */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, /* : 0x15 right arrow */ 0x08, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x08, 0x00, /* : 0x16 delete char 1 */ 0x2a, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0x2a, 0x55, /* : 0x17 delete char 2 */ 0x55, 0x2a, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0x2a, /* : 0x18 left half of folder */ 0x00, 0x3e, 0x41, 0x01, 0x01, 0x01, 0x7f, 0x00, /* : 0x19 right half of folder */ 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x7f, 0x00, /* : 0x1a right border */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* : 0x1b diamond */ 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00, /* : 0x1c top and bottom border */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, /* : 0x1d crosshairs */ 0x14, 0x14, 0x77, 0x00, 0x77, 0x14, 0x14, 0x00, /* : 0x1e top/right/bottom border with center dot */ 0x7f, 0x40, 0x40, 0x4c, 0x4c, 0x40, 0x40, 0x7f, /* : 0x1f left border */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }; const unsigned char interface_glyphs[256] = { /* : 0x00 ----------------------- menu borders */ 0x00, 0x00, 0x00, 0x00, 0x78, 0x08, 0x08, 0x08, /* : 0x01 */ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x08, 0x08, /* : 0x02 */ 0x08, 0x08, 0x08, 0x08, 0x78, 0x00, 0x00, 0x00, /* : 0x03 */ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x00, /* : 0x04 */ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, /* : 0x05 */ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* : 0x06 */ 0x08, 0x08, 0x08, 0x08, 0x78, 0x08, 0x08, 0x08, /* : 0x07 */ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x08, /* : 0x08 */ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x08, 0x08, 0x08, /* : 0x09 */ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00, /* : 0x0A */ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, /* : 0x0B ----------------------- disk icon quad */ 0x00, 0x7e, 0x02, 0x02, 0x02, 0x42, 0x22, 0x22, /* : 0x0C */ 0x00, 0x7f, 0x40, 0x20, 0x40, 0x43, 0x44, 0x44, /* : 0x0D */ 0x22, 0x42, 0x02, 0x02, 0x02, 0x02, 0x7e, 0x00, /* : 0x0E */ 0x44, 0x43, 0x40, 0x41, 0x41, 0x41, 0x7e, 0x00, /* : 0x0F ----------------------- unlock icon */ 0x1c, 0x24, 0x04, 0x3e, 0x22, 0x22, 0x2a, 0x3e, /* : 0x10 ----------------------- reverse return arrow */ 0x01, 0x01, 0x01, 0x11, 0x31, 0x7f, 0x30, 0x10, /* : 0x11 ----------------------- mini-spacebar visual */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x3e, 0x00, /* : 0x12 ----------------------- glyph_joystick */ 0x08, 0x08, 0x08, 0x77, 0x08, 0x08, 0x08, 0x08, /* : 0x13 ----------------------- glyph_ctrl */ 0x08, 0x1c, 0x3e, 0x63, 0x7b, 0x63, 0x7f, 0x00, /* : 0x14 ----------------------- glyph_lowercase */ 0x7f, 0x63, 0x5f, 0x43, 0x5d, 0x43, 0x7f, 0x00, /* : 0x15 ----------------------- glyph_uppercase */ 0x77, 0x6b, 0x5d, 0x41, 0x5d, 0x5d, 0x7f, 0x00, /* : 0x16 ----------------------- glyph_showalt */ 0x7f, 0x77, 0x77, 0x41, 0x77, 0x77, 0x7f, 0x00, /* : 0x17 ----------------------- glyph_backspace */ 0x00, 0x08, 0x04, 0x7e, 0x04, 0x08, 0x00, 0x00, /* : 0x18 ----------------------- glyph_joystick_kpad */ 0x08, 0x2a, 0x08, 0x77, 0x08, 0x2a, 0x08, 0x08, /* : 0x19 ----------------------- glyph_leftspace */ 0x00, 0x7e, 0x02, 0x42, 0x42, 0x42, 0x02, 0x7e, /* : 0x1A ----------------------- glyph_midspace */ 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x7f, /* : 0x1B ----------------------- glyph_rightspace */ 0x00, 0x3f, 0x20, 0x21, 0x21, 0x21, 0x20, 0x3f, /* : 0x1C ----------------------- glyph_esc */ 0x7f, 0x63, 0x5d, 0x41, 0x7d, 0x43, 0x7f, 0x00, /* : 0x1D ----------------------- glyph_return left */ 0x00, 0x00, 0x00, 0x10, 0x18, 0x7c, 0x18, 0x10, /* : 0x1E ----------------------- glyph_return right */ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x00, 0x00, /* : 0x1F ----------------------- glyph_nonactionable */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Generic utility for anything trying to turn those glyph maps into // characters based on ASCII input static const unsigned char *asciiToAppleGlyph(unsigned char c) { if (c < 32) { return &ucase_glyphs[32]; // space } else if (c <= 63) { // space through ? return &ucase_glyphs[(c-32+32)*8]; } else if (c <= 95) { // @ through Z to _ return &ucase_glyphs[(c-64)*8]; } else if (c <= 127) { // Direct mapping of lcase_glyphs: ` through z to del return &lcase_glyphs[(c-96)*8]; } else if (c <= 159) { // map in the 32 mousetext_glyphs return &mousetext_glyphs[(c-128)*8]; } else if (c <= 191) { // map in the 32 interface_glyphs return &interface_glyphs[(c-160)*8]; } else { return &ucase_glyphs[32]; // space } }