From 1f57fb9e510b98218154b8cd1a6fd6d69a098400 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sat, 14 Feb 2026 14:04:13 +0100 Subject: [PATCH 01/17] PoC working but just a hack --- wled00/FX.cpp | 103 +- wled00/FX.h | 8 +- wled00/FX_2Dfcn.cpp | 131 +- wled00/fcn_declare.h | 2 + wled00/json.cpp | 15 + wled00/src/font/console_font_4x6.h | 2852 ++--------------- wled00/src/font/console_font_5x12.h | 4387 ++------------------------- wled00/src/font/console_font_5x8.h | 3363 ++------------------ wled00/src/font/console_font_6x8.h | 3363 ++------------------ wled00/src/font/console_font_7x9.h | 3619 ++-------------------- wled00/util.cpp | 46 + 11 files changed, 1739 insertions(+), 16150 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 54f441da35..65d9726bcb 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6302,22 +6302,78 @@ static const char _data_FX_MODE_2DBLOBS[] PROGMEM = "Blobs@!,# blobs,Blur,Trail; //////////////////////////// // 2D Scrolling text // //////////////////////////// +#include "src/font/console_font_4x6.h" +#include "src/font/console_font_5x8.h" +#include "src/font/console_font_5x12.h" +#include "src/font/console_font_6x8.h" +#include "src/font/console_font_7x9.h" + void mode_2Dscrollingtext(void) { if (!strip.isMatrix || !SEGMENT.is2D()) FX_FALLBACK_STATIC; // not a 2D set-up const int cols = SEG_W; const int rows = SEG_H; - unsigned letterWidth, rotLW; - unsigned letterHeight, rotLH; - switch (map(SEGMENT.custom2, 0, 255, 1, 5)) { - default: - case 1: letterWidth = 4; letterHeight = 6; break; - case 2: letterWidth = 5; letterHeight = 8; break; - case 3: letterWidth = 6; letterHeight = 8; break; - case 4: letterWidth = 7; letterHeight = 9; break; - case 5: letterWidth = 5; letterHeight = 12; break; + uint8_t letterHeight; + uint8_t letterWidth; + uint8_t letterSpacing; + + const uint8_t* selectedFont = nullptr; + static File fontFile; // TODO: come up with a good plan, maybe even support multiple files? could do it like image FX. Multi instance can be added if needed (still possible with built in fonts) + bool useCustomFont = SEGMENT.check2; + uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); + // use custom font from file if check2 is enabled and file exists + if (useCustomFont) { + while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait + // Serial.print(F("Looking for font file: ")); + char fileName[16]; + strcpy_P(fileName, PSTR("/font")); + if (fontNum) sprintf(fileName +5, "%d", fontNum); // append font type to file name, e.g. /font1.wbf + strcat_P(fileName, PSTR(".wbf")); + //Serial.println(fileName); + if (WLED_FS.exists(fileName)) { // TODO: this is slow (~20ms(?)) maybe cache result? with this line: 9.5fps (3 segments), without: 9.5fps, so does not matter... open and close is the slow part. + // Serial.print(F(" file found ")); + //if(!fontFile) + fontFile = WLED_FS.open(fileName); + if (fontFile) { + if (fontFile.read() == 'W') { // check file header + // Serial.println(F(" Valid magic byte found")); + letterHeight = fontFile.read(); // font glyph height in pixels + letterWidth = fontFile.read()* 5 / 7; // max glyph width in pixels //!!! must load the width table and use actual glyph width, this is just a test hack + letterSpacing = fontFile.read(); // spacing between characters + /* + fontFile.seek(0); // reset file pointer to the beginning for later use in drawChar() + // print first 500 bytes of the file + for (int i = 0; i < 500; i++) { + Serial.print(fontFile.read(), DEC); + Serial.print(" "); + }*/ + } else { + fontFile.close(); + useCustomFont = false; // invalid file header, fallback to built-in font + } + } + } + else return; // font file not found, do not run the effect for now + //else + //Serial.println(F("Font file not found, using built-in font")); + } + if (!useCustomFont) { + return; // TODO: !!! remvoe debug + switch (fontNum) { + default: + case 0: selectedFont = console_font_4x6; break; + case 1: selectedFont = console_font_5x8; break; + case 2: selectedFont = console_font_6x8; break; + case 3: selectedFont = console_font_7x9; break; + case 4: selectedFont = console_font_5x12; break; + } + // extract dimensions from the header (see font files for details) + letterHeight = pgm_read_byte_near(&selectedFont[1]); + letterWidth = pgm_read_byte_near(&selectedFont[2]); } + + unsigned rotLW, rotLH; // letters are rotated const int8_t rotate = map(SEGMENT.custom3, 0, 31, -2, 2); if (rotate == 1 || rotate == -1) { @@ -6399,8 +6455,9 @@ void mode_2Dscrollingtext(void) { } } - const int numberOfLetters = strlen(text); - int width = (numberOfLetters * rotLW); + const int numberOfChars = utf8_strlen(text); +// Serial.printf("Text to display: '%s' (length: %d chars)\n", text, numberOfChars); + int width = (numberOfChars * rotLW); // TODO: for variable width fonts calculate the actual width of the text instead of assuming fixed width int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-rotLH)/2; if (width <= cols) { // scroll vertically (e.g. ^^ Way out ^^) if it fits @@ -6438,13 +6495,25 @@ void mode_2Dscrollingtext(void) { } } else col2 = col1; // force characters to use single color (from palette) - for (int i = 0; i < numberOfLetters; i++) { - int xoffset = int(cols) - int(SEGENV.aux0) + rotLW*i; + int idx = 0; + + for (int c = 0; c < numberOfChars; c++) { + int xoffset = int(cols) - int(SEGENV.aux0) + ((rotLW+2)*c); // TODO: +1 is fixed, need something better if (xoffset + rotLW < 0) continue; // don't draw characters off-screen - SEGMENT.drawCharacter(text[i], xoffset, yoffset, letterWidth, letterHeight, col1, col2, rotate); - } -} -static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; + uint8_t charLen; + uint32_t unicode = utf8_decode(&text[idx], &charLen); // decode the UTF-8 character + //Serial.printf("charlen: %d, unicode: %u, xoffset: %d\n", charLen, unicode, xoffset); + idx += charLen; // advance by the length of the current UTF-8 character + SEGMENT.drawCharacter(unicode, xoffset, yoffset, selectedFont, fontFile, col1, col2, rotate); + } + if (useCustomFont) fontFile.close(); // TODO: check if this is fast enough opening and closing plus parsing each frame. -> without closing, fps go from 9.5fps to 17fps, maybe better to cache the whole word and only update if changed? +// it can be 64 chars max, each char in normal use is below 32x32 or 128bytes, so 8k per segment absolut max, probably more like 4k and this is not for 8266 terretory. +// but that only works for text, not for clock. so would need to cache numbers 0-9 always. that is another 1k +// or: cache currently visible glyphs only, reload if new char appears. add complexity but could still be way faster than rendering each glyph from file each frame. +//single segment is still fast though, 60fps, with file exists check and open and close: drops to 23fps... cachig may be a good option, can put it in FX data as: charmap, bitmap combo to look it up quickly. +// although that may result in frame hickups whenever the file is being cached... psram would really solve it for good, could just drop the whole font in there. +} +static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,Custom Font,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; //////////////////////////// diff --git a/wled00/FX.h b/wled00/FX.h index 9c5291665c..1b17c2e921 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -770,12 +770,12 @@ class Segment { void drawCircle(uint16_t cx, uint16_t cy, uint8_t radius, uint32_t c, bool soft = false) const; void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, uint32_t c, bool soft = false) const; void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c, bool soft = false) const; - void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) const; + void drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) const; void wu_pixel(uint32_t x, uint32_t y, CRGB c) const; inline void drawCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) const { drawCircle(cx, cy, radius, RGBW32(c.r,c.g,c.b,0), soft); } inline void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) const { fillCircle(cx, cy, radius, RGBW32(c.r,c.g,c.b,0), soft); } inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c, bool soft = false) const { drawLine(x0, y0, x1, y1, RGBW32(c.r,c.g,c.b,0), soft); } // automatic inline - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB c, CRGB c2 = CRGB::Black, int8_t rotate = 0) const { drawCharacter(chr, x, y, w, h, RGBW32(c.r,c.g,c.b,0), RGBW32(c2.r,c2.g,c2.b,0), rotate); } // automatic inline + inline void drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, CRGB c, CRGB c2 = CRGB::Black, int8_t rotate = 0) const { drawCharacter(unicode, x, y, fontData, fontFile, RGBW32(c.r,c.g,c.b,0), RGBW32(c2.r,c2.g,c2.b,0), rotate); } // automatic inline inline void fill_solid(CRGB c) const { fill(RGBW32(c.r,c.g,c.b,0)); } #else inline bool is2D() const { return false; } @@ -810,8 +810,8 @@ class Segment { inline void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) {} inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c, bool soft = false) {} inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c, bool soft = false) {} - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color, uint32_t = 0, int8_t = 0) {} - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB c, CRGB c2, int8_t rotate = 0) {} + inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) {} + inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, CRGB c, CRGB c2 = CRGB::Black, int8_t rotate = 0) {} inline void wu_pixel(uint32_t x, uint32_t y, CRGB c) {} #endif friend class WS2812FX; diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 34b619ea36..8e6ee674f2 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -559,14 +559,9 @@ void Segment::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint3 } } -#include "src/font/console_font_4x6.h" -#include "src/font/console_font_5x8.h" -#include "src/font/console_font_5x12.h" -#include "src/font/console_font_6x8.h" -#include "src/font/console_font_7x9.h" - // draws a raster font character on canvas // only supports: 4x6=24, 5x8=40, 5x12=60, 6x8=48 and 7x9=63 fonts ATM +/* void Segment::drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color, uint32_t col2, int8_t rotate) const { if (!isActive()) return; // not active if (chr < 32 || chr > 126) return; // only ASCII 32-126 supported @@ -602,6 +597,130 @@ void Segment::drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, } } } +}*/ +#define FONT_MAGIC_BYTE 0x57 // 'W' for WLED +#define FONT_HEADER_SIZE 11 // size of font header in bytes +#define LAST_ASCII_CHAR 126 // last ASCII character supported by font (currently hardcoded, could be made dynamic in future) + +void Segment::drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2, int8_t rotate) const { + if (!isActive() || (fontData == nullptr && !fontFile)) return; + //if (pgm_read_byte_near(&fontData[0]) != FONT_MAGIC_BYTE) return; // Check for Magic 'W' TODO: do this in FX not here? + uint8_t w, h, space, first, last, flags; + uint32_t lastUnicode = 0; // will be calculated based on first unicode char and number of glyphs + + fontFile.seek(1); // skip magic byte (already checked) + h = fontFile.read(); + w = fontFile.read(); // max width, (currently not used but could be used to pre allocate a buffer) + space = fontFile.read(); // spacing between characters + flags = fontFile.read(); + first = fontFile.read(); + last = fontFile.read(); + uint32_t firstUnicode; + fontFile.read((uint8_t *)&firstUnicode,4); // first unicode char in this font + if (firstUnicode > 0 && last > LAST_ASCII_CHAR) { + lastUnicode = firstUnicode + (last - LAST_ASCII_CHAR - 1); // calculate last unicode char based on first unicode char and number of glyphs + } + /* + Serial.print("Font Metadata: w="); Serial.print(w, DEC); + Serial.print(" h="); Serial.print(h, DEC); + Serial.print(" flags="); Serial.print(flags, BIN); + Serial.print(" first="); Serial.print(first, DEC); + Serial.print(" last="); Serial.print(last, DEC); + Serial.print(" firstUnicode="); Serial.println(firstUnicode, DEC);*/ + uint8_t numGlyphs = last - first + 1; + + uint8_t widthTable[numGlyphs]; // max 256 characters, each with its own width (if flags & 0x01) + for (int i = 0; i < numGlyphs; i++) { + widthTable[i] = fontFile.read(); + // Serial.print("Width of char "); Serial.print(first + i, DEC); Serial.print(": "); Serial.println(widthTable[i], DEC); + } + + // print first 500 bytes of the file + // for (int i = 0; i < 500; i++) { +//Serial.print(fontFile.read(), DEC); + // Serial.print(" "); + // } + + // read font metadata from header + /* + h = pgm_read_byte_near(&fontData[1]); + w = pgm_read_byte_near(&fontData[2]); + flags = pgm_read_byte_near(&fontData[3]); + first = pgm_read_byte_near(&fontData[4]); + last = pgm_read_byte_near(&fontData[5]); +*/ + if (unicode < first) return; + if (unicode > LAST_ASCII_CHAR) { + if (unicode > lastUnicode || unicode < firstUnicode) { + unicode = '?'; // unicode is in extended range ad not supported by this font, draw a '?' + } + else { + unicode = unicode - firstUnicode + LAST_ASCII_CHAR + 1; // unicode is in extended range and supported by this font, calculate the corresponding font character index + } + } + + uint16_t chrIdx = unicode - first; + + CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; // TODO: move this to FX and pass the palette + //const uint8_t* bitmapData = fontData + 10; // data starts after 10-byte header TODO: add skip over width table if present (flags & 0x01) + + // calculate offset by counting bytes for each glyph + uint32_t bitmapDataOffset = FONT_HEADER_SIZE + numGlyphs; // start of bitmap data (after header and width table) + for (int i = 0; i < chrIdx; i++) { + uint32_t numbits = widthTable[i] * h; + uint32_t numbytes = (numbits + 7) / 8; // Calculate padding-inclusive byte size + bitmapDataOffset += numbytes; + } + + // bytes per glyph + w = widthTable[chrIdx]; // actual width of this character + uint16_t bitsPerChar = (uint32_t)w * h; // todo use 16bit math make sure large fonts do not overflow + uint16_t bytesPerChar = (bitsPerChar + 7) / 8; // Calculate padding-inclusive byte size + //Serial.printf("Drawing char %u (index %u): w=%u, h=%u, bits=%u, bytes=%u\n", unicode, chrIdx, widthTable[chrIdx], h, bitsPerChar, bytesPerChar); + + // Jump to the start of this specific character's data block + //const uint8_t* charData = bitmapData + (chrIdx * bytesPerChar); + uint8_t charData[bytesPerChar]; + fontFile.seek(bitmapDataOffset); // Move file pointer to the character's bitmap data (skip header and width table) + fontFile.read(charData, bytesPerChar); // Read the character's bitmap data into + // draw glyph from top left to bottom right, row by row (packed format is MSB-first) + uint16_t bitIndex = 0; + for (int i = 0; i < h; i++) { // glyph height + CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); // NOBLEND is faster + + for (int j = 0; j < w; j++) { // glyph width + uint16_t bytePos = bitIndex >> 3; // locate the byte and the specific bit + uint8_t bitPos = 7 - (bitIndex & 0x07); // MSB-first bit position within the byte + //uint8_t byteVal = pgm_read_byte_near(&charData[bytePos]); + uint8_t byteVal = charData[bytePos]; + bool bitSet = (byteVal >> bitPos) & 1; + bitIndex++; + + if (bitSet) { + int x0, y0; + // Rotation Logic + /* + switch (rotate) { + case -1: x0 = x + (h-1) - i; y0 = y + (w-1) - j; break; // -90 deg + case -2: + case 2: x0 = x + j; y0 = y + (h-1) - i; break; // 180 deg + case 1: x0 = x + i; y0 = y + j; break; // +90 deg + default: x0 = x + (w-1) - j; y0 = i + y; break; // no rotation + }*/ + switch (rotate) { + case -1: x0 = x + (h-1) - i; y0 = y + j; break; // -90 deg + case -2: + case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; // 180 deg + case 1: x0 = x + i; y0 = y + (w-1) - j; break; // +90 deg + default: x0 = x + j; y0 = y + i; break; // No rotation + } + + if (x0 >= 0 && x0 < (int)vWidth() && y0 >= 0 && y0 < (int)vHeight()) { + setPixelColorXYRaw(x0, y0, c.color32); + } + } + } + } } #define WU_WEIGHT(a,b) ((uint8_t) (((a)*(b)+(a)+(b))>>8)) diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index 84b6da9e61..2257ff5f34 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -409,6 +409,8 @@ size_t printSetFormIndex(Print& settingsScript, const char* key, int index); size_t printSetClassElementHTML(Print& settingsScript, const char* key, const int index, const char* val); void prepareHostname(char* hostname); [[gnu::pure]] bool isAsterisksOnly(const char* str, byte maxLen); +uint32_t utf8_decode(const char *s, uint8_t *len); +size_t utf8_strlen(const char *s); bool requestJSONBufferLock(uint8_t moduleID=JSON_LOCK_UNKNOWN); void releaseJSONBufferLock(); uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLen); diff --git a/wled00/json.cpp b/wled00/json.cpp index 15b7f75922..9873fbccf7 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -142,6 +142,21 @@ static bool deserializeSegment(JsonObject elem, byte it, byte presetId = 0) if (elem["n"]) { // name field exists const char * name = elem["n"].as(); + // print chars as hex + for (size_t i = 0; name && name[i] != '\0'; i++) { + Serial.print(name[i], HEX); + Serial.print(' '); + } + Serial.println(); + // print utf-8 decoded code points + size_t i = 0; + while (i < strlen(name)) { + uint8_t charLen; + uint32_t codePoint = utf8_decode(&name[i], &charLen); + Serial.print("U+"); + Serial.println(codePoint, HEX); + i += charLen; + } seg.setName(name); // will resolve empty and null correctly } else if (start != seg.start || stop != seg.stop) { // clearing or setting segment without name field diff --git a/wled00/src/font/console_font_4x6.h b/wled00/src/font/console_font_4x6.h index f3cc1dc44f..08546fb571 100644 --- a/wled00/src/font/console_font_4x6.h +++ b/wled00/src/font/console_font_4x6.h @@ -1,2566 +1,300 @@ // font courtesy of https://github.com/idispatch/raster-fonts -static const unsigned char console_font_4x6[] PROGMEM = { // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion - // /* - // * code=0, hex=0x00, ascii="^@" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=1, hex=0x01, ascii="^A" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=2, hex=0x02, ascii="^B" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=3, hex=0x03, ascii="^C" - // */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=4, hex=0x04, ascii="^D" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=5, hex=0x05, ascii="^E" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=6, hex=0x06, ascii="^F" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=7, hex=0x07, ascii="^G" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=8, hex=0x08, ascii="^H" - // */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xD0, /* 1101 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - - // /* - // * code=9, hex=0x09, ascii="^I" - // */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=10, hex=0x0A, ascii="^J" - // */ - // 0xF0, /* 1111 */ - // 0x80, /* 1000 */ - // 0xA0, /* 1010 */ - // 0x80, /* 1000 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - - // /* - // * code=11, hex=0x0B, ascii="^K" - // */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x10, /* 0001 */ - // 0x60, /* 0110 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - - // /* - // * code=12, hex=0x0C, ascii="^L" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=13, hex=0x0D, ascii="^M" - // */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - - // /* - // * code=14, hex=0x0E, ascii="^N" - // */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=15, hex=0x0F, ascii="^O" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=16, hex=0x10, ascii="^P" - // */ - // 0x40, /* 0100 */ - // 0x60, /* 0110 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x40, /* 0100 */ - // 0x00, /* 0000 */ - - // /* - // * code=17, hex=0x11, ascii="^Q" - // */ - // 0x10, /* 0001 */ - // 0x30, /* 0011 */ - // 0x70, /* 0111 */ - // 0x30, /* 0011 */ - // 0x10, /* 0001 */ - // 0x00, /* 0000 */ - - // /* - // * code=18, hex=0x12, ascii="^R" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=19, hex=0x13, ascii="^S" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=20, hex=0x14, ascii="^T" - // */ - // 0x70, /* 0111 */ - // 0xD0, /* 1101 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=21, hex=0x15, ascii="^U" - // */ - // 0x30, /* 0011 */ - // 0x60, /* 0110 */ - // 0x50, /* 0101 */ - // 0x30, /* 0011 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - - // /* - // * code=22, hex=0x16, ascii="^V" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=23, hex=0x17, ascii="^W" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - - // /* - // * code=24, hex=0x18, ascii="^X" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=25, hex=0x19, ascii="^Y" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=26, hex=0x1A, ascii="^Z" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0xF0, /* 1111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=27, hex=0x1B, ascii="^[" - // */ - // 0x00, /* 0000 */ - // 0x40, /* 0100 */ - // 0xF0, /* 1111 */ - // 0x40, /* 0100 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=28, hex=0x1C, ascii="^\" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=29, hex=0x1D, ascii="^]" - // */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=30, hex=0x1E, ascii="^^" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=31, hex=0x1F, ascii="^_" - // */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - /* - * code=32, hex=0x20, ascii=" " - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=33, hex=0x21, ascii="!" - */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=34, hex=0x22, ascii=""" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=35, hex=0x23, ascii="#" - */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=36, hex=0x24, ascii="$" - */ - 0x20, /* 0010 */ - 0x30, /* 0011 */ - 0x60, /* 0110 */ - 0x30, /* 0011 */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - - /* - * code=37, hex=0x25, ascii="%" - */ - 0x40, /* 0100 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x10, /* 0001 */ - 0x00, /* 0000 */ - - /* - * code=38, hex=0x26, ascii="&" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x30, /* 0011 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=39, hex=0x27, ascii="'" - */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=40, hex=0x28, ascii="(" - */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=41, hex=0x29, ascii=")" - */ - 0x40, /* 0100 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=42, hex=0x2A, ascii="*" - */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=43, hex=0x2B, ascii="+" - */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=44, hex=0x2C, ascii="," - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - - /* - * code=45, hex=0x2D, ascii="-" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=46, hex=0x2E, ascii="." - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=47, hex=0x2F, ascii="/" - */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=48, hex=0x30, ascii="0" - */ - 0x30, /* 0011 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=49, hex=0x31, ascii="1" - */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=50, hex=0x32, ascii="2" - */ - 0x60, /* 0110 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=51, hex=0x33, ascii="3" - */ - 0x60, /* 0110 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x10, /* 0001 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=52, hex=0x34, ascii="4" - */ - 0x10, /* 0001 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x00, /* 0000 */ - - /* - * code=53, hex=0x35, ascii="5" - */ - 0x70, /* 0111 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x10, /* 0001 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=54, hex=0x36, ascii="6" - */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=55, hex=0x37, ascii="7" - */ - 0x70, /* 0111 */ - 0x10, /* 0001 */ - 0x30, /* 0011 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=56, hex=0x38, ascii="8" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=57, hex=0x39, ascii="9" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x30, /* 0011 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=58, hex=0x3A, ascii=":" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=59, hex=0x3B, ascii=";" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - - /* - * code=60, hex=0x3C, ascii="<" - */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x20, /* 0010 */ - 0x10, /* 0001 */ - 0x00, /* 0000 */ - - /* - * code=61, hex=0x3D, ascii="=" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=62, hex=0x3E, ascii=">" - */ - 0x40, /* 0100 */ - 0x20, /* 0010 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=63, hex=0x3F, ascii="?" - */ - 0x60, /* 0110 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=64, hex=0x40, ascii="@" - */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=65, hex=0x41, ascii="A" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=66, hex=0x42, ascii="B" - */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=67, hex=0x43, ascii="C" - */ - 0x30, /* 0011 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=68, hex=0x44, ascii="D" - */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=69, hex=0x45, ascii="E" - */ - 0x70, /* 0111 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=70, hex=0x46, ascii="F" - */ - 0x70, /* 0111 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=71, hex=0x47, ascii="G" - */ - 0x30, /* 0011 */ - 0x40, /* 0100 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=72, hex=0x48, ascii="H" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=73, hex=0x49, ascii="I" - */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=74, hex=0x4A, ascii="J" - */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=75, hex=0x4B, ascii="K" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=76, hex=0x4C, ascii="L" - */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=77, hex=0x4D, ascii="M" - */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=78, hex=0x4E, ascii="N" - */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=79, hex=0x4F, ascii="O" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=80, hex=0x50, ascii="P" - */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=81, hex=0x51, ascii="Q" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=82, hex=0x52, ascii="R" - */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=83, hex=0x53, ascii="S" - */ - 0x30, /* 0011 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x10, /* 0001 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=84, hex=0x54, ascii="T" - */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=85, hex=0x55, ascii="U" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=86, hex=0x56, ascii="V" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=87, hex=0x57, ascii="W" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=88, hex=0x58, ascii="X" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=89, hex=0x59, ascii="Y" - */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=90, hex=0x5A, ascii="Z" - */ - 0x70, /* 0111 */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=91, hex=0x5B, ascii="[" - */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=92, hex=0x5C, ascii="\" - */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x20, /* 0010 */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x00, /* 0000 */ - - /* - * code=93, hex=0x5D, ascii="]" - */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=94, hex=0x5E, ascii="^" - */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=95, hex=0x5F, ascii="_" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0xF0, /* 1111 */ - - /* - * code=96, hex=0x60, ascii="`" - */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - /* - * code=97, hex=0x61, ascii="a" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x30, /* 0011 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=98, hex=0x62, ascii="b" - */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=99, hex=0x63, ascii="c" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x30, /* 0011 */ - 0x40, /* 0100 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=100, hex=0x64, ascii="d" - */ - 0x10, /* 0001 */ - 0x10, /* 0001 */ - 0x30, /* 0011 */ - 0x50, /* 0101 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=101, hex=0x65, ascii="e" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x60, /* 0110 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=102, hex=0x66, ascii="f" - */ - 0x10, /* 0001 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=103, hex=0x67, ascii="g" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x10, /* 0001 */ - 0x70, /* 0111 */ - - /* - * code=104, hex=0x68, ascii="h" - */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=105, hex=0x69, ascii="i" - */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=106, hex=0x6A, ascii="j" - */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - - /* - * code=107, hex=0x6B, ascii="k" - */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=108, hex=0x6C, ascii="l" - */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=109, hex=0x6D, ascii="m" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x70, /* 0111 */ - 0x70, /* 0111 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=110, hex=0x6E, ascii="n" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=111, hex=0x6F, ascii="o" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=112, hex=0x70, ascii="p" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x50, /* 0101 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - - /* - * code=113, hex=0x71, ascii="q" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x30, /* 0011 */ - 0x50, /* 0101 */ - 0x30, /* 0011 */ - 0x10, /* 0001 */ - - /* - * code=114, hex=0x72, ascii="r" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x40, /* 0100 */ - 0x40, /* 0100 */ - 0x00, /* 0000 */ - - /* - * code=115, hex=0x73, ascii="s" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x30, /* 0011 */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=116, hex=0x74, ascii="t" - */ - 0x00, /* 0000 */ - 0x20, /* 0010 */ - 0x70, /* 0111 */ - 0x20, /* 0010 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=117, hex=0x75, ascii="u" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=118, hex=0x76, ascii="v" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=119, hex=0x77, ascii="w" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x50, /* 0101 */ - 0x70, /* 0111 */ - 0x70, /* 0111 */ - 0x00, /* 0000 */ - - /* - * code=120, hex=0x78, ascii="x" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x50, /* 0101 */ - 0x00, /* 0000 */ - - /* - * code=121, hex=0x79, ascii="y" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x50, /* 0101 */ - 0x50, /* 0101 */ - 0x20, /* 0010 */ - 0x40, /* 0100 */ - - /* - * code=122, hex=0x7A, ascii="z" - */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=123, hex=0x7B, ascii="{" - */ - 0x30, /* 0011 */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x30, /* 0011 */ - 0x00, /* 0000 */ - - /* - * code=124, hex=0x7C, ascii="|" - */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x20, /* 0010 */ - 0x00, /* 0000 */ - - /* - * code=125, hex=0x7D, ascii="}" - */ - 0x60, /* 0110 */ - 0x20, /* 0010 */ - 0x30, /* 0011 */ - 0x20, /* 0010 */ - 0x60, /* 0110 */ - 0x00, /* 0000 */ - - /* - * code=126, hex=0x7E, ascii="~" - */ - 0x50, /* 0101 */ - 0xA0, /* 1010 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - 0x00, /* 0000 */ - - // /* - // * code=127, hex=0x7F, ascii="^?" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (10 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 6 + * [2] Fixed/max glyph width: 4 + // spacing between cars (fixed to 1) + * [3] Flags: 0x00 (fixed width) + * [4] First Char: 32 + * [5] Last Char: 126 + * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 + * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of the stream, padding bits are added if necessary to fill the last byte + */ - // /* - // * code=128, hex=0x80, ascii="!^@" - // */ - // 0x30, /* 0011 */ - // 0x40, /* 0100 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - - // /* - // * code=129, hex=0x81, ascii="!^A" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=130, hex=0x82, ascii="!^B" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=131, hex=0x83, ascii="!^C" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=132, hex=0x84, ascii="!^D" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=133, hex=0x85, ascii="!^E" - // */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=134, hex=0x86, ascii="!^F" - // */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=135, hex=0x87, ascii="!^G" - // */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x60, /* 0110 */ - - // /* - // * code=136, hex=0x88, ascii="!^H" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=137, hex=0x89, ascii="!^I" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=138, hex=0x8A, ascii="!^J" - // */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=139, hex=0x8B, ascii="!^K" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=140, hex=0x8C, ascii="!^L" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=141, hex=0x8D, ascii="!^M" - // */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=142, hex=0x8E, ascii="!^N" - // */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=143, hex=0x8F, ascii="!^O" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=144, hex=0x90, ascii="!^P" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=145, hex=0x91, ascii="!^Q" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - - // /* - // * code=146, hex=0x92, ascii="!^R" - // */ - // 0x30, /* 0011 */ - // 0x60, /* 0110 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=147, hex=0x93, ascii="!^S" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=148, hex=0x94, ascii="!^T" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=149, hex=0x95, ascii="!^U" - // */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=150, hex=0x96, ascii="!^V" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=151, hex=0x97, ascii="!^W" - // */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=152, hex=0x98, ascii="!^X" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - - // /* - // * code=153, hex=0x99, ascii="!^Y" - // */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=154, hex=0x9A, ascii="!^Z" - // */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=155, hex=0x9B, ascii="!^[" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=156, hex=0x9C, ascii="!^\" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=157, hex=0x9D, ascii="!^]" - // */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=158, hex=0x9E, ascii="!^^" - // */ - // 0x00, /* 0000 */ - // 0x60, /* 0110 */ - // 0x60, /* 0110 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=159, hex=0x9F, ascii="!^_" - // */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - - // /* - // * code=160, hex=0xA0, ascii="! " - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=161, hex=0xA1, ascii="!!" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=162, hex=0xA2, ascii="!"" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=163, hex=0xA3, ascii="!#" - // */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=164, hex=0xA4, ascii="!$" - // */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=165, hex=0xA5, ascii="!%" - // */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=166, hex=0xA6, ascii="!&" - // */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=167, hex=0xA7, ascii="!'" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=168, hex=0xA8, ascii="!(" - // */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=169, hex=0xA9, ascii="!)" - // */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x40, /* 0100 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=170, hex=0xAA, ascii="!*" - // */ - // 0x00, /* 0000 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=171, hex=0xAB, ascii="!+" - // */ - // 0x40, /* 0100 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=172, hex=0xAC, ascii="!," - // */ - // 0x40, /* 0100 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x10, /* 0001 */ - // 0x00, /* 0000 */ - - // /* - // * code=173, hex=0xAD, ascii="!-" - // */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=174, hex=0xAE, ascii="!." - // */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=175, hex=0xAF, ascii="!/" - // */ - // 0x00, /* 0000 */ - // 0xA0, /* 1010 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=176, hex=0xB0, ascii="!0" - // */ - // 0x40, /* 0100 */ - // 0x10, /* 0001 */ - // 0x40, /* 0100 */ - // 0x10, /* 0001 */ - // 0x40, /* 0100 */ - // 0x10, /* 0001 */ - - // /* - // * code=177, hex=0xB1, ascii="!1" - // */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - - // /* - // * code=178, hex=0xB2, ascii="!2" - // */ - // 0xB0, /* 1011 */ - // 0xE0, /* 1110 */ - // 0xB0, /* 1011 */ - // 0xE0, /* 1110 */ - // 0xB0, /* 1011 */ - // 0xE0, /* 1110 */ - - // /* - // * code=179, hex=0xB3, ascii="!3" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=180, hex=0xB4, ascii="!4" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=181, hex=0xB5, ascii="!5" - // */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=182, hex=0xB6, ascii="!6" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=183, hex=0xB7, ascii="!7" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=184, hex=0xB8, ascii="!8" - // */ - // 0x00, /* 0000 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=185, hex=0xB9, ascii="!9" - // */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x10, /* 0001 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=186, hex=0xBA, ascii="!:" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=187, hex=0xBB, ascii="!;" - // */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x10, /* 0001 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=188, hex=0xBC, ascii="!<" - // */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x10, /* 0001 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=189, hex=0xBD, ascii="!=" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=190, hex=0xBE, ascii="!>" - // */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=191, hex=0xBF, ascii="!?" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xE0, /* 1110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=192, hex=0xC0, ascii="!@" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=193, hex=0xC1, ascii="!A" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=194, hex=0xC2, ascii="!B" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=195, hex=0xC3, ascii="!C" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=196, hex=0xC4, ascii="!D" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=197, hex=0xC5, ascii="!E" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0xF0, /* 1111 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=198, hex=0xC6, ascii="!F" - // */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=199, hex=0xC7, ascii="!G" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=200, hex=0xC8, ascii="!H" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=201, hex=0xC9, ascii="!I" - // */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=202, hex=0xCA, ascii="!J" - // */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=203, hex=0xCB, ascii="!K" - // */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=204, hex=0xCC, ascii="!L" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x40, /* 0100 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=205, hex=0xCD, ascii="!M" - // */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=206, hex=0xCE, ascii="!N" - // */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x00, /* 0000 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=207, hex=0xCF, ascii="!O" - // */ - // 0x20, /* 0010 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=208, hex=0xD0, ascii="!P" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=209, hex=0xD1, ascii="!Q" - // */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=210, hex=0xD2, ascii="!R" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=211, hex=0xD3, ascii="!S" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=212, hex=0xD4, ascii="!T" - // */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=213, hex=0xD5, ascii="!U" - // */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=214, hex=0xD6, ascii="!V" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=215, hex=0xD7, ascii="!W" - // */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0xD0, /* 1101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - - // /* - // * code=216, hex=0xD8, ascii="!X" - // */ - // 0x20, /* 0010 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=217, hex=0xD9, ascii="!Y" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0xE0, /* 1110 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=218, hex=0xDA, ascii="!Z" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=219, hex=0xDB, ascii="![" - // */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - - // /* - // * code=220, hex=0xDC, ascii="!\" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - - // /* - // * code=221, hex=0xDD, ascii="!]" - // */ - // 0xC0, /* 1100 */ - // 0xC0, /* 1100 */ - // 0xC0, /* 1100 */ - // 0xC0, /* 1100 */ - // 0xC0, /* 1100 */ - // 0xC0, /* 1100 */ - - // /* - // * code=222, hex=0xDE, ascii="!^" - // */ - // 0x30, /* 0011 */ - // 0x30, /* 0011 */ - // 0x30, /* 0011 */ - // 0x30, /* 0011 */ - // 0x30, /* 0011 */ - // 0x30, /* 0011 */ - - // /* - // * code=223, hex=0xDF, ascii="!_" - // */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0xF0, /* 1111 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=224, hex=0xE0, ascii="!`" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x60, /* 0110 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=225, hex=0xE1, ascii="!a" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x60, /* 0110 */ - // 0x50, /* 0101 */ - // 0x60, /* 0110 */ - // 0x40, /* 0100 */ - - // /* - // * code=226, hex=0xE2, ascii="!b" - // */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x40, /* 0100 */ - // 0x40, /* 0100 */ - // 0x40, /* 0100 */ - // 0x00, /* 0000 */ - - // /* - // * code=227, hex=0xE3, ascii="!c" - // */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=228, hex=0xE4, ascii="!d" - // */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=229, hex=0xE5, ascii="!e" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x30, /* 0011 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=230, hex=0xE6, ascii="!f" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - - // /* - // * code=231, hex=0xE7, ascii="!g" - // */ - // 0x00, /* 0000 */ - // 0x10, /* 0001 */ - // 0x60, /* 0110 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=232, hex=0xE8, ascii="!h" - // */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=233, hex=0xE9, ascii="!i" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=234, hex=0xEA, ascii="!j" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=235, hex=0xEB, ascii="!k" - // */ - // 0x30, /* 0011 */ - // 0x40, /* 0100 */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=236, hex=0xEC, ascii="!l" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=237, hex=0xED, ascii="!m" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=238, hex=0xEE, ascii="!n" - // */ - // 0x30, /* 0011 */ - // 0x40, /* 0100 */ - // 0x70, /* 0111 */ - // 0x40, /* 0100 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - - // /* - // * code=239, hex=0xEF, ascii="!o" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - - // /* - // * code=240, hex=0xF0, ascii="!p" - // */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=241, hex=0xF1, ascii="!q" - // */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=242, hex=0xF2, ascii="!r" - // */ - // 0x60, /* 0110 */ - // 0x10, /* 0001 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=243, hex=0xF3, ascii="!s" - // */ - // 0x30, /* 0011 */ - // 0x40, /* 0100 */ - // 0x30, /* 0011 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - - // /* - // * code=244, hex=0xF4, ascii="!t" - // */ - // 0x00, /* 0000 */ - // 0x10, /* 0001 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - - // /* - // * code=245, hex=0xF5, ascii="!u" - // */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - // 0x00, /* 0000 */ - - // /* - // * code=246, hex=0xF6, ascii="!v" - // */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x70, /* 0111 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=247, hex=0xF7, ascii="!w" - // */ - // 0x00, /* 0000 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x50, /* 0101 */ - // 0xA0, /* 1010 */ - // 0x00, /* 0000 */ - - // /* - // * code=248, hex=0xF8, ascii="!x" - // */ - // 0x20, /* 0010 */ - // 0x50, /* 0101 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=249, hex=0xF9, ascii="!y" - // */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x70, /* 0111 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=250, hex=0xFA, ascii="!z" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=251, hex=0xFB, ascii="!{" - // */ - // 0x30, /* 0011 */ - // 0x20, /* 0010 */ - // 0x20, /* 0010 */ - // 0x60, /* 0110 */ - // 0x20, /* 0010 */ - // 0x00, /* 0000 */ - - // /* - // * code=252, hex=0xFC, ascii="!|" - // */ - // 0x70, /* 0111 */ - // 0x50, /* 0101 */ - // 0x50, /* 0101 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=253, hex=0xFD, ascii="!}" - // */ - // 0x60, /* 0110 */ - // 0x20, /* 0010 */ - // 0x40, /* 0100 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=254, hex=0xFE, ascii="!~" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x60, /* 0110 */ - // 0x60, /* 0110 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - - // /* - // * code=255, hex=0xFF, ascii="!^Ÿ" - // */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ - // 0x00, /* 0000 */ +static const unsigned char console_font_4x6[] PROGMEM = { + 0x57, 0x06, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset (32bit) + + // 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x25, 0x75, 0x20, // /* code=1, hex=0x01, ascii="^A" */ + // 0x27, 0x57, 0x20, // /* code=2, hex=0x02, ascii="^B" */ + // 0x05, 0x77, 0x20, // /* code=3, hex=0x03, ascii="^C" */ + // 0x02, 0x77, 0x20, // /* code=4, hex=0x04, ascii="^D" */ + // 0x27, 0x72, 0x70, // /* code=5, hex=0x05, ascii="^E" */ + // 0x22, 0x72, 0x70, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x20, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xDF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x07, 0x57, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xF8, 0xA8, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x03, 0x16, 0x60, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x25, 0x27, 0x20, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x23, 0x22, 0x60, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x23, 0x51, 0x20, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x27, 0x57, 0x20, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x46, 0x76, 0x40, // /* code=16, hex=0x10, ascii="^P" */ + // 0x13, 0x73, 0x10, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x27, 0x27, 0x20, // /* code=18, hex=0x12, ascii="^R" */ + // 0x55, 0x50, 0x50, // /* code=19, hex=0x13, ascii="^S" */ + // 0x7D, 0xD5, 0x50, // /* code=20, hex=0x14, ascii="^T" */ + // 0x36, 0x53, 0x60, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x70, // /* code=22, hex=0x16, ascii="^V" */ + // 0x27, 0x27, 0x27, // /* code=23, hex=0x17, ascii="^W" */ + // 0x27, 0x22, 0x20, // /* code=24, hex=0x18, ascii="^X" */ + // 0x22, 0x27, 0x20, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x02, 0xF2, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x04, 0xF4, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x47, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x05, 0x75, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x02, 0x77, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x07, 0x72, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x22, 0x20, 0x20, /* code=33, hex=0x21, ascii="!" */ + 0x55, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x57, 0x57, 0x50, /* code=35, hex=0x23, ascii="#" */ + 0x23, 0x63, 0x62, /* code=36, hex=0x24, ascii="$" */ + 0x41, 0x24, 0x10, /* code=37, hex=0x25, ascii="%" */ + 0x25, 0x35, 0x70, /* code=38, hex=0x26, ascii="&" */ + 0x64, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x24, 0x44, 0x20, /* code=40, hex=0x28, ascii="(" */ + 0x42, 0x22, 0x40, /* code=41, hex=0x29, ascii=")" */ + 0x52, 0x72, 0x50, /* code=42, hex=0x2A, ascii="*" */ + 0x02, 0x72, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x64, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x70, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x20, /* code=46, hex=0x2E, ascii="." */ + 0x11, 0x24, 0x40, /* code=47, hex=0x2F, ascii="/" */ + 0x35, 0x55, 0x60, /* code=48, hex=0x30, ascii="0" */ + 0x26, 0x22, 0x70, /* code=49, hex=0x31, ascii="1" */ + 0x61, 0x24, 0x70, /* code=50, hex=0x32, ascii="2" */ + 0x61, 0x21, 0x60, /* code=51, hex=0x33, ascii="3" */ + 0x15, 0x71, 0x10, /* code=52, hex=0x34, ascii="4" */ + 0x74, 0x61, 0x60, /* code=53, hex=0x35, ascii="5" */ + 0x24, 0x65, 0x20, /* code=54, hex=0x36, ascii="6" */ + 0x71, 0x32, 0x20, /* code=55, hex=0x37, ascii="7" */ + 0x25, 0x25, 0x20, /* code=56, hex=0x38, ascii="8" */ + 0x25, 0x31, 0x20, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x20, 0x20, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x20, 0x64, /* code=59, hex=0x3B, ascii=";" */ + 0x12, 0x42, 0x10, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x70, 0x70, /* code=61, hex=0x3D, ascii="=" */ + 0x42, 0x12, 0x40, /* code=62, hex=0x3E, ascii=">" */ + 0x61, 0x20, 0x20, /* code=63, hex=0x3F, ascii="?" */ + 0x75, 0x54, 0x70, /* code=64, hex=0x40, ascii="@" */ + 0x25, 0x75, 0x50, /* code=65, hex=0x41, ascii="A" */ + 0x65, 0x65, 0x60, /* code=66, hex=0x42, ascii="B" */ + 0x34, 0x44, 0x30, /* code=67, hex=0x43, ascii="C" */ + 0x65, 0x55, 0x60, /* code=68, hex=0x44, ascii="D" */ + 0x74, 0x64, 0x70, /* code=69, hex=0x45, ascii="E" */ + 0x74, 0x64, 0x40, /* code=70, hex=0x46, ascii="F" */ + 0x34, 0x55, 0x30, /* code=71, hex=0x47, ascii="G" */ + 0x55, 0x75, 0x50, /* code=72, hex=0x48, ascii="H" */ + 0x72, 0x22, 0x70, /* code=73, hex=0x49, ascii="I" */ + 0x11, 0x15, 0x20, /* code=74, hex=0x4A, ascii="J" */ + 0x55, 0x65, 0x50, /* code=75, hex=0x4B, ascii="K" */ + 0x44, 0x44, 0x70, /* code=76, hex=0x4C, ascii="L" */ + 0x57, 0x75, 0x50, /* code=77, hex=0x4D, ascii="M" */ + 0x57, 0x55, 0x50, /* code=78, hex=0x4E, ascii="N" */ + 0x25, 0x55, 0x20, /* code=79, hex=0x4F, ascii="O" */ + 0x65, 0x64, 0x40, /* code=80, hex=0x50, ascii="P" */ + 0x25, 0x57, 0x30, /* code=81, hex=0x51, ascii="Q" */ + 0x65, 0x65, 0x50, /* code=82, hex=0x52, ascii="R" */ + 0x34, 0x71, 0x60, /* code=83, hex=0x53, ascii="S" */ + 0x72, 0x22, 0x20, /* code=84, hex=0x54, ascii="T" */ + 0x55, 0x55, 0x70, /* code=85, hex=0x55, ascii="U" */ + 0x55, 0x55, 0x20, /* code=86, hex=0x56, ascii="V" */ + 0x55, 0x77, 0x50, /* code=87, hex=0x57, ascii="W" */ + 0x55, 0x25, 0x50, /* code=88, hex=0x58, ascii="X" */ + 0x55, 0x22, 0x20, /* code=89, hex=0x59, ascii="Y" */ + 0x71, 0x24, 0x70, /* code=90, hex=0x5A, ascii="Z" */ + 0x64, 0x44, 0x60, /* code=91, hex=0x5B, ascii="[" */ + 0x44, 0x21, 0x10, /* code=92, hex=0x5C, ascii="\" */ + 0x62, 0x22, 0x60, /* code=93, hex=0x5D, ascii="]" */ + 0x25, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x0F, /* code=95, hex=0x5F, ascii="_" */ + 0x62, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x35, 0x70, /* code=97, hex=0x61, ascii="a" */ + 0x44, 0x65, 0x60, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x34, 0x30, /* code=99, hex=0x63, ascii="c" */ + 0x11, 0x35, 0x30, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x76, 0x30, /* code=101, hex=0x65, ascii="e" */ + 0x12, 0x72, 0x20, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x75, 0x17, /* code=103, hex=0x67, ascii="g" */ + 0x44, 0x65, 0x50, /* code=104, hex=0x68, ascii="h" */ + 0x20, 0x22, 0x20, /* code=105, hex=0x69, ascii="i" */ + 0x20, 0x22, 0x26, /* code=106, hex=0x6A, ascii="j" */ + 0x44, 0x56, 0x50, /* code=107, hex=0x6B, ascii="k" */ + 0x22, 0x22, 0x20, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x77, 0x50, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x65, 0x50, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x25, 0x20, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x65, 0x64, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x35, 0x31, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x64, 0x40, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x32, 0x60, /* code=115, hex=0x73, ascii="s" */ + 0x02, 0x72, 0x30, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x55, 0x70, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x55, 0x20, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x57, 0x70, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x52, 0x50, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x55, 0x24, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x62, 0x30, /* code=122, hex=0x7A, ascii="z" */ + 0x32, 0x62, 0x30, /* code=123, hex=0x7B, ascii="{" */ + 0x22, 0x22, 0x20, /* code=124, hex=0x7C, ascii="|" */ + 0x62, 0x32, 0x60, /* code=125, hex=0x7D, ascii="}" */ + 0x5A, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x02, 0x57, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x34, 0x47, 0x24, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x50, 0x55, 0x30, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x12, 0x76, 0x30, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x25, 0x35, 0x70, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x50, 0x35, 0x70, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x42, 0x35, 0x70, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x20, 0x35, 0x70, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x07, 0x47, 0x26, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x25, 0x76, 0x30, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x50, 0x76, 0x30, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x42, 0x76, 0x30, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x50, 0x22, 0x20, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x25, 0x02, 0x20, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x42, 0x02, 0x20, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x52, 0x57, 0x50, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x22, 0x57, 0x50, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x12, 0x76, 0x70, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x37, 0x60, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x36, 0x76, 0x70, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x25, 0x25, 0x20, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x50, 0x25, 0x20, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x42, 0x25, 0x20, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x25, 0x05, 0x70, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x42, 0x55, 0x70, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x50, 0x55, 0x24, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x52, 0x55, 0x20, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x55, 0x70, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x27, 0x47, 0x20, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x12, 0x72, 0x70, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x57, 0x27, 0x20, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x65, 0x50, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x32, 0x32, 0x60, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x12, 0x35, 0x70, // /* code=160, hex=0xA0, ascii="! " */ + // 0x12, 0x02, 0x20, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x12, 0x75, 0x70, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x12, 0x05, 0x70, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x70, 0x75, 0x50, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x70, 0x57, 0x50, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x35, 0x70, 0x70, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x25, 0x20, 0x70, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x20, 0x24, 0x30, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x07, 0x44, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x0E, 0x22, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x45, 0x25, 0x30, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x45, 0x27, 0x10, // /* code=172, hex=0xAC, ascii="!," */ + // 0x20, 0x22, 0x20, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x05, 0xA5, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x0A, 0x5A, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x41, 0x41, 0x41, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x5A, 0x5A, 0x5A, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xBE, 0xBE, 0xBE, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x22, 0x22, 0x22, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x22, 0xE2, 0x22, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x2E, 0x2E, 0x22, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x55, 0xD5, 0x55, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0xF5, 0x55, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x0E, 0x2E, 0x22, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x5D, 0x1D, 0x55, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x55, 0x55, 0x55, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x0F, 0x1D, 0x55, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x5D, 0x1F, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x55, 0xF0, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x2E, 0x2E, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0xE2, 0x22, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x22, 0x30, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x22, 0xF0, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0xF2, 0x22, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x22, 0x32, 0x22, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0xF0, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x22, 0xF2, 0x22, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x23, 0x23, 0x22, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x55, 0x55, 0x55, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x55, 0x47, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x07, 0x45, 0x55, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x5D, 0x0F, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x0F, 0x0D, 0x55, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x55, 0x45, 0x55, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x0F, 0x0F, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x5D, 0x0D, 0x55, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x2F, 0x0F, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x55, 0xF0, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x0F, 0x0F, 0x22, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0xF5, 0x55, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x55, 0x70, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x23, 0x23, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x03, 0x23, 0x22, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x75, 0x55, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x55, 0xD5, 0x55, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x2F, 0x0F, 0x22, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x22, 0xE0, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x32, 0x22, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x0F, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xCC, 0xCC, 0xCC, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x33, 0x33, 0x33, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xF0, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x76, 0x70, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x25, 0x65, 0x64, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x75, 0x44, 0x40, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x75, 0x55, 0x50, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x74, 0x24, 0x70, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x35, 0x20, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x55, 0x74, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x01, 0x62, 0x20, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x72, 0x52, 0x70, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x25, 0x75, 0x20, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x02, 0x55, 0x50, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x34, 0x25, 0x20, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x75, 0x70, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x27, 0x57, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x34, 0x74, 0x30, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x25, 0x55, 0x50, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x70, 0x70, 0x70, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x27, 0x20, 0x70, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x61, 0x60, 0x70, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x34, 0x30, 0x70, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x01, 0x22, 0x22, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x22, 0x22, 0x40, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x20, 0x70, 0x20, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x05, 0xA5, 0xA0, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x25, 0x20, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x02, 0x72, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x20, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x32, 0x26, 0x20, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x75, 0x50, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x62, 0x46, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x66, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_5x12.h b/wled00/src/font/console_font_5x12.h index 4ea5641061..320e0f379d 100644 --- a/wled00/src/font/console_font_5x12.h +++ b/wled00/src/font/console_font_5x12.h @@ -1,4102 +1,299 @@ // font courtesy of https://github.com/idispatch/raster-fonts -static const unsigned char console_font_5x12[] PROGMEM = { // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion - // /* - // * code=0, hex=0x00, ascii="^@" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=1, hex=0x01, ascii="^A" - // */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0xD8, /* 11011 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0xD8, /* 11011 */ - // 0xA8, /* 10101 */ - // 0x88, /* 10001 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=2, hex=0x02, ascii="^B" - // */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xA8, /* 10101 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xA8, /* 10101 */ - // 0xD8, /* 11011 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=3, hex=0x03, ascii="^C" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=4, hex=0x04, ascii="^D" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=5, hex=0x05, ascii="^E" - // */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=6, hex=0x06, ascii="^F" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=7, hex=0x07, ascii="^G" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=8, hex=0x08, ascii="^H" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x98, /* 10011 */ - // 0x98, /* 10011 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=9, hex=0x09, ascii="^I" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=10, hex=0x0A, ascii="^J" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x88, /* 10001 */ - // 0xA8, /* 10101 */ - // 0xA8, /* 10101 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=11, hex=0x0B, ascii="^K" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x18, /* 00011 */ - // 0x28, /* 00101 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=12, hex=0x0C, ascii="^L" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0xE0, /* 11100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=13, hex=0x0D, ascii="^M" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x30, /* 00110 */ - // 0x30, /* 00110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0xC0, /* 11000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=14, hex=0x0E, ascii="^N" - // */ - // 0x30, /* 00110 */ - // 0x50, /* 01010 */ - // 0x70, /* 01110 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0xC0, /* 11000 */ - // 0xC0, /* 11000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=15, hex=0x0F, ascii="^O" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=16, hex=0x10, ascii="^P" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x80, /* 10000 */ - // 0xC0, /* 11000 */ - // 0xE0, /* 11100 */ - // 0xF0, /* 11110 */ - // 0xE0, /* 11100 */ - // 0xC0, /* 11000 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=17, hex=0x11, ascii="^Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0x30, /* 00110 */ - // 0x70, /* 01110 */ - // 0xF0, /* 11110 */ - // 0x70, /* 01110 */ - // 0x30, /* 00110 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=18, hex=0x12, ascii="^R" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=19, hex=0x13, ascii="^S" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=20, hex=0x14, ascii="^T" - // */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xD0, /* 11010 */ - // 0xD0, /* 11010 */ - // 0xD0, /* 11010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=21, hex=0x15, ascii="^U" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x80, /* 10000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x10, /* 00010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=22, hex=0x16, ascii="^V" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=23, hex=0x17, ascii="^W" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - - // /* - // * code=24, hex=0x18, ascii="^X" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=25, hex=0x19, ascii="^Y" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=26, hex=0x1A, ascii="^Z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0xF0, /* 11110 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=27, hex=0x1B, ascii="^[" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0xF0, /* 11110 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=28, hex=0x1C, ascii="^\" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=29, hex=0x1D, ascii="^]" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=30, hex=0x1E, ascii="^^" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=31, hex=0x1F, ascii="^_" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - /* - * code=32, hex=0x20, ascii=" " - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=33, hex=0x21, ascii="!" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=34, hex=0x22, ascii=""" - */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=35, hex=0x23, ascii="#" - */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0xF8, /* 11111 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0xF8, /* 11111 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=36, hex=0x24, ascii="$" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x80, /* 10000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=37, hex=0x25, ascii="%" - */ - 0x00, /* 00000 */ - 0xD0, /* 11010 */ - 0xD0, /* 11010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0xB0, /* 10110 */ - 0xB0, /* 10110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=38, hex=0x26, ascii="&" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0xA0, /* 10100 */ - 0xA0, /* 10100 */ - 0xA0, /* 10100 */ - 0x40, /* 01000 */ - 0xA8, /* 10101 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x68, /* 01101 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=39, hex=0x27, ascii="'" - */ - 0x30, /* 00110 */ - 0x30, /* 00110 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=40, hex=0x28, ascii="(" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=41, hex=0x29, ascii=")" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=42, hex=0x2A, ascii="*" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0xA8, /* 10101 */ - 0x70, /* 01110 */ - 0x70, /* 01110 */ - 0xA8, /* 10101 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=43, hex=0x2B, ascii="+" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0xF8, /* 11111 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=44, hex=0x2C, ascii="," - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - - /* - * code=45, hex=0x2D, ascii="-" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=46, hex=0x2E, ascii="." - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=47, hex=0x2F, ascii="/" - */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=48, hex=0x30, ascii="0" - */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=49, hex=0x31, ascii="1" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x60, /* 01100 */ - 0xA0, /* 10100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=50, hex=0x32, ascii="2" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=51, hex=0x33, ascii="3" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=52, hex=0x34, ascii="4" - */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x30, /* 00110 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=53, hex=0x35, ascii="5" - */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=54, hex=0x36, ascii="6" - */ - 0x00, /* 00000 */ - 0x30, /* 00110 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=55, hex=0x37, ascii="7" - */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=56, hex=0x38, ascii="8" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=57, hex=0x39, ascii="9" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0xC0, /* 11000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=58, hex=0x3A, ascii=":" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=59, hex=0x3B, ascii=";" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - - /* - * code=60, hex=0x3C, ascii="<" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=61, hex=0x3D, ascii="=" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=62, hex=0x3E, ascii=">" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=63, hex=0x3F, ascii="?" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=64, hex=0x40, ascii="@" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xB0, /* 10110 */ - 0xB0, /* 10110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=65, hex=0x41, ascii="A" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=66, hex=0x42, ascii="B" - */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=67, hex=0x43, ascii="C" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=68, hex=0x44, ascii="D" - */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=69, hex=0x45, ascii="E" - */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=70, hex=0x46, ascii="F" - */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=71, hex=0x47, ascii="G" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xB0, /* 10110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=72, hex=0x48, ascii="H" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=73, hex=0x49, ascii="I" - */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=74, hex=0x4A, ascii="J" - */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0xA0, /* 10100 */ - 0xA0, /* 10100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=75, hex=0x4B, ascii="K" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xA0, /* 10100 */ - 0xA0, /* 10100 */ - 0xC0, /* 11000 */ - 0xA0, /* 10100 */ - 0xA0, /* 10100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=76, hex=0x4C, ascii="L" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=77, hex=0x4D, ascii="M" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=78, hex=0x4E, ascii="N" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xD0, /* 11010 */ - 0xD0, /* 11010 */ - 0xB0, /* 10110 */ - 0xB0, /* 10110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=79, hex=0x4F, ascii="O" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=80, hex=0x50, ascii="P" - */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=81, hex=0x51, ascii="Q" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - - /* - * code=82, hex=0x52, ascii="R" - */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0xC0, /* 11000 */ - 0xA0, /* 10100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=83, hex=0x53, ascii="S" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x80, /* 10000 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=84, hex=0x54, ascii="T" - */ - 0x00, /* 00000 */ - 0xF8, /* 11111 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=85, hex=0x55, ascii="U" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=86, hex=0x56, ascii="V" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=87, hex=0x57, ascii="W" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=88, hex=0x58, ascii="X" - */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=89, hex=0x59, ascii="Y" - */ - 0x00, /* 00000 */ - 0x88, /* 10001 */ - 0x88, /* 10001 */ - 0x88, /* 10001 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=90, hex=0x5A, ascii="Z" - */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=91, hex=0x5B, ascii="[" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=92, hex=0x5C, ascii="\" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=93, hex=0x5D, ascii="]" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=94, hex=0x5E, ascii="^" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=95, hex=0x5F, ascii="_" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF8, /* 11111 */ - - /* - * code=96, hex=0x60, ascii="`" - */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=97, hex=0x61, ascii="a" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=98, hex=0x62, ascii="b" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=99, hex=0x63, ascii="c" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=100, hex=0x64, ascii="d" - */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=101, hex=0x65, ascii="e" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=102, hex=0x66, ascii="f" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0xE0, /* 11100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=103, hex=0x67, ascii="g" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - - /* - * code=104, hex=0x68, ascii="h" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=105, hex=0x69, ascii="i" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=106, hex=0x6A, ascii="j" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0xA0, /* 10100 */ - 0x40, /* 01000 */ - - /* - * code=107, hex=0x6B, ascii="k" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x90, /* 10010 */ - 0xA0, /* 10100 */ - 0xC0, /* 11000 */ - 0xC0, /* 11000 */ - 0xA0, /* 10100 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=108, hex=0x6C, ascii="l" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=109, hex=0x6D, ascii="m" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=110, hex=0x6E, ascii="n" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xA0, /* 10100 */ - 0xD0, /* 11010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=111, hex=0x6F, ascii="o" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=112, hex=0x70, ascii="p" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - - /* - * code=113, hex=0x71, ascii="q" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - - /* - * code=114, hex=0x72, ascii="r" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xB0, /* 10110 */ - 0x50, /* 01010 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=115, hex=0x73, ascii="s" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=116, hex=0x74, ascii="t" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0xE0, /* 11100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=117, hex=0x75, ascii="u" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=118, hex=0x76, ascii="v" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=119, hex=0x77, ascii="w" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=120, hex=0x78, ascii="x" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=121, hex=0x79, ascii="y" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0xE0, /* 11100 */ - - /* - * code=122, hex=0x7A, ascii="z" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=123, hex=0x7B, ascii="{" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=124, hex=0x7C, ascii="|" - */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=125, hex=0x7D, ascii="}" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=126, hex=0x7E, ascii="~" - */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0xA0, /* 10100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - // /* - // * code=127, hex=0x7F, ascii="^?" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (10 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 12 + * [2] Fixed glyph width: 5 + * [3] Flags: 0x00 (fixed width) + * [4] First Char: 32 + * [5] Last Char: 126 + * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 + * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of the stream, padding bits are added if necessary to fill the last byte + */ - // /* - // * code=128, hex=0x80, ascii="!^@" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - - // /* - // * code=129, hex=0x81, ascii="!^A" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=130, hex=0x82, ascii="!^B" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=131, hex=0x83, ascii="!^C" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=132, hex=0x84, ascii="!^D" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=133, hex=0x85, ascii="!^E" - // */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=134, hex=0x86, ascii="!^F" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=135, hex=0x87, ascii="!^G" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0xC0, /* 11000 */ - - // /* - // * code=136, hex=0x88, ascii="!^H" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=137, hex=0x89, ascii="!^I" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=138, hex=0x8A, ascii="!^J" - // */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=139, hex=0x8B, ascii="!^K" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=140, hex=0x8C, ascii="!^L" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=141, hex=0x8D, ascii="!^M" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=142, hex=0x8E, ascii="!^N" - // */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=143, hex=0x8F, ascii="!^O" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=144, hex=0x90, ascii="!^P" - // */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=145, hex=0x91, ascii="!^Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x28, /* 00101 */ - // 0x28, /* 00101 */ - // 0x70, /* 01110 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=146, hex=0x92, ascii="!^R" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xE0, /* 11100 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0xF0, /* 11110 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=147, hex=0x93, ascii="!^S" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=148, hex=0x94, ascii="!^T" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=149, hex=0x95, ascii="!^U" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=150, hex=0x96, ascii="!^V" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=151, hex=0x97, ascii="!^W" - // */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=152, hex=0x98, ascii="!^X" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x10, /* 00010 */ - // 0xE0, /* 11100 */ - - // /* - // * code=153, hex=0x99, ascii="!^Y" - // */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=154, hex=0x9A, ascii="!^Z" - // */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=155, hex=0x9B, ascii="!^[" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0x80, /* 10000 */ - // 0x88, /* 10001 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=156, hex=0x9C, ascii="!^\" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0xE0, /* 11100 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0xD0, /* 11010 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=157, hex=0x9D, ascii="!^]" - // */ - // 0x00, /* 00000 */ - // 0x88, /* 10001 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=158, hex=0x9E, ascii="!^^" - // */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xE0, /* 11100 */ - // 0x90, /* 10010 */ - // 0xB8, /* 10111 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=159, hex=0x9F, ascii="!^_" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0x40, /* 01000 */ - - // /* - // * code=160, hex=0xA0, ascii="! " - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=161, hex=0xA1, ascii="!!" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=162, hex=0xA2, ascii="!"" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=163, hex=0xA3, ascii="!#" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=164, hex=0xA4, ascii="!$" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0xA0, /* 10100 */ - // 0xD0, /* 11010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=165, hex=0xA5, ascii="!%" - // */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0xD0, /* 11010 */ - // 0xF0, /* 11110 */ - // 0xB0, /* 10110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=166, hex=0xA6, ascii="!&" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=167, hex=0xA7, ascii="!'" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=168, hex=0xA8, ascii="!(" - // */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=169, hex=0xA9, ascii="!)" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=170, hex=0xAA, ascii="!*" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x10, /* 00010 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=171, hex=0xAB, ascii="!+" - // */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0xA0, /* 10100 */ - // 0x30, /* 00110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=172, hex=0xAC, ascii="!," - // */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x50, /* 01010 */ - // 0xB0, /* 10110 */ - // 0xB0, /* 10110 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=173, hex=0xAD, ascii="!-" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=174, hex=0xAE, ascii="!." - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=175, hex=0xAF, ascii="!/" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=176, hex=0xB0, ascii="!0" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - - // /* - // * code=177, hex=0xB1, ascii="!1" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0xA8, /* 10101 */ - - // /* - // * code=178, hex=0xB2, ascii="!2" - // */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - - // /* - // * code=179, hex=0xB3, ascii="!3" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=180, hex=0xB4, ascii="!4" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=181, hex=0xB5, ascii="!5" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=182, hex=0xB6, ascii="!6" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=183, hex=0xB7, ascii="!7" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=184, hex=0xB8, ascii="!8" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=185, hex=0xB9, ascii="!9" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x10, /* 00010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=186, hex=0xBA, ascii="!:" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=187, hex=0xBB, ascii="!;" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x10, /* 00010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=188, hex=0xBC, ascii="!<" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x10, /* 00010 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=189, hex=0xBD, ascii="!=" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=190, hex=0xBE, ascii="!>" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=191, hex=0xBF, ascii="!?" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=192, hex=0xC0, ascii="!@" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=193, hex=0xC1, ascii="!A" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=194, hex=0xC2, ascii="!B" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=195, hex=0xC3, ascii="!C" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=196, hex=0xC4, ascii="!D" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=197, hex=0xC5, ascii="!E" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=198, hex=0xC6, ascii="!F" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=199, hex=0xC7, ascii="!G" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=200, hex=0xC8, ascii="!H" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x40, /* 01000 */ - // 0x78, /* 01111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=201, hex=0xC9, ascii="!I" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x40, /* 01000 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=202, hex=0xCA, ascii="!J" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=203, hex=0xCB, ascii="!K" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=204, hex=0xCC, ascii="!L" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x40, /* 01000 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=205, hex=0xCD, ascii="!M" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=206, hex=0xCE, ascii="!N" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=207, hex=0xCF, ascii="!O" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=208, hex=0xD0, ascii="!P" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=209, hex=0xD1, ascii="!Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=210, hex=0xD2, ascii="!R" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=211, hex=0xD3, ascii="!S" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x78, /* 01111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=212, hex=0xD4, ascii="!T" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=213, hex=0xD5, ascii="!U" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=214, hex=0xD6, ascii="!V" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=215, hex=0xD7, ascii="!W" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=216, hex=0xD8, ascii="!X" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=217, hex=0xD9, ascii="!Y" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=218, hex=0xDA, ascii="!Z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=219, hex=0xDB, ascii="![" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=220, hex=0xDC, ascii="!\" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=221, hex=0xDD, ascii="!]" - // */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - - // /* - // * code=222, hex=0xDE, ascii="!^" - // */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - // 0x38, /* 00111 */ - - // /* - // * code=223, hex=0xDF, ascii="!_" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=224, hex=0xE0, ascii="!`" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x48, /* 01001 */ - // 0xB0, /* 10110 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0xB0, /* 10110 */ - // 0x48, /* 01001 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=225, hex=0xE1, ascii="!a" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xA0, /* 10100 */ - // 0xE0, /* 11100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xE0, /* 11100 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - - // /* - // * code=226, hex=0xE2, ascii="!b" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x48, /* 01001 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=227, hex=0xE3, ascii="!c" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=228, hex=0xE4, ascii="!d" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x48, /* 01001 */ - // 0x20, /* 00100 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x48, /* 01001 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=229, hex=0xE5, ascii="!e" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=230, hex=0xE6, ascii="!f" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xE0, /* 11100 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - - // /* - // * code=231, hex=0xE7, ascii="!g" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=232, hex=0xE8, ascii="!h" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=233, hex=0xE9, ascii="!i" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0x88, /* 10001 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=234, hex=0xEA, ascii="!j" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=235, hex=0xEB, ascii="!k" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=236, hex=0xEC, ascii="!l" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=237, hex=0xED, ascii="!m" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=238, hex=0xEE, ascii="!n" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0xE0, /* 11100 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=239, hex=0xEF, ascii="!o" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=240, hex=0xF0, ascii="!p" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=241, hex=0xF1, ascii="!q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=242, hex=0xF2, ascii="!r" - // */ - // 0x00, /* 00000 */ - // 0x80, /* 10000 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=243, hex=0xF3, ascii="!s" - // */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x80, /* 10000 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=244, hex=0xF4, ascii="!t" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0x28, /* 00101 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=245, hex=0xF5, ascii="!u" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=246, hex=0xF6, ascii="!v" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=247, hex=0xF7, ascii="!w" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=248, hex=0xF8, ascii="!x" - // */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=249, hex=0xF9, ascii="!y" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=250, hex=0xFA, ascii="!z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=251, hex=0xFB, ascii="!{" - // */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0xA0, /* 10100 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=252, hex=0xFC, ascii="!|" - // */ - // 0xA0, /* 10100 */ - // 0xD0, /* 11010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=253, hex=0xFD, ascii="!}" - // */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x10, /* 00010 */ - // 0x60, /* 01100 */ - // 0x80, /* 10000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=254, hex=0xFE, ascii="!~" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=255, hex=0xFF, ascii="!^Ÿ" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ +static const unsigned char console_font_5x12[] PROGMEM = { + 0x57, 0x0C, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x74, 0x63, 0xB8, 0xC7, 0x75, 0x8B, 0x80, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x77, 0xFF, 0x5F, 0xFE, 0xBB, 0xFB, 0x80, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x02, 0xB7, 0xFF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x23, 0x9C, 0xE2, 0x7F, 0xEE, 0x23, 0x80, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x23, 0x80, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xF0, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x07, 0x29, 0x4E, 0x00, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xFF, 0xF8, 0xD6, 0xB1, 0xFF, 0xFF, 0xF0, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x0E, 0x32, 0xB2, 0x52, 0x93, 0x00, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x03, 0x25, 0x29, 0x31, 0x08, 0xE2, 0x00, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x08, 0x63, 0x10, 0x84, 0xE6, 0x00, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x32, 0x9C, 0xA5, 0x29, 0xCE, 0xC6, 0x00, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x0A, 0xBA, 0x2E, 0xA8, 0x00, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x21, 0x8E, 0x7B, 0x98, 0x80, 0x00, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x04, 0x67, 0x79, 0xC6, 0x10, 0x00, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x14, 0xA5, 0x29, 0x40, 0x52, 0x80, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x03, 0xB5, 0xAD, 0x69, 0x4A, 0x52, 0x80, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x03, 0x25, 0x06, 0x49, 0x82, 0x93, 0x00, 0x00, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x80, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x3E, 0x00, // /* code=23, hex=0x17, ascii="^W" */ + // 0x01, 0x1D, 0x52, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x08, 0x42, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x82, 0x78, 0x88, 0x00, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x44, 0x79, 0x04, 0x00, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x42, 0x1E, 0x00, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0xA5, 0x7D, 0x4A, 0x00, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x42, 0x39, 0xDF, 0x00, 0x00, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x01, 0xF7, 0x38, 0x84, 0x00, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x01, 0x08, 0x42, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x52, 0x94, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x02, 0x95, 0xF5, 0x2B, 0xEA, 0x50, 0x00, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x02, 0x19, 0x28, 0x20, 0x82, 0x93, 0x08, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x06, 0xB4, 0x42, 0x21, 0x08, 0xB5, 0x80, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x02, 0x29, 0x4A, 0x22, 0xB2, 0x93, 0x40, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x31, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x01, 0x10, 0x84, 0x21, 0x08, 0x41, 0x00, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x02, 0x08, 0x42, 0x10, 0x84, 0x22, 0x00, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x09, 0x57, 0x3A, 0xA4, 0x00, 0x00, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x42, 0x7C, 0x84, 0x00, 0x00, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x08, 0x80, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x84, 0x42, 0x21, 0x08, 0x84, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x03, 0xA5, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x01, 0x19, 0x42, 0x10, 0x84, 0x27, 0x80, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x03, 0x25, 0x21, 0x11, 0x10, 0x87, 0x80, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x03, 0x24, 0x21, 0x30, 0x42, 0x93, 0x00, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x8C, 0xA5, 0x4B, 0xC2, 0x10, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x07, 0xA1, 0x08, 0x70, 0x42, 0x93, 0x00, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x01, 0x91, 0x0E, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x07, 0x84, 0x21, 0x10, 0x88, 0x42, 0x00, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x03, 0x25, 0x29, 0x32, 0x52, 0x93, 0x00, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x03, 0x25, 0x29, 0x49, 0xC2, 0x26, 0x00, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x00, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x08, 0x80, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x04, 0x44, 0x42, 0x08, 0x20, 0x80, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x00, 0x78, 0x1E, 0x00, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x20, 0x82, 0x08, 0x44, 0x44, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x03, 0x25, 0x21, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x03, 0x25, 0x29, 0x5A, 0xD0, 0x83, 0x80, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x03, 0x25, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x07, 0x25, 0x29, 0x72, 0x52, 0x97, 0x00, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x00, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x07, 0x25, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x87, 0x80, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x84, 0x00, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x03, 0x25, 0x28, 0x42, 0xD2, 0x93, 0x00, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x04, 0xA5, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x03, 0x88, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x03, 0x88, 0x42, 0x10, 0x94, 0xA2, 0x00, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x04, 0xA5, 0x4A, 0x62, 0x94, 0x94, 0x80, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x04, 0x21, 0x08, 0x42, 0x10, 0x87, 0x80, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x04, 0xA5, 0xEF, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x04, 0xA5, 0xAD, 0x5A, 0xD2, 0x94, 0x80, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x07, 0x25, 0x29, 0x72, 0x10, 0x84, 0x00, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x08, 0x20, /* code=81, hex=0x51, ascii="Q" */ + 0x07, 0x25, 0x29, 0x73, 0x14, 0x94, 0x80, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x03, 0x25, 0x28, 0x30, 0x52, 0x93, 0x00, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x07, 0xC8, 0x42, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x04, 0xA5, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x04, 0xA5, 0x29, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x04, 0xA5, 0x29, 0x4A, 0x5E, 0x94, 0x80, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x04, 0xA5, 0x26, 0x31, 0x92, 0x94, 0x80, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x04, 0x63, 0x15, 0x28, 0x84, 0x21, 0x00, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x07, 0x84, 0x42, 0x21, 0x10, 0x87, 0x80, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x03, 0x10, 0x84, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x04, 0x20, 0x84, 0x10, 0x84, 0x10, 0x80, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x00, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, /* code=95, hex=0x5F, ascii="_" */ + 0x63, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x06, 0x09, 0xD2, 0x93, 0x80, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x80, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x84, 0x27, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x01, 0x10, 0x8E, 0x21, 0x08, 0x42, 0x00, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0xC0, /* code=103, hex=0x67, ascii="g" */ + 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x00, 0x08, 0x02, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x28, 0x80, /* code=106, hex=0x6A, ascii="j" */ + 0x04, 0x21, 0x09, 0x53, 0x18, 0xA4, 0x80, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x09, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x0E, 0x4A, 0x52, 0x97, 0x21, 0x00, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0x20, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x0B, 0x29, 0x08, 0x42, 0x00, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x06, 0x49, 0x04, 0x93, 0x00, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x10, 0x8E, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x09, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0xF4, 0x80, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x09, 0x49, 0x8C, 0x94, 0x80, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x0F, 0x08, 0x88, 0x87, 0x80, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x01, 0x10, 0x84, 0x41, 0x08, 0x41, 0x00, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x21, 0x08, 0x40, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x08, 0x42, 0x08, 0x84, 0x22, 0x00, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x02, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x01, 0x08, 0xA5, 0x46, 0x31, 0x8F, 0xC0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x08, 0x80, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x01, 0x90, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x03, 0x24, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x00, 0x14, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x06, 0x08, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x14, 0x46, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x89, 0x80, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x03, 0x24, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x00, 0x14, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x06, 0x08, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x00, 0x14, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x03, 0x24, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x03, 0x04, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x50, 0x19, 0x29, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x22, 0x88, 0xC9, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x32, 0x01, 0xE8, 0x43, 0xD0, 0x87, 0x80, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x07, 0x14, 0xAE, 0xA2, 0x80, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x1D, 0xCA, 0x53, 0xD4, 0xA5, 0x80, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x03, 0x24, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x00, 0x14, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x03, 0x04, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x03, 0x24, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x06, 0x08, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x50, 0x19, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x00, 0x47, 0x46, 0x11, 0x71, 0x00, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x14, 0x84, 0x71, 0x08, 0xD7, 0x80, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x04, 0x54, 0xAF, 0x93, 0xE4, 0x21, 0x00, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x07, 0x25, 0x2E, 0x4A, 0xF2, 0x94, 0x80, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x11, 0x08, 0x42, 0x38, 0x84, 0x21, 0x28, 0x80, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x01, 0x90, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x01, 0x90, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x01, 0x90, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x01, 0x90, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x02, 0xA8, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x55, 0x01, 0x2D, 0x7A, 0xD2, 0x94, 0x80, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x03, 0x04, 0xE9, 0x38, 0x1E, 0x00, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x03, 0x25, 0x29, 0x30, 0x1E, 0x00, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x02, 0x10, 0x04, 0x22, 0x10, 0x93, 0x00, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x03, 0xD0, 0x80, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x03, 0xC2, 0x10, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x02, 0x14, 0xA2, 0x21, 0xD2, 0xA1, 0x80, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x02, 0x14, 0xA2, 0x21, 0x56, 0xB0, 0x80, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0xA5, 0x52, 0x8A, 0x50, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x01, 0x4A, 0x29, 0x54, 0xA0, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x00, 0x2A, 0x00, 0x28, 0x00, 0xA8, 0x00, 0xA0, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x02, 0x81, 0x50, 0x28, 0x15, 0x02, 0x81, 0x50, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x21, 0x08, 0x42, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x21, 0x08, 0x4E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x52, 0x94, 0xA5, 0x69, 0x4A, 0x52, 0x94, 0xA0, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x79, 0x4A, 0x52, 0x94, 0xA0, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x0E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x52, 0x94, 0xAD, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x52, 0x94, 0xA5, 0x29, 0x4A, 0x52, 0x94, 0xA0, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x0F, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x52, 0x94, 0xAD, 0x0B, 0xC0, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x52, 0x94, 0xA5, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x21, 0x08, 0x4E, 0x13, 0x80, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x21, 0x08, 0x42, 0x1C, 0x00, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x21, 0x08, 0x42, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x21, 0x08, 0x42, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x21, 0x08, 0x42, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x21, 0x08, 0x43, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x52, 0x94, 0xA5, 0x2D, 0x4A, 0x52, 0x94, 0xA0, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x52, 0x94, 0xA5, 0xA1, 0xE0, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x07, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x52, 0x94, 0xAD, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x0F, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x52, 0x94, 0xA5, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x52, 0x94, 0xAD, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x21, 0x08, 0x4F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x52, 0x94, 0xA5, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x0F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x94, 0xA0, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x52, 0x94, 0xA5, 0x3C, 0x00, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x21, 0x08, 0x43, 0x90, 0xE0, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x03, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x3D, 0x4A, 0x52, 0x94, 0xA0, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x52, 0x94, 0xA5, 0x6D, 0x4A, 0x52, 0x94, 0xA0, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x21, 0x08, 0x4F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x21, 0x08, 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xC0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x00, 0x9B, 0x52, 0x96, 0x48, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x25, 0x2A, 0x72, 0x52, 0x97, 0x21, 0x00, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0x1E, 0x94, 0x21, 0x08, 0x42, 0x00, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x80, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x00, 0x01, 0xF4, 0x90, 0x44, 0x4F, 0xC0, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x0F, 0xD2, 0x94, 0x40, 0x00, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x09, 0x4A, 0x52, 0x97, 0x21, 0x00, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x00, 0x00, 0x2A, 0x84, 0x21, 0x00, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x00, 0x00, 0x07, 0x11, 0x4A, 0x23, 0x80, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x00, 0x45, 0x47, 0xF1, 0x51, 0x00, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x00, 0x45, 0x46, 0x2A, 0x56, 0xC0, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x0C, 0x84, 0x11, 0xD2, 0x93, 0x00, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x05, 0x56, 0xAA, 0x00, 0x00, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x08, 0x47, 0x56, 0xAE, 0x21, 0x00, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0x00, 0xE8, 0x43, 0x90, 0x83, 0x80, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x00, 0xC9, 0x4A, 0x52, 0x90, 0x00, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x01, 0xE0, 0x78, 0x1E, 0x00, 0x00, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x00, 0x42, 0x7C, 0x84, 0x07, 0xC0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x04, 0x10, 0x41, 0x11, 0x10, 0x07, 0x80, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x88, 0x88, 0x20, 0x82, 0x07, 0x80, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x04, 0x52, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, 0xA2, 0x00, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x08, 0x40, 0x7C, 0x04, 0x20, 0x00, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x05, 0x50, 0x0A, 0xA0, 0x00, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x64, 0xA4, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x02, 0x38, 0x80, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x01, 0xC8, 0x42, 0x12, 0x94, 0x61, 0x00, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0xA6, 0xA5, 0x29, 0x48, 0x00, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x64, 0x84, 0xC8, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x00, 0xE7, 0x39, 0xCE, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_5x8.h b/wled00/src/font/console_font_5x8.h index c56f2ce0ff..f2194a1f4e 100644 --- a/wled00/src/font/console_font_5x8.h +++ b/wled00/src/font/console_font_5x8.h @@ -1,3078 +1,299 @@ // font courtesy of https://github.com/idispatch/raster-fonts -static const unsigned char console_font_5x8[] PROGMEM = { // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion - // /* - // * code=0, hex=0x00, ascii="^@" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=1, hex=0x01, ascii="^A" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0xF8, /* 11111 */ - // 0xD8, /* 11011 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=2, hex=0x02, ascii="^B" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=3, hex=0x03, ascii="^C" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=4, hex=0x04, ascii="^D" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=5, hex=0x05, ascii="^E" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=6, hex=0x06, ascii="^F" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0xA8, /* 10101 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=7, hex=0x07, ascii="^G" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=8, hex=0x08, ascii="^H" - // */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xD8, /* 11011 */ - // 0x88, /* 10001 */ - // 0xD8, /* 11011 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=9, hex=0x09, ascii="^I" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=10, hex=0x0A, ascii="^J" - // */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xD8, /* 11011 */ - // 0x88, /* 10001 */ - // 0xD8, /* 11011 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=11, hex=0x0B, ascii="^K" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x18, /* 00011 */ - // 0x68, /* 01101 */ - // 0xA0, /* 10100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - - // /* - // * code=12, hex=0x0C, ascii="^L" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=13, hex=0x0D, ascii="^M" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x40, /* 01000 */ - // 0xC0, /* 11000 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - - // /* - // * code=14, hex=0x0E, ascii="^N" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x48, /* 01001 */ - // 0x58, /* 01011 */ - // 0xD0, /* 11010 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - - // /* - // * code=15, hex=0x0F, ascii="^O" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=16, hex=0x10, ascii="^P" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x60, /* 01100 */ - // 0x70, /* 01110 */ - // 0x60, /* 01100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - - // /* - // * code=17, hex=0x11, ascii="^Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0x30, /* 00110 */ - // 0x70, /* 01110 */ - // 0x30, /* 00110 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - - // /* - // * code=18, hex=0x12, ascii="^R" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=19, hex=0x13, ascii="^S" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - - // /* - // * code=20, hex=0x14, ascii="^T" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0xD0, /* 11010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=21, hex=0x15, ascii="^U" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x18, /* 00011 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x48, /* 01001 */ - // 0x30, /* 00110 */ - // 0xC0, /* 11000 */ - - // /* - // * code=22, hex=0x16, ascii="^V" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - - // /* - // * code=23, hex=0x17, ascii="^W" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - - // /* - // * code=24, hex=0x18, ascii="^X" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=25, hex=0x19, ascii="^Y" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=26, hex=0x1A, ascii="^Z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0xF8, /* 11111 */ - // 0x10, /* 00010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=27, hex=0x1B, ascii="^[" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0xF8, /* 11111 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=28, hex=0x1C, ascii="^\" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x80, /* 10000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=29, hex=0x1D, ascii="^]" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=30, hex=0x1E, ascii="^^" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - - // /* - // * code=31, hex=0x1F, ascii="^_" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - /* - * code=32, hex=0x20, ascii=" " - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=33, hex=0x21, ascii="!" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=34, hex=0x22, ascii=""" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=35, hex=0x23, ascii="#" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0xF8, /* 11111 */ - 0x50, /* 01010 */ - 0xF8, /* 11111 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - - /* - * code=36, hex=0x24, ascii="$" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x30, /* 00110 */ - 0x40, /* 01000 */ - 0x30, /* 00110 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - - /* - * code=37, hex=0x25, ascii="%" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0xA8, /* 10101 */ - 0x50, /* 01010 */ - 0x30, /* 00110 */ - 0x68, /* 01101 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=38, hex=0x26, ascii="&" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x30, /* 00110 */ - 0x40, /* 01000 */ - 0x68, /* 01101 */ - 0x90, /* 10010 */ - 0x68, /* 01101 */ - 0x00, /* 00000 */ - - /* - * code=39, hex=0x27, ascii="'" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=40, hex=0x28, ascii="(" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=41, hex=0x29, ascii=")" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=42, hex=0x2A, ascii="*" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x20, /* 00100 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - - /* - * code=43, hex=0x2B, ascii="+" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=44, hex=0x2C, ascii="," - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - - /* - * code=45, hex=0x2D, ascii="-" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=46, hex=0x2E, ascii="." - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=47, hex=0x2F, ascii="/" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=48, hex=0x30, ascii="0" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=49, hex=0x31, ascii="1" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=50, hex=0x32, ascii="2" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - - /* - * code=51, hex=0x33, ascii="3" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=52, hex=0x34, ascii="4" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x30, /* 00110 */ - 0x50, /* 01010 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - - /* - * code=53, hex=0x35, ascii="5" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x10, /* 00010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=54, hex=0x36, ascii="6" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=55, hex=0x37, ascii="7" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=56, hex=0x38, ascii="8" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=57, hex=0x39, ascii="9" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=58, hex=0x3A, ascii=":" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=59, hex=0x3B, ascii=";" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - - /* - * code=60, hex=0x3C, ascii="<" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - - /* - * code=61, hex=0x3D, ascii="=" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=62, hex=0x3E, ascii=">" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=63, hex=0x3F, ascii="?" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=64, hex=0x40, ascii="@" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x88, /* 10001 */ - 0xB0, /* 10110 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=65, hex=0x41, ascii="A" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=66, hex=0x42, ascii="B" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=67, hex=0x43, ascii="C" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=68, hex=0x44, ascii="D" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=69, hex=0x45, ascii="E" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - - /* - * code=70, hex=0x46, ascii="F" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - - /* - * code=71, hex=0x47, ascii="G" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x80, /* 10000 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=72, hex=0x48, ascii="H" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=73, hex=0x49, ascii="I" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=74, hex=0x4A, ascii="J" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=75, hex=0x4B, ascii="K" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0xA0, /* 10100 */ - 0xC0, /* 11000 */ - 0xA0, /* 10100 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=76, hex=0x4C, ascii="L" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - - /* - * code=77, hex=0x4D, ascii="M" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=78, hex=0x4E, ascii="N" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0xD0, /* 11010 */ - 0xB0, /* 10110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=79, hex=0x4F, ascii="O" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=80, hex=0x50, ascii="P" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0x00, /* 00000 */ - - /* - * code=81, hex=0x51, ascii="Q" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - - /* - * code=82, hex=0x52, ascii="R" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=83, hex=0x53, ascii="S" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x80, /* 10000 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=84, hex=0x54, ascii="T" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF8, /* 11111 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=85, hex=0x55, ascii="U" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=86, hex=0x56, ascii="V" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=87, hex=0x57, ascii="W" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x88, /* 10001 */ - 0xA8, /* 10101 */ - 0xA8, /* 10101 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - - /* - * code=88, hex=0x58, ascii="X" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x50, /* 01010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=89, hex=0x59, ascii="Y" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x50, /* 01010 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=90, hex=0x5A, ascii="Z" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x80, /* 10000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - - /* - * code=91, hex=0x5B, ascii="[" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=92, hex=0x5C, ascii="\" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - - /* - * code=93, hex=0x5D, ascii="]" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=94, hex=0x5E, ascii="^" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=95, hex=0x5F, ascii="_" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF8, /* 11111 */ - - /* - * code=96, hex=0x60, ascii="`" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - /* - * code=97, hex=0x61, ascii="a" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x10, /* 00010 */ - 0x70, /* 01110 */ - 0x50, /* 01010 */ - 0x00, /* 00000 */ - - /* - * code=98, hex=0x62, ascii="b" - */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=99, hex=0x63, ascii="c" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x30, /* 00110 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x30, /* 00110 */ - 0x00, /* 00000 */ - - /* - * code=100, hex=0x64, ascii="d" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=101, hex=0x65, ascii="e" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0xF0, /* 11110 */ - 0x80, /* 10000 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=102, hex=0x66, ascii="f" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x30, /* 00110 */ - 0x40, /* 01000 */ - 0xE0, /* 11100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=103, hex=0x67, ascii="g" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - - /* - * code=104, hex=0x68, ascii="h" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=105, hex=0x69, ascii="i" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=106, hex=0x6A, ascii="j" - */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - - /* - * code=107, hex=0x6B, ascii="k" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x80, /* 10000 */ - 0xA0, /* 10100 */ - 0xC0, /* 11000 */ - 0xA0, /* 10100 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=108, hex=0x6C, ascii="l" - */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=109, hex=0x6D, ascii="m" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=110, hex=0x6E, ascii="n" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=111, hex=0x6F, ascii="o" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=112, hex=0x70, ascii="p" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xE0, /* 11100 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xE0, /* 11100 */ - 0x80, /* 10000 */ - - /* - * code=113, hex=0x71, ascii="q" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - - /* - * code=114, hex=0x72, ascii="r" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0x60, /* 01100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=115, hex=0x73, ascii="s" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x70, /* 01110 */ - 0xC0, /* 11000 */ - 0x30, /* 00110 */ - 0xE0, /* 11100 */ - 0x00, /* 00000 */ - - /* - * code=116, hex=0x74, ascii="t" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0xF0, /* 11110 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x30, /* 00110 */ - 0x00, /* 00000 */ - - /* - * code=117, hex=0x75, ascii="u" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x00, /* 00000 */ - - /* - * code=118, hex=0x76, ascii="v" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x00, /* 00000 */ - - /* - * code=119, hex=0x77, ascii="w" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0xF0, /* 11110 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=120, hex=0x78, ascii="x" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x60, /* 01100 */ - 0x60, /* 01100 */ - 0x90, /* 10010 */ - 0x00, /* 00000 */ - - /* - * code=121, hex=0x79, ascii="y" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x90, /* 10010 */ - 0x90, /* 10010 */ - 0x70, /* 01110 */ - 0x10, /* 00010 */ - 0x60, /* 01100 */ - - /* - * code=122, hex=0x7A, ascii="z" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0xF0, /* 11110 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0xF0, /* 11110 */ - 0x00, /* 00000 */ - - /* - * code=123, hex=0x7B, ascii="{" - */ - 0x00, /* 00000 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x00, /* 00000 */ - - /* - * code=124, hex=0x7C, ascii="|" - */ - 0x00, /* 00000 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x20, /* 00100 */ - 0x00, /* 00000 */ - - /* - * code=125, hex=0x7D, ascii="}" - */ - 0x00, /* 00000 */ - 0x40, /* 01000 */ - 0x20, /* 00100 */ - 0x10, /* 00010 */ - 0x10, /* 00010 */ - 0x20, /* 00100 */ - 0x40, /* 01000 */ - 0x00, /* 00000 */ - - /* - * code=126, hex=0x7E, ascii="~" - */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x50, /* 01010 */ - 0xA0, /* 10100 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - 0x00, /* 00000 */ - - // /* - // * code=127, hex=0x7F, ascii="^?" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (10 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed/max glyph width: 5 + * [3] Flags: 0x00 (fixed width) + * [4] First Char: 32 + * [5] Last Char: 126 + * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 + * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of the stream, padding bits are added if necessary to fill the last byte + */ - // /* - // * code=128, hex=0x80, ascii="!^@" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - - // /* - // * code=129, hex=0x81, ascii="!^A" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=130, hex=0x82, ascii="!^B" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=131, hex=0x83, ascii="!^C" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - - // /* - // * code=132, hex=0x84, ascii="!^D" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=133, hex=0x85, ascii="!^E" - // */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=134, hex=0x86, ascii="!^F" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=135, hex=0x87, ascii="!^G" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x30, /* 00110 */ - // 0x20, /* 00100 */ - - // /* - // * code=136, hex=0x88, ascii="!^H" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=137, hex=0x89, ascii="!^I" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=138, hex=0x8A, ascii="!^J" - // */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=139, hex=0x8B, ascii="!^K" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=140, hex=0x8C, ascii="!^L" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=141, hex=0x8D, ascii="!^M" - // */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=142, hex=0x8E, ascii="!^N" - // */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - - // /* - // * code=143, hex=0x8F, ascii="!^O" - // */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - - // /* - // * code=144, hex=0x90, ascii="!^P" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0xF0, /* 11110 */ - // 0x80, /* 10000 */ - // 0xE0, /* 11100 */ - // 0x80, /* 10000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - - // /* - // * code=145, hex=0x91, ascii="!^Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x78, /* 01111 */ - // 0xE0, /* 11100 */ - // 0xB8, /* 10111 */ - // 0x00, /* 00000 */ - - // /* - // * code=146, hex=0x92, ascii="!^R" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xA0, /* 10100 */ - // 0xF0, /* 11110 */ - // 0xA0, /* 10100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=147, hex=0x93, ascii="!^S" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=148, hex=0x94, ascii="!^T" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=149, hex=0x95, ascii="!^U" - // */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=150, hex=0x96, ascii="!^V" - // */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=151, hex=0x97, ascii="!^W" - // */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=152, hex=0x98, ascii="!^X" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x10, /* 00010 */ - // 0x60, /* 01100 */ - - // /* - // * code=153, hex=0x99, ascii="!^Y" - // */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=154, hex=0x9A, ascii="!^Z" - // */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=155, hex=0x9B, ascii="!^[" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x80, /* 10000 */ - // 0x80, /* 10000 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - - // /* - // * code=156, hex=0x9C, ascii="!^\" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x50, /* 01010 */ - // 0x40, /* 01000 */ - // 0xE0, /* 11100 */ - // 0x40, /* 01000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - - // /* - // * code=157, hex=0x9D, ascii="!^]" - // */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=158, hex=0x9E, ascii="!^^" - // */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0xA0, /* 10100 */ - // 0xB0, /* 10110 */ - // 0xF8, /* 11111 */ - // 0x90, /* 10010 */ - // 0x88, /* 10001 */ - // 0x00, /* 00000 */ - - // /* - // * code=159, hex=0x9F, ascii="!^_" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0xF0, /* 11110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x80, /* 10000 */ - - // /* - // * code=160, hex=0xA0, ascii="! " - // */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - // 0xC0, /* 11000 */ - // 0x20, /* 00100 */ - // 0x60, /* 01100 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=161, hex=0xA1, ascii="!!" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=162, hex=0xA2, ascii="!"" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=163, hex=0xA3, ascii="!#" - // */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=164, hex=0xA4, ascii="!$" - // */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - - // /* - // * code=165, hex=0xA5, ascii="!%" - // */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x90, /* 10010 */ - // 0xD0, /* 11010 */ - // 0xD0, /* 11010 */ - // 0xB0, /* 10110 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - - // /* - // * code=166, hex=0xA6, ascii="!&" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x30, /* 00110 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=167, hex=0xA7, ascii="!'" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=168, hex=0xA8, ascii="!(" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=169, hex=0xA9, ascii="!)" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x80, /* 10000 */ - // 0x00, /* 00000 */ - - // /* - // * code=170, hex=0xAA, ascii="!*" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x08, /* 00001 */ - // 0x00, /* 00000 */ - - // /* - // * code=171, hex=0xAB, ascii="!+" - // */ - // 0x00, /* 00000 */ - // 0x80, /* 10000 */ - // 0x90, /* 10010 */ - // 0xA0, /* 10100 */ - // 0x58, /* 01011 */ - // 0x88, /* 10001 */ - // 0x38, /* 00111 */ - // 0x00, /* 00000 */ - - // /* - // * code=172, hex=0xAC, ascii="!," - // */ - // 0x00, /* 00000 */ - // 0x88, /* 10001 */ - // 0x90, /* 10010 */ - // 0xA0, /* 10100 */ - // 0x48, /* 01001 */ - // 0x98, /* 10011 */ - // 0x38, /* 00111 */ - // 0x08, /* 00001 */ - - // /* - // * code=173, hex=0xAD, ascii="!-" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=174, hex=0xAE, ascii="!." - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - - // /* - // * code=175, hex=0xAF, ascii="!/" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xA0, /* 10100 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - - // /* - // * code=176, hex=0xB0, ascii="!0" - // */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - // 0xA8, /* 10101 */ - // 0x50, /* 01010 */ - - // /* - // * code=177, hex=0xB1, ascii="!1" - // */ - // 0xE8, /* 11101 */ - // 0x50, /* 01010 */ - // 0xB8, /* 10111 */ - // 0x50, /* 01010 */ - // 0xE8, /* 11101 */ - // 0x50, /* 01010 */ - // 0xB8, /* 10111 */ - // 0x50, /* 01010 */ - - // /* - // * code=178, hex=0xB2, ascii="!2" - // */ - // 0xD8, /* 11011 */ - // 0x70, /* 01110 */ - // 0xD8, /* 11011 */ - // 0x70, /* 01110 */ - // 0xD8, /* 11011 */ - // 0x70, /* 01110 */ - // 0xD8, /* 11011 */ - // 0x70, /* 01110 */ - - // /* - // * code=179, hex=0xB3, ascii="!3" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=180, hex=0xB4, ascii="!4" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=181, hex=0xB5, ascii="!5" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=182, hex=0xB6, ascii="!6" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=183, hex=0xB7, ascii="!7" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=184, hex=0xB8, ascii="!8" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=185, hex=0xB9, ascii="!9" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x10, /* 00010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=186, hex=0xBA, ascii="!:" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=187, hex=0xBB, ascii="!;" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x10, /* 00010 */ - // 0xD0, /* 11010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=188, hex=0xBC, ascii="!<" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD0, /* 11010 */ - // 0x10, /* 00010 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=189, hex=0xBD, ascii="!=" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=190, hex=0xBE, ascii="!>" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=191, hex=0xBF, ascii="!?" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xE0, /* 11100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=192, hex=0xC0, ascii="!@" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=193, hex=0xC1, ascii="!A" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=194, hex=0xC2, ascii="!B" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=195, hex=0xC3, ascii="!C" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=196, hex=0xC4, ascii="!D" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=197, hex=0xC5, ascii="!E" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=198, hex=0xC6, ascii="!F" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=199, hex=0xC7, ascii="!G" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=200, hex=0xC8, ascii="!H" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x40, /* 01000 */ - // 0x78, /* 01111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=201, hex=0xC9, ascii="!I" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x40, /* 01000 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=202, hex=0xCA, ascii="!J" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=203, hex=0xCB, ascii="!K" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=204, hex=0xCC, ascii="!L" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x58, /* 01011 */ - // 0x40, /* 01000 */ - // 0x58, /* 01011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=205, hex=0xCD, ascii="!M" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=206, hex=0xCE, ascii="!N" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - // 0xD8, /* 11011 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=207, hex=0xCF, ascii="!O" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=208, hex=0xD0, ascii="!P" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=209, hex=0xD1, ascii="!Q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=210, hex=0xD2, ascii="!R" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=211, hex=0xD3, ascii="!S" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x78, /* 01111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=212, hex=0xD4, ascii="!T" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=213, hex=0xD5, ascii="!U" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=214, hex=0xD6, ascii="!V" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=215, hex=0xD7, ascii="!W" - // */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0xF8, /* 11111 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - - // /* - // * code=216, hex=0xD8, ascii="!X" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=217, hex=0xD9, ascii="!Y" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xE0, /* 11100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=218, hex=0xDA, ascii="!Z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x38, /* 00111 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=219, hex=0xDB, ascii="![" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=220, hex=0xDC, ascii="!\" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - - // /* - // * code=221, hex=0xDD, ascii="!]" - // */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - // 0xE0, /* 11100 */ - - // /* - // * code=222, hex=0xDE, ascii="!^" - // */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - // 0x18, /* 00011 */ - - // /* - // * code=223, hex=0xDF, ascii="!_" - // */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=224, hex=0xE0, ascii="!`" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x68, /* 01101 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x68, /* 01101 */ - // 0x00, /* 00000 */ - - // /* - // * code=225, hex=0xE1, ascii="!a" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0xF0, /* 11110 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xE0, /* 11100 */ - // 0x80, /* 10000 */ - - // /* - // * code=226, hex=0xE2, ascii="!b" - // */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - - // /* - // * code=227, hex=0xE3, ascii="!c" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - - // /* - // * code=228, hex=0xE4, ascii="!d" - // */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x48, /* 01001 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - - // /* - // * code=229, hex=0xE5, ascii="!e" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x78, /* 01111 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=230, hex=0xE6, ascii="!f" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0xE8, /* 11101 */ - // 0x80, /* 10000 */ - - // /* - // * code=231, hex=0xE7, ascii="!g" - // */ - // 0x00, /* 00000 */ - // 0x98, /* 10011 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - - // /* - // * code=232, hex=0xE8, ascii="!h" - // */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0x70, /* 01110 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=233, hex=0xE9, ascii="!i" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0xF8, /* 11111 */ - // 0x88, /* 10001 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=234, hex=0xEA, ascii="!j" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x88, /* 10001 */ - // 0x88, /* 10001 */ - // 0x50, /* 01010 */ - // 0xD8, /* 11011 */ - // 0x00, /* 00000 */ - - // /* - // * code=235, hex=0xEB, ascii="!k" - // */ - // 0x60, /* 01100 */ - // 0x80, /* 10000 */ - // 0x40, /* 01000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=236, hex=0xEC, ascii="!l" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0xA8, /* 10101 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=237, hex=0xED, ascii="!m" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x08, /* 00001 */ - // 0x70, /* 01110 */ - // 0xA8, /* 10101 */ - // 0x48, /* 01001 */ - // 0xB0, /* 10110 */ - // 0x00, /* 00000 */ - - // /* - // * code=238, hex=0xEE, ascii="!n" - // */ - // 0x00, /* 00000 */ - // 0x30, /* 00110 */ - // 0x40, /* 01000 */ - // 0x70, /* 01110 */ - // 0x40, /* 01000 */ - // 0x40, /* 01000 */ - // 0x30, /* 00110 */ - // 0x00, /* 00000 */ - - // /* - // * code=239, hex=0xEF, ascii="!o" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x90, /* 10010 */ - // 0x00, /* 00000 */ - - // /* - // * code=240, hex=0xF0, ascii="!p" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - - // /* - // * code=241, hex=0xF1, ascii="!q" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0xF8, /* 11111 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0xF8, /* 11111 */ - // 0x00, /* 00000 */ - - // /* - // * code=242, hex=0xF2, ascii="!r" - // */ - // 0x00, /* 00000 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - - // /* - // * code=243, hex=0xF3, ascii="!s" - // */ - // 0x00, /* 00000 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x40, /* 01000 */ - // 0x20, /* 00100 */ - // 0x10, /* 00010 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - - // /* - // * code=244, hex=0xF4, ascii="!t" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x18, /* 00011 */ - // 0x28, /* 00101 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - - // /* - // * code=245, hex=0xF5, ascii="!u" - // */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0xC0, /* 11000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=246, hex=0xF6, ascii="!v" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0xF0, /* 11110 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - - // /* - // * code=247, hex=0xF7, ascii="!w" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - // 0x50, /* 01010 */ - // 0xA0, /* 10100 */ - // 0x00, /* 00000 */ - - // /* - // * code=248, hex=0xF8, ascii="!x" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x50, /* 01010 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=249, hex=0xF9, ascii="!y" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x60, /* 01100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=250, hex=0xFA, ascii="!z" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x20, /* 00100 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=251, hex=0xFB, ascii="!{" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x18, /* 00011 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0xA0, /* 10100 */ - // 0x40, /* 01000 */ - // 0x00, /* 00000 */ - - // /* - // * code=252, hex=0xFC, ascii="!|" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x50, /* 01010 */ - // 0x50, /* 01010 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=253, hex=0xFD, ascii="!}" - // */ - // 0x00, /* 00000 */ - // 0x60, /* 01100 */ - // 0x10, /* 00010 */ - // 0x20, /* 00100 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=254, hex=0xFE, ascii="!~" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x70, /* 01110 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - - // /* - // * code=255, hex=0xFF, ascii="!^Ÿ" - // */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ - // 0x00, /* 00000 */ +static const unsigned char console_font_5x8[] PROGMEM = { + 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x00, 0x1D, 0x5F, 0xED, 0xC0, // /* code=1, hex=0x01, ascii="^A" */ + // 0x00, 0x1D, 0x5F, 0xFD, 0xC0, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0x15, 0xFF, 0xB8, 0x80, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x08, 0xEF, 0xB8, 0x80, // /* code=4, hex=0x04, ascii="^D" */ + // 0x00, 0x1D, 0x5F, 0x90, 0x80, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x08, 0xEF, 0xD4, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x47, 0x10, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x0E, 0x36, 0xD1, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x00, 0x08, 0xA2, 0x38, 0x80, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x08, 0xA4, 0x62, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x0E, 0x95, 0xEA, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x10, 0xC7, 0x31, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x04, 0x67, 0x18, 0x40, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x00, 0x08, 0xE2, 0x38, 0x80, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x14, 0xA5, 0x01, 0x40, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x1F, 0xAD, 0x29, 0x4A, // /* code=20, hex=0x14, ascii="^T" */ + // 0x00, 0x06, 0xC9, 0x24, 0xD8, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x7F, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ + // 0x00, 0x08, 0xE2, 0x38, 0x8E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x08, 0xE2, 0x10, 0x80, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x08, 0x42, 0x38, 0x80, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x2F, 0x88, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x8F, 0xA0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x08, 0x7C, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0xAF, 0xA8, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x02, 0x3B, 0xE0, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x0F, 0xB8, 0x80, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x08, 0x42, 0x00, 0x80, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0x14, 0xA0, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0x15, 0xF5, 0x7D, 0x40, /* code=35, hex=0x23, ascii="#" */ + 0x00, 0x08, 0x64, 0x19, 0x84, /* code=36, hex=0x24, ascii="$" */ + 0x02, 0x2A, 0xA3, 0x36, 0x40, /* code=37, hex=0x25, ascii="%" */ + 0x00, 0x0C, 0x86, 0xC9, 0xA0, /* code=38, hex=0x26, ascii="&" */ + 0x01, 0x08, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x08, 0x84, 0x20, 0x80, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x10, 0x42, 0x11, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x14, 0x47, 0x11, 0x40, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x47, 0x10, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x88, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x01, 0xE0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x80, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x04, 0x42, 0x21, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x08, 0xC2, 0x10, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x19, 0x22, 0x23, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x38, 0x26, 0x0B, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x04, 0x65, 0x78, 0x40, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0x3D, 0x0E, 0x0B, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x19, 0x0E, 0x49, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0x3C, 0x22, 0x21, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x19, 0x26, 0x49, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x19, 0x27, 0x09, 0x80, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x02, 0x00, 0x80, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x02, 0x00, 0x88, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x04, 0x44, 0x10, 0x40, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0xE0, 0x38, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x10, 0x41, 0x11, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x18, 0x26, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x1D, 0x1B, 0x41, 0xC0, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x19, 0x2F, 0x4A, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0x39, 0x2E, 0x4B, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x1D, 0x08, 0x41, 0xC0, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0x39, 0x29, 0x4B, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0x3D, 0x0E, 0x43, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0x3D, 0x0E, 0x42, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x19, 0x28, 0x49, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0x25, 0x2F, 0x4A, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x1C, 0x42, 0x11, 0xC0, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x04, 0x29, 0x49, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0x25, 0x4C, 0x52, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0x21, 0x08, 0x43, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x00, 0x25, 0xE9, 0x4A, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0x25, 0xAB, 0x4A, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0x39, 0x2E, 0x42, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x19, 0x29, 0x49, 0x82, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0x39, 0x2E, 0x4A, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x1D, 0x06, 0x0B, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0x3E, 0x42, 0x10, 0x80, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0x25, 0x29, 0x49, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x00, 0x25, 0x29, 0x31, 0x80, /* code=86, hex=0x56, ascii="V" */ + 0x00, 0x23, 0x5A, 0xA9, 0x40, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0x25, 0x26, 0x2A, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0x14, 0xA5, 0x10, 0x80, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0x3C, 0x44, 0x43, 0xC0, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x18, 0x84, 0x21, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0x10, 0x82, 0x10, 0x40, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x18, 0x42, 0x11, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x08, 0xA0, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x1F, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x10, 0x40, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0xC1, 0x39, 0x40, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x21, 0xC9, 0x4B, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x64, 0x20, 0xC0, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x04, 0xE9, 0x49, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0xCF, 0x41, 0xC0, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x0C, 0x8E, 0x21, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0xE9, 0x38, 0x4C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0x21, 0xC9, 0x4A, 0x40, /* code=104, hex=0x68, ascii="h" */ + 0x01, 0x00, 0xC2, 0x11, 0xC0, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x80, 0x21, 0x08, 0x4C, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0x21, 0x4C, 0x52, 0x40, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x08, 0x42, 0x11, 0xC0, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x01, 0x2F, 0x4A, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x01, 0xC9, 0x4A, 0x40, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0xC9, 0x49, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x01, 0xC9, 0x4B, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0xE9, 0x49, 0xC2, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0xA6, 0x21, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0xEC, 0x1B, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x11, 0xE4, 0x20, 0xC0, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x01, 0x29, 0x49, 0xC0, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x01, 0x29, 0x31, 0x80, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x01, 0x29, 0x7A, 0x40, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x01, 0x26, 0x32, 0x40, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x01, 0x29, 0x38, 0x4C, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x01, 0xE2, 0x23, 0xC0, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x88, 0x84, 0x10, 0x40, /* code=123, hex=0x7B, ascii="{" */ + 0x01, 0x08, 0x42, 0x10, 0x80, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x08, 0x21, 0x11, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x00, 0xAA, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x45, 0x47, 0xE0, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x1D, 0x08, 0x41, 0xC4, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x02, 0x81, 0x29, 0x49, 0xC0, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x11, 0x00, 0xCF, 0x41, 0xC0, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x22, 0x81, 0x82, 0x51, 0x40, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x02, 0x81, 0x82, 0x32, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x41, 0x01, 0x82, 0x32, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x01, 0x82, 0x32, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x64, 0x20, 0xC4, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x22, 0x80, 0xCF, 0x41, 0xC0, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x02, 0x80, 0xCF, 0x41, 0xC0, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x41, 0x00, 0xCF, 0x41, 0xC0, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x02, 0x80, 0xC2, 0x11, 0xC0, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x22, 0x80, 0xC2, 0x11, 0xC0, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x41, 0x00, 0xC2, 0x11, 0xC0, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xA0, 0x19, 0x2F, 0x4A, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x20, 0x19, 0x2F, 0x4A, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x11, 0x3D, 0x0E, 0x43, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x01, 0xB7, 0xF2, 0xE0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x1D, 0x4F, 0x52, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x22, 0x80, 0xC9, 0x49, 0x80, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x41, 0x00, 0xC9, 0x49, 0x80, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x22, 0x81, 0x29, 0x49, 0xC0, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x41, 0x01, 0x29, 0x49, 0xC0, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x02, 0x81, 0x29, 0x38, 0x4C, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x25, 0x29, 0x49, 0x80, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x08, 0xE8, 0x41, 0xC4, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x94, 0x8E, 0x23, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x06, 0xD4, 0xA2, 0x38, 0x80, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x29, 0x6F, 0xCA, 0x20, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x01, 0x90, 0x8F, 0x21, 0x10, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x22, 0x01, 0x82, 0x32, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x11, 0x00, 0xC2, 0x11, 0xC0, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x11, 0x00, 0xC9, 0x49, 0x80, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x11, 0x01, 0x29, 0x49, 0xC0, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x55, 0x01, 0xC9, 0x4A, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x55, 0x25, 0xAD, 0x5A, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x01, 0x14, 0x60, 0x38, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x01, 0x14, 0x40, 0x38, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x01, 0x00, 0x44, 0x49, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x7E, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x7C, 0x20, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x04, 0x25, 0x45, 0xC4, 0xE0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x04, 0x65, 0x44, 0xCC, 0xE1, // /* code=172, hex=0xAC, ascii="!," */ + // 0x01, 0x00, 0x42, 0x38, 0x80, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0x05, 0x51, 0x40, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x00, 0x0A, 0x2A, 0x80, // /* code=175, hex=0xAF, ascii="!/" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=176, hex=0xB0, ascii="!0" */ + // 0xEA, 0xAE, 0xAE, 0xAA, 0xEA, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xDB, 0xB6, 0xED, 0xBB, 0x6E, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x21, 0x09, 0xC2, 0x10, 0x84, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x21, 0x38, 0x4E, 0x10, 0x84, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x52, 0x95, 0xA5, 0x29, 0x4A, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x01, 0xE5, 0x29, 0x4A, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x38, 0x4E, 0x10, 0x84, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x52, 0xB4, 0x2D, 0x29, 0x4A, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x52, 0x94, 0xA5, 0x29, 0x4A, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x3C, 0x2D, 0x29, 0x4A, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x52, 0xB4, 0x2F, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x52, 0x95, 0xE0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x21, 0x38, 0x4E, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x01, 0xC2, 0x10, 0x84, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x21, 0x08, 0x70, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x21, 0x09, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x01, 0xF2, 0x10, 0x84, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x21, 0x08, 0x72, 0x10, 0x84, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x01, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x21, 0x09, 0xF2, 0x10, 0x84, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x21, 0x0E, 0x43, 0x90, 0x84, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x52, 0x94, 0xB5, 0x29, 0x4A, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x52, 0x96, 0x87, 0x80, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x1E, 0x85, 0xA9, 0x4A, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x52, 0xB6, 0x0F, 0x80, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x3E, 0x0D, 0xA9, 0x4A, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x52, 0x96, 0x85, 0xA9, 0x4A, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x3E, 0x0F, 0x80, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x52, 0xB6, 0x0D, 0xA9, 0x4A, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x21, 0x3E, 0x0F, 0x80, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x52, 0x95, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x3E, 0x0F, 0x90, 0x84, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x01, 0xF5, 0x29, 0x4A, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x52, 0x94, 0xF0, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x21, 0x0E, 0x43, 0x80, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x0E, 0x43, 0x90, 0x84, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0xF5, 0x29, 0x4A, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x52, 0x95, 0xF5, 0x29, 0x4A, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x21, 0x3E, 0x4F, 0x90, 0x84, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x21, 0x09, 0xC0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x72, 0x10, 0x84, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x0F, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE7, 0x39, 0xCE, 0x73, 0x9C, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x18, 0xC6, 0x31, 0x8C, 0x63, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x00, 0xD9, 0x49, 0xA0, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x25, 0xE9, 0x4B, 0x90, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x03, 0x90, 0x84, 0x21, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x1C, 0xA5, 0x29, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x07, 0xD2, 0x44, 0x47, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x1F, 0x29, 0x49, 0x80, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x01, 0x29, 0x4B, 0xB0, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x04, 0xD4, 0x42, 0x10, 0x80, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x01, 0x08, 0xE8, 0xB8, 0x84, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x1D, 0x1F, 0xC5, 0xC0, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x1D, 0x18, 0xAB, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x64, 0x10, 0xC9, 0x49, 0x80, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0xEA, 0xD5, 0xC0, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x02, 0xEA, 0xA6, 0xC0, // /* code=237, hex=0xED, ascii="!m" */ + // 0x01, 0x90, 0xE4, 0x20, 0xC0, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x03, 0x25, 0x29, 0x4A, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x3C, 0x0F, 0x03, 0xC0, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x09, 0xF2, 0x03, 0xE0, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x02, 0x08, 0x22, 0x23, 0xC0, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x88, 0x82, 0x09, 0xC0, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x06, 0x52, 0x10, 0x84, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x21, 0x08, 0x4A, 0x60, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x18, 0x0F, 0x01, 0x80, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x15, 0x40, 0x2A, 0x80, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x08, 0xA2, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0xC6, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x40, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x06, 0x22, 0x51, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x03, 0x14, 0xA0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x03, 0x04, 0x47, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x00, 0xE7, 0x38, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_6x8.h b/wled00/src/font/console_font_6x8.h index 137c9cf109..3fbe0b4054 100644 --- a/wled00/src/font/console_font_6x8.h +++ b/wled00/src/font/console_font_6x8.h @@ -1,3078 +1,299 @@ // font courtesy of https://github.com/idispatch/raster-fonts -static const unsigned char console_font_6x8[] PROGMEM = { // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion - // /* - // * code=0, hex=0x00, ascii="^@" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=1, hex=0x01, ascii="^A" - // */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x6C, /* 011011 */ - // 0x44, /* 010001 */ - // 0x54, /* 010101 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=2, hex=0x02, ascii="^B" - // */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x54, /* 010101 */ - // 0x7C, /* 011111 */ - // 0x44, /* 010001 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=3, hex=0x03, ascii="^C" - // */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=4, hex=0x04, ascii="^D" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=5, hex=0x05, ascii="^E" - // */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=6, hex=0x06, ascii="^F" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=7, hex=0x07, ascii="^G" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=8, hex=0x08, ascii="^H" - // */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xCC, /* 110011 */ - // 0xCC, /* 110011 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - - // /* - // * code=9, hex=0x09, ascii="^I" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=10, hex=0x0A, ascii="^J" - // */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0x84, /* 100001 */ - // 0xB4, /* 101101 */ - // 0xB4, /* 101101 */ - // 0x84, /* 100001 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - - // /* - // * code=11, hex=0x0B, ascii="^K" - // */ - // 0x00, /* 000000 */ - // 0x1C, /* 000111 */ - // 0x0C, /* 000011 */ - // 0x34, /* 001101 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=12, hex=0x0C, ascii="^L" - // */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=13, hex=0x0D, ascii="^M" - // */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x14, /* 000101 */ - // 0x10, /* 000100 */ - // 0x30, /* 001100 */ - // 0x70, /* 011100 */ - // 0x60, /* 011000 */ - // 0x00, /* 000000 */ - - // /* - // * code=14, hex=0x0E, ascii="^N" - // */ - // 0x0C, /* 000011 */ - // 0x34, /* 001101 */ - // 0x2C, /* 001011 */ - // 0x34, /* 001101 */ - // 0x2C, /* 001011 */ - // 0x6C, /* 011011 */ - // 0x60, /* 011000 */ - // 0x00, /* 000000 */ - - // /* - // * code=15, hex=0x0F, ascii="^O" - // */ - // 0x00, /* 000000 */ - // 0x54, /* 010101 */ - // 0x38, /* 001110 */ - // 0x6C, /* 011011 */ - // 0x38, /* 001110 */ - // 0x54, /* 010101 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=16, hex=0x10, ascii="^P" - // */ - // 0x20, /* 001000 */ - // 0x30, /* 001100 */ - // 0x38, /* 001110 */ - // 0x3C, /* 001111 */ - // 0x38, /* 001110 */ - // 0x30, /* 001100 */ - // 0x20, /* 001000 */ - // 0x00, /* 000000 */ - - // /* - // * code=17, hex=0x11, ascii="^Q" - // */ - // 0x08, /* 000010 */ - // 0x18, /* 000110 */ - // 0x38, /* 001110 */ - // 0x78, /* 011110 */ - // 0x38, /* 001110 */ - // 0x18, /* 000110 */ - // 0x08, /* 000010 */ - // 0x00, /* 000000 */ - - // /* - // * code=18, hex=0x12, ascii="^R" - // */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=19, hex=0x13, ascii="^S" - // */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=20, hex=0x14, ascii="^T" - // */ - // 0x3C, /* 001111 */ - // 0x54, /* 010101 */ - // 0x54, /* 010101 */ - // 0x34, /* 001101 */ - // 0x14, /* 000101 */ - // 0x14, /* 000101 */ - // 0x14, /* 000101 */ - // 0x00, /* 000000 */ - - // /* - // * code=21, hex=0x15, ascii="^U" - // */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x30, /* 001100 */ - // 0x28, /* 001010 */ - // 0x18, /* 000110 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=22, hex=0x16, ascii="^V" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - - // /* - // * code=23, hex=0x17, ascii="^W" - // */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - - // /* - // * code=24, hex=0x18, ascii="^X" - // */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=25, hex=0x19, ascii="^Y" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=26, hex=0x1A, ascii="^Z" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x7C, /* 011111 */ - // 0x18, /* 000110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=27, hex=0x1B, ascii="^[" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x30, /* 001100 */ - // 0x7C, /* 011111 */ - // 0x30, /* 001100 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=28, hex=0x1C, ascii="^\" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - - // /* - // * code=29, hex=0x1D, ascii="^]" - // */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x7C, /* 011111 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=30, hex=0x1E, ascii="^^" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x38, /* 001110 */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=31, hex=0x1F, ascii="^_" - // */ - // 0x7C, /* 011111 */ - // 0x7C, /* 011111 */ - // 0x38, /* 001110 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - /* - * code=32, hex=0x20, ascii=" " - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=33, hex=0x21, ascii="!" - */ - 0x10, /* 000100 */ - 0x38, /* 001110 */ - 0x38, /* 001110 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=34, hex=0x22, ascii=""" - */ - 0x6C, /* 011011 */ - 0x6C, /* 011011 */ - 0x48, /* 010010 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=35, hex=0x23, ascii="#" - */ - 0x00, /* 000000 */ - 0x28, /* 001010 */ - 0x7C, /* 011111 */ - 0x28, /* 001010 */ - 0x28, /* 001010 */ - 0x7C, /* 011111 */ - 0x28, /* 001010 */ - 0x00, /* 000000 */ - - /* - * code=36, hex=0x24, ascii="$" - */ - 0x20, /* 001000 */ - 0x38, /* 001110 */ - 0x40, /* 010000 */ - 0x30, /* 001100 */ - 0x08, /* 000010 */ - 0x70, /* 011100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=37, hex=0x25, ascii="%" - */ - 0x64, /* 011001 */ - 0x64, /* 011001 */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x4C, /* 010011 */ - 0x4C, /* 010011 */ - 0x00, /* 000000 */ - - /* - * code=38, hex=0x26, ascii="&" - */ - 0x20, /* 001000 */ - 0x50, /* 010100 */ - 0x50, /* 010100 */ - 0x20, /* 001000 */ - 0x54, /* 010101 */ - 0x48, /* 010010 */ - 0x34, /* 001101 */ - 0x00, /* 000000 */ - - /* - * code=39, hex=0x27, ascii="'" - */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x20, /* 001000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=40, hex=0x28, ascii="(" - */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=41, hex=0x29, ascii=")" - */ - 0x20, /* 001000 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x00, /* 000000 */ - - /* - * code=42, hex=0x2A, ascii="*" - */ - 0x00, /* 000000 */ - 0x28, /* 001010 */ - 0x38, /* 001110 */ - 0x7C, /* 011111 */ - 0x38, /* 001110 */ - 0x28, /* 001010 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=43, hex=0x2B, ascii="+" - */ - 0x00, /* 000000 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x7C, /* 011111 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=44, hex=0x2C, ascii="," - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x20, /* 001000 */ - - /* - * code=45, hex=0x2D, ascii="-" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=46, hex=0x2E, ascii="." - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - - /* - * code=47, hex=0x2F, ascii="/" - */ - 0x00, /* 000000 */ - 0x04, /* 000001 */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x40, /* 010000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=48, hex=0x30, ascii="0" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x4C, /* 010011 */ - 0x54, /* 010101 */ - 0x64, /* 011001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=49, hex=0x31, ascii="1" - */ - 0x10, /* 000100 */ - 0x30, /* 001100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=50, hex=0x32, ascii="2" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x04, /* 000001 */ - 0x18, /* 000110 */ - 0x20, /* 001000 */ - 0x40, /* 010000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - - /* - * code=51, hex=0x33, ascii="3" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x04, /* 000001 */ - 0x38, /* 001110 */ - 0x04, /* 000001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=52, hex=0x34, ascii="4" - */ - 0x08, /* 000010 */ - 0x18, /* 000110 */ - 0x28, /* 001010 */ - 0x48, /* 010010 */ - 0x7C, /* 011111 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x00, /* 000000 */ - - /* - * code=53, hex=0x35, ascii="5" - */ - 0x7C, /* 011111 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x04, /* 000001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=54, hex=0x36, ascii="6" - */ - 0x18, /* 000110 */ - 0x20, /* 001000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=55, hex=0x37, ascii="7" - */ - 0x7C, /* 011111 */ - 0x04, /* 000001 */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x00, /* 000000 */ - - /* - * code=56, hex=0x38, ascii="8" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=57, hex=0x39, ascii="9" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x04, /* 000001 */ - 0x08, /* 000010 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - - /* - * code=58, hex=0x3A, ascii=":" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - - /* - * code=59, hex=0x3B, ascii=";" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x20, /* 001000 */ - - /* - * code=60, hex=0x3C, ascii="<" - */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x40, /* 010000 */ - 0x20, /* 001000 */ - 0x10, /* 000100 */ - 0x08, /* 000010 */ - 0x00, /* 000000 */ - - /* - * code=61, hex=0x3D, ascii="=" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=62, hex=0x3E, ascii=">" - */ - 0x20, /* 001000 */ - 0x10, /* 000100 */ - 0x08, /* 000010 */ - 0x04, /* 000001 */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x00, /* 000000 */ - - /* - * code=63, hex=0x3F, ascii="?" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x04, /* 000001 */ - 0x18, /* 000110 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=64, hex=0x40, ascii="@" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x5C, /* 010111 */ - 0x54, /* 010101 */ - 0x5C, /* 010111 */ - 0x40, /* 010000 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=65, hex=0x41, ascii="A" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x7C, /* 011111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=66, hex=0x42, ascii="B" - */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x00, /* 000000 */ - - /* - * code=67, hex=0x43, ascii="C" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=68, hex=0x44, ascii="D" - */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x00, /* 000000 */ - - /* - * code=69, hex=0x45, ascii="E" - */ - 0x7C, /* 011111 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - - /* - * code=70, hex=0x46, ascii="F" - */ - 0x7C, /* 011111 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x00, /* 000000 */ - - /* - * code=71, hex=0x47, ascii="G" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x40, /* 010000 */ - 0x5C, /* 010111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x00, /* 000000 */ - - /* - * code=72, hex=0x48, ascii="H" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x7C, /* 011111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=73, hex=0x49, ascii="I" - */ - 0x38, /* 001110 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=74, hex=0x4A, ascii="J" - */ - 0x04, /* 000001 */ - 0x04, /* 000001 */ - 0x04, /* 000001 */ - 0x04, /* 000001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=75, hex=0x4B, ascii="K" - */ - 0x44, /* 010001 */ - 0x48, /* 010010 */ - 0x50, /* 010100 */ - 0x60, /* 011000 */ - 0x50, /* 010100 */ - 0x48, /* 010010 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=76, hex=0x4C, ascii="L" - */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x7C, /* 011111 */ - 0x00, /* 000000 */ - - /* - * code=77, hex=0x4D, ascii="M" - */ - 0x44, /* 010001 */ - 0x6C, /* 011011 */ - 0x54, /* 010101 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=78, hex=0x4E, ascii="N" - */ - 0x44, /* 010001 */ - 0x64, /* 011001 */ - 0x54, /* 010101 */ - 0x4C, /* 010011 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=79, hex=0x4F, ascii="O" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=80, hex=0x50, ascii="P" - */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x00, /* 000000 */ - - /* - * code=81, hex=0x51, ascii="Q" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x54, /* 010101 */ - 0x48, /* 010010 */ - 0x34, /* 001101 */ - 0x00, /* 000000 */ - - /* - * code=82, hex=0x52, ascii="R" - */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x48, /* 010010 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=83, hex=0x53, ascii="S" - */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x40, /* 010000 */ - 0x38, /* 001110 */ - 0x04, /* 000001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=84, hex=0x54, ascii="T" - */ - 0x7C, /* 011111 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=85, hex=0x55, ascii="U" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=86, hex=0x56, ascii="V" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x28, /* 001010 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=87, hex=0x57, ascii="W" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x54, /* 010101 */ - 0x54, /* 010101 */ - 0x54, /* 010101 */ - 0x54, /* 010101 */ - 0x28, /* 001010 */ - 0x00, /* 000000 */ - - /* - * code=88, hex=0x58, ascii="X" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x28, /* 001010 */ - 0x10, /* 000100 */ - 0x28, /* 001010 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=89, hex=0x59, ascii="Y" - */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x28, /* 001010 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=90, hex=0x5A, ascii="Z" - */ - 0x78, /* 011110 */ - 0x08, /* 000010 */ - 0x10, /* 000100 */ - 0x20, /* 001000 */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x00, /* 000000 */ - - /* - * code=91, hex=0x5B, ascii="[" - */ - 0x38, /* 001110 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=92, hex=0x5C, ascii="\" - */ - 0x00, /* 000000 */ - 0x40, /* 010000 */ - 0x20, /* 001000 */ - 0x10, /* 000100 */ - 0x08, /* 000010 */ - 0x04, /* 000001 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=93, hex=0x5D, ascii="]" - */ - 0x38, /* 001110 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=94, hex=0x5E, ascii="^" - */ - 0x10, /* 000100 */ - 0x28, /* 001010 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=95, hex=0x5F, ascii="_" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0xFC, /* 111111 */ - - /* - * code=96, hex=0x60, ascii="`" - */ - 0x30, /* 001100 */ - 0x30, /* 001100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - /* - * code=97, hex=0x61, ascii="a" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x38, /* 001110 */ - 0x04, /* 000001 */ - 0x3C, /* 001111 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x00, /* 000000 */ - - /* - * code=98, hex=0x62, ascii="b" - */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x00, /* 000000 */ - - /* - * code=99, hex=0x63, ascii="c" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x40, /* 010000 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=100, hex=0x64, ascii="d" - */ - 0x04, /* 000001 */ - 0x04, /* 000001 */ - 0x3C, /* 001111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x00, /* 000000 */ - - /* - * code=101, hex=0x65, ascii="e" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x40, /* 010000 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=102, hex=0x66, ascii="f" - */ - 0x18, /* 000110 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x78, /* 011110 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x00, /* 000000 */ - - /* - * code=103, hex=0x67, ascii="g" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x3C, /* 001111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x04, /* 000001 */ - 0x38, /* 001110 */ - - /* - * code=104, hex=0x68, ascii="h" - */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x70, /* 011100 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x00, /* 000000 */ - - /* - * code=105, hex=0x69, ascii="i" - */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x18, /* 000110 */ - 0x00, /* 000000 */ - - /* - * code=106, hex=0x6A, ascii="j" - */ - 0x08, /* 000010 */ - 0x00, /* 000000 */ - 0x18, /* 000110 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x48, /* 010010 */ - 0x30, /* 001100 */ - - /* - * code=107, hex=0x6B, ascii="k" - */ - 0x40, /* 010000 */ - 0x40, /* 010000 */ - 0x48, /* 010010 */ - 0x50, /* 010100 */ - 0x60, /* 011000 */ - 0x50, /* 010100 */ - 0x48, /* 010010 */ - 0x00, /* 000000 */ - - /* - * code=108, hex=0x6C, ascii="l" - */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x18, /* 000110 */ - 0x00, /* 000000 */ - - /* - * code=109, hex=0x6D, ascii="m" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x68, /* 011010 */ - 0x54, /* 010101 */ - 0x54, /* 010101 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x00, /* 000000 */ - - /* - * code=110, hex=0x6E, ascii="n" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x70, /* 011100 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x00, /* 000000 */ - - /* - * code=111, hex=0x6F, ascii="o" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x38, /* 001110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=112, hex=0x70, ascii="p" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x78, /* 011110 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x78, /* 011110 */ - 0x40, /* 010000 */ - - /* - * code=113, hex=0x71, ascii="q" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x3C, /* 001111 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x3C, /* 001111 */ - 0x04, /* 000001 */ - - /* - * code=114, hex=0x72, ascii="r" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x58, /* 010110 */ - 0x24, /* 001001 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x70, /* 011100 */ - 0x00, /* 000000 */ - - /* - * code=115, hex=0x73, ascii="s" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x38, /* 001110 */ - 0x40, /* 010000 */ - 0x38, /* 001110 */ - 0x04, /* 000001 */ - 0x38, /* 001110 */ - 0x00, /* 000000 */ - - /* - * code=116, hex=0x74, ascii="t" - */ - 0x00, /* 000000 */ - 0x20, /* 001000 */ - 0x78, /* 011110 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x28, /* 001010 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=117, hex=0x75, ascii="u" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x58, /* 010110 */ - 0x28, /* 001010 */ - 0x00, /* 000000 */ - - /* - * code=118, hex=0x76, ascii="v" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x28, /* 001010 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=119, hex=0x77, ascii="w" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x44, /* 010001 */ - 0x44, /* 010001 */ - 0x54, /* 010101 */ - 0x7C, /* 011111 */ - 0x28, /* 001010 */ - 0x00, /* 000000 */ - - /* - * code=120, hex=0x78, ascii="x" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x30, /* 001100 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x00, /* 000000 */ - - /* - * code=121, hex=0x79, ascii="y" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x48, /* 010010 */ - 0x38, /* 001110 */ - 0x10, /* 000100 */ - 0x60, /* 011000 */ - - /* - * code=122, hex=0x7A, ascii="z" - */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x78, /* 011110 */ - 0x08, /* 000010 */ - 0x30, /* 001100 */ - 0x40, /* 010000 */ - 0x78, /* 011110 */ - 0x00, /* 000000 */ - - /* - * code=123, hex=0x7B, ascii="{" - */ - 0x18, /* 000110 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x60, /* 011000 */ - 0x20, /* 001000 */ - 0x20, /* 001000 */ - 0x18, /* 000110 */ - 0x00, /* 000000 */ - - /* - * code=124, hex=0x7C, ascii="|" - */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x10, /* 000100 */ - 0x00, /* 000000 */ - - /* - * code=125, hex=0x7D, ascii="}" - */ - 0x30, /* 001100 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x0C, /* 000011 */ - 0x08, /* 000010 */ - 0x08, /* 000010 */ - 0x30, /* 001100 */ - 0x00, /* 000000 */ - - /* - * code=126, hex=0x7E, ascii="~" - */ - 0x28, /* 001010 */ - 0x50, /* 010100 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - 0x00, /* 000000 */ - - // /* - // * code=127, hex=0x7F, ascii="^?" - // */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x6C, /* 011011 */ - // 0x44, /* 010001 */ - // 0x44, /* 010001 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (10 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed glyph width: 6 + * [3] Flags: 0x00 (fixed width) + * [4] First Char: 32 + * [5] Last Char: 126 + * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 + * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of the stream, padding bits are added if necessary to fill the last byte + */ - // /* - // * code=128, hex=0x80, ascii="!^@" - // */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x30, /* 001100 */ - - // /* - // * code=129, hex=0x81, ascii="!^A" - // */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x58, /* 010110 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=130, hex=0x82, ascii="!^B" - // */ - // 0x0C, /* 000011 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=131, hex=0x83, ascii="!^C" - // */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=132, hex=0x84, ascii="!^D" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=133, hex=0x85, ascii="!^E" - // */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=134, hex=0x86, ascii="!^F" - // */ - // 0x38, /* 001110 */ - // 0x28, /* 001010 */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=135, hex=0x87, ascii="!^G" - // */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x40, /* 010000 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x30, /* 001100 */ - - // /* - // * code=136, hex=0x88, ascii="!^H" - // */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=137, hex=0x89, ascii="!^I" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=138, hex=0x8A, ascii="!^J" - // */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=139, hex=0x8B, ascii="!^K" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - - // /* - // * code=140, hex=0x8C, ascii="!^L" - // */ - // 0x10, /* 000100 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - - // /* - // * code=141, hex=0x8D, ascii="!^M" - // */ - // 0x20, /* 001000 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - - // /* - // * code=142, hex=0x8E, ascii="!^N" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x28, /* 001010 */ - // 0x44, /* 010001 */ - // 0x7C, /* 011111 */ - // 0x44, /* 010001 */ - // 0x00, /* 000000 */ - - // /* - // * code=143, hex=0x8F, ascii="!^O" - // */ - // 0x38, /* 001110 */ - // 0x28, /* 001010 */ - // 0x38, /* 001110 */ - // 0x6C, /* 011011 */ - // 0x44, /* 010001 */ - // 0x7C, /* 011111 */ - // 0x44, /* 010001 */ - // 0x00, /* 000000 */ - - // /* - // * code=144, hex=0x90, ascii="!^P" - // */ - // 0x0C, /* 000011 */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x40, /* 010000 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - - // /* - // * code=145, hex=0x91, ascii="!^Q" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x14, /* 000101 */ - // 0x7C, /* 011111 */ - // 0x50, /* 010100 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=146, hex=0x92, ascii="!^R" - // */ - // 0x3C, /* 001111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x7C, /* 011111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x5C, /* 010111 */ - // 0x00, /* 000000 */ - - // /* - // * code=147, hex=0x93, ascii="!^S" - // */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=148, hex=0x94, ascii="!^T" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=149, hex=0x95, ascii="!^U" - // */ - // 0x60, /* 011000 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=150, hex=0x96, ascii="!^V" - // */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x58, /* 010110 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=151, hex=0x97, ascii="!^W" - // */ - // 0x60, /* 011000 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x58, /* 010110 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=152, hex=0x98, ascii="!^X" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x60, /* 011000 */ - - // /* - // * code=153, hex=0x99, ascii="!^Y" - // */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=154, hex=0x9A, ascii="!^Z" - // */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=155, hex=0x9B, ascii="!^[" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=156, hex=0x9C, ascii="!^\" - // */ - // 0x18, /* 000110 */ - // 0x24, /* 001001 */ - // 0x20, /* 001000 */ - // 0x78, /* 011110 */ - // 0x20, /* 001000 */ - // 0x24, /* 001001 */ - // 0x5C, /* 010111 */ - // 0x00, /* 000000 */ - - // /* - // * code=157, hex=0x9D, ascii="!^]" - // */ - // 0x44, /* 010001 */ - // 0x28, /* 001010 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x7C, /* 011111 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=158, hex=0x9E, ascii="!^^" - // */ - // 0x60, /* 011000 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x68, /* 011010 */ - // 0x5C, /* 010111 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - - // /* - // * code=159, hex=0x9F, ascii="!^_" - // */ - // 0x08, /* 000010 */ - // 0x14, /* 000101 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x50, /* 010100 */ - // 0x20, /* 001000 */ - - // /* - // * code=160, hex=0xA0, ascii="! " - // */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=161, hex=0xA1, ascii="!!" - // */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - - // /* - // * code=162, hex=0xA2, ascii="!"" - // */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=163, hex=0xA3, ascii="!#" - // */ - // 0x18, /* 000110 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x58, /* 010110 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=164, hex=0xA4, ascii="!$" - // */ - // 0x28, /* 001010 */ - // 0x50, /* 010100 */ - // 0x00, /* 000000 */ - // 0x70, /* 011100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - - // /* - // * code=165, hex=0xA5, ascii="!%" - // */ - // 0x28, /* 001010 */ - // 0x50, /* 010100 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x68, /* 011010 */ - // 0x58, /* 010110 */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - - // /* - // * code=166, hex=0xA6, ascii="!&" - // */ - // 0x38, /* 001110 */ - // 0x04, /* 000001 */ - // 0x3C, /* 001111 */ - // 0x44, /* 010001 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - // 0x3C, /* 001111 */ - // 0x00, /* 000000 */ - - // /* - // * code=167, hex=0xA7, ascii="!'" - // */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - - // /* - // * code=168, hex=0xA8, ascii="!(" - // */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x30, /* 001100 */ - // 0x40, /* 010000 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=169, hex=0xA9, ascii="!)" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=170, hex=0xAA, ascii="!*" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x04, /* 000001 */ - // 0x04, /* 000001 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=171, hex=0xAB, ascii="!+" - // */ - // 0x40, /* 010000 */ - // 0x48, /* 010010 */ - // 0x50, /* 010100 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x08, /* 000010 */ - // 0x1C, /* 000111 */ - // 0x00, /* 000000 */ - - // /* - // * code=172, hex=0xAC, ascii="!," - // */ - // 0x40, /* 010000 */ - // 0x48, /* 010010 */ - // 0x50, /* 010100 */ - // 0x2C, /* 001011 */ - // 0x54, /* 010101 */ - // 0x1C, /* 000111 */ - // 0x04, /* 000001 */ - // 0x00, /* 000000 */ - - // /* - // * code=173, hex=0xAD, ascii="!-" - // */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=174, hex=0xAE, ascii="!." - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x24, /* 001001 */ - // 0x48, /* 010010 */ - // 0x24, /* 001001 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=175, hex=0xAF, ascii="!/" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x24, /* 001001 */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=176, hex=0xB0, ascii="!0" - // */ - // 0x54, /* 010101 */ - // 0x00, /* 000000 */ - // 0xA8, /* 101010 */ - // 0x00, /* 000000 */ - // 0x54, /* 010101 */ - // 0x00, /* 000000 */ - // 0xA8, /* 101010 */ - // 0x00, /* 000000 */ - - // /* - // * code=177, hex=0xB1, ascii="!1" - // */ - // 0x54, /* 010101 */ - // 0xA8, /* 101010 */ - // 0x54, /* 010101 */ - // 0xA8, /* 101010 */ - // 0x54, /* 010101 */ - // 0xA8, /* 101010 */ - // 0x54, /* 010101 */ - // 0xA8, /* 101010 */ - - // /* - // * code=178, hex=0xB2, ascii="!2" - // */ - // 0xA8, /* 101010 */ - // 0xFC, /* 111111 */ - // 0x54, /* 010101 */ - // 0xFC, /* 111111 */ - // 0xA8, /* 101010 */ - // 0xFC, /* 111111 */ - // 0x54, /* 010101 */ - // 0xFC, /* 111111 */ - - // /* - // * code=179, hex=0xB3, ascii="!3" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=180, hex=0xB4, ascii="!4" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=181, hex=0xB5, ascii="!5" - // */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=182, hex=0xB6, ascii="!6" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0xD0, /* 110100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=183, hex=0xB7, ascii="!7" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xF0, /* 111100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=184, hex=0xB8, ascii="!8" - // */ - // 0x00, /* 000000 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=185, hex=0xB9, ascii="!9" - // */ - // 0x50, /* 010100 */ - // 0xD0, /* 110100 */ - // 0x10, /* 000100 */ - // 0xD0, /* 110100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=186, hex=0xBA, ascii="!:" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=187, hex=0xBB, ascii="!;" - // */ - // 0x00, /* 000000 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0xD0, /* 110100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=188, hex=0xBC, ascii="!<" - // */ - // 0x50, /* 010100 */ - // 0xD0, /* 110100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=189, hex=0xBD, ascii="!=" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0xF0, /* 111100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=190, hex=0xBE, ascii="!>" - // */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=191, hex=0xBF, ascii="!?" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xF0, /* 111100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=192, hex=0xC0, ascii="!@" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=193, hex=0xC1, ascii="!A" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=194, hex=0xC2, ascii="!B" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=195, hex=0xC3, ascii="!C" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=196, hex=0xC4, ascii="!D" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=197, hex=0xC5, ascii="!E" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0xFC, /* 111111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=198, hex=0xC6, ascii="!F" - // */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=199, hex=0xC7, ascii="!G" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x5C, /* 010111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=200, hex=0xC8, ascii="!H" - // */ - // 0x50, /* 010100 */ - // 0x5C, /* 010111 */ - // 0x40, /* 010000 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=201, hex=0xC9, ascii="!I" - // */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x40, /* 010000 */ - // 0x5C, /* 010111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=202, hex=0xCA, ascii="!J" - // */ - // 0x50, /* 010100 */ - // 0xDC, /* 110111 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=203, hex=0xCB, ascii="!K" - // */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0xDC, /* 110111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=204, hex=0xCC, ascii="!L" - // */ - // 0x50, /* 010100 */ - // 0x5C, /* 010111 */ - // 0x40, /* 010000 */ - // 0x5C, /* 010111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=205, hex=0xCD, ascii="!M" - // */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=206, hex=0xCE, ascii="!N" - // */ - // 0x50, /* 010100 */ - // 0xDC, /* 110111 */ - // 0x00, /* 000000 */ - // 0xDC, /* 110111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=207, hex=0xCF, ascii="!O" - // */ - // 0x10, /* 000100 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=208, hex=0xD0, ascii="!P" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=209, hex=0xD1, ascii="!Q" - // */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=210, hex=0xD2, ascii="!R" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=211, hex=0xD3, ascii="!S" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=212, hex=0xD4, ascii="!T" - // */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=213, hex=0xD5, ascii="!U" - // */ - // 0x00, /* 000000 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=214, hex=0xD6, ascii="!V" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=215, hex=0xD7, ascii="!W" - // */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0xDC, /* 110111 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - - // /* - // * code=216, hex=0xD8, ascii="!X" - // */ - // 0x10, /* 000100 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=217, hex=0xD9, ascii="!Y" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0xF0, /* 111100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=218, hex=0xDA, ascii="!Z" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=219, hex=0xDB, ascii="![" - // */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - - // /* - // * code=220, hex=0xDC, ascii="!\" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - - // /* - // * code=221, hex=0xDD, ascii="!]" - // */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - // 0xE0, /* 111000 */ - - // /* - // * code=222, hex=0xDE, ascii="!^" - // */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - // 0x1C, /* 000111 */ - - // /* - // * code=223, hex=0xDF, ascii="!_" - // */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0xFC, /* 111111 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=224, hex=0xE0, ascii="!`" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x34, /* 001101 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x34, /* 001101 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=225, hex=0xE1, ascii="!a" - // */ - // 0x00, /* 000000 */ - // 0x70, /* 011100 */ - // 0x48, /* 010010 */ - // 0x70, /* 011100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x70, /* 011100 */ - // 0x40, /* 010000 */ - - // /* - // * code=226, hex=0xE2, ascii="!b" - // */ - // 0x78, /* 011110 */ - // 0x48, /* 010010 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - // 0x00, /* 000000 */ - - // /* - // * code=227, hex=0xE3, ascii="!c" - // */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - - // /* - // * code=228, hex=0xE4, ascii="!d" - // */ - // 0x78, /* 011110 */ - // 0x48, /* 010010 */ - // 0x20, /* 001000 */ - // 0x10, /* 000100 */ - // 0x20, /* 001000 */ - // 0x48, /* 010010 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - - // /* - // * code=229, hex=0xE5, ascii="!e" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x3C, /* 001111 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=230, hex=0xE6, ascii="!f" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x70, /* 011100 */ - // 0x40, /* 010000 */ - // 0x40, /* 010000 */ - - // /* - // * code=231, hex=0xE7, ascii="!g" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x50, /* 010100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=232, hex=0xE8, ascii="!h" - // */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - - // /* - // * code=233, hex=0xE9, ascii="!i" - // */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x78, /* 011110 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=234, hex=0xEA, ascii="!j" - // */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x44, /* 010001 */ - // 0x44, /* 010001 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x6C, /* 011011 */ - // 0x00, /* 000000 */ - - // /* - // * code=235, hex=0xEB, ascii="!k" - // */ - // 0x30, /* 001100 */ - // 0x40, /* 010000 */ - // 0x20, /* 001000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - - // /* - // * code=236, hex=0xEC, ascii="!l" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x54, /* 010101 */ - // 0x54, /* 010101 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=237, hex=0xED, ascii="!m" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x54, /* 010101 */ - // 0x54, /* 010101 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - - // /* - // * code=238, hex=0xEE, ascii="!n" - // */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x40, /* 010000 */ - // 0x78, /* 011110 */ - // 0x40, /* 010000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=239, hex=0xEF, ascii="!o" - // */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=240, hex=0xF0, ascii="!p" - // */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=241, hex=0xF1, ascii="!q" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x38, /* 001110 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x38, /* 001110 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=242, hex=0xF2, ascii="!r" - // */ - // 0x40, /* 010000 */ - // 0x30, /* 001100 */ - // 0x08, /* 000010 */ - // 0x30, /* 001100 */ - // 0x40, /* 010000 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - - // /* - // * code=243, hex=0xF3, ascii="!s" - // */ - // 0x08, /* 000010 */ - // 0x30, /* 001100 */ - // 0x40, /* 010000 */ - // 0x30, /* 001100 */ - // 0x08, /* 000010 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - - // /* - // * code=244, hex=0xF4, ascii="!t" - // */ - // 0x00, /* 000000 */ - // 0x08, /* 000010 */ - // 0x14, /* 000101 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - - // /* - // * code=245, hex=0xF5, ascii="!u" - // */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x50, /* 010100 */ - // 0x20, /* 001000 */ - // 0x00, /* 000000 */ - - // /* - // * code=246, hex=0xF6, ascii="!v" - // */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x7C, /* 011111 */ - // 0x00, /* 000000 */ - // 0x10, /* 000100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=247, hex=0xF7, ascii="!w" - // */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x50, /* 010100 */ - // 0x00, /* 000000 */ - // 0x28, /* 001010 */ - // 0x50, /* 010100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=248, hex=0xF8, ascii="!x" - // */ - // 0x30, /* 001100 */ - // 0x48, /* 010010 */ - // 0x48, /* 010010 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=249, hex=0xF9, ascii="!y" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x30, /* 001100 */ - // 0x30, /* 001100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=250, hex=0xFA, ascii="!z" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x20, /* 001000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=251, hex=0xFB, ascii="!{" - // */ - // 0x00, /* 000000 */ - // 0x1C, /* 000111 */ - // 0x10, /* 000100 */ - // 0x10, /* 000100 */ - // 0x50, /* 010100 */ - // 0x50, /* 010100 */ - // 0x20, /* 001000 */ - // 0x00, /* 000000 */ - - // /* - // * code=252, hex=0xFC, ascii="!|" - // */ - // 0x50, /* 010100 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x28, /* 001010 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=253, hex=0xFD, ascii="!}" - // */ - // 0x60, /* 011000 */ - // 0x10, /* 000100 */ - // 0x20, /* 001000 */ - // 0x70, /* 011100 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=254, hex=0xFE, ascii="!~" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x78, /* 011110 */ - // 0x78, /* 011110 */ - // 0x78, /* 011110 */ - // 0x78, /* 011110 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - - // /* - // * code=255, hex=0xFF, ascii="!^ź" - // */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00, /* 000000 */ - // 0x00 /* 000000 */ +static const unsigned char console_font_6x8[] PROGMEM = { + 0x57, 0x08, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x39, 0x16, 0xD1, 0x55, 0x13, 0x80, // /* code=1, hex=0x01, ascii="^A" */ + // 0x39, 0xF5, 0x5F, 0x45, 0xF3, 0x80, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xA7, 0xDF, 0x7C, 0xE1, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x43, 0x9F, 0x7C, 0xE1, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x10, 0xE3, 0x84, 0x7D, 0xF1, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x43, 0x9F, 0x7C, 0x43, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0xF3, 0xCF, 0xFF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x07, 0x92, 0x49, 0xE0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xF8, 0x6D, 0xB6, 0x1F, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x70, 0xCD, 0x49, 0x23, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x39, 0x14, 0x4E, 0x10, 0xE1, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x10, 0x61, 0x44, 0x31, 0xC6, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x0C, 0xD2, 0xCD, 0x2D, 0xB6, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x01, 0x53, 0x9B, 0x39, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x20, 0xC3, 0x8F, 0x38, 0xC2, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x08, 0x63, 0x9E, 0x38, 0x60, 0x80, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x28, 0xA2, 0x8A, 0x28, 0x02, 0x80, // /* code=19, hex=0x13, ascii="^S" */ + // 0x3D, 0x55, 0x4D, 0x14, 0x51, 0x40, // /* code=20, hex=0x14, ascii="^T" */ + // 0x39, 0x13, 0x0A, 0x19, 0x13, 0x80, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x01, 0xE7, 0x80, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x0E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x10, 0xE7, 0xC4, 0x10, 0x41, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x10, 0x41, 0x04, 0x7C, 0xE1, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x41, 0x9F, 0x18, 0x40, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x43, 0x1F, 0x30, 0x40, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x10, 0x41, 0x07, 0xC0, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0xA2, 0x9F, 0x28, 0xA0, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x10, 0x43, 0x8E, 0x7D, 0xF0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x7D, 0xF3, 0x8E, 0x10, 0x40, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x10, 0xE3, 0x84, 0x10, 0x01, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x6D, 0xB4, 0x80, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xA7, 0xCA, 0x29, 0xF2, 0x80, /* code=35, hex=0x23, ascii="#" */ + 0x20, 0xE4, 0x0C, 0x09, 0xC1, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x65, 0x90, 0x84, 0x21, 0x34, 0xC0, /* code=37, hex=0x25, ascii="%" */ + 0x21, 0x45, 0x08, 0x55, 0x23, 0x40, /* code=38, hex=0x26, ascii="&" */ + 0x30, 0xC2, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x10, 0x82, 0x08, 0x20, 0x81, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x20, 0x41, 0x04, 0x10, 0x42, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0xA3, 0x9F, 0x38, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x41, 0x1F, 0x10, 0x40, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x08, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x39, 0x14, 0xD5, 0x65, 0x13, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x10, 0xC1, 0x04, 0x10, 0x43, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x39, 0x10, 0x46, 0x21, 0x07, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x39, 0x10, 0x4E, 0x05, 0x13, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x08, 0x62, 0x92, 0x7C, 0x20, 0x80, /* code=52, hex=0x34, ascii="4" */ + 0x7D, 0x04, 0x1E, 0x05, 0x13, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x18, 0x84, 0x1E, 0x45, 0x13, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x7C, 0x10, 0x84, 0x20, 0x82, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x39, 0x14, 0x4E, 0x45, 0x13, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x39, 0x14, 0x4F, 0x04, 0x23, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x08, /* code=59, hex=0x3B, ascii=";" */ + 0x08, 0x42, 0x10, 0x20, 0x40, 0x80, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x20, 0x40, 0x81, 0x08, 0x42, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x39, 0x10, 0x46, 0x10, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x39, 0x15, 0xD5, 0x5D, 0x03, 0x80, /* code=64, hex=0x40, ascii="@" */ + 0x39, 0x14, 0x51, 0x7D, 0x14, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x79, 0x14, 0x5E, 0x45, 0x17, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x39, 0x14, 0x10, 0x41, 0x13, 0x80, /* code=67, hex=0x43, ascii="C" */ + 0x79, 0x14, 0x51, 0x45, 0x17, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x7D, 0x04, 0x1E, 0x41, 0x07, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x7D, 0x04, 0x1E, 0x41, 0x04, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x39, 0x14, 0x17, 0x45, 0x13, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x45, 0x14, 0x5F, 0x45, 0x14, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x38, 0x41, 0x04, 0x10, 0x43, 0x80, /* code=73, hex=0x49, ascii="I" */ + 0x04, 0x10, 0x41, 0x45, 0x13, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x45, 0x25, 0x18, 0x51, 0x24, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x41, 0x04, 0x10, 0x41, 0x07, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x45, 0xB5, 0x51, 0x45, 0x14, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x45, 0x95, 0x53, 0x45, 0x14, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x39, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x79, 0x14, 0x5E, 0x41, 0x04, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x39, 0x14, 0x51, 0x55, 0x23, 0x40, /* code=81, hex=0x51, ascii="Q" */ + 0x79, 0x14, 0x5E, 0x49, 0x14, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x39, 0x14, 0x0E, 0x05, 0x13, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x7C, 0x41, 0x04, 0x10, 0x41, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x45, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x45, 0x14, 0x51, 0x44, 0xA1, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x45, 0x15, 0x55, 0x55, 0x52, 0x80, /* code=87, hex=0x57, ascii="W" */ + 0x45, 0x12, 0x84, 0x29, 0x14, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x45, 0x14, 0x4A, 0x10, 0x41, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x78, 0x21, 0x08, 0x41, 0x07, 0x80, /* code=90, hex=0x5A, ascii="Z" */ + 0x38, 0x82, 0x08, 0x20, 0x83, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x38, 0x20, 0x82, 0x08, 0x23, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x10, 0xA4, 0x40, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, /* code=95, hex=0x5F, ascii="_" */ + 0x30, 0xC1, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x03, 0x81, 0x3D, 0x13, 0xC0, /* code=97, hex=0x61, ascii="a" */ + 0x41, 0x07, 0x91, 0x45, 0x17, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x03, 0x91, 0x41, 0x13, 0x80, /* code=99, hex=0x63, ascii="c" */ + 0x04, 0x13, 0xD1, 0x45, 0x13, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x03, 0x91, 0x79, 0x03, 0x80, /* code=101, hex=0x65, ascii="e" */ + 0x18, 0x82, 0x1E, 0x20, 0x82, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x03, 0xD1, 0x44, 0xF0, 0x4E, /* code=103, hex=0x67, ascii="g" */ + 0x41, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=104, hex=0x68, ascii="h" */ + 0x10, 0x01, 0x04, 0x10, 0x41, 0x80, /* code=105, hex=0x69, ascii="i" */ + 0x08, 0x01, 0x82, 0x08, 0x24, 0x8C, /* code=106, hex=0x6A, ascii="j" */ + 0x41, 0x04, 0x94, 0x61, 0x44, 0x80, /* code=107, hex=0x6B, ascii="k" */ + 0x10, 0x41, 0x04, 0x10, 0x41, 0x80, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x06, 0x95, 0x55, 0x14, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x03, 0x91, 0x45, 0x13, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x07, 0x91, 0x45, 0x17, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x03, 0xD1, 0x45, 0x13, 0xC1, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x05, 0x89, 0x20, 0x87, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x03, 0x90, 0x38, 0x13, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x87, 0x88, 0x20, 0xA1, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x04, 0x92, 0x49, 0x62, 0x80, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x04, 0x51, 0x44, 0xA1, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x04, 0x51, 0x55, 0xF2, 0x80, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x04, 0x92, 0x31, 0x24, 0x80, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x04, 0x92, 0x48, 0xE1, 0x18, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x07, 0x82, 0x31, 0x07, 0x80, /* code=122, hex=0x7A, ascii="z" */ + 0x18, 0x82, 0x18, 0x20, 0x81, 0x80, /* code=123, hex=0x7B, ascii="{" */ + 0x10, 0x41, 0x00, 0x10, 0x41, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x30, 0x20, 0x83, 0x08, 0x23, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x29, 0x40, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x10, 0xE6, 0xD1, 0x45, 0xF0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x39, 0x14, 0x10, 0x44, 0xE1, 0x0C, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x48, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x38, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x28, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x30, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x38, 0xA3, 0x81, 0x3D, 0x13, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0xE4, 0x50, 0x44, 0xE1, 0x0C, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x38, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x28, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x30, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x28, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0xA0, 0x04, 0x10, 0x41, 0x80, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x20, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x28, 0x01, 0x0A, 0x45, 0xF4, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0xA3, 0x9B, 0x45, 0xF4, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x0C, 0x07, 0xD0, 0x79, 0x07, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x07, 0x85, 0x7D, 0x43, 0xC0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x3D, 0x45, 0x1F, 0x51, 0x45, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x38, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x28, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x60, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x38, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x60, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x28, 0x04, 0x92, 0x48, 0xE1, 0x18, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x48, 0xC4, 0x92, 0x49, 0x23, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x28, 0x04, 0x92, 0x49, 0x23, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x43, 0x90, 0x40, 0xE1, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x18, 0x92, 0x1E, 0x20, 0x95, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x44, 0xA1, 0x1F, 0x11, 0xF1, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x61, 0x45, 0x1A, 0x5D, 0x24, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x08, 0x51, 0x0E, 0x10, 0x45, 0x08, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x18, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x18, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x18, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x18, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x29, 0x40, 0x1C, 0x49, 0x24, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x29, 0x40, 0x12, 0x69, 0x64, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x13, 0xD1, 0x3C, 0x03, 0xC0, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x31, 0x24, 0x92, 0x30, 0x07, 0x80, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x10, 0x01, 0x0C, 0x41, 0x13, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x07, 0xD0, 0x41, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x0F, 0xC1, 0x04, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x41, 0x25, 0x0E, 0x44, 0x21, 0xC0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x41, 0x25, 0x0B, 0x54, 0x70, 0x40, // /* code=172, hex=0xAC, ascii="!," */ + // 0x10, 0x01, 0x04, 0x38, 0xE1, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x02, 0x52, 0x24, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x04, 0x89, 0x48, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x0A, 0x80, 0x54, 0x0A, 0x80, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x56, 0xA5, 0x6A, 0x56, 0xA5, 0x6A, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAB, 0xF5, 0x7F, 0xAB, 0xF5, 0x7F, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x41, 0x3C, 0x10, 0x41, 0x04, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x13, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x51, 0x45, 0x34, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x3C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x03, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x53, 0x41, 0x34, 0x51, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x03, 0xC1, 0x34, 0x51, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x53, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x51, 0x45, 0x3C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x13, 0xC1, 0x3C, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x3C, 0x10, 0x41, 0x04, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x41, 0x07, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x41, 0x3F, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x3F, 0x10, 0x41, 0x04, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x41, 0x07, 0x10, 0x41, 0x04, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x41, 0x3F, 0x10, 0x41, 0x04, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x51, 0x45, 0x17, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x51, 0x74, 0x1F, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x01, 0xF4, 0x17, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x53, 0x70, 0x3F, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x03, 0xF0, 0x37, 0x51, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x51, 0x74, 0x17, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x53, 0x70, 0x37, 0x51, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x13, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x51, 0x45, 0x3F, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x03, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x3F, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x51, 0x45, 0x1F, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x71, 0x07, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x1F, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x51, 0x45, 0x37, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x13, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x07, 0x10, 0x41, 0x04, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x03, 0x52, 0x48, 0xD0, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x01, 0xC4, 0x9C, 0x49, 0x27, 0x10, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x79, 0x24, 0x10, 0x41, 0x04, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x01, 0xF2, 0x8A, 0x28, 0xA2, 0x80, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x79, 0x22, 0x04, 0x21, 0x27, 0x80, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x03, 0xD2, 0x48, 0xC0, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x04, 0x92, 0x49, 0xC4, 0x10, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x02, 0x94, 0x10, 0x41, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x38, 0x43, 0x91, 0x38, 0x43, 0x80, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x31, 0x24, 0x9E, 0x49, 0x23, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0xE4, 0x51, 0x28, 0xA6, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x31, 0x02, 0x04, 0x39, 0x23, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x02, 0x95, 0x54, 0xA0, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x43, 0x95, 0x54, 0xE1, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0xE4, 0x1E, 0x40, 0xE0, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0xC4, 0x92, 0x49, 0x20, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x43, 0x84, 0x00, 0xE0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x40, 0xC0, 0x8C, 0x40, 0x07, 0x80, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x08, 0xC4, 0x0C, 0x08, 0x07, 0x80, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x21, 0x44, 0x10, 0x41, 0x04, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x10, 0x41, 0x04, 0x11, 0x42, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x40, 0x1F, 0x00, 0x40, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0xA5, 0x00, 0x29, 0x40, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x31, 0x24, 0x8C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x71, 0x04, 0x51, 0x42, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x50, 0xA2, 0x8A, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x60, 0x42, 0x1C, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x07, 0x9E, 0x79, 0xE0, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ }; diff --git a/wled00/src/font/console_font_7x9.h b/wled00/src/font/console_font_7x9.h index 30d98b0995..58513addb7 100644 --- a/wled00/src/font/console_font_7x9.h +++ b/wled00/src/font/console_font_7x9.h @@ -1,3334 +1,299 @@ // font courtesy of https://github.com/idispatch/raster-fonts -static const unsigned char console_font_7x9[] PROGMEM = { // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion - // /* - // * code=0, hex=0x00, ascii="^@" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=1, hex=0x01, ascii="^A" - // */ - // 0x38, /* 0011100 */ - // 0x44, /* 0100010 */ - // 0xAA, /* 1010101 */ - // 0xAA, /* 1010101 */ - // 0x82, /* 1000001 */ - // 0xAA, /* 1010101 */ - // 0x94, /* 1001010 */ - // 0x78, /* 0111100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=2, hex=0x02, ascii="^B" - // */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0xD6, /* 1101011 */ - // 0xD6, /* 1101011 */ - // 0xFE, /* 1111111 */ - // 0xBA, /* 1011101 */ - // 0xC6, /* 1100011 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=3, hex=0x03, ascii="^C" - // */ - // 0x00, /* 0000000 */ - // 0x6C, /* 0110110 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0x7C, /* 0111110 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=4, hex=0x04, ascii="^D" - // */ - // 0x00, /* 0000000 */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0xFE, /* 1111111 */ - // 0x7C, /* 0111110 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=5, hex=0x05, ascii="^E" - // */ - // 0x38, /* 0011100 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0xD6, /* 1101011 */ - // 0xFE, /* 1111111 */ - // 0xD6, /* 1101011 */ - // 0x10, /* 0001000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=6, hex=0x06, ascii="^F" - // */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0x54, /* 0101010 */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=7, hex=0x07, ascii="^G" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=8, hex=0x08, ascii="^H" - // */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xE6, /* 1110011 */ - // 0xC2, /* 1100001 */ - // 0xC2, /* 1100001 */ - // 0xE6, /* 1110011 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - - // /* - // * code=9, hex=0x09, ascii="^I" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=10, hex=0x0A, ascii="^J" - // */ - // 0xFE, /* 1111111 */ - // 0xE6, /* 1110011 */ - // 0xC2, /* 1100001 */ - // 0x98, /* 1001100 */ - // 0x98, /* 1001100 */ - // 0xC2, /* 1100001 */ - // 0xE6, /* 1110011 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - - // /* - // * code=11, hex=0x0B, ascii="^K" - // */ - // 0x0E, /* 0000111 */ - // 0x06, /* 0000011 */ - // 0x0A, /* 0000101 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=12, hex=0x0C, ascii="^L" - // */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=13, hex=0x0D, ascii="^M" - // */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x2C, /* 0010110 */ - // 0x20, /* 0010000 */ - // 0x20, /* 0010000 */ - // 0x20, /* 0010000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=14, hex=0x0E, ascii="^N" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x24, /* 0010010 */ - // 0x3C, /* 0011110 */ - // 0x24, /* 0010010 */ - // 0x24, /* 0010010 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=15, hex=0x0F, ascii="^O" - // */ - // 0x92, /* 1001001 */ - // 0x54, /* 0101010 */ - // 0x38, /* 0011100 */ - // 0x28, /* 0010100 */ - // 0xEE, /* 1110111 */ - // 0x38, /* 0011100 */ - // 0x54, /* 0101010 */ - // 0x92, /* 1001001 */ - // 0x00, /* 0000000 */ - - // /* - // * code=16, hex=0x10, ascii="^P" - // */ - // 0x00, /* 0000000 */ - // 0x20, /* 0010000 */ - // 0x30, /* 0011000 */ - // 0x38, /* 0011100 */ - // 0x3C, /* 0011110 */ - // 0x38, /* 0011100 */ - // 0x30, /* 0011000 */ - // 0x20, /* 0010000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=17, hex=0x11, ascii="^Q" - // */ - // 0x00, /* 0000000 */ - // 0x04, /* 0000010 */ - // 0x0C, /* 0000110 */ - // 0x1C, /* 0001110 */ - // 0x3C, /* 0011110 */ - // 0x1C, /* 0001110 */ - // 0x0C, /* 0000110 */ - // 0x04, /* 0000010 */ - // 0x00, /* 0000000 */ - - // /* - // * code=18, hex=0x12, ascii="^R" - // */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x7C, /* 0111110 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=19, hex=0x13, ascii="^S" - // */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x00, /* 0000000 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=20, hex=0x14, ascii="^T" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x54, /* 0101010 */ - // 0x54, /* 0101010 */ - // 0x3C, /* 0011110 */ - // 0x14, /* 0001010 */ - // 0x14, /* 0001010 */ - // 0x14, /* 0001010 */ - // 0x00, /* 0000000 */ - - // /* - // * code=21, hex=0x15, ascii="^U" - // */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x60, /* 0110000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x66, /* 0110011 */ - - // /* - // * code=22, hex=0x16, ascii="^V" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=23, hex=0x17, ascii="^W" - // */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x7C, /* 0111110 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0x7C, /* 0111110 */ - - // /* - // * code=24, hex=0x18, ascii="^X" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x5A, /* 0101101 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=25, hex=0x19, ascii="^Y" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x5A, /* 0101101 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=26, hex=0x1A, ascii="^Z" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x7E, /* 0111111 */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=27, hex=0x1B, ascii="^[" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x30, /* 0011000 */ - // 0x7E, /* 0111111 */ - // 0x30, /* 0011000 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=28, hex=0x1C, ascii="^\" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=29, hex=0x1D, ascii="^]" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x24, /* 0010010 */ - // 0x66, /* 0110011 */ - // 0xFE, /* 1111111 */ - // 0x66, /* 0110011 */ - // 0x24, /* 0010010 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=30, hex=0x1E, ascii="^^" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x7C, /* 0111110 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=31, hex=0x1F, ascii="^_" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x7C, /* 0111110 */ - // 0x38, /* 0011100 */ - // 0x10, /* 0001000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - /* - * code=32, hex=0x20, ascii=" " - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=33, hex=0x21, ascii="!" - */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - - /* - * code=34, hex=0x22, ascii=""" - */ - 0x00, /* 0000000 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x44, /* 0100010 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=35, hex=0x23, ascii="#" - */ - 0x00, /* 0000000 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0xFE, /* 1111111 */ - 0x6C, /* 0110110 */ - 0xFE, /* 1111111 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x00, /* 0000000 */ - - /* - * code=36, hex=0x24, ascii="$" - */ - 0x08, /* 0000100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x60, /* 0110000 */ - 0x3C, /* 0011110 */ - 0x06, /* 0000011 */ - 0x7C, /* 0111110 */ - 0x18, /* 0001100 */ - 0x10, /* 0001000 */ - - /* - * code=37, hex=0x25, ascii="%" - */ - 0x70, /* 0111000 */ - 0x52, /* 0101001 */ - 0x76, /* 0111011 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x3E, /* 0011111 */ - 0x6A, /* 0110101 */ - 0x0E, /* 0000111 */ - 0x00, /* 0000000 */ - - /* - * code=38, hex=0x26, ascii="&" - */ - 0x38, /* 0011100 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0x6E, /* 0110111 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x3E, /* 0011111 */ - 0x00, /* 0000000 */ - - /* - * code=39, hex=0x27, ascii="'" - */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=40, hex=0x28, ascii="(" - */ - 0x00, /* 0000000 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x0C, /* 0000110 */ - 0x00, /* 0000000 */ - - /* - * code=41, hex=0x29, ascii=")" - */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - - /* - * code=42, hex=0x2A, ascii="*" - */ - 0x00, /* 0000000 */ - 0x44, /* 0100010 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0xFE, /* 1111111 */ - 0x38, /* 0011100 */ - 0x6C, /* 0110110 */ - 0x44, /* 0100010 */ - 0x00, /* 0000000 */ - - /* - * code=43, hex=0x2B, ascii="+" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x7E, /* 0111111 */ - 0x7E, /* 0111111 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - - /* - * code=44, hex=0x2C, ascii="," - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - - /* - * code=45, hex=0x2D, ascii="-" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x7C, /* 0111110 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=46, hex=0x2E, ascii="." - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - - /* - * code=47, hex=0x2F, ascii="/" - */ - 0x00, /* 0000000 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - 0x00, /* 0000000 */ - - /* - * code=48, hex=0x30, ascii="0" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x6E, /* 0110111 */ - 0x76, /* 0111011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=49, hex=0x31, ascii="1" - */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x78, /* 0111100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=50, hex=0x32, ascii="2" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x46, /* 0100011 */ - 0x1C, /* 0001110 */ - 0x30, /* 0011000 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=51, hex=0x33, ascii="3" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x06, /* 0000011 */ - 0x1C, /* 0001110 */ - 0x06, /* 0000011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=52, hex=0x34, ascii="4" - */ - 0x00, /* 0000000 */ - 0x0C, /* 0000110 */ - 0x1C, /* 0001110 */ - 0x3C, /* 0011110 */ - 0x6C, /* 0110110 */ - 0x7E, /* 0111111 */ - 0x0C, /* 0000110 */ - 0x1E, /* 0001111 */ - 0x00, /* 0000000 */ - - /* - * code=53, hex=0x35, ascii="5" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x7C, /* 0111110 */ - 0x06, /* 0000011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=54, hex=0x36, ascii="6" - */ - 0x00, /* 0000000 */ - 0x1C, /* 0001110 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=55, hex=0x37, ascii="7" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x06, /* 0000011 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - - /* - * code=56, hex=0x38, ascii="8" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=57, hex=0x39, ascii="9" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3E, /* 0011111 */ - 0x06, /* 0000011 */ - 0x0C, /* 0000110 */ - 0x38, /* 0011100 */ - 0x00, /* 0000000 */ - - /* - * code=58, hex=0x3A, ascii=":" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - - /* - * code=59, hex=0x3B, ascii=";" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - - /* - * code=60, hex=0x3C, ascii="<" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=61, hex=0x3D, ascii="=" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=62, hex=0x3E, ascii=">" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=63, hex=0x3F, ascii="?" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x06, /* 0000011 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - - /* - * code=64, hex=0x40, ascii="@" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x62, /* 0110001 */ - 0x6E, /* 0110111 */ - 0x6A, /* 0110101 */ - 0x6C, /* 0110110 */ - 0x62, /* 0110001 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=65, hex=0x41, ascii="A" - */ - 0x00, /* 0000000 */ - 0x10, /* 0001000 */ - 0x38, /* 0011100 */ - 0x28, /* 0010100 */ - 0x6C, /* 0110110 */ - 0x7C, /* 0111110 */ - 0xC6, /* 1100011 */ - 0xC6, /* 1100011 */ - 0x00, /* 0000000 */ - - /* - * code=66, hex=0x42, ascii="B" - */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x7C, /* 0111110 */ - 0x00, /* 0000000 */ - - /* - * code=67, hex=0x43, ascii="C" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=68, hex=0x44, ascii="D" - */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x7C, /* 0111110 */ - 0x00, /* 0000000 */ - - /* - * code=69, hex=0x45, ascii="E" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x78, /* 0111100 */ - 0x60, /* 0110000 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=70, hex=0x46, ascii="F" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x7C, /* 0111110 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x00, /* 0000000 */ - - /* - * code=71, hex=0x47, ascii="G" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x6E, /* 0110111 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3E, /* 0011111 */ - 0x00, /* 0000000 */ - - /* - * code=72, hex=0x48, ascii="H" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=73, hex=0x49, ascii="I" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=74, hex=0x4A, ascii="J" - */ - 0x00, /* 0000000 */ - 0x1E, /* 0001111 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0x00, /* 0000000 */ - - /* - * code=75, hex=0x4B, ascii="K" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x78, /* 0111100 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=76, hex=0x4C, ascii="L" - */ - 0x00, /* 0000000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=77, hex=0x4D, ascii="M" - */ - 0x00, /* 0000000 */ - 0xC6, /* 1100011 */ - 0xC6, /* 1100011 */ - 0xEE, /* 1110111 */ - 0xFE, /* 1111111 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0x00, /* 0000000 */ - - /* - * code=78, hex=0x4E, ascii="N" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x76, /* 0111011 */ - 0x76, /* 0111011 */ - 0x7E, /* 0111111 */ - 0x6E, /* 0110111 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=79, hex=0x4F, ascii="O" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=80, hex=0x50, ascii="P" - */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x7C, /* 0111110 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x00, /* 0000000 */ - - /* - * code=81, hex=0x51, ascii="Q" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x76, /* 0111011 */ - 0x6E, /* 0110111 */ - 0x3C, /* 0011110 */ - 0x06, /* 0000011 */ - - /* - * code=82, hex=0x52, ascii="R" - */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x6C, /* 0110110 */ - 0x78, /* 0111100 */ - 0x6C, /* 0110110 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=83, hex=0x53, ascii="S" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x3C, /* 0011110 */ - 0x06, /* 0000011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=84, hex=0x54, ascii="T" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x5A, /* 0101101 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=85, hex=0x55, ascii="U" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=86, hex=0x56, ascii="V" - */ - 0x00, /* 0000000 */ - 0xC6, /* 1100011 */ - 0xC6, /* 1100011 */ - 0x6C, /* 0110110 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0x38, /* 0011100 */ - 0x10, /* 0001000 */ - 0x00, /* 0000000 */ - - /* - * code=87, hex=0x57, ascii="W" - */ - 0x00, /* 0000000 */ - 0xC6, /* 1100011 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0x7C, /* 0111110 */ - 0x6C, /* 0110110 */ - 0x44, /* 0100010 */ - 0x00, /* 0000000 */ - - /* - * code=88, hex=0x58, ascii="X" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=89, hex=0x59, ascii="Y" - */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=90, hex=0x5A, ascii="Z" - */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x66, /* 0110011 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=91, hex=0x5B, ascii="[" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=92, hex=0x5C, ascii="\" - */ - 0x00, /* 0000000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x0C, /* 0000110 */ - 0x00, /* 0000000 */ - - /* - * code=93, hex=0x5D, ascii="]" - */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=94, hex=0x5E, ascii="^" - */ - 0x00, /* 0000000 */ - 0x10, /* 0001000 */ - 0x38, /* 0011100 */ - 0x6C, /* 0110110 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=95, hex=0x5F, ascii="_" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x7C, /* 0111110 */ - - /* - * code=96, hex=0x60, ascii="`" - */ - 0x00, /* 0000000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - /* - * code=97, hex=0x61, ascii="a" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x06, /* 0000011 */ - 0x3E, /* 0011111 */ - 0x66, /* 0110011 */ - 0x3A, /* 0011101 */ - 0x00, /* 0000000 */ - - /* - * code=98, hex=0x62, ascii="b" - */ - 0x00, /* 0000000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x5C, /* 0101110 */ - 0x00, /* 0000000 */ - - /* - * code=99, hex=0x63, ascii="c" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x60, /* 0110000 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=100, hex=0x64, ascii="d" - */ - 0x00, /* 0000000 */ - 0x06, /* 0000011 */ - 0x06, /* 0000011 */ - 0x3E, /* 0011111 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3A, /* 0011101 */ - 0x00, /* 0000000 */ - - /* - * code=101, hex=0x65, ascii="e" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x7E, /* 0111111 */ - 0x60, /* 0110000 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=102, hex=0x66, ascii="f" - */ - 0x00, /* 0000000 */ - 0x1C, /* 0001110 */ - 0x36, /* 0011011 */ - 0x30, /* 0011000 */ - 0x7C, /* 0111110 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x78, /* 0111100 */ - 0x00, /* 0000000 */ - - /* - * code=103, hex=0x67, ascii="g" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3A, /* 0011101 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3E, /* 0011111 */ - 0x06, /* 0000011 */ - 0x3C, /* 0011110 */ - - /* - * code=104, hex=0x68, ascii="h" - */ - 0x00, /* 0000000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x6C, /* 0110110 */ - 0x76, /* 0111011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=105, hex=0x69, ascii="i" - */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x38, /* 0011100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=106, hex=0x6A, ascii="j" - */ - 0x0C, /* 0000110 */ - 0x0C, /* 0000110 */ - 0x00, /* 0000000 */ - 0x0C, /* 0000110 */ - 0x3C, /* 0011110 */ - 0x0C, /* 0000110 */ - 0x4C, /* 0100110 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - - /* - * code=107, hex=0x6B, ascii="k" - */ - 0x00, /* 0000000 */ - 0x60, /* 0110000 */ - 0x60, /* 0110000 */ - 0x66, /* 0110011 */ - 0x6C, /* 0110110 */ - 0x78, /* 0111100 */ - 0x6C, /* 0110110 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=108, hex=0x6C, ascii="l" - */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=109, hex=0x6D, ascii="m" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x6C, /* 0110110 */ - 0xFE, /* 1111111 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0x00, /* 0000000 */ - - /* - * code=110, hex=0x6E, ascii="n" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x6C, /* 0110110 */ - 0x76, /* 0111011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x00, /* 0000000 */ - - /* - * code=111, hex=0x6F, ascii="o" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=112, hex=0x70, ascii="p" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x7C, /* 0111110 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x76, /* 0111011 */ - 0x6C, /* 0110110 */ - 0x60, /* 0110000 */ - - /* - * code=113, hex=0x71, ascii="q" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3A, /* 0011101 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x6E, /* 0110111 */ - 0x36, /* 0011011 */ - 0x06, /* 0000011 */ - - /* - * code=114, hex=0x72, ascii="r" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x26, /* 0010011 */ - 0x7E, /* 0111111 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x78, /* 0111100 */ - 0x00, /* 0000000 */ - - /* - * code=115, hex=0x73, ascii="s" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x3C, /* 0011110 */ - 0x60, /* 0110000 */ - 0x3C, /* 0011110 */ - 0x06, /* 0000011 */ - 0x3C, /* 0011110 */ - 0x00, /* 0000000 */ - - /* - * code=116, hex=0x74, ascii="t" - */ - 0x00, /* 0000000 */ - 0x10, /* 0001000 */ - 0x30, /* 0011000 */ - 0xFC, /* 1111110 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x36, /* 0011011 */ - 0x1C, /* 0001110 */ - 0x00, /* 0000000 */ - - /* - * code=117, hex=0x75, ascii="u" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x6E, /* 0110111 */ - 0x36, /* 0011011 */ - 0x00, /* 0000000 */ - - /* - * code=118, hex=0x76, ascii="v" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0xC6, /* 1100011 */ - 0xC6, /* 1100011 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0x10, /* 0001000 */ - 0x00, /* 0000000 */ - - /* - * code=119, hex=0x77, ascii="w" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0xD6, /* 1101011 */ - 0xD6, /* 1101011 */ - 0x7C, /* 0111110 */ - 0x6C, /* 0110110 */ - 0x44, /* 0100010 */ - 0x00, /* 0000000 */ - - /* - * code=120, hex=0x78, ascii="x" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0xC6, /* 1100011 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - 0x6C, /* 0110110 */ - 0xC6, /* 1100011 */ - 0x00, /* 0000000 */ - - /* - * code=121, hex=0x79, ascii="y" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x66, /* 0110011 */ - 0x66, /* 0110011 */ - 0x36, /* 0011011 */ - 0x1C, /* 0001110 */ - 0x6C, /* 0110110 */ - 0x38, /* 0011100 */ - - /* - * code=122, hex=0x7A, ascii="z" - */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x7E, /* 0111111 */ - 0x06, /* 0000011 */ - 0x18, /* 0001100 */ - 0x30, /* 0011000 */ - 0x7E, /* 0111111 */ - 0x00, /* 0000000 */ - - /* - * code=123, hex=0x7B, ascii="{" - */ - 0x00, /* 0000000 */ - 0x1C, /* 0001110 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x60, /* 0110000 */ - 0x30, /* 0011000 */ - 0x30, /* 0011000 */ - 0x1C, /* 0001110 */ - 0x00, /* 0000000 */ - - /* - * code=124, hex=0x7C, ascii="|" - */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x00, /* 0000000 */ - - /* - * code=125, hex=0x7D, ascii="}" - */ - 0x00, /* 0000000 */ - 0x70, /* 0111000 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x0C, /* 0000110 */ - 0x18, /* 0001100 */ - 0x18, /* 0001100 */ - 0x70, /* 0111000 */ - 0x00, /* 0000000 */ - - /* - * code=126, hex=0x7E, ascii="~" - */ - 0x00, /* 0000000 */ - 0x10, /* 0001000 */ - 0x3A, /* 0011101 */ - 0x6E, /* 0110111 */ - 0x04, /* 0000010 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - 0x00, /* 0000000 */ - - // /* - // * code=127, hex=0x7F, ascii="^?" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x08, /* 0000100 */ - // 0x1C, /* 0001110 */ - // 0x36, /* 0011011 */ - // 0x62, /* 0110001 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (10 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 9 + * [2] Fixed glyph width: 7 + * [3] Flags: 0x00 (fixed width) + * [4] First Char: 32 + * [5] Last Char: 126 + * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 + * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of the stream, padding bits are added if necessary to fill the last byte + */ - // /* - // * code=128, hex=0x80, ascii="!^@" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x78, /* 0111100 */ - - // /* - // * code=129, hex=0x81, ascii="!^A" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=130, hex=0x82, ascii="!^B" - // */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x3E, /* 0011111 */ - // 0x62, /* 0110001 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=131, hex=0x83, ascii="!^C" - // */ - // 0x1C, /* 0001110 */ - // 0x36, /* 0011011 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x3E, /* 0011111 */ - // 0x66, /* 0110011 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=132, hex=0x84, ascii="!^D" - // */ - // 0x36, /* 0011011 */ - // 0x36, /* 0011011 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x3E, /* 0011111 */ - // 0x66, /* 0110011 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=133, hex=0x85, ascii="!^E" - // */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x3E, /* 0011111 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=134, hex=0x86, ascii="!^F" - // */ - // 0x1C, /* 0001110 */ - // 0x14, /* 0001010 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x3E, /* 0011111 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=135, hex=0x87, ascii="!^G" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x1C, /* 0001110 */ - // 0x36, /* 0011011 */ - // 0x60, /* 0110000 */ - // 0x36, /* 0011011 */ - // 0x1C, /* 0001110 */ - // 0x78, /* 0111100 */ - - // /* - // * code=136, hex=0x88, ascii="!^H" - // */ - // 0x08, /* 0000100 */ - // 0x1C, /* 0001110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=137, hex=0x89, ascii="!^I" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=138, hex=0x8A, ascii="!^J" - // */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=139, hex=0x8B, ascii="!^K" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=140, hex=0x8C, ascii="!^L" - // */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=141, hex=0x8D, ascii="!^M" - // */ - // 0x30, /* 0011000 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=142, hex=0x8E, ascii="!^N" - // */ - // 0xC6, /* 1100011 */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x28, /* 0010100 */ - // 0x6C, /* 0110110 */ - // 0x7C, /* 0111110 */ - // 0xC6, /* 1100011 */ - // 0xC6, /* 1100011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=143, hex=0x8F, ascii="!^O" - // */ - // 0x38, /* 0011100 */ - // 0x28, /* 0010100 */ - // 0x38, /* 0011100 */ - // 0x28, /* 0010100 */ - // 0x6C, /* 0110110 */ - // 0x7C, /* 0111110 */ - // 0xC6, /* 1100011 */ - // 0xC6, /* 1100011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=144, hex=0x90, ascii="!^P" - // */ - // 0x1C, /* 0001110 */ - // 0x30, /* 0011000 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x7C, /* 0111110 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=145, hex=0x91, ascii="!^Q" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x1A, /* 0001101 */ - // 0x7E, /* 0111111 */ - // 0xD8, /* 1101100 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=146, hex=0x92, ascii="!^R" - // */ - // 0x00, /* 0000000 */ - // 0x1E, /* 0001111 */ - // 0x38, /* 0011100 */ - // 0x58, /* 0101100 */ - // 0x5E, /* 0101111 */ - // 0xF8, /* 1111100 */ - // 0xD8, /* 1101100 */ - // 0xDE, /* 1101111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=147, hex=0x93, ascii="!^S" - // */ - // 0x10, /* 0001000 */ - // 0x38, /* 0011100 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=148, hex=0x94, ascii="!^T" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=149, hex=0x95, ascii="!^U" - // */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=150, hex=0x96, ascii="!^V" - // */ - // 0x08, /* 0000100 */ - // 0x1C, /* 0001110 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=151, hex=0x97, ascii="!^W" - // */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=152, hex=0x98, ascii="!^X" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x36, /* 0011011 */ - // 0x1C, /* 0001110 */ - // 0x6C, /* 0110110 */ - // 0x38, /* 0011100 */ - - // /* - // * code=153, hex=0x99, ascii="!^Y" - // */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=154, hex=0x9A, ascii="!^Z" - // */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=155, hex=0x9B, ascii="!^[" - // */ - // 0x08, /* 0000100 */ - // 0x08, /* 0000100 */ - // 0x3C, /* 0011110 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x3C, /* 0011110 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=156, hex=0x9C, ascii="!^\" - // */ - // 0x1C, /* 0001110 */ - // 0x36, /* 0011011 */ - // 0x30, /* 0011000 */ - // 0x30, /* 0011000 */ - // 0x7C, /* 0111110 */ - // 0x30, /* 0011000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=157, hex=0x9D, ascii="!^]" - // */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x7E, /* 0111111 */ - // 0x18, /* 0001100 */ - // 0x7E, /* 0111111 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=158, hex=0x9E, ascii="!^^" - // */ - // 0xE0, /* 1110000 */ - // 0xD0, /* 1101000 */ - // 0xD0, /* 1101000 */ - // 0xF4, /* 1111010 */ - // 0xCC, /* 1100110 */ - // 0xDE, /* 1101111 */ - // 0xCC, /* 1100110 */ - // 0x06, /* 0000011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=159, hex=0x9F, ascii="!^_" - // */ - // 0x0E, /* 0000111 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x7E, /* 0111111 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x70, /* 0111000 */ - - // /* - // * code=160, hex=0xA0, ascii="! " - // */ - // 0x06, /* 0000011 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x06, /* 0000011 */ - // 0x3E, /* 0011111 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=161, hex=0xA1, ascii="!!" - // */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=162, hex=0xA2, ascii="!"" - // */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=163, hex=0xA3, ascii="!#" - // */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3A, /* 0011101 */ - // 0x00, /* 0000000 */ - - // /* - // * code=164, hex=0xA4, ascii="!$" - // */ - // 0x76, /* 0111011 */ - // 0xDC, /* 1101110 */ - // 0x00, /* 0000000 */ - // 0x6C, /* 0110110 */ - // 0x76, /* 0111011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=165, hex=0xA5, ascii="!%" - // */ - // 0x76, /* 0111011 */ - // 0xDC, /* 1101110 */ - // 0x00, /* 0000000 */ - // 0x66, /* 0110011 */ - // 0x76, /* 0111011 */ - // 0x7E, /* 0111111 */ - // 0x6E, /* 0110111 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=166, hex=0xA6, ascii="!&" - // */ - // 0x38, /* 0011100 */ - // 0x0C, /* 0000110 */ - // 0x3C, /* 0011110 */ - // 0x6C, /* 0110110 */ - // 0x34, /* 0011010 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=167, hex=0xA7, ascii="!'" - // */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=168, hex=0xA8, ascii="!(" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x30, /* 0011000 */ - // 0x60, /* 0110000 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=169, hex=0xA9, ascii="!)" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x3C, /* 0011110 */ - // 0x30, /* 0011000 */ - // 0x30, /* 0011000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=170, hex=0xAA, ascii="!*" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x7C, /* 0111110 */ - // 0x0C, /* 0000110 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=171, hex=0xAB, ascii="!+" - // */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x6E, /* 0110111 */ - // 0x1A, /* 0001101 */ - // 0x04, /* 0000010 */ - // 0x18, /* 0001100 */ - // 0x1E, /* 0001111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=172, hex=0xAC, ascii="!," - // */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x6C, /* 0110110 */ - // 0x7C, /* 0111110 */ - // 0x2C, /* 0010110 */ - // 0x7C, /* 0111110 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=173, hex=0xAD, ascii="!-" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=174, hex=0xAE, ascii="!." - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x32, /* 0011001 */ - // 0x66, /* 0110011 */ - // 0xCC, /* 1100110 */ - // 0x66, /* 0110011 */ - // 0x32, /* 0011001 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=175, hex=0xAF, ascii="!/" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xCC, /* 1100110 */ - // 0x66, /* 0110011 */ - // 0x32, /* 0011001 */ - // 0x66, /* 0110011 */ - // 0xCC, /* 1100110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=176, hex=0xB0, ascii="!0" - // */ - // 0x54, /* 0101010 */ - // 0x00, /* 0000000 */ - // 0xAA, /* 1010101 */ - // 0x00, /* 0000000 */ - // 0x54, /* 0101010 */ - // 0x00, /* 0000000 */ - // 0xAA, /* 1010101 */ - // 0x00, /* 0000000 */ - // 0x54, /* 0101010 */ - - // /* - // * code=177, hex=0xB1, ascii="!1" - // */ - // 0x92, /* 1001001 */ - // 0x48, /* 0100100 */ - // 0x24, /* 0010010 */ - // 0x92, /* 1001001 */ - // 0x48, /* 0100100 */ - // 0x24, /* 0010010 */ - // 0x92, /* 1001001 */ - // 0x48, /* 0100100 */ - // 0x24, /* 0010010 */ - - // /* - // * code=178, hex=0xB2, ascii="!2" - // */ - // 0xAA, /* 1010101 */ - // 0x54, /* 0101010 */ - // 0xAA, /* 1010101 */ - // 0x54, /* 0101010 */ - // 0xAA, /* 1010101 */ - // 0x54, /* 0101010 */ - // 0xAA, /* 1010101 */ - // 0x54, /* 0101010 */ - // 0xAA, /* 1010101 */ - - // /* - // * code=179, hex=0xB3, ascii="!3" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=180, hex=0xB4, ascii="!4" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=181, hex=0xB5, ascii="!5" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=182, hex=0xB6, ascii="!6" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xE8, /* 1110100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=183, hex=0xB7, ascii="!7" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xF8, /* 1111100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=184, hex=0xB8, ascii="!8" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=185, hex=0xB9, ascii="!9" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xE8, /* 1110100 */ - // 0x08, /* 0000100 */ - // 0xE8, /* 1110100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=186, hex=0xBA, ascii="!:" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=187, hex=0xBB, ascii="!;" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xF8, /* 1111100 */ - // 0x08, /* 0000100 */ - // 0xE8, /* 1110100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=188, hex=0xBC, ascii="!<" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xE8, /* 1110100 */ - // 0x08, /* 0000100 */ - // 0xF8, /* 1111100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=189, hex=0xBD, ascii="!=" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xF8, /* 1111100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=190, hex=0xBE, ascii="!>" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=191, hex=0xBF, ascii="!?" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xF0, /* 1111000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=192, hex=0xC0, ascii="!@" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=193, hex=0xC1, ascii="!A" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=194, hex=0xC2, ascii="!B" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=195, hex=0xC3, ascii="!C" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=196, hex=0xC4, ascii="!D" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=197, hex=0xC5, ascii="!E" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xFE, /* 1111111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=198, hex=0xC6, ascii="!F" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=199, hex=0xC7, ascii="!G" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x2E, /* 0010111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=200, hex=0xC8, ascii="!H" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x2E, /* 0010111 */ - // 0x20, /* 0010000 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=201, hex=0xC9, ascii="!I" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x3E, /* 0011111 */ - // 0x20, /* 0010000 */ - // 0x2E, /* 0010111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=202, hex=0xCA, ascii="!J" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xEE, /* 1110111 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=203, hex=0xCB, ascii="!K" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0xEE, /* 1110111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=204, hex=0xCC, ascii="!L" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x2E, /* 0010111 */ - // 0x20, /* 0010000 */ - // 0x2E, /* 0010111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=205, hex=0xCD, ascii="!M" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=206, hex=0xCE, ascii="!N" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xEE, /* 1110111 */ - // 0x00, /* 0000000 */ - // 0xEE, /* 1110111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=207, hex=0xCF, ascii="!O" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=208, hex=0xD0, ascii="!P" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xF8, /* 1111100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=209, hex=0xD1, ascii="!Q" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=210, hex=0xD2, ascii="!R" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xF8, /* 1111100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=211, hex=0xD3, ascii="!S" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x3E, /* 0011111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=212, hex=0xD4, ascii="!T" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=213, hex=0xD5, ascii="!U" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=214, hex=0xD6, ascii="!V" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x3E, /* 0011111 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=215, hex=0xD7, ascii="!W" - // */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0xE8, /* 1110100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - // 0x28, /* 0010100 */ - - // /* - // * code=216, hex=0xD8, ascii="!X" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xFE, /* 1111111 */ - // 0x10, /* 0001000 */ - // 0xFE, /* 1111111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=217, hex=0xD9, ascii="!Y" - // */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0xF0, /* 1111000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=218, hex=0xDA, ascii="!Z" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x1E, /* 0001111 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - // 0x10, /* 0001000 */ - - // /* - // * code=219, hex=0xDB, ascii="![" - // */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - - // /* - // * code=220, hex=0xDC, ascii="!\" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - - // /* - // * code=221, hex=0xDD, ascii="!]" - // */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - // 0xF0, /* 1111000 */ - - // /* - // * code=222, hex=0xDE, ascii="!^" - // */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - // 0x0E, /* 0000111 */ - - // /* - // * code=223, hex=0xDF, ascii="!_" - // */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=224, hex=0xE0, ascii="!`" - // */ - // 0x00, /* 0000000 */ - // 0x34, /* 0011010 */ - // 0x68, /* 0110100 */ - // 0x68, /* 0110100 */ - // 0x68, /* 0110100 */ - // 0x34, /* 0011010 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=225, hex=0xE1, ascii="!a" - // */ - // 0x7C, /* 0111110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x6C, /* 0110110 */ - // 0x66, /* 0110011 */ - // 0x62, /* 0110001 */ - // 0x66, /* 0110011 */ - // 0x6C, /* 0110110 */ - // 0x08, /* 0000100 */ - - // /* - // * code=226, hex=0xE2, ascii="!b" - // */ - // 0x00, /* 0000000 */ - // 0x7E, /* 0111111 */ - // 0x62, /* 0110001 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=227, hex=0xE3, ascii="!c" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x6C, /* 0110110 */ - // 0xFE, /* 1111111 */ - // 0xF6, /* 1111011 */ - // 0x66, /* 0110011 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=228, hex=0xE4, ascii="!d" - // */ - // 0x00, /* 0000000 */ - // 0xFE, /* 1111111 */ - // 0xC6, /* 1100011 */ - // 0x60, /* 0110000 */ - // 0x38, /* 0011100 */ - // 0x30, /* 0011000 */ - // 0x66, /* 0110011 */ - // 0xFE, /* 1111111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=229, hex=0xE5, ascii="!e" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x3E, /* 0011111 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x38, /* 0011100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=230, hex=0xE6, ascii="!f" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x36, /* 0011011 */ - // 0x36, /* 0011011 */ - // 0x36, /* 0011011 */ - // 0x3E, /* 0011111 */ - // 0x62, /* 0110001 */ - // 0x40, /* 0100000 */ - - // /* - // * code=231, hex=0xE7, ascii="!g" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7A, /* 0111101 */ - // 0x6A, /* 0110101 */ - // 0x0E, /* 0000111 */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=232, hex=0xE8, ascii="!h" - // */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=233, hex=0xE9, ascii="!i" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x7E, /* 0111111 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=234, hex=0xEA, ascii="!j" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x24, /* 0010010 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=235, hex=0xEB, ascii="!k" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x60, /* 0110000 */ - // 0x30, /* 0011000 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=236, hex=0xEC, ascii="!l" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x34, /* 0011010 */ - // 0x4A, /* 0100101 */ - // 0x4A, /* 0100101 */ - // 0x4A, /* 0100101 */ - // 0x34, /* 0011010 */ - // 0x00, /* 0000000 */ - - // /* - // * code=237, hex=0xED, ascii="!m" - // */ - // 0x04, /* 0000010 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x6E, /* 0110111 */ - // 0x76, /* 0111011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x10, /* 0001000 */ - // 0x20, /* 0010000 */ - - // /* - // * code=238, hex=0xEE, ascii="!n" - // */ - // 0x1E, /* 0001111 */ - // 0x30, /* 0011000 */ - // 0x60, /* 0110000 */ - // 0x60, /* 0110000 */ - // 0x7E, /* 0111111 */ - // 0x60, /* 0110000 */ - // 0x30, /* 0011000 */ - // 0x1E, /* 0001111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=239, hex=0xEF, ascii="!o" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x00, /* 0000000 */ - - // /* - // * code=240, hex=0xF0, ascii="!p" - // */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=241, hex=0xF1, ascii="!q" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x7E, /* 0111111 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - - // /* - // * code=242, hex=0xF2, ascii="!r" - // */ - // 0x00, /* 0000000 */ - // 0x30, /* 0011000 */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x30, /* 0011000 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=243, hex=0xF3, ascii="!s" - // */ - // 0x00, /* 0000000 */ - // 0x0C, /* 0000110 */ - // 0x18, /* 0001100 */ - // 0x30, /* 0011000 */ - // 0x18, /* 0001100 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=244, hex=0xF4, ascii="!t" - // */ - // 0x0C, /* 0000110 */ - // 0x1A, /* 0001101 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - - // /* - // * code=245, hex=0xF5, ascii="!u" - // */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x58, /* 0101100 */ - // 0x30, /* 0011000 */ - - // /* - // * code=246, hex=0xF6, ascii="!v" - // */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x7E, /* 0111111 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - - // /* - // * code=247, hex=0xF7, ascii="!w" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x1A, /* 0001101 */ - // 0x76, /* 0111011 */ - // 0x00, /* 0000000 */ - // 0x1A, /* 0001101 */ - // 0x76, /* 0111011 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=248, hex=0xF8, ascii="!x" - // */ - // 0x00, /* 0000000 */ - // 0x3C, /* 0011110 */ - // 0x66, /* 0110011 */ - // 0x66, /* 0110011 */ - // 0x3C, /* 0011110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=249, hex=0xF9, ascii="!y" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x3C, /* 0011110 */ - // 0x3C, /* 0011110 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=250, hex=0xFA, ascii="!z" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x18, /* 0001100 */ - // 0x18, /* 0001100 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=251, hex=0xFB, ascii="!{" - // */ - // 0x0E, /* 0000111 */ - // 0x0C, /* 0000110 */ - // 0x0C, /* 0000110 */ - // 0x0C, /* 0000110 */ - // 0x0C, /* 0000110 */ - // 0x6C, /* 0110110 */ - // 0x3C, /* 0011110 */ - // 0x0C, /* 0000110 */ - // 0x00, /* 0000000 */ - - // /* - // * code=252, hex=0xFC, ascii="!|" - // */ - // 0x00, /* 0000000 */ - // 0x78, /* 0111100 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x6C, /* 0110110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=253, hex=0xFD, ascii="!}" - // */ - // 0x00, /* 0000000 */ - // 0x38, /* 0011100 */ - // 0x4C, /* 0100110 */ - // 0x18, /* 0001100 */ - // 0x30, /* 0011000 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=254, hex=0xFE, ascii="!~" - // */ - // 0x00, /* 0000000 */ - // 0x7C, /* 0111110 */ - // 0x7C, /* 0111110 */ - // 0x7C, /* 0111110 */ - // 0x7C, /* 0111110 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - - // /* - // * code=255, hex=0xFF, ascii="!^Ÿ" - // */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ - // 0x00, /* 0000000 */ +static const unsigned char console_font_7x9[] PROGMEM = { + 0x57, 0x09, 0x07, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x38, 0x8A, 0xAD, 0x58, 0x35, 0x65, 0x3C, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x38, 0xFB, 0x5E, 0xBF, 0xF7, 0x71, 0xBE, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xDB, 0xFF, 0xFF, 0xEF, 0x8E, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x20, 0xE3, 0xEF, 0xEF, 0x8E, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x38, 0x70, 0x46, 0xBF, 0xFA, 0xC4, 0x3E, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x10, 0x71, 0xF7, 0xFF, 0xEA, 0x84, 0x1C, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0x9E, 0x1C, 0x3C, 0xFF, 0xFF, 0xFE, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xCF, 0x0C, 0xC9, 0x98, 0x79, 0xFF, 0xFE, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x0E, 0x0C, 0x28, 0xC3, 0xCC, 0xD9, 0x9E, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x3C, 0xCD, 0x99, 0xE1, 0x87, 0x86, 0x0C, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x70, 0xB1, 0x02, 0x04, 0x18, 0x30, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x78, 0x91, 0xE2, 0x44, 0x9B, 0x36, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x92, 0xA8, 0xE1, 0x4E, 0xE7, 0x15, 0x49, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x40, 0xC1, 0xC3, 0xC7, 0x0C, 0x10, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x08, 0x30, 0xE3, 0xC3, 0x83, 0x02, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x6C, 0xD9, 0xB3, 0x66, 0xC0, 0x1B, 0x36, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x79, 0x52, 0xA3, 0xC2, 0x85, 0x0A, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x3C, 0xCD, 0x81, 0xE6, 0x6C, 0xCF, 0x03, 0x66, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0x00, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x7C, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x30, 0xF2, 0xD1, 0x83, 0x06, 0x0C, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x30, 0x60, 0xC1, 0x8B, 0x4F, 0x0C, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x60, 0x67, 0xE1, 0x86, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x61, 0x87, 0xE6, 0x06, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x06, 0x0C, 0x1F, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0x93, 0x3F, 0xEC, 0xC9, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x00, 0x83, 0x8F, 0xBF, 0x80, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x07, 0xF7, 0xC7, 0x04, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x30, 0x60, 0xC1, 0x80, 0x06, 0x0C, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0xD9, 0xB2, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xD9, 0xB7, 0xF6, 0xDF, 0xDB, 0x36, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x08, 0x30, 0xF3, 0x03, 0xC0, 0xDF, 0x0C, 0x10, /* code=36, hex=0x24, ascii="$" */ + 0x70, 0xA5, 0xD8, 0x61, 0x87, 0xDA, 0x87, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x38, 0xD9, 0xB1, 0xC6, 0xED, 0x9B, 0x1F, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x00, 0x30, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x18, 0x61, 0x83, 0x06, 0x06, 0x06, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x60, 0x60, 0x60, 0xC1, 0x86, 0x18, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x89, 0xB1, 0xCF, 0xE7, 0x1B, 0x22, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x60, 0xC7, 0xEF, 0xC6, 0x0C, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x60, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x18, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x79, 0x9B, 0x77, 0x6C, 0xD9, 0x9E, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x31, 0xE0, 0xC1, 0x83, 0x06, 0x3F, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x79, 0x9A, 0x31, 0xC6, 0x19, 0xBF, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x79, 0x98, 0x31, 0xC0, 0xD9, 0x9E, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x18, 0x71, 0xE6, 0xCF, 0xC3, 0x0F, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0xFD, 0x9B, 0x07, 0xC0, 0xD9, 0x9E, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x38, 0xC3, 0x07, 0xCC, 0xD9, 0x9E, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0xFD, 0x98, 0x30, 0xC3, 0x06, 0x0C, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x79, 0x9B, 0x33, 0xCC, 0xD9, 0x9E, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x79, 0x9B, 0x33, 0xE0, 0xC3, 0x1C, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x60, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x00, 0x61, 0x86, 0x06, 0x06, 0x00, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x00, 0xC0, 0xC0, 0xC3, 0x0C, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x79, 0x98, 0x30, 0xC3, 0x00, 0x0C, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x79, 0x8B, 0x76, 0xAD, 0x98, 0x9E, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0xF9, 0x9B, 0x37, 0xCC, 0xD9, 0xBE, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6C, 0xD9, 0xBE, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0xFD, 0x9B, 0x07, 0x8C, 0x19, 0xBF, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0xFD, 0x9B, 0x07, 0xCC, 0x18, 0x30, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x79, 0x9B, 0x06, 0xEC, 0xD9, 0x9F, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0xCD, 0x9B, 0x37, 0xEC, 0xD9, 0xB3, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x78, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x3C, 0x30, 0x60, 0xCD, 0x9B, 0x1C, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0xCD, 0xB3, 0x67, 0x8D, 0x9B, 0x33, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xBF, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x01, 0x8F, 0x1F, 0x7F, 0xFA, 0xF5, 0xEB, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0xCD, 0xDB, 0xB7, 0xED, 0xD9, 0xB3, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6F, 0x98, 0x30, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x79, 0x9B, 0x36, 0x6E, 0xDB, 0x9E, 0x06, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0xF9, 0x9B, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x79, 0x9B, 0x03, 0xC0, 0xD9, 0x9E, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0xFD, 0x68, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0xCD, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x01, 0x8F, 0x1B, 0x66, 0xC7, 0x0E, 0x08, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x01, 0x8F, 0x5E, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0xCD, 0x99, 0xE1, 0x87, 0x99, 0xB3, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0xCD, 0x9B, 0x33, 0xC3, 0x06, 0x1E, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0xFD, 0x98, 0x61, 0x86, 0x19, 0xBF, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x78, 0xC1, 0x83, 0x06, 0x0C, 0x1E, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0xC1, 0x81, 0x83, 0x03, 0x06, 0x06, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x78, 0x30, 0x60, 0xC1, 0x83, 0x1E, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x20, 0xE3, 0x60, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x60, 0xC0, 0xC1, 0x80, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x00, 0xC1, 0x83, 0xE6, 0x6C, 0xD9, 0xAE, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0x19, 0x9E, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x0C, 0x19, 0xF6, 0x6C, 0xD9, 0x9D, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x01, 0xE6, 0x6F, 0xD8, 0x1E, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x38, 0xD9, 0x87, 0xC6, 0x0C, 0x3C, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xCF, 0x83, 0x3C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0xC1, 0x83, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x18, 0x30, 0x00, 0xC3, 0x83, 0x06, 0x1E, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x0C, 0x18, 0x00, 0x63, 0xC1, 0x93, 0x36, 0x38, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0xC1, 0x83, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x00, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x03, 0x6F, 0xFA, 0xF5, 0xEB, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x03, 0xE6, 0x6C, 0xDD, 0xB6, 0x60, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xDB, 0x9B, 0x06, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x01, 0x37, 0xE6, 0x0C, 0x3C, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x01, 0xE6, 0x07, 0x81, 0x9E, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x20, 0xC7, 0xE3, 0x06, 0x0D, 0x8E, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x03, 0x36, 0x6C, 0xDB, 0x9B, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x06, 0x3C, 0x6D, 0x8E, 0x08, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x06, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x06, 0x36, 0xC7, 0x1B, 0x63, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x03, 0xF0, 0x63, 0x0C, 0x3F, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x38, 0xC1, 0x86, 0x06, 0x0C, 0x0E, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x18, 0x30, 0x60, 0xC0, 0x03, 0x06, 0x0C, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x00, 0xE0, 0x60, 0xC0, 0xC3, 0x06, 0x38, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x20, 0xEB, 0x70, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x20, 0xE3, 0x6C, 0x5F, 0x80, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x78, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x66, 0xCC, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x30, 0x01, 0xF6, 0x2F, 0xD8, 0x1F, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x1C, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x36, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x18, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x1C, 0x28, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x00, 0xE3, 0x6C, 0x0D, 0x8E, 0x78, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x08, 0x38, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x66, 0xCC, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0x70, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x30, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xC6, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0x50, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x1C, 0x61, 0xFB, 0x07, 0xCC, 0x18, 0x3F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x03, 0xE1, 0xAF, 0xF6, 0x3F, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x3C, 0xE2, 0xC5, 0xFF, 0x36, 0x6F, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x10, 0x70, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x08, 0x38, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x18, 0x18, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x66, 0xCC, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x66, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x66, 0x01, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x08, 0x10, 0xF3, 0x06, 0x07, 0x84, 0x08, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x1C, 0x6C, 0xC1, 0x87, 0xC6, 0x0F, 0x33, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x66, 0xCC, 0xF0, 0xC7, 0xE3, 0x1F, 0x8C, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0xE1, 0xA3, 0x47, 0xAC, 0xDB, 0xF3, 0x03, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x0E, 0x30, 0x60, 0xC7, 0xE3, 0x06, 0x0C, 0x70, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x06, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x0C, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x0C, 0x30, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x0C, 0x30, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x77, 0xB8, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x77, 0xB8, 0x03, 0x37, 0x6F, 0xDB, 0xB3, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x18, 0xF3, 0x63, 0x40, 0x1F, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x3C, 0xCD, 0x99, 0xE0, 0x0F, 0xC0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x00, 0x30, 0x00, 0xC3, 0x0C, 0x19, 0x9E, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x01, 0xE3, 0xC6, 0x0C, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x03, 0xE7, 0xC1, 0x83, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x60, 0xC1, 0x83, 0x71, 0xA0, 0x86, 0x0F, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x60, 0xC1, 0x83, 0x67, 0xC5, 0x9F, 0x06, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x30, 0x00, 0xC1, 0x87, 0x8F, 0x0C, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0xCB, 0x3C, 0xCC, 0xCC, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x03, 0x33, 0x33, 0x2C, 0xF3, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x02, 0xA8, 0x05, 0x40, 0x2A, 0x80, 0x54, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x92, 0x90, 0x94, 0x94, 0x84, 0xA4, 0xA4, 0x24, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x20, 0x40, 0x8F, 0x02, 0x04, 0x08, 0x10, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x07, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9D, 0x0A, 0x14, 0x28, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x28, 0x50, 0xA1, 0x42, 0x85, 0x0A, 0x14, 0x28, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x07, 0xC0, 0x9D, 0x0A, 0x14, 0x28, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9F, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x0F, 0x02, 0x04, 0x08, 0x10, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x20, 0x40, 0x81, 0xE0, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE0, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x04, 0x08, 0x10, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x20, 0x40, 0x81, 0xE2, 0x04, 0x08, 0x10, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE2, 0x04, 0x08, 0x10, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x28, 0x50, 0xA1, 0x42, 0xE5, 0x0A, 0x14, 0x28, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x28, 0x50, 0xA1, 0x72, 0x07, 0xC0, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x01, 0xF2, 0x05, 0xCA, 0x14, 0x28, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1F, 0xC0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1D, 0xCA, 0x14, 0x28, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x28, 0x50, 0xA1, 0x72, 0x05, 0xCA, 0x14, 0x28, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1D, 0xCA, 0x14, 0x28, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x10, 0x20, 0x47, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC4, 0x08, 0x10, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x28, 0x50, 0xA1, 0x43, 0xE0, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC0, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x00, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x03, 0xE5, 0x0A, 0x14, 0x28, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x10, 0x20, 0x47, 0xF1, 0x1F, 0xC4, 0x08, 0x10, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x20, 0x40, 0x8F, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x01, 0xE2, 0x04, 0x08, 0x10, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x69, 0xA3, 0x46, 0x86, 0x80, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x7C, 0xCD, 0x9B, 0x66, 0x6C, 0x59, 0xB6, 0x08, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0xFD, 0x8B, 0x06, 0x0C, 0x18, 0x30, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x01, 0xB7, 0xFF, 0x6C, 0xDB, 0x36, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x01, 0xFF, 0x1B, 0x03, 0x86, 0x19, 0xFF, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x01, 0xF6, 0xCD, 0x9B, 0x1C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x01, 0xB3, 0x66, 0xCF, 0xB1, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x01, 0xEB, 0x50, 0xE1, 0x86, 0x0C, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x3C, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x1E, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x79, 0x9B, 0x37, 0xEC, 0xD9, 0x9E, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xC9, 0x33, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x79, 0x81, 0x81, 0x87, 0x99, 0x9E, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x01, 0xA4, 0xA9, 0x52, 0x9A, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x04, 0x79, 0x9B, 0x77, 0x6C, 0xCF, 0x08, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x1E, 0x61, 0x83, 0x07, 0xEC, 0x0C, 0x0F, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0xB3, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x30, 0x63, 0xF1, 0x83, 0x00, 0x3F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x00, 0x60, 0x60, 0x61, 0x86, 0x00, 0x1E, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x18, 0x61, 0x81, 0x81, 0x80, 0x1E, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x0C, 0x34, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x2C, 0x30, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x30, 0x60, 0x07, 0xE0, 0x06, 0x0C, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x6B, 0xB0, 0x03, 0x5D, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x79, 0x9B, 0x33, 0xC0, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, 0xC1, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x0E, 0x18, 0x30, 0x60, 0xCD, 0x8F, 0x06, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x00, 0xF1, 0xB3, 0x66, 0xCD, 0x80, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x00, 0x71, 0x30, 0xC3, 0x0F, 0x80, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0xF9, 0xF3, 0xE7, 0xC0, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/util.cpp b/wled00/util.cpp index f3c1b31825..ce62121e06 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -162,6 +162,52 @@ bool isAsterisksOnly(const char* str, byte maxLen) return (str[0] != 0); //false on empty string } +/* + UTF-8 to unicode onversion: + 1 byte: 0xxxxxxx: U+0000 - U+007F + 2 bytes: 110xxxxx 10xxxxxx: U+0080 - U+07FF + 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx: U+0800 - U+FFFF + 4 bytes: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx: U+10000 - U+10FFFFc +*/ +#define UTF8_LEN(c) ((c) < 0x80 ? 1 : ((c) < 0xE0 ? 2 : ((c) < 0xF0 ? 3 : 4))) // determine UTF-8 sequence length from first byte + +uint32_t utf8_decode(const char *s, uint8_t *len) +{ + uint8_t c = (uint8_t)s[0]; + if (c == '\0') { + *len = 0; // null terminator, no code point + return 0; + } + uint8_t n = UTF8_LEN(c); // number of bytes in this UTF-8 sequence + uint32_t cp = c; + *len = n; // return byte count to caller + if (n > 1) { + // check if there are enough continuation bytes + if (strlen(s) < n) { + *len = 1; // invalid sequence, return default char + return '?'; + } + cp &= (1U << (8 - n)) - 1; // mask off the UTF-8 prefix bits (110, 1110, 11110) + for (uint8_t i = 1; i < n; i++) + cp = (cp << 6) | (s[i] & 0x3F); // Each continuation byte has the form: 10xxxxxx, the lower 6 bits are appended to the code point. + // note: no error checking is done, if the input strint is invalid, it will return invalid code points. could check and return '?' but what to do with a malformed string? + } + + return cp; +} + +// Count the number of UTF-8 characters in a string +size_t utf8_strlen(const char *s) +{ + size_t len = 0; + while (*s != '\0') { + uint8_t charLen; + utf8_decode(s, &charLen); // decode the UTF-8 character to get its length + s += charLen; // advance by the length of the current UTF-8 character + len++; + } + return len; +} //threading/network callback details: https://github.com/wled-dev/WLED/pull/2336#discussion_r762276994 bool requestJSONBufferLock(uint8_t moduleID) From 0ae6fbb3119174482767ee08aab7923f37bf697d Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sat, 14 Feb 2026 16:53:06 +0100 Subject: [PATCH 02/17] full refactoring, partially working --- wled00/FX.cpp | 232 +++++++++++-------- wled00/FX.h | 46 +++- wled00/FX_2Dfcn.cpp | 549 +++++++++++++++++++++++++++++++------------- 3 files changed, 563 insertions(+), 264 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 65d9726bcb..96d4200872 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6314,52 +6314,30 @@ void mode_2Dscrollingtext(void) { const int cols = SEG_W; const int rows = SEG_H; - uint8_t letterHeight; - uint8_t letterWidth; - uint8_t letterSpacing; + uint8_t letterHeight = 8; // Default + uint8_t letterWidth = 5; + uint8_t letterSpacing = 1; const uint8_t* selectedFont = nullptr; - static File fontFile; // TODO: come up with a good plan, maybe even support multiple files? could do it like image FX. Multi instance can be added if needed (still possible with built in fonts) + char fileName[32]; bool useCustomFont = SEGMENT.check2; uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); - // use custom font from file if check2 is enabled and file exists + + FontHelper fontHelper(&SEGMENT); + if (useCustomFont) { - while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait - // Serial.print(F("Looking for font file: ")); - char fileName[16]; strcpy_P(fileName, PSTR("/font")); - if (fontNum) sprintf(fileName +5, "%d", fontNum); // append font type to file name, e.g. /font1.wbf + if (fontNum) sprintf(fileName +5, "%d", fontNum); strcat_P(fileName, PSTR(".wbf")); - //Serial.println(fileName); - if (WLED_FS.exists(fileName)) { // TODO: this is slow (~20ms(?)) maybe cache result? with this line: 9.5fps (3 segments), without: 9.5fps, so does not matter... open and close is the slow part. - // Serial.print(F(" file found ")); - //if(!fontFile) - fontFile = WLED_FS.open(fileName); - if (fontFile) { - if (fontFile.read() == 'W') { // check file header - // Serial.println(F(" Valid magic byte found")); - letterHeight = fontFile.read(); // font glyph height in pixels - letterWidth = fontFile.read()* 5 / 7; // max glyph width in pixels //!!! must load the width table and use actual glyph width, this is just a test hack - letterSpacing = fontFile.read(); // spacing between characters - /* - fontFile.seek(0); // reset file pointer to the beginning for later use in drawChar() - // print first 500 bytes of the file - for (int i = 0; i < 500; i++) { - Serial.print(fontFile.read(), DEC); - Serial.print(" "); - }*/ - } else { - fontFile.close(); - useCustomFont = false; // invalid file header, fallback to built-in font - } - } + + if (WLED_FS.exists(fileName)) { + fontHelper.setFont(nullptr, fileName); + } else { + useCustomFont = false; } - else return; // font file not found, do not run the effect for now - //else - //Serial.println(F("Font file not found, using built-in font")); } + if (!useCustomFont) { - return; // TODO: !!! remvoe debug switch (fontNum) { default: case 0: selectedFont = console_font_4x6; break; @@ -6368,24 +6346,22 @@ void mode_2Dscrollingtext(void) { case 3: selectedFont = console_font_7x9; break; case 4: selectedFont = console_font_5x12; break; } - // extract dimensions from the header (see font files for details) + fontHelper.setFont(selectedFont, nullptr); letterHeight = pgm_read_byte_near(&selectedFont[1]); letterWidth = pgm_read_byte_near(&selectedFont[2]); } - - unsigned rotLW, rotLH; + // letters are rotated const int8_t rotate = map(SEGMENT.custom3, 0, 31, -2, 2); - if (rotate == 1 || rotate == -1) { - rotLH = letterWidth; - rotLW = letterHeight; - } else { - rotLW = letterWidth; - rotLH = letterHeight; - } - + + // Text preparation (Time/Date logic) char text[WLED_MAX_SEGNAME_LEN+1] = {'\0'}; - size_t result_pos = 0; + size_t result_pos = 0; // ... (Prepare text) + // Re-use the existing text generation logic from previous implementation + // We need to copy it or re-implement it. + // I will re-implement the short version of the logic here or I should have copied it. + // Since I am replacing the whole function, I must include the text generation logic. + char sec[5]; int AmPmHour = hour(localTime); bool isitAM = true; @@ -6398,26 +6374,23 @@ void mode_2Dscrollingtext(void) { } size_t len = 0; - if (SEGMENT.name) len = strlen(SEGMENT.name); // note: SEGMENT.name is limited to WLED_MAX_SEGNAME_LEN - if (len == 0) { // fallback if empty segment name: display date and time + if (SEGMENT.name) len = strlen(SEGMENT.name); + if (len == 0) { sprintf_P(text, PSTR("%s %d, %d %d:%02d%s"), monthShortStr(month(localTime)), day(localTime), year(localTime), AmPmHour, minute(localTime), sec); } else { size_t i = 0; while (i < len) { if (SEGMENT.name[i] == '#') { - char token[7]; // copy up to 6 chars + null terminator - bool zero = false; // a 0 suffix means display leading zeros + char token[7]; + bool zero = false; size_t j = 0; while (j < 6 && i + j < len) { token[j] = std::toupper(SEGMENT.name[i + j]); - if(token[j] == '0') - zero = true; // 0 suffix found. Note: there is an edge case where a '0' could be part of a trailing text and not the token, handling it is not worth the effort + if(token[j] == '0') zero = true; j++; } token[j] = '\0'; - int advance = 5; // number of chars to advance in 'text' after processing the token - - // Process token + int advance = 5; char temp[32]; if (!strncmp_P(token,PSTR("#DATE"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d.%04d"):PSTR("%d.%d.%d"), day(localTime), month(localTime), year(localTime)); else if (!strncmp_P(token,PSTR("#DDMM"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d") :PSTR("%d.%d"), day(localTime), month(localTime)); @@ -6435,32 +6408,74 @@ void mode_2Dscrollingtext(void) { else if (!strncmp_P(token,PSTR("#MO"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), month(localTime)); advance = 3; } else if (!strncmp_P(token,PSTR("#DAY"),4)) { sprintf (temp, ("%s") , dayShortStr(weekday(localTime))); advance = 4; } else if (!strncmp_P(token,PSTR("#DD"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), day(localTime)); advance = 3; } - else { temp[0] = '#'; temp[1] = '\0'; zero = false; advance = 1; } // Unknown token, just copy the # - - if(zero) advance++; // skip the '0' suffix + else { temp[0] = '#'; temp[1] = '\0'; zero = false; advance = 1; } + + if(zero) advance++; size_t temp_len = strlen(temp); if (result_pos + temp_len < WLED_MAX_SEGNAME_LEN) { strcpy(text + result_pos, temp); result_pos += temp_len; } - i += advance; - } - else { - if (result_pos < WLED_MAX_SEGNAME_LEN) { - text[result_pos++] = SEGMENT.name[i++]; // no token, just copy char - } else - break; // buffer full + } else { + if (result_pos < WLED_MAX_SEGNAME_LEN) text[result_pos++] = SEGMENT.name[i++]; + else break; } } } + // PREPARE FONT CACHE + if (useCustomFont) { + if (strpbrk(text, "0123456789")) fontHelper.setCacheNumbers(true); // Optimize for clocks + while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait + } + fontHelper.prepare(text); + + if (useCustomFont && SEGMENT.data) { + FontHeader* header = (FontHeader*)SEGMENT.data; + letterHeight = header->height; + letterSpacing = header->spacing; + letterWidth = header->maxW; + } + + unsigned rotLW, rotLH; + if (rotate == 1 || rotate == -1) { + rotLH = letterWidth; + rotLW = letterHeight; + } else { + rotLW = letterWidth; + rotLH = letterHeight; + } + const int numberOfChars = utf8_strlen(text); -// Serial.printf("Text to display: '%s' (length: %d chars)\n", text, numberOfChars); - int width = (numberOfChars * rotLW); // TODO: for variable width fonts calculate the actual width of the text instead of assuming fixed width + + // Calculate total width using variable width + int totalTextWidth = 0; + int idx = 0; + for (int c = 0; c < numberOfChars; c++) { + uint8_t charLen; + uint32_t unicode = utf8_decode(&text[idx], &charLen); + idx += charLen; + uint8_t w = fontHelper.getCharacterWidth(unicode); + totalTextWidth += (rotate == 1 || rotate == -1) ? letterHeight : w; // if rotated +/-90, width is height + if (c < numberOfChars - 1) totalTextWidth += letterSpacing; + } + // If rotated, the "width" of the text string is actually dependent on orientation? + // Previous code: `int width = (numberOfChars * rotLW);` + // If rotated +/-90, rotLW = letterHeight. + // So it assumed fixed height as width. + // If variable width font is rotated 90 deg, the "height" of the char becomes its width in the string. + // "letterHeight" is constant for the font. So `maxW` doesn't matter for 90deg rotation? + // Yes, if rotated 90deg, the character takes `letterHeight` pixels horizontally. + + if (rotate == 1 || rotate == -1) { + totalTextWidth = numberOfChars * (letterHeight + letterSpacing); // Fixed vertical size + } + int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-rotLH)/2; - if (width <= cols) { - // scroll vertically (e.g. ^^ Way out ^^) if it fits + + if (totalTextWidth <= cols) { + // scroll vertically int speed = map(SEGMENT.speed, 0, 255, 5000, 1000); int frac = strip.now % speed + 1; if (SEGMENT.intensity == 255) { @@ -6471,47 +6486,64 @@ void mode_2Dscrollingtext(void) { } if (SEGENV.step < strip.now) { - // calculate start offset - if (width > cols) { + if (totalTextWidth > cols) { if (SEGMENT.check3) { - if (SEGENV.aux0 == 0) SEGENV.aux0 = width + cols - 1; + if (SEGENV.aux0 == 0) SEGENV.aux0 = totalTextWidth + cols - 1; else --SEGENV.aux0; - } else ++SEGENV.aux0 %= width + cols; - } else SEGENV.aux0 = (cols + width)/2; - ++SEGENV.aux1 &= 0xFF; // color shift - SEGENV.step = strip.now + map(SEGMENT.speed, 0, 255, 250, 50); // shift letters every ~250ms to ~50ms + } else ++SEGENV.aux0 %= totalTextWidth + cols; + } else SEGENV.aux0 = (cols + totalTextWidth)/2; + ++SEGENV.aux1 &= 0xFF; + SEGENV.step = strip.now + map(SEGMENT.speed, 0, 255, 250, 50); } - SEGMENT.fade_out(255 - (SEGMENT.custom1>>4)); // trail + SEGMENT.fade_out(255 - (SEGMENT.custom1>>4)); uint32_t col1 = SEGMENT.color_from_palette(SEGENV.aux1, false, PALETTE_SOLID_WRAP, 0); uint32_t col2 = BLACK; - // if gradient is selected and palette is default (0) drawCharacter() uses gradient from SEGCOLOR(0) to SEGCOLOR(2) - // otherwise col2 == BLACK means use currently selected palette for gradient - // if gradient is not selected set both colors the same - if (SEGMENT.check1) { // use gradient - if (SEGMENT.palette == 0) { // use colors for gradient + if (SEGMENT.check1) { + if (SEGMENT.palette == 0) { col1 = SEGCOLOR(0); col2 = SEGCOLOR(2); } - } else col2 = col1; // force characters to use single color (from palette) - - int idx = 0; + } else col2 = col1; + // Drawing Loop + idx = 0; // Reset index for UTF8 + int currentXOffset = 0; + for (int c = 0; c < numberOfChars; c++) { - int xoffset = int(cols) - int(SEGENV.aux0) + ((rotLW+2)*c); // TODO: +1 is fixed, need something better - if (xoffset + rotLW < 0) continue; // don't draw characters off-screen uint8_t charLen; - uint32_t unicode = utf8_decode(&text[idx], &charLen); // decode the UTF-8 character - //Serial.printf("charlen: %d, unicode: %u, xoffset: %d\n", charLen, unicode, xoffset); - idx += charLen; // advance by the length of the current UTF-8 character - SEGMENT.drawCharacter(unicode, xoffset, yoffset, selectedFont, fontFile, col1, col2, rotate); - } - if (useCustomFont) fontFile.close(); // TODO: check if this is fast enough opening and closing plus parsing each frame. -> without closing, fps go from 9.5fps to 17fps, maybe better to cache the whole word and only update if changed? -// it can be 64 chars max, each char in normal use is below 32x32 or 128bytes, so 8k per segment absolut max, probably more like 4k and this is not for 8266 terretory. -// but that only works for text, not for clock. so would need to cache numbers 0-9 always. that is another 1k -// or: cache currently visible glyphs only, reload if new char appears. add complexity but could still be way faster than rendering each glyph from file each frame. -//single segment is still fast though, 60fps, with file exists check and open and close: drops to 23fps... cachig may be a good option, can put it in FX data as: charmap, bitmap combo to look it up quickly. -// although that may result in frame hickups whenever the file is being cached... psram would really solve it for good, could just drop the whole font in there. + uint32_t unicode = utf8_decode(&text[idx], &charLen); + idx += charLen; + + uint8_t glyphWidth = fontHelper.getCharacterWidth(unicode); + uint8_t spacing = letterSpacing; + + // Effective width for layout + int advance = 0; + + int drawX = 0; + + if (rotate == 1 || rotate == -1) { + // Vertical text? + // If rotated 90deg, the text is still horizontal but letters are sideways? + // Previous logic: `xoffset = int(cols) - int(SEGENV.aux0) + ((rotLW+2)*c);` + // `rotLW` was `letterHeight`. + // So it advanced by `letterHeight+2`. + // I will match this logic. + advance = letterHeight + spacing; + drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; + currentXOffset += advance; + } else { + advance = glyphWidth + spacing; + drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; + currentXOffset += advance; + } + + if (drawX + ((rotate == 1 || rotate == -1) ? letterHeight : glyphWidth) < 0) continue; + if (drawX >= cols) continue; + + fontHelper.drawCharacter(unicode, drawX, yoffset, col1, col2, rotate); + } } static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,Custom Font,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; diff --git a/wled00/FX.h b/wled00/FX.h index 1b17c2e921..bbd1d4d96b 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -273,6 +273,50 @@ extern byte realtimeMode; // used in getMappedPixelIndex() #define FX_MODE_TV_SIMULATOR 116 #define FX_MODE_DYNAMIC_SMOOTH 117 // candidate for removal (check3 in dynamic) +// Font Helper Class +// Registry entry for the RAM cache +struct GlyphEntry { + uint8_t code; // 0-255 index, same as in font + uint8_t width; + uint8_t height; + uint8_t padding; // padding is added anyway, might as well indicate it for future use +}; + +// Header for the RAM cache +struct FontHeader { + uint32_t firstUnicode; // from font file + uint8_t glyphCount; + uint8_t height; + uint8_t spacing; + uint8_t maxW; + uint8_t first; // from font file + uint8_t last; // from font file + uint8_t cachedCodes[64]; // The "Checklist" to see if we need a rebuild, max string length of 64 + // GlyphEntry registry[glyphCount]; // Variable length + // uint8_t bitmapData[]; // Variable length +}; + +class FontHelper { + public: + FontHelper(Segment* seg) : _segment(seg), _flashFont(nullptr), _fileFont(nullptr) {} + + void setFont(const uint8_t* flashFont, const char* filename); + void setCacheNumbers(bool cache) { _cacheNumbers = cache; } // If set, always cache digits 0-9 + void prepare(const char* text); + uint8_t getCharacterWidth(uint32_t code); + void drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate); + + private: + Segment* _segment; + const uint8_t* _flashFont; + const char* _fileFont; + bool _cacheNumbers = false; + + void rebuildCache(const char* text); + int32_t getGlyphIndex(uint32_t unicode, const FontHeader* header); +}; + + // new 0.14 2D effects #define FX_MODE_2DSPACESHIPS 118 //gap fill #define FX_MODE_2DCRAZYBEES 119 //gap fill @@ -424,6 +468,7 @@ class WS2812FX; // segment, 76 bytes class Segment { public: + friend class FontHelper; // Allow FontHelper to access protected members uint32_t colors[NUM_COLORS]; uint16_t start; // start index / start X coordinate 2D (left) uint16_t stop; // stop index / stop X coordinate 2D (right); segment is invalid if stop == 0 @@ -770,7 +815,6 @@ class Segment { void drawCircle(uint16_t cx, uint16_t cy, uint8_t radius, uint32_t c, bool soft = false) const; void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, uint32_t c, bool soft = false) const; void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c, bool soft = false) const; - void drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) const; void wu_pixel(uint32_t x, uint32_t y, CRGB c) const; inline void drawCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) const { drawCircle(cx, cy, radius, RGBW32(c.r,c.g,c.b,0), soft); } inline void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) const { fillCircle(cx, cy, radius, RGBW32(c.r,c.g,c.b,0), soft); } diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 8e6ee674f2..f4e5d08007 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -559,169 +559,7 @@ void Segment::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint3 } } -// draws a raster font character on canvas -// only supports: 4x6=24, 5x8=40, 5x12=60, 6x8=48 and 7x9=63 fonts ATM -/* -void Segment::drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color, uint32_t col2, int8_t rotate) const { - if (!isActive()) return; // not active - if (chr < 32 || chr > 126) return; // only ASCII 32-126 supported - chr -= 32; // align with font table entries - const int font = w*h; - - // if col2 == BLACK then use currently selected palette for gradient otherwise create gradient from color and col2 - CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; // selected palette as gradient - - for (int i = 0; i= (int)vWidth() || y0 < 0 || y0 >= (int)vHeight()) continue; // drawing off-screen - if (((bits>>(j+(8-w))) & 0x01)) { // bit set - setPixelColorXYRaw(x0, y0, c.color32); - } - } - } -}*/ -#define FONT_MAGIC_BYTE 0x57 // 'W' for WLED -#define FONT_HEADER_SIZE 11 // size of font header in bytes -#define LAST_ASCII_CHAR 126 // last ASCII character supported by font (currently hardcoded, could be made dynamic in future) - -void Segment::drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2, int8_t rotate) const { - if (!isActive() || (fontData == nullptr && !fontFile)) return; - //if (pgm_read_byte_near(&fontData[0]) != FONT_MAGIC_BYTE) return; // Check for Magic 'W' TODO: do this in FX not here? - uint8_t w, h, space, first, last, flags; - uint32_t lastUnicode = 0; // will be calculated based on first unicode char and number of glyphs - - fontFile.seek(1); // skip magic byte (already checked) - h = fontFile.read(); - w = fontFile.read(); // max width, (currently not used but could be used to pre allocate a buffer) - space = fontFile.read(); // spacing between characters - flags = fontFile.read(); - first = fontFile.read(); - last = fontFile.read(); - uint32_t firstUnicode; - fontFile.read((uint8_t *)&firstUnicode,4); // first unicode char in this font - if (firstUnicode > 0 && last > LAST_ASCII_CHAR) { - lastUnicode = firstUnicode + (last - LAST_ASCII_CHAR - 1); // calculate last unicode char based on first unicode char and number of glyphs - } - /* - Serial.print("Font Metadata: w="); Serial.print(w, DEC); - Serial.print(" h="); Serial.print(h, DEC); - Serial.print(" flags="); Serial.print(flags, BIN); - Serial.print(" first="); Serial.print(first, DEC); - Serial.print(" last="); Serial.print(last, DEC); - Serial.print(" firstUnicode="); Serial.println(firstUnicode, DEC);*/ - uint8_t numGlyphs = last - first + 1; - - uint8_t widthTable[numGlyphs]; // max 256 characters, each with its own width (if flags & 0x01) - for (int i = 0; i < numGlyphs; i++) { - widthTable[i] = fontFile.read(); - // Serial.print("Width of char "); Serial.print(first + i, DEC); Serial.print(": "); Serial.println(widthTable[i], DEC); - } - - // print first 500 bytes of the file - // for (int i = 0; i < 500; i++) { -//Serial.print(fontFile.read(), DEC); - // Serial.print(" "); - // } - - // read font metadata from header - /* - h = pgm_read_byte_near(&fontData[1]); - w = pgm_read_byte_near(&fontData[2]); - flags = pgm_read_byte_near(&fontData[3]); - first = pgm_read_byte_near(&fontData[4]); - last = pgm_read_byte_near(&fontData[5]); -*/ - if (unicode < first) return; - if (unicode > LAST_ASCII_CHAR) { - if (unicode > lastUnicode || unicode < firstUnicode) { - unicode = '?'; // unicode is in extended range ad not supported by this font, draw a '?' - } - else { - unicode = unicode - firstUnicode + LAST_ASCII_CHAR + 1; // unicode is in extended range and supported by this font, calculate the corresponding font character index - } - } - - uint16_t chrIdx = unicode - first; - - CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; // TODO: move this to FX and pass the palette - //const uint8_t* bitmapData = fontData + 10; // data starts after 10-byte header TODO: add skip over width table if present (flags & 0x01) - - // calculate offset by counting bytes for each glyph - uint32_t bitmapDataOffset = FONT_HEADER_SIZE + numGlyphs; // start of bitmap data (after header and width table) - for (int i = 0; i < chrIdx; i++) { - uint32_t numbits = widthTable[i] * h; - uint32_t numbytes = (numbits + 7) / 8; // Calculate padding-inclusive byte size - bitmapDataOffset += numbytes; - } - - // bytes per glyph - w = widthTable[chrIdx]; // actual width of this character - uint16_t bitsPerChar = (uint32_t)w * h; // todo use 16bit math make sure large fonts do not overflow - uint16_t bytesPerChar = (bitsPerChar + 7) / 8; // Calculate padding-inclusive byte size - //Serial.printf("Drawing char %u (index %u): w=%u, h=%u, bits=%u, bytes=%u\n", unicode, chrIdx, widthTable[chrIdx], h, bitsPerChar, bytesPerChar); - - // Jump to the start of this specific character's data block - //const uint8_t* charData = bitmapData + (chrIdx * bytesPerChar); - uint8_t charData[bytesPerChar]; - fontFile.seek(bitmapDataOffset); // Move file pointer to the character's bitmap data (skip header and width table) - fontFile.read(charData, bytesPerChar); // Read the character's bitmap data into - // draw glyph from top left to bottom right, row by row (packed format is MSB-first) - uint16_t bitIndex = 0; - for (int i = 0; i < h; i++) { // glyph height - CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); // NOBLEND is faster - - for (int j = 0; j < w; j++) { // glyph width - uint16_t bytePos = bitIndex >> 3; // locate the byte and the specific bit - uint8_t bitPos = 7 - (bitIndex & 0x07); // MSB-first bit position within the byte - //uint8_t byteVal = pgm_read_byte_near(&charData[bytePos]); - uint8_t byteVal = charData[bytePos]; - bool bitSet = (byteVal >> bitPos) & 1; - bitIndex++; - - if (bitSet) { - int x0, y0; - // Rotation Logic - /* - switch (rotate) { - case -1: x0 = x + (h-1) - i; y0 = y + (w-1) - j; break; // -90 deg - case -2: - case 2: x0 = x + j; y0 = y + (h-1) - i; break; // 180 deg - case 1: x0 = x + i; y0 = y + j; break; // +90 deg - default: x0 = x + (w-1) - j; y0 = i + y; break; // no rotation - }*/ - switch (rotate) { - case -1: x0 = x + (h-1) - i; y0 = y + j; break; // -90 deg - case -2: - case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; // 180 deg - case 1: x0 = x + i; y0 = y + (w-1) - j; break; // +90 deg - default: x0 = x + j; y0 = y + i; break; // No rotation - } - - if (x0 >= 0 && x0 < (int)vWidth() && y0 >= 0 && y0 < (int)vHeight()) { - setPixelColorXYRaw(x0, y0, c.color32); - } - } - } - } -} +// Segment::wu_pixel implementation is next #define WU_WEIGHT(a,b) ((uint8_t) (((a)*(b)+(a)+(b))>>8)) void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu_pixel procedure by reddit u/sutaburosu @@ -746,3 +584,388 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu #undef WU_WEIGHT #endif // WLED_DISABLE_2D +#define LAST_ASCII_CHAR 126 +// FontHelper implementation +void FontHelper::setFont(const uint8_t* flashFont, const char* filename) { + _flashFont = flashFont; + _fileFont = filename; +} + +// Helper to get glyph index from unicode +int32_t FontHelper::getGlyphIndex(uint32_t unicode, const FontHeader* header) { + if (!header) return -1; + if (unicode < header->first) return -1; + + // ASCII Range + if (unicode <= LAST_ASCII_CHAR) { + if (unicode <= header->last) { + return unicode - header->first; + } + } + // Extended Range + else { + if (header->firstUnicode > 0 && unicode >= header->firstUnicode) { + uint32_t lastUni = header->firstUnicode + (header->last - LAST_ASCII_CHAR - 1); + if (unicode <= lastUni) { + // Corrected formula: (VirtualIndex) - First + return (unicode - header->firstUnicode + LAST_ASCII_CHAR + 1) - header->first; + } + } + } + + return -1; +} + +void FontHelper::prepare(const char* text) { + if (_flashFont) return; // PROGMEM fonts don't need preparation + if (!_fileFont) return; + if (!text) return; + + // Ensure data loaded for header + if (!_segment->data) { + rebuildCache(text); // Load header + if (!_segment->data) return; // Failed + } + + uint8_t neededCodes[64]; // Max unique chars + uint8_t neededCount = 0; + FontHeader* header = (FontHeader*)_segment->data; + + // 0. Pre-add numbers if requested (Matrix/Clock mode) + if (_cacheNumbers) { + const char* nums = "0123456789:. "; + for (const char* p = nums; *p; p++) { + int32_t idx = getGlyphIndex((uint32_t)*p, header); + if (idx >= 0 && idx < 256) { + neededCodes[neededCount++] = (uint8_t)idx; + } + } + } + + // 1. Decode text and find needed codes + size_t len = strlen(text); + size_t i = 0; + + while (i < len) { + uint8_t charLen; + uint32_t unicode = utf8_decode(&text[i], &charLen); + i += charLen; + + int32_t index = getGlyphIndex(unicode, header); + + if (index < 0) { + // Fallback to '?' + index = getGlyphIndex('?', header); + } + + if (index >= 0 && index < 256) { + // Check if we already marked this code as needed + bool alreadyNeeded = false; + for (int k=0; kglyphCount; c++) { + if (header->cachedCodes[c] == neededCodes[k]) { + found = true; + break; + } + } + if (!found) { + allCached = false; + break; + } + } + + if (!allCached) { + rebuildCache(text); + } +} + +void FontHelper::rebuildCache(const char* text) { + if (!_fileFont) return; + + File file = WLED_FS.open(_fileFont, "r"); + // Fallback logic for missing fonts + if (!file) { + // List of fallback fonts to try + // User requested: font.wbf, font1.wbf ... font4.wbf + const char* fallbackFonts[] = { "/font.wbf", "/font0.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf", "/font5.wbf" }; + + for (int i = 0; i < 7; i++) { + // Don't try the same file again if it was the initial request + if (strncmp(_fileFont, fallbackFonts[i], 15) == 0) continue; + + file = WLED_FS.open(fallbackFonts[i], "r"); + if (file) { + break; + } + } + } + + if (!file) return; + + // Read header + if (file.read() != 'W') { file.close(); return; } // Magic + + FontHeader tempHeader; + tempHeader.height = file.read(); + uint8_t maxWidth = file.read(); + tempHeader.maxW = maxWidth; + tempHeader.spacing = file.read(); + uint8_t flags = file.read(); + tempHeader.first = file.read(); + tempHeader.last = file.read(); + file.read((uint8_t*)&tempHeader.firstUnicode, 4); + + // Identify unique codes needed + uint8_t neededCodes[64]; + uint8_t neededCount = 0; + + // 0. Pre-add numbers if requested (Matrix/Clock mode) + if (_cacheNumbers) { + const char* nums = "0123456789:. "; + for (const char* p = nums; *p; p++) { + int32_t idx = getGlyphIndex((uint32_t)*p, &tempHeader); + if (idx >= 0 && idx < 256) { + neededCodes[neededCount++] = (uint8_t)idx; + } + } + } + + size_t len = strlen(text); + size_t i = 0; + while (i < len) { + uint8_t charLen; + uint32_t unicode = utf8_decode(&text[i], &charLen); + i += charLen; + + int32_t index = getGlyphIndex(unicode, &tempHeader); + + if (index < 0) { + index = getGlyphIndex('?', &tempHeader); + } + + if (index >= 0 && index < 256) { + // Add unique + bool known = false; + for (int k=0; k= numGlyphs) { + bitmapSizes[k] = 0; + continue; + } + + // Calculate file offset for this code + uint32_t offset = fileDataStart; + for (int j=0; jallocateData(totalRam)) { + file.close(); + return; + } + + // Write Header + uint8_t* ptr = _segment->data; + memcpy(ptr, &tempHeader, sizeof(FontHeader)); + ptr += sizeof(FontHeader); + + // Write Registry + GlyphEntry* registry = (GlyphEntry*)ptr; + ptr += neededCount * sizeof(GlyphEntry); + + uint8_t* bitmapDst = ptr; + + for (int k=0; k 0) { + file.seek(fileOffsets[k]); + file.read(bitmapDst, bitmapSizes[k]); + bitmapDst += bitmapSizes[k]; + } + } + + file.close(); +} + +uint8_t FontHelper::getCharacterWidth(uint32_t code) { + if (_flashFont) { + // Flash font fallback + // TODO: Support variable width flash fonts if flags indicate it + return pgm_read_byte_near(&_flashFont[2]); + } + + if (_segment->data) { + FontHeader* header = (FontHeader*)_segment->data; + int32_t index = getGlyphIndex(code, header); + + if (index >= 0) { + // Find in registry + GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); + for (int k=0; kglyphCount; k++) { + if (registry[k].code == (uint8_t)index) { + return registry[k].width; + } + } + } + } + return 0; +} + +void FontHelper::drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { + uint8_t w = 0, h = 0; + uint8_t* val = nullptr; // pointer to bitmap data (RAM or Flash) + // For file fonts, we need to read from file into buffer. + // For flash fonts, we point directly to PROGMEM. + + // To unify, we need a way to get the bitmap for the specific glyph. + // Flash: assumed fixed width for now (but user wants future proof). + // Let's stick to current Flash logic but use getGlyphIndex if possible? + // Flash fonts don't have a FontHeader struct in RAM easily to pass to getGlyphIndex. + // We'd need to construct a temp one or overload getGlyphIndex. + + if (_flashFont) { + const uint8_t* font = _flashFont; + h = pgm_read_byte_near(&font[1]); + w = pgm_read_byte_near(&font[2]); + + // TODO: proper mapping for flash fonts? They usually just support ASCII 32-126 + if (code < 32 || code > 126) return; + uint8_t chr = code - 32; + + CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; + + for (int i = 0; i < h; i++) { + uint8_t row = pgm_read_byte_near(&font[(chr * h) + i + 3]); + + CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); + for (int j = 0; j < w; j++) { + if ((row >> (7-j)) & 1) { + int x0, y0; + switch (rotate) { + case -1: x0 = x + (h-1) - i; y0 = y + j; break; + case -2: + case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; + case 1: x0 = x + i; y0 = y + (w-1) - j; break; + default: x0 = x + j; y0 = y + i; break; + } + if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { + _segment->setPixelColorXYRaw(x0, y0, c.color32); + } + } + } + } + return; + } + + // File Font Logic + if (!_segment->data) return; + FontHeader* header = (FontHeader*)_segment->data; + + int32_t index = getGlyphIndex(code, header); + if (index < 0) return; + + GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); + GlyphEntry* entry = nullptr; + uint32_t bitmapOffset = 0; + + for (int k=0; kglyphCount; k++) { + if (registry[k].code == (uint8_t)index) { + entry = ®istry[k]; + break; + } + uint16_t bits = registry[k].width * registry[k].height; + bitmapOffset += (bits + 7) / 8; + } + + if (!entry) return; + + uint8_t* bitmap = _segment->data + sizeof(FontHeader) + (header->glyphCount * sizeof(GlyphEntry)) + bitmapOffset; + w = entry->width; + h = entry->height; + CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; + + uint16_t bitIndex = 0; + for (int i = 0; i < h; i++) { + CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); + for (int j = 0; j < w; j++) { + uint16_t bytePos = bitIndex >> 3; + uint8_t bitPos = 7 - (bitIndex & 7); + uint8_t byteVal = bitmap[bytePos]; + bool bitSet = (byteVal >> bitPos) & 1; + bitIndex++; + + if (bitSet) { + int x0, y0; + switch (rotate) { + case -1: x0 = x + (h-1) - i; y0 = y + j; break; + case -2: + case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; + case 1: x0 = x + i; y0 = y + (w-1) - j; break; + default: x0 = x + j; y0 = y + i; break; + } + if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { + _segment->setPixelColorXYRaw(x0, y0, c.color32); + } + } + } + } +} \ No newline at end of file From e1ae3e2a5c18cb92ee512db78059afc653fa0017 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sat, 14 Feb 2026 17:47:43 +0100 Subject: [PATCH 03/17] refactoring, fixed some bugs --- wled00/FX.cpp | 19 +++---- wled00/FX.h | 12 ++-- wled00/FX_2Dfcn.cpp | 130 ++++++++++++++++++++++++++++++++++---------- 3 files changed, 119 insertions(+), 42 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 96d4200872..1ecee5850d 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6323,16 +6323,15 @@ void mode_2Dscrollingtext(void) { bool useCustomFont = SEGMENT.check2; uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); - FontHelper fontHelper(&SEGMENT); + FontManager fontManager(&SEGMENT); + bool init = (SEGENV.call == 0); if (useCustomFont) { strcpy_P(fileName, PSTR("/font")); if (fontNum) sprintf(fileName +5, "%d", fontNum); strcat_P(fileName, PSTR(".wbf")); - if (WLED_FS.exists(fileName)) { - fontHelper.setFont(nullptr, fileName); - } else { + if (!fontManager.loadFont(fileName, nullptr, init)) { useCustomFont = false; } } @@ -6346,7 +6345,7 @@ void mode_2Dscrollingtext(void) { case 3: selectedFont = console_font_7x9; break; case 4: selectedFont = console_font_5x12; break; } - fontHelper.setFont(selectedFont, nullptr); + fontManager.loadFont(nullptr, selectedFont, init); letterHeight = pgm_read_byte_near(&selectedFont[1]); letterWidth = pgm_read_byte_near(&selectedFont[2]); } @@ -6426,10 +6425,10 @@ void mode_2Dscrollingtext(void) { // PREPARE FONT CACHE if (useCustomFont) { - if (strpbrk(text, "0123456789")) fontHelper.setCacheNumbers(true); // Optimize for clocks + if (strpbrk(text, "0123456789")) fontManager.setCacheNumbers(true); // Optimize for clocks while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait } - fontHelper.prepare(text); + fontManager.prepare(text); if (useCustomFont && SEGMENT.data) { FontHeader* header = (FontHeader*)SEGMENT.data; @@ -6456,7 +6455,7 @@ void mode_2Dscrollingtext(void) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; - uint8_t w = fontHelper.getCharacterWidth(unicode); + uint8_t w = fontManager.getCharacterWidth(unicode); totalTextWidth += (rotate == 1 || rotate == -1) ? letterHeight : w; // if rotated +/-90, width is height if (c < numberOfChars - 1) totalTextWidth += letterSpacing; } @@ -6515,7 +6514,7 @@ void mode_2Dscrollingtext(void) { uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; - uint8_t glyphWidth = fontHelper.getCharacterWidth(unicode); + uint8_t glyphWidth = fontManager.getCharacterWidth(unicode); uint8_t spacing = letterSpacing; // Effective width for layout @@ -6542,7 +6541,7 @@ void mode_2Dscrollingtext(void) { if (drawX + ((rotate == 1 || rotate == -1) ? letterHeight : glyphWidth) < 0) continue; if (drawX >= cols) continue; - fontHelper.drawCharacter(unicode, drawX, yoffset, col1, col2, rotate); + fontManager.drawCharacter(unicode, drawX, yoffset, col1, col2, rotate); } } static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,Custom Font,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; diff --git a/wled00/FX.h b/wled00/FX.h index bbd1d4d96b..515748c01f 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -291,15 +291,18 @@ struct FontHeader { uint8_t maxW; uint8_t first; // from font file uint8_t last; // from font file + char name[16]; // The requested font name (e.g. "font3.wbf") + char file[16]; // The actual file used (e.g. "font.wbf") uint8_t cachedCodes[64]; // The "Checklist" to see if we need a rebuild, max string length of 64 // GlyphEntry registry[glyphCount]; // Variable length - // uint8_t bitmapData[]; // Variable length + // uint8_t bitmapData[]; // Helper to handle font loading and drawing }; -class FontHelper { +class FontManager { public: - FontHelper(Segment* seg) : _segment(seg), _flashFont(nullptr), _fileFont(nullptr) {} + FontManager(Segment* seg) : _segment(seg), _flashFont(nullptr), _fileFont(nullptr) {} + bool loadFont(const char* filename, const uint8_t* flashFont = nullptr, bool init = false); void setFont(const uint8_t* flashFont, const char* filename); void setCacheNumbers(bool cache) { _cacheNumbers = cache; } // If set, always cache digits 0-9 void prepare(const char* text); @@ -310,6 +313,7 @@ class FontHelper { Segment* _segment; const uint8_t* _flashFont; const char* _fileFont; + const char* _fontName; // Requested font name bool _cacheNumbers = false; void rebuildCache(const char* text); @@ -468,7 +472,7 @@ class WS2812FX; // segment, 76 bytes class Segment { public: - friend class FontHelper; // Allow FontHelper to access protected members + friend class FontManager; // Allow FontManager to access protected members uint32_t colors[NUM_COLORS]; uint16_t start; // start index / start X coordinate 2D (left) uint16_t stop; // stop index / stop X coordinate 2D (right); segment is invalid if stop == 0 diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index f4e5d08007..4053744929 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -585,14 +585,58 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu #endif // WLED_DISABLE_2D #define LAST_ASCII_CHAR 126 -// FontHelper implementation -void FontHelper::setFont(const uint8_t* flashFont, const char* filename) { - _flashFont = flashFont; - _fileFont = filename; +// FontManager implementation +bool FontManager::loadFont(const char* filename, const uint8_t* flashFont, bool init) { + _flashFont = flashFont; + _fontName = filename; + _fileFont = filename; + + if (flashFont) return true; + if (!filename) return false; + + // If initializing (first call), force clean slate + if (init) { + if (_segment->data) _segment->deallocateData(); + } + + // Check if cache already contains this font + if (!init && _segment->data) { + FontHeader* header = (FontHeader*)_segment->data; + // Check if requested name matches cached logic name + if (strncmp(header->name, filename, 15) == 0) { + if (header->file[0]) { + _fileFont = header->file; + } + return true; + } + } + + if (WLED_FS.exists(filename)) { + // Exists, set it (will be loaded by prepare->rebuildCache later) + return true; + } + + // Fallback logic + const char* fallbackFonts[] = { "/font.wbf", "/font0.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf" }; + + //strcpy_P(fileName, PSTR("/font")); + // if (fontNum) sprintf(fileName +5, "%d", fontNum); + // strcat_P(fileName, PSTR(".wbf")); TODO: use this not a static list! + + for (int i = 0; i < 6; i++) { + if (strcmp(filename, fallbackFonts[i]) == 0) continue; // Don't check self + if (WLED_FS.exists(fallbackFonts[i])) { + _fileFont = fallbackFonts[i]; // found! + return true; + } + } + + _fileFont = nullptr; + return false; } // Helper to get glyph index from unicode -int32_t FontHelper::getGlyphIndex(uint32_t unicode, const FontHeader* header) { +int32_t FontManager::getGlyphIndex(uint32_t unicode, const FontHeader* header) { if (!header) return -1; if (unicode < header->first) return -1; @@ -608,6 +652,9 @@ int32_t FontHelper::getGlyphIndex(uint32_t unicode, const FontHeader* header) { uint32_t lastUni = header->firstUnicode + (header->last - LAST_ASCII_CHAR - 1); if (unicode <= lastUni) { // Corrected formula: (VirtualIndex) - First + // Debug: + // int32_t idx = (unicode - header->firstUnicode + LAST_ASCII_CHAR + 1) - header->first; + // Serial.printf("getGlyphIndex: Ext U+%04X -> Idx %d\n", unicode, idx); return (unicode - header->firstUnicode + LAST_ASCII_CHAR + 1) - header->first; } } @@ -616,13 +663,15 @@ int32_t FontHelper::getGlyphIndex(uint32_t unicode, const FontHeader* header) { return -1; } -void FontHelper::prepare(const char* text) { +void FontManager::prepare(const char* text) { if (_flashFont) return; // PROGMEM fonts don't need preparation if (!_fileFont) return; if (!text) return; + // Ensure data loaded for header if (!_segment->data) { + Serial.println("FontManager: No data, rebuilding cache for header"); rebuildCache(text); // Load header if (!_segment->data) return; // Failed } @@ -650,21 +699,21 @@ void FontHelper::prepare(const char* text) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[i], &charLen); i += charLen; - + int32_t index = getGlyphIndex(unicode, header); - + if (index < 0) { // Fallback to '?' index = getGlyphIndex('?', header); } - + if (index >= 0 && index < 256) { // Check if we already marked this code as needed bool alreadyNeeded = false; for (int k=0; k Date: Sat, 14 Feb 2026 21:06:18 +0100 Subject: [PATCH 04/17] add new tiny font, remove debug output, --- wled00/FX.cpp | 7 +- wled00/json.cpp | 15 -- wled00/src/font/console_font_4x6.h | 400 +++++++++-------------------- wled00/util.cpp | 4 +- 4 files changed, 133 insertions(+), 293 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 1ecee5850d..7ae2c5e29a 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6339,7 +6339,7 @@ void mode_2Dscrollingtext(void) { if (!useCustomFont) { switch (fontNum) { default: - case 0: selectedFont = console_font_4x6; break; + case 0: selectedFont = tinypixie2_6px; break; case 1: selectedFont = console_font_5x8; break; case 2: selectedFont = console_font_6x8; break; case 3: selectedFont = console_font_7x9; break; @@ -6426,15 +6426,14 @@ void mode_2Dscrollingtext(void) { // PREPARE FONT CACHE if (useCustomFont) { if (strpbrk(text, "0123456789")) fontManager.setCacheNumbers(true); // Optimize for clocks - while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait + //while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait -> TODO: do this in fontmanager before re-caching and only on C3 } fontManager.prepare(text); if (useCustomFont && SEGMENT.data) { FontHeader* header = (FontHeader*)SEGMENT.data; letterHeight = header->height; - letterSpacing = header->spacing; - letterWidth = header->maxW; + letterWidth = header->width; } unsigned rotLW, rotLH; diff --git a/wled00/json.cpp b/wled00/json.cpp index 9873fbccf7..15b7f75922 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -142,21 +142,6 @@ static bool deserializeSegment(JsonObject elem, byte it, byte presetId = 0) if (elem["n"]) { // name field exists const char * name = elem["n"].as(); - // print chars as hex - for (size_t i = 0; name && name[i] != '\0'; i++) { - Serial.print(name[i], HEX); - Serial.print(' '); - } - Serial.println(); - // print utf-8 decoded code points - size_t i = 0; - while (i < strlen(name)) { - uint8_t charLen; - uint32_t codePoint = utf8_decode(&name[i], &charLen); - Serial.print("U+"); - Serial.println(codePoint, HEX); - i += charLen; - } seg.setName(name); // will resolve empty and null correctly } else if (start != seg.start || stop != seg.stop) { // clearing or setting segment without name field diff --git a/wled00/src/font/console_font_4x6.h b/wled00/src/font/console_font_4x6.h index 08546fb571..86504a1cdb 100644 --- a/wled00/src/font/console_font_4x6.h +++ b/wled00/src/font/console_font_4x6.h @@ -1,20 +1,23 @@ -// font courtesy of https://github.com/idispatch/raster-fonts // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion /* - * WBF (WLED Bitmap Font) Packed Fixed-Width Format - * Header Layout (10 Bytes): - * [0] Magic 'W' (0x57) - * [1] Glyph height: 6 - * [2] Fixed/max glyph width: 4 - // spacing between cars (fixed to 1) - * [3] Flags: 0x00 (fixed width) - * [4] First Char: 32 - * [5] Last Char: 126 - * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 - * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * WBF (WLED Bitmap Font) Packed Format + * Header Layout (11 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 6 + * [2] Fixed/max glyph width: 4 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7-10] Unicode Offset (32-bit little-endian): 0x00000000 + * + * If variabls set ine width flag (0x01) i [4], header is followed by a + * width table of (Last Char - First Char + 1) bytes containing the + * width of each glyph. + * * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -35,266 +38,119 @@ * [Byte 1] [Byte 2] [Byte 3] * Final HEX for '!' = 0x22, 0x20, 0x20 * - * at the end of the stream, padding bits are added if necessary to fill the last byte + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ -static const unsigned char console_font_4x6[] PROGMEM = { - 0x57, 0x06, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset (32bit) +// Font: TinyPixie2_6px +// Height: 6, Max Width: 6, Spacing: 1 +// Characters: 32-126 (95 glyphs) +// Unicode Offset: 0x00000000 +// Variable Width: Yes + +static const unsigned char tinypixie2_6px[] PROGMEM = { + 0x57, 0x06, 0x06, 0x01, 0x01, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, S, Flags, First, Last, UnicodeOffset (32bit) + + // Width table + 0x03, 0x01, 0x03, 0x05, 0x03, 0x05, 0x06, 0x01, 0x02, 0x02, 0x05, 0x03, 0x01, 0x03, 0x01, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, + 0x06, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x04, 0x03, + 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x03, + 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x01, 0x05, 0x03, 0x03, + 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x05, 0x03, 0x03, 0x02, 0x03, 0x01, 0x03, 0x04, - // 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x25, 0x75, 0x20, // /* code=1, hex=0x01, ascii="^A" */ - // 0x27, 0x57, 0x20, // /* code=2, hex=0x02, ascii="^B" */ - // 0x05, 0x77, 0x20, // /* code=3, hex=0x03, ascii="^C" */ - // 0x02, 0x77, 0x20, // /* code=4, hex=0x04, ascii="^D" */ - // 0x27, 0x72, 0x70, // /* code=5, hex=0x05, ascii="^E" */ - // 0x22, 0x72, 0x70, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x20, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0xFF, 0xDF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ - // 0x07, 0x57, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0xF8, 0xA8, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x03, 0x16, 0x60, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x25, 0x27, 0x20, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x23, 0x22, 0x60, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x23, 0x51, 0x20, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x27, 0x57, 0x20, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x46, 0x76, 0x40, // /* code=16, hex=0x10, ascii="^P" */ - // 0x13, 0x73, 0x10, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x27, 0x27, 0x20, // /* code=18, hex=0x12, ascii="^R" */ - // 0x55, 0x50, 0x50, // /* code=19, hex=0x13, ascii="^S" */ - // 0x7D, 0xD5, 0x50, // /* code=20, hex=0x14, ascii="^T" */ - // 0x36, 0x53, 0x60, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x70, // /* code=22, hex=0x16, ascii="^V" */ - // 0x27, 0x27, 0x27, // /* code=23, hex=0x17, ascii="^W" */ - // 0x27, 0x22, 0x20, // /* code=24, hex=0x18, ascii="^X" */ - // 0x22, 0x27, 0x20, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x02, 0xF2, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x04, 0xF4, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x47, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x05, 0x75, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x02, 0x77, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x07, 0x72, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x22, 0x20, 0x20, /* code=33, hex=0x21, ascii="!" */ - 0x55, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x57, 0x57, 0x50, /* code=35, hex=0x23, ascii="#" */ - 0x23, 0x63, 0x62, /* code=36, hex=0x24, ascii="$" */ - 0x41, 0x24, 0x10, /* code=37, hex=0x25, ascii="%" */ - 0x25, 0x35, 0x70, /* code=38, hex=0x26, ascii="&" */ - 0x64, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x24, 0x44, 0x20, /* code=40, hex=0x28, ascii="(" */ - 0x42, 0x22, 0x40, /* code=41, hex=0x29, ascii=")" */ - 0x52, 0x72, 0x50, /* code=42, hex=0x2A, ascii="*" */ - 0x02, 0x72, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x64, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x70, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x20, /* code=46, hex=0x2E, ascii="." */ - 0x11, 0x24, 0x40, /* code=47, hex=0x2F, ascii="/" */ - 0x35, 0x55, 0x60, /* code=48, hex=0x30, ascii="0" */ - 0x26, 0x22, 0x70, /* code=49, hex=0x31, ascii="1" */ - 0x61, 0x24, 0x70, /* code=50, hex=0x32, ascii="2" */ - 0x61, 0x21, 0x60, /* code=51, hex=0x33, ascii="3" */ - 0x15, 0x71, 0x10, /* code=52, hex=0x34, ascii="4" */ - 0x74, 0x61, 0x60, /* code=53, hex=0x35, ascii="5" */ - 0x24, 0x65, 0x20, /* code=54, hex=0x36, ascii="6" */ - 0x71, 0x32, 0x20, /* code=55, hex=0x37, ascii="7" */ - 0x25, 0x25, 0x20, /* code=56, hex=0x38, ascii="8" */ - 0x25, 0x31, 0x20, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x20, 0x20, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x20, 0x64, /* code=59, hex=0x3B, ascii=";" */ - 0x12, 0x42, 0x10, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x70, 0x70, /* code=61, hex=0x3D, ascii="=" */ - 0x42, 0x12, 0x40, /* code=62, hex=0x3E, ascii=">" */ - 0x61, 0x20, 0x20, /* code=63, hex=0x3F, ascii="?" */ - 0x75, 0x54, 0x70, /* code=64, hex=0x40, ascii="@" */ - 0x25, 0x75, 0x50, /* code=65, hex=0x41, ascii="A" */ - 0x65, 0x65, 0x60, /* code=66, hex=0x42, ascii="B" */ - 0x34, 0x44, 0x30, /* code=67, hex=0x43, ascii="C" */ - 0x65, 0x55, 0x60, /* code=68, hex=0x44, ascii="D" */ - 0x74, 0x64, 0x70, /* code=69, hex=0x45, ascii="E" */ - 0x74, 0x64, 0x40, /* code=70, hex=0x46, ascii="F" */ - 0x34, 0x55, 0x30, /* code=71, hex=0x47, ascii="G" */ - 0x55, 0x75, 0x50, /* code=72, hex=0x48, ascii="H" */ - 0x72, 0x22, 0x70, /* code=73, hex=0x49, ascii="I" */ - 0x11, 0x15, 0x20, /* code=74, hex=0x4A, ascii="J" */ - 0x55, 0x65, 0x50, /* code=75, hex=0x4B, ascii="K" */ - 0x44, 0x44, 0x70, /* code=76, hex=0x4C, ascii="L" */ - 0x57, 0x75, 0x50, /* code=77, hex=0x4D, ascii="M" */ - 0x57, 0x55, 0x50, /* code=78, hex=0x4E, ascii="N" */ - 0x25, 0x55, 0x20, /* code=79, hex=0x4F, ascii="O" */ - 0x65, 0x64, 0x40, /* code=80, hex=0x50, ascii="P" */ - 0x25, 0x57, 0x30, /* code=81, hex=0x51, ascii="Q" */ - 0x65, 0x65, 0x50, /* code=82, hex=0x52, ascii="R" */ - 0x34, 0x71, 0x60, /* code=83, hex=0x53, ascii="S" */ - 0x72, 0x22, 0x20, /* code=84, hex=0x54, ascii="T" */ - 0x55, 0x55, 0x70, /* code=85, hex=0x55, ascii="U" */ - 0x55, 0x55, 0x20, /* code=86, hex=0x56, ascii="V" */ - 0x55, 0x77, 0x50, /* code=87, hex=0x57, ascii="W" */ - 0x55, 0x25, 0x50, /* code=88, hex=0x58, ascii="X" */ - 0x55, 0x22, 0x20, /* code=89, hex=0x59, ascii="Y" */ - 0x71, 0x24, 0x70, /* code=90, hex=0x5A, ascii="Z" */ - 0x64, 0x44, 0x60, /* code=91, hex=0x5B, ascii="[" */ - 0x44, 0x21, 0x10, /* code=92, hex=0x5C, ascii="\" */ - 0x62, 0x22, 0x60, /* code=93, hex=0x5D, ascii="]" */ - 0x25, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x0F, /* code=95, hex=0x5F, ascii="_" */ - 0x62, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x35, 0x70, /* code=97, hex=0x61, ascii="a" */ - 0x44, 0x65, 0x60, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x34, 0x30, /* code=99, hex=0x63, ascii="c" */ - 0x11, 0x35, 0x30, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x76, 0x30, /* code=101, hex=0x65, ascii="e" */ - 0x12, 0x72, 0x20, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x75, 0x17, /* code=103, hex=0x67, ascii="g" */ - 0x44, 0x65, 0x50, /* code=104, hex=0x68, ascii="h" */ - 0x20, 0x22, 0x20, /* code=105, hex=0x69, ascii="i" */ - 0x20, 0x22, 0x26, /* code=106, hex=0x6A, ascii="j" */ - 0x44, 0x56, 0x50, /* code=107, hex=0x6B, ascii="k" */ - 0x22, 0x22, 0x20, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x77, 0x50, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x65, 0x50, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x25, 0x20, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x65, 0x64, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x35, 0x31, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x64, 0x40, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x32, 0x60, /* code=115, hex=0x73, ascii="s" */ - 0x02, 0x72, 0x30, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x55, 0x70, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x55, 0x20, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x57, 0x70, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x52, 0x50, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x55, 0x24, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x62, 0x30, /* code=122, hex=0x7A, ascii="z" */ - 0x32, 0x62, 0x30, /* code=123, hex=0x7B, ascii="{" */ - 0x22, 0x22, 0x20, /* code=124, hex=0x7C, ascii="|" */ - 0x62, 0x32, 0x60, /* code=125, hex=0x7D, ascii="}" */ - 0x5A, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x02, 0x57, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x34, 0x47, 0x24, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x50, 0x55, 0x30, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x12, 0x76, 0x30, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x25, 0x35, 0x70, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x50, 0x35, 0x70, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x42, 0x35, 0x70, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x20, 0x35, 0x70, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x07, 0x47, 0x26, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x25, 0x76, 0x30, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x50, 0x76, 0x30, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x42, 0x76, 0x30, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x50, 0x22, 0x20, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x25, 0x02, 0x20, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x42, 0x02, 0x20, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x52, 0x57, 0x50, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x22, 0x57, 0x50, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x12, 0x76, 0x70, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x37, 0x60, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x36, 0x76, 0x70, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x25, 0x25, 0x20, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x50, 0x25, 0x20, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x42, 0x25, 0x20, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x25, 0x05, 0x70, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x42, 0x55, 0x70, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x50, 0x55, 0x24, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x52, 0x55, 0x20, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x50, 0x55, 0x70, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x27, 0x47, 0x20, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x12, 0x72, 0x70, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x57, 0x27, 0x20, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x06, 0x65, 0x50, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x32, 0x32, 0x60, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x12, 0x35, 0x70, // /* code=160, hex=0xA0, ascii="! " */ - // 0x12, 0x02, 0x20, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x12, 0x75, 0x70, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x12, 0x05, 0x70, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x70, 0x75, 0x50, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x70, 0x57, 0x50, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x35, 0x70, 0x70, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x25, 0x20, 0x70, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x20, 0x24, 0x30, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x07, 0x44, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x0E, 0x22, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x45, 0x25, 0x30, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x45, 0x27, 0x10, // /* code=172, hex=0xAC, ascii="!," */ - // 0x20, 0x22, 0x20, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x05, 0xA5, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x0A, 0x5A, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x41, 0x41, 0x41, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x5A, 0x5A, 0x5A, // /* code=177, hex=0xB1, ascii="!1" */ - // 0xBE, 0xBE, 0xBE, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x22, 0x22, 0x22, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x22, 0xE2, 0x22, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x2E, 0x2E, 0x22, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x55, 0xD5, 0x55, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0xF5, 0x55, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x0E, 0x2E, 0x22, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x5D, 0x1D, 0x55, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x55, 0x55, 0x55, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x0F, 0x1D, 0x55, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x5D, 0x1F, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x55, 0xF0, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x2E, 0x2E, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0xE2, 0x22, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x22, 0x30, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x22, 0xF0, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0xF2, 0x22, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x22, 0x32, 0x22, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0xF0, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x22, 0xF2, 0x22, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x23, 0x23, 0x22, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x55, 0x55, 0x55, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x55, 0x47, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x07, 0x45, 0x55, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x5D, 0x0F, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x0F, 0x0D, 0x55, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x55, 0x45, 0x55, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x0F, 0x0F, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x5D, 0x0D, 0x55, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x2F, 0x0F, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x55, 0xF0, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x0F, 0x0F, 0x22, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0xF5, 0x55, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x55, 0x70, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x23, 0x23, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x03, 0x23, 0x22, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x75, 0x55, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x55, 0xD5, 0x55, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x2F, 0x0F, 0x22, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x22, 0xE0, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x32, 0x22, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x0F, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ - // 0xCC, 0xCC, 0xCC, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x33, 0x33, 0x33, // /* code=222, hex=0xDE, ascii="!^" */ - // 0xFF, 0xF0, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x76, 0x70, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x25, 0x65, 0x64, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x75, 0x44, 0x40, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x75, 0x55, 0x50, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x74, 0x24, 0x70, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x35, 0x20, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x55, 0x74, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x01, 0x62, 0x20, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x72, 0x52, 0x70, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x25, 0x75, 0x20, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x02, 0x55, 0x50, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x34, 0x25, 0x20, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x75, 0x70, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x27, 0x57, 0x20, // /* code=237, hex=0xED, ascii="!m" */ - // 0x34, 0x74, 0x30, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x25, 0x55, 0x50, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x70, 0x70, 0x70, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x27, 0x20, 0x70, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x61, 0x60, 0x70, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x34, 0x30, 0x70, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x01, 0x22, 0x22, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x22, 0x22, 0x40, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x20, 0x70, 0x20, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x05, 0xA5, 0xA0, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x25, 0x20, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x02, 0x72, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x20, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x32, 0x26, 0x20, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x75, 0x50, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x62, 0x46, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x66, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ -}; + 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" ", w=3 */ + 0xE8, /* code=33, hex=0x21, ascii="!", w=1 */ + 0xB4, 0x00, 0x00, /* code=34, hex=0x22, ascii=""", w=3 */ + 0x57, 0xD5, 0xF5, 0x00, /* code=35, hex=0x23, ascii="#", w=5 */ + 0x5F, 0x3E, 0x80, /* code=36, hex=0x24, ascii="$", w=3 */ + 0xCE, 0x88, 0xB9, 0x80, /* code=37, hex=0x25, ascii="%", w=5 */ + 0x62, 0x46, 0x66, 0x74, 0x00, /* code=38, hex=0x26, ascii="&", w=6 */ + 0xC0, /* code=39, hex=0x27, ascii="'", w=1 */ + 0x6A, 0x40, /* code=40, hex=0x28, ascii="(", w=2 */ + 0x95, 0x80, /* code=41, hex=0x29, ascii=")", w=2 */ + 0x27, 0xDC, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*", w=5 */ + 0x0B, 0xA0, 0x00, /* code=43, hex=0x2B, ascii="+", w=3 */ + 0x0C, /* code=44, hex=0x2C, ascii=",", w=1 */ + 0x03, 0x80, 0x00, /* code=45, hex=0x2D, ascii="-", w=3 */ + 0x08, /* code=46, hex=0x2E, ascii=".", w=1 */ + 0x25, 0x48, 0x00, /* code=47, hex=0x2F, ascii="/", w=3 */ + 0x56, 0xD4, 0x00, /* code=48, hex=0x30, ascii="0", w=3 */ + 0x59, 0x2E, 0x00, /* code=49, hex=0x31, ascii="1", w=3 */ + 0xC5, 0x4E, 0x00, /* code=50, hex=0x32, ascii="2", w=3 */ + 0xE5, 0x1C, 0x00, /* code=51, hex=0x33, ascii="3", w=3 */ + 0x97, 0x92, 0x00, /* code=52, hex=0x34, ascii="4", w=3 */ + 0xF3, 0x1C, 0x00, /* code=53, hex=0x35, ascii="5", w=3 */ + 0x73, 0xD6, 0x00, /* code=54, hex=0x36, ascii="6", w=3 */ + 0xE5, 0x28, 0x00, /* code=55, hex=0x37, ascii="7", w=3 */ + 0xF7, 0xDE, 0x00, /* code=56, hex=0x38, ascii="8", w=3 */ + 0xD7, 0x9C, 0x00, /* code=57, hex=0x39, ascii="9", w=3 */ + 0x28, /* code=58, hex=0x3A, ascii=":", w=1 */ + 0x2C, /* code=59, hex=0x3B, ascii=";", w=1 */ + 0x2A, 0x22, 0x00, /* code=60, hex=0x3C, ascii="<", w=3 */ + 0x1C, 0x70, 0x00, /* code=61, hex=0x3D, ascii="=", w=3 */ + 0x88, 0xA8, 0x00, /* code=62, hex=0x3E, ascii=">", w=3 */ + 0xC5, 0x04, 0x00, /* code=63, hex=0x3F, ascii="?", w=3 */ + 0x7A, 0x1B, 0x6F, 0x81, 0xE0, /* code=64, hex=0x40, ascii="@", w=6 */ + 0xD6, 0xFA, 0x00, /* code=65, hex=0x41, ascii="A", w=3 */ + 0xD7, 0x5C, 0x00, /* code=66, hex=0x42, ascii="B", w=3 */ + 0x56, 0x54, 0x00, /* code=67, hex=0x43, ascii="C", w=3 */ + 0xD6, 0xDC, 0x00, /* code=68, hex=0x44, ascii="D", w=3 */ + 0xEE, 0xC0, /* code=69, hex=0x45, ascii="E", w=2 */ + 0xEE, 0x80, /* code=70, hex=0x46, ascii="F", w=2 */ + 0x72, 0xD6, 0x00, /* code=71, hex=0x47, ascii="G", w=3 */ + 0xB7, 0xDA, 0x00, /* code=72, hex=0x48, ascii="H", w=3 */ + 0xE9, 0x2E, 0x00, /* code=73, hex=0x49, ascii="I", w=3 */ + 0xD5, 0x60, /* code=74, hex=0x4A, ascii="J", w=2 */ + 0xB7, 0x5A, 0x00, /* code=75, hex=0x4B, ascii="K", w=3 */ + 0xAA, 0xC0, /* code=76, hex=0x4C, ascii="L", w=2 */ + 0x8E, 0xEB, 0x18, 0x80, /* code=77, hex=0x4D, ascii="M", w=5 */ + 0x99, 0xDB, 0x90, /* code=78, hex=0x4E, ascii="N", w=4 */ + 0xF6, 0xDE, 0x00, /* code=79, hex=0x4F, ascii="O", w=3 */ + 0xD6, 0xE8, 0x00, /* code=80, hex=0x50, ascii="P", w=3 */ + 0x56, 0xD6, 0x40, /* code=81, hex=0x51, ascii="Q", w=3 */ + 0xD6, 0xEA, 0x00, /* code=82, hex=0x52, ascii="R", w=3 */ + 0xED, 0xC0, /* code=83, hex=0x53, ascii="S", w=2 */ + 0xE9, 0x24, 0x00, /* code=84, hex=0x54, ascii="T", w=3 */ + 0xB6, 0xDE, 0x00, /* code=85, hex=0x55, ascii="U", w=3 */ + 0xB6, 0xA4, 0x00, /* code=86, hex=0x56, ascii="V", w=3 */ + 0xAD, 0x6A, 0xA5, 0x00, /* code=87, hex=0x57, ascii="W", w=5 */ + 0xB5, 0x5A, 0x00, /* code=88, hex=0x58, ascii="X", w=3 */ + 0xB5, 0x9C, 0x00, /* code=89, hex=0x59, ascii="Y", w=3 */ + 0xE5, 0x4E, 0x00, /* code=90, hex=0x5A, ascii="Z", w=3 */ + 0xEA, 0xC0, /* code=91, hex=0x5B, ascii="[", w=2 */ + 0x91, 0x12, 0x00, /* code=92, hex=0x5C, ascii="\", w=3 */ + 0xD5, 0xC0, /* code=93, hex=0x5D, ascii="]", w=2 */ + 0x22, 0xA2, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^", w=5 */ + 0x00, 0x01, 0xC0, /* code=95, hex=0x5F, ascii="_", w=3 */ + 0xC0, /* code=96, hex=0x60, ascii="`", w=1 */ + 0x19, 0xDE, 0x00, /* code=97, hex=0x61, ascii="a", w=3 */ + 0x9A, 0xDC, 0x00, /* code=98, hex=0x62, ascii="b", w=3 */ + 0x0E, 0x46, 0x00, /* code=99, hex=0x63, ascii="c", w=3 */ + 0x2E, 0xD6, 0x00, /* code=100, hex=0x64, ascii="d", w=3 */ + 0x0E, 0xE6, 0x00, /* code=101, hex=0x65, ascii="e", w=3 */ + 0x6E, 0x80, /* code=102, hex=0x66, ascii="f", w=2 */ + 0x0E, 0xB3, 0x80, /* code=103, hex=0x67, ascii="g", w=3 */ + 0x9A, 0xDA, 0x00, /* code=104, hex=0x68, ascii="h", w=3 */ + 0xB8, /* code=105, hex=0x69, ascii="i", w=1 */ + 0xBC, /* code=106, hex=0x6A, ascii="j", w=1 */ + 0x97, 0x6A, 0x00, /* code=107, hex=0x6B, ascii="k", w=3 */ + 0xF8, /* code=108, hex=0x6C, ascii="l", w=1 */ + 0x07, 0xAB, 0x5A, 0x80, /* code=109, hex=0x6D, ascii="m", w=5 */ + 0x1A, 0xDA, 0x00, /* code=110, hex=0x6E, ascii="n", w=3 */ + 0x0A, 0xD4, 0x00, /* code=111, hex=0x6F, ascii="o", w=3 */ + 0x1A, 0xDD, 0x00, /* code=112, hex=0x70, ascii="p", w=3 */ + 0x0A, 0xD6, 0x40, /* code=113, hex=0x71, ascii="q", w=3 */ + 0x3A, 0x80, /* code=114, hex=0x72, ascii="r", w=2 */ + 0x39, 0xC0, /* code=115, hex=0x73, ascii="s", w=2 */ + 0xBA, 0xC0, /* code=116, hex=0x74, ascii="t", w=2 */ + 0x16, 0xD6, 0x00, /* code=117, hex=0x75, ascii="u", w=3 */ + 0x16, 0xD4, 0x00, /* code=118, hex=0x76, ascii="v", w=3 */ + 0x04, 0x6B, 0x55, 0x00, /* code=119, hex=0x77, ascii="w", w=5 */ + 0x15, 0x2A, 0x00, /* code=120, hex=0x78, ascii="x", w=3 */ + 0x15, 0x9C, 0x00, /* code=121, hex=0x79, ascii="y", w=3 */ + 0x36, 0xC0, /* code=122, hex=0x7A, ascii="z", w=2 */ + 0x6B, 0x26, 0x00, /* code=123, hex=0x7B, ascii="{", w=3 */ + 0xFC, /* code=124, hex=0x7C, ascii="|", w=1 */ + 0xC9, 0xAC, 0x00, /* code=125, hex=0x7D, ascii="}", w=3 */ + 0x00, 0x5A, 0x00, /* code=126, hex=0x7E, ascii="~", w=4 */ +}; \ No newline at end of file diff --git a/wled00/util.cpp b/wled00/util.cpp index ce62121e06..5f57c29f91 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -175,7 +175,6 @@ uint32_t utf8_decode(const char *s, uint8_t *len) { uint8_t c = (uint8_t)s[0]; if (c == '\0') { - *len = 0; // null terminator, no code point return 0; } uint8_t n = UTF8_LEN(c); // number of bytes in this UTF-8 sequence @@ -202,7 +201,8 @@ size_t utf8_strlen(const char *s) size_t len = 0; while (*s != '\0') { uint8_t charLen; - utf8_decode(s, &charLen); // decode the UTF-8 character to get its length + uint32_t unicode = utf8_decode(s, &charLen); // decode the UTF-8 character to get its length + if (!unicode) break; // stop at null terminator (just in case, should not happen but to avoid infinite loop on malformed strings) s += charLen; // advance by the length of the current UTF-8 character len++; } From cada48bc4ee5c333ccca3b3815d46ccc17641652 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 12:59:17 +0100 Subject: [PATCH 05/17] fixes, optimizations still not fully working --- wled00/FX.h | 42 +++-- wled00/FX_2Dfcn.cpp | 379 ++++++++++++++++++++++++++------------------ 2 files changed, 253 insertions(+), 168 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 515748c01f..a0e3b49ef3 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -284,18 +284,26 @@ struct GlyphEntry { // Header for the RAM cache struct FontHeader { - uint32_t firstUnicode; // from font file - uint8_t glyphCount; - uint8_t height; - uint8_t spacing; - uint8_t maxW; - uint8_t first; // from font file - uint8_t last; // from font file - char name[16]; // The requested font name (e.g. "font3.wbf") - char file[16]; // The actual file used (e.g. "font.wbf") - uint8_t cachedCodes[64]; // The "Checklist" to see if we need a rebuild, max string length of 64 - // GlyphEntry registry[glyphCount]; // Variable length - // uint8_t bitmapData[]; // Helper to handle font loading and drawing + // Font metadata + uint8_t height; + uint8_t width; // Max width for variable fonts + uint8_t flags; // Font flags + uint8_t glyphCount; // Number of cached glyphs + + // Font range + uint8_t first; + uint8_t last; + uint16_t reserved; // Alignment + uint32_t firstUnicode; + + // Font tracking (stored in segment data) + uint8_t availableFonts; // Bitflags: bit 0-4 for fonts 0-4 + uint8_t cachedFontNum; // Currently cached font number (0-4, 0xFF = none) + uint8_t fontsScanned; // 1 if filesystem scanned, 0 otherwise + uint8_t padding; // Alignment + + // GlyphEntry registry[glyphCount]; // Variable length follows + // uint8_t bitmapData[]; // Variable length bitmap data follows }; class FontManager { @@ -313,11 +321,17 @@ class FontManager { Segment* _segment; const uint8_t* _flashFont; const char* _fileFont; - const char* _fontName; // Requested font name + + void scanAvailableFonts(); // Scan filesystem for available fonts + + // Helper methods for unified flash/file font access + uint8_t getGlyphWidth(uint32_t code); + const uint8_t* getGlyphBitmap(uint32_t code, uint8_t& outWidth, uint8_t& outHeight); + int32_t getGlyphIndex(uint32_t unicode, uint8_t first,uint8_t last, uint32_t firstUnicode); + int32_t getGlyphIndex(uint32_t unicode, FontHeader* header); bool _cacheNumbers = false; void rebuildCache(const char* text); - int32_t getGlyphIndex(uint32_t unicode, const FontHeader* header); }; diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 4053744929..fe5a05c903 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -585,84 +585,109 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu #endif // WLED_DISABLE_2D #define LAST_ASCII_CHAR 126 + // FontManager implementation +void FontManager::scanAvailableFonts() { + FontHeader* header = (FontHeader*)_segment->data; + if (!header) return; + + header->availableFonts = 0; + const char* fontNames[] = {"/font.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf"}; + + for (int i = 0; i < 5; i++) { + if (WLED_FS.exists(fontNames[i])) { + header->availableFonts |= (1 << i); // Set bit i + } + } + header->fontsScanned = 1; +} + bool FontManager::loadFont(const char* filename, const uint8_t* flashFont, bool init) { _flashFont = flashFont; - _fontName = filename; _fileFont = filename; if (flashFont) return true; if (!filename) return false; - // If initializing (first call), force clean slate - if (init) { - if (_segment->data) _segment->deallocateData(); + // Extract font number from filename (font.wbf=0, font1.wbf=1, etc.) + uint8_t fontNum = 0; + if (strlen(filename) > 5 && filename[5] >= '1' && filename[5] <= '4') { + fontNum = filename[5] - '0'; } - - // Check if cache already contains this font - if (!init && _segment->data) { - FontHeader* header = (FontHeader*)_segment->data; - // Check if requested name matches cached logic name - if (strncmp(header->name, filename, 15) == 0) { - if (header->file[0]) { - _fileFont = header->file; - } - return true; + + // Ensure segment data exists for font tracking + if (!_segment->data) { + if (!_segment->allocateData(sizeof(FontHeader))) { + return false; // Failed to allocate } + FontHeader* header = (FontHeader*)_segment->data; + memset(header, 0, sizeof(FontHeader)); + header->cachedFontNum = 0xFF; // No font cached + header->fontsScanned = 0; + } + + FontHeader* header = (FontHeader*)_segment->data; + + // If initializing or font number changed, invalidate cache + if (init || fontNum != header->cachedFontNum) { + header->glyphCount = 0; // Invalidate glyph cache + header->cachedFontNum = fontNum; + + // Rescan filesystem if font changed (user may have added new fonts) + header->fontsScanned = 0; + } + + // Scan filesystem on first use or after font change + if (!header->fontsScanned) { + scanAvailableFonts(); } - if (WLED_FS.exists(filename)) { - // Exists, set it (will be loaded by prepare->rebuildCache later) - return true; + // Check if requested font is available + if (header->availableFonts & (1 << fontNum)) { + return true; // Font available, will be loaded by prepare->rebuildCache } - // Fallback logic - const char* fallbackFonts[] = { "/font.wbf", "/font0.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf" }; - - //strcpy_P(fileName, PSTR("/font")); - // if (fontNum) sprintf(fileName +5, "%d", fontNum); - // strcat_P(fileName, PSTR(".wbf")); TODO: use this not a static list! - - for (int i = 0; i < 6; i++) { - if (strcmp(filename, fallbackFonts[i]) == 0) continue; // Don't check self - if (WLED_FS.exists(fallbackFonts[i])) { - _fileFont = fallbackFonts[i]; // found! - return true; + // Requested font not available - try fallback to any available font + for (int i = 0; i < 5; i++) { + if (header->availableFonts & (1 << i)) { + // Found an available font + const char* fallbackNames[] = {"/font.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf"}; + _fileFont = fallbackNames[i]; + header->cachedFontNum = i; + return true; } } + // No fonts available at all _fileFont = nullptr; + header->glyphCount = 0; + return false; } -// Helper to get glyph index from unicode -int32_t FontManager::getGlyphIndex(uint32_t unicode, const FontHeader* header) { - if (!header) return -1; - if (unicode < header->first) return -1; - +// Helper to get glyph index from unicode +int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode) { // ASCII Range if (unicode <= LAST_ASCII_CHAR) { - if (unicode <= header->last) { - return unicode - header->first; - } + if (unicode >= first && unicode <= last) { + return unicode - first; + } } - // Extended Range - else { - if (header->firstUnicode > 0 && unicode >= header->firstUnicode) { - uint32_t lastUni = header->firstUnicode + (header->last - LAST_ASCII_CHAR - 1); - if (unicode <= lastUni) { - // Corrected formula: (VirtualIndex) - First - // Debug: - // int32_t idx = (unicode - header->firstUnicode + LAST_ASCII_CHAR + 1) - header->first; - // Serial.printf("getGlyphIndex: Ext U+%04X -> Idx %d\n", unicode, idx); - return (unicode - header->firstUnicode + LAST_ASCII_CHAR + 1) - header->first; - } + // Extended Range (uses Unicode offset) + else if (firstUnicode > 0 && unicode >= firstUnicode) { + uint32_t adjustedCode = unicode - firstUnicode + LAST_ASCII_CHAR + 1; + if (adjustedCode >= first && adjustedCode <= last) { + return adjustedCode - first; } } - return -1; } +int32_t FontManager::getGlyphIndex(uint32_t unicode, FontHeader* header) { + if (!header) return -1; + return getGlyphIndex(unicode, header->first, header->last, header->firstUnicode); +} + void FontManager::prepare(const char* text) { if (_flashFont) return; // PROGMEM fonts don't need preparation if (!_fileFont) return; @@ -675,10 +700,18 @@ void FontManager::prepare(const char* text) { rebuildCache(text); // Load header if (!_segment->data) return; // Failed } + + FontHeader* header = (FontHeader*)_segment->data; + + // Check if cache was invalidated (glyphCount == 0) + if (header->glyphCount == 0) { + rebuildCache(text); + if (!_segment->data) return; + header = (FontHeader*)_segment->data; + } uint8_t neededCodes[64]; // Max unique chars uint8_t neededCount = 0; - FontHeader* header = (FontHeader*)_segment->data; // 0. Pre-add numbers if requested (Matrix/Clock mode) if (_cacheNumbers) { @@ -698,6 +731,11 @@ void FontManager::prepare(const char* text) { while (i < len) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[i], &charLen); + if (charLen == 0) { + // Malformed UTF8 - skip this byte to avoid infinite loop + i++; + continue; + } i += charLen; int32_t index = getGlyphIndex(unicode, header); @@ -724,23 +762,24 @@ void FontManager::prepare(const char* text) { // 2. Check if all needed codes are in cache bool allCached = true; + GlyphEntry* registry = (GlyphEntry*)((uint8_t*)header + sizeof(FontHeader)); for (int k=0; kglyphCount; c++) { - if (header->cachedCodes[c] == neededCodes[k]) { + if (registry[c].code == neededCodes[k]) { found = true; break; } } if (!found) { - Serial.printf("FontManager: Missing char idx %d\n", neededCodes[k]); + DEBUGFX_PRINTF("FontManager: Missing char idx %d\n", neededCodes[k]); allCached = false; break; } } if (!allCached) { - Serial.println("FontManager: Rebuilding cache due to missing chars"); + DEBUGFX_PRINTLN("FontManager: Rebuilding cache due to missing chars"); rebuildCache(text); } } @@ -749,7 +788,16 @@ void FontManager::rebuildCache(const char* text) { if (_flashFont) return; if (!_fileFont) return; - Serial.printf("FontManager::rebuildCache('%s') Font: %s\n", text ? text : "NULL", _fileFont); + DEBUGFX_PRINTF("FontManager::rebuildCache('%s') Font: %s\n", text ? text : "NULL", _fileFont); + + // Preserve font tracking if segment data exists + uint8_t avail = 0, cached = 0xFF, scanned = 0; + if (_segment->data) { + FontHeader* h = (FontHeader*)_segment->data; + avail = h->availableFonts; + cached = h->cachedFontNum; + scanned = h->fontsScanned; + } // Copy filename to local buffer in case _fileFont points to SEGENV.data which might be moved/freed by allocateData char currentFontFile[32]; @@ -757,6 +805,7 @@ void FontManager::rebuildCache(const char* text) { else currentFontFile[0] = 0; currentFontFile[31] = 0; + while (!BusManager::canAllShow()) yield(); File file = WLED_FS.open(currentFontFile, "r"); // Fallback logic for missing fonts if (!file) { @@ -789,20 +838,18 @@ void FontManager::rebuildCache(const char* text) { if (file.read() != 'W') { file.close(); return; } // Magic FontHeader tempHeader; - memset(&tempHeader, 0, sizeof(FontHeader)); // Init + memset(&tempHeader, 0, sizeof(FontHeader)); - // Store names - if (_fontName) strncpy(tempHeader.name, _fontName, 15); - if (currentFontFile[0]) strncpy(tempHeader.file, currentFontFile, 15); - + uint8_t version; + file.read(&version, 1); tempHeader.height = file.read(); - uint8_t maxWidth = file.read(); - tempHeader.maxW = maxWidth; - tempHeader.spacing = file.read(); - uint8_t flags = file.read(); + tempHeader.width = file.read(); + tempHeader.flags = file.read(); tempHeader.first = file.read(); tempHeader.last = file.read(); - file.read((uint8_t*)&tempHeader.firstUnicode, 4); + uint32_t firstUnicode; + file.read((uint8_t*)&firstUnicode, 4); + tempHeader.firstUnicode = firstUnicode; // Identify unique codes needed uint8_t neededCodes[64]; @@ -812,7 +859,7 @@ void FontManager::rebuildCache(const char* text) { if (_cacheNumbers) { const char* nums = "0123456789:. "; for (const char* p = nums; *p; p++) { - int32_t idx = getGlyphIndex((uint32_t)*p, &tempHeader); + int32_t idx = getGlyphIndex((uint32_t)*p, tempHeader.first, tempHeader.last, firstUnicode); if (idx >= 0 && idx < 256) { neededCodes[neededCount++] = (uint8_t)idx; } @@ -824,14 +871,15 @@ void FontManager::rebuildCache(const char* text) { while (i < len) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[i], &charLen); + if (!charLen || charLen > 4) break; // safety check to prevent infinite loop i += charLen; - - int32_t index = getGlyphIndex(unicode, &tempHeader); + + int32_t index = getGlyphIndex(unicode, tempHeader.first, tempHeader.last, firstUnicode); if (index < 0) { - index = getGlyphIndex('?', &tempHeader); + index = getGlyphIndex('?', tempHeader.first, tempHeader.last, firstUnicode); } - + if (index >= 0 && index < 256) { // Add unique bool known = false; @@ -841,23 +889,23 @@ void FontManager::rebuildCache(const char* text) { } tempHeader.glyphCount = neededCount; - // Fill cachedCodes - for(int k=0; kallocateData(totalRam)) { file.close(); @@ -920,19 +973,31 @@ void FontManager::rebuildCache(const char* text) { file.close(); } -uint8_t FontManager::getCharacterWidth(uint32_t code) { +// Unified glyph width getter for both flash and file fonts +uint8_t FontManager::getGlyphWidth(uint32_t code) { if (_flashFont) { - // Flash font fallback - // TODO: Support variable width flash fonts if flags indicate it - return pgm_read_byte_near(&_flashFont[2]); + const uint8_t* font = _flashFont; + uint8_t flags = pgm_read_byte_near(&font[3]); + uint8_t first = pgm_read_byte_near(&font[4]); + uint8_t last = pgm_read_byte_near(&font[5]); + + if (code < first || code > last) return 0; + uint8_t glyphIndex = code - first; + + if (flags & 0x01) { // Variable width - read from width table + // Width table starts at offset 10 (after header) + return pgm_read_byte_near(&font[10 + glyphIndex]); + } else { // Fixed width + return pgm_read_byte_near(&font[2]); + } } + // File font - use registry if (_segment->data) { FontHeader* header = (FontHeader*)_segment->data; int32_t index = getGlyphIndex(code, header); if (index >= 0) { - // Find in registry GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); for (int k=0; kglyphCount; k++) { if (registry[k].code == (uint8_t)index) { @@ -944,102 +1009,108 @@ uint8_t FontManager::getCharacterWidth(uint32_t code) { return 0; } -void FontManager::drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { - uint8_t w = 0, h = 0; - uint8_t* val = nullptr; // pointer to bitmap data (RAM or Flash) - // For file fonts, we need to read from file into buffer. - // For flash fonts, we point directly to PROGMEM. - - // To unify, we need a way to get the bitmap for the specific glyph. - // Flash: assumed fixed width for now (but user wants future proof). - // Let's stick to current Flash logic but use getGlyphIndex if possible? - // Flash fonts don't have a FontHeader struct in RAM easily to pass to getGlyphIndex. - // We'd need to construct a temp one or overload getGlyphIndex. - +uint8_t FontManager::getCharacterWidth(uint32_t code) { + return getGlyphWidth(code); +} + +// Unified glyph bitmap getter for both flash and file fonts +const uint8_t* FontManager::getGlyphBitmap(uint32_t code, uint8_t& outWidth, uint8_t& outHeight) { if (_flashFont) { - const uint8_t* font = _flashFont; - h = pgm_read_byte_near(&font[1]); - w = pgm_read_byte_near(&font[2]); - - // TODO: proper mapping for flash fonts? They usually just support ASCII 32-126 - if (code < 32 || code > 126) return; - uint8_t chr = code - 32; - - CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; - - for (int i = 0; i < h; i++) { - uint8_t row = pgm_read_byte_near(&font[(chr * h) + i + 3]); - - CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); - for (int j = 0; j < w; j++) { - if ((row >> (7-j)) & 1) { - int x0, y0; - switch (rotate) { - case -1: x0 = x + (h-1) - i; y0 = y + j; break; - case -2: - case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; - case 1: x0 = x + i; y0 = y + (w-1) - j; break; - default: x0 = x + j; y0 = y + i; break; - } - if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { - _segment->setPixelColorXYRaw(x0, y0, c.color32); - } - } - } - } - return; + const uint8_t* font = _flashFont; + uint8_t h = pgm_read_byte_near(&font[1]); + uint8_t flags = pgm_read_byte_near(&font[4]); + uint8_t first = pgm_read_byte_near(&font[5]); + uint8_t last = pgm_read_byte_near(&font[6]); + + + if (code < first || code > last) return nullptr; + uint8_t glyphIndex = code - first; + + outHeight = h; + uint16_t offset = 10; // After 10-byte header (11 bytes total, but data at index 10) + + if (flags & 0x01) { // Variable width + uint8_t numGlyphs = last - first + 1; + offset += numGlyphs; // Skip width table + outWidth = pgm_read_byte_near(&font[11 + glyphIndex]); + + // Sum bytes of all previous glyphs to find this one's offset + for (uint8_t i = 0; i < glyphIndex; i++) { + uint8_t w = pgm_read_byte_near(&font[11 + i]); + uint16_t bits = w * h; + offset += (bits + 7) / 8; // Round up to bytes + } + } else { // Fixed width + outWidth = pgm_read_byte_near(&font[2]); + uint16_t bitsPerGlyph = outWidth * h; + uint16_t bytesPerGlyph = (bitsPerGlyph + 7) / 8; + offset += glyphIndex * bytesPerGlyph; + } + + return &font[offset]; // PROGMEM pointer } - // File Font Logic - if (!_segment->data) return; + // File font - bitmap in RAM cache + if (!_segment->data) return nullptr; + FontHeader* header = (FontHeader*)_segment->data; - int32_t index = getGlyphIndex(code, header); - if (index < 0) return; + if (index < 0) return nullptr; GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); - GlyphEntry* entry = nullptr; uint32_t bitmapOffset = 0; - for (int k=0; kglyphCount; k++) { + for (int k = 0; k < header->glyphCount; k++) { if (registry[k].code == (uint8_t)index) { - entry = ®istry[k]; - break; + outWidth = registry[k].width; + outHeight = registry[k].height; + uint8_t* bitmap = _segment->data + sizeof(FontHeader) + + (header->glyphCount * sizeof(GlyphEntry)) + bitmapOffset; + return bitmap; // RAM pointer } uint16_t bits = registry[k].width * registry[k].height; bitmapOffset += (bits + 7) / 8; } + return nullptr; +} + +void FontManager::drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { + // Get bitmap using unified helper (works for both flash and file fonts) + uint8_t w, h; + const uint8_t* bitmap = getGlyphBitmap(code, w, h); + if (!bitmap || w == 0) return; - if (!entry) return; - - uint8_t* bitmap = _segment->data + sizeof(FontHeader) + (header->glyphCount * sizeof(GlyphEntry)) + bitmapOffset; - w = entry->width; - h = entry->height; CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; + // Draw character bitmap - unified code for both flash and file fonts uint16_t bitIndex = 0; for (int i = 0; i < h; i++) { CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); for (int j = 0; j < w; j++) { - uint16_t bytePos = bitIndex >> 3; - uint8_t bitPos = 7 - (bitIndex & 7); - uint8_t byteVal = bitmap[bytePos]; - bool bitSet = (byteVal >> bitPos) & 1; - bitIndex++; + uint16_t bytePos = bitIndex >> 3; // bitIndex / 8 + uint8_t bitPos = 7 - (bitIndex & 7); // 7 - (bitIndex % 8) + + // Read from bitmap - pgm_read for flash, direct for RAM + uint8_t byteVal = _flashFont ? + pgm_read_byte_near(&bitmap[bytePos]) : + bitmap[bytePos]; + + if ((byteVal >> bitPos) & 1) { + // Apply rotation + int x0, y0; + switch (rotate) { + case -1: x0 = x + (h-1) - i; y0 = y + j; break; + case -2: + case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; + case 1: x0 = x + i; y0 = y + (w-1) - j; break; + default: x0 = x + j; y0 = y + i; break; + } - if (bitSet) { - int x0, y0; - switch (rotate) { - case -1: x0 = x + (h-1) - i; y0 = y + j; break; - case -2: - case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; - case 1: x0 = x + i; y0 = y + (w-1) - j; break; - default: x0 = x + j; y0 = y + i; break; - } - if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { - _segment->setPixelColorXYRaw(x0, y0, c.color32); - } - } + if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { + _segment->setPixelColorXYRaw(x0, y0, c.color32); + } + } + bitIndex++; } } } \ No newline at end of file From a09e29652053c8cd8650228d9aef7f574030aaea Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 17:26:23 +0100 Subject: [PATCH 06/17] add support for flash fonts back, unified functions. custom glyphs currently broken --- wled00/FX.cpp | 204 +++++------ wled00/FX.h | 244 +++++++++---- wled00/FX_2Dfcn.cpp | 813 +++++++++++++++++++++----------------------- 3 files changed, 653 insertions(+), 608 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 7ae2c5e29a..4ab62ecd8c 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6302,65 +6302,26 @@ static const char _data_FX_MODE_2DBLOBS[] PROGMEM = "Blobs@!,# blobs,Blur,Trail; //////////////////////////// // 2D Scrolling text // //////////////////////////// -#include "src/font/console_font_4x6.h" -#include "src/font/console_font_5x8.h" -#include "src/font/console_font_5x12.h" -#include "src/font/console_font_6x8.h" -#include "src/font/console_font_7x9.h" void mode_2Dscrollingtext(void) { if (!strip.isMatrix || !SEGMENT.is2D()) FX_FALLBACK_STATIC; // not a 2D set-up - + FontManager fontManager(&SEGMENT); const int cols = SEG_W; const int rows = SEG_H; - uint8_t letterHeight = 8; // Default - uint8_t letterWidth = 5; - uint8_t letterSpacing = 1; - + // Font selection const uint8_t* selectedFont = nullptr; char fileName[32]; bool useCustomFont = SEGMENT.check2; uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); - - FontManager fontManager(&SEGMENT); bool init = (SEGENV.call == 0); - if (useCustomFont) { - strcpy_P(fileName, PSTR("/font")); - if (fontNum) sprintf(fileName +5, "%d", fontNum); - strcat_P(fileName, PSTR(".wbf")); - - if (!fontManager.loadFont(fileName, nullptr, init)) { - useCustomFont = false; - } - } - - if (!useCustomFont) { - switch (fontNum) { - default: - case 0: selectedFont = tinypixie2_6px; break; - case 1: selectedFont = console_font_5x8; break; - case 2: selectedFont = console_font_6x8; break; - case 3: selectedFont = console_font_7x9; break; - case 4: selectedFont = console_font_5x12; break; - } - fontManager.loadFont(nullptr, selectedFont, init); - letterHeight = pgm_read_byte_near(&selectedFont[1]); - letterWidth = pgm_read_byte_near(&selectedFont[2]); - } - // letters are rotated const int8_t rotate = map(SEGMENT.custom3, 0, 31, -2, 2); - - // Text preparation (Time/Date logic) + + // generate time/date if there are any # tokens char text[WLED_MAX_SEGNAME_LEN+1] = {'\0'}; - size_t result_pos = 0; // ... (Prepare text) - // Re-use the existing text generation logic from previous implementation - // We need to copy it or re-implement it. - // I will re-implement the short version of the logic here or I should have copied it. - // Since I am replacing the whole function, I must include the text generation logic. - + size_t result_pos = 0; char sec[5]; int AmPmHour = hour(localTime); bool isitAM = true; @@ -6373,23 +6334,26 @@ void mode_2Dscrollingtext(void) { } size_t len = 0; - if (SEGMENT.name) len = strlen(SEGMENT.name); - if (len == 0) { + if (SEGMENT.name) len = strlen(SEGMENT.name); // note: SEGMENT.name is limited to WLED_MAX_SEGNAME_LEN + if (len == 0) { // fallback if empty segment name: display date and time sprintf_P(text, PSTR("%s %d, %d %d:%02d%s"), monthShortStr(month(localTime)), day(localTime), year(localTime), AmPmHour, minute(localTime), sec); } else { size_t i = 0; while (i < len) { if (SEGMENT.name[i] == '#') { - char token[7]; - bool zero = false; + char token[7]; // copy up to 6 chars + null terminator + bool zero = false; // a 0 suffix means display leading zeros size_t j = 0; while (j < 6 && i + j < len) { token[j] = std::toupper(SEGMENT.name[i + j]); - if(token[j] == '0') zero = true; + if(token[j] == '0') + zero = true; // 0 suffix found. Note: there is an edge case where a '0' could be part of a trailing text and not the token, handling it is not worth the effort j++; } token[j] = '\0'; - int advance = 5; + int advance = 5; // number of chars to advance in 'text' after processing the token + + // Process token char temp[32]; if (!strncmp_P(token,PSTR("#DATE"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d.%04d"):PSTR("%d.%d.%d"), day(localTime), month(localTime), year(localTime)); else if (!strncmp_P(token,PSTR("#DDMM"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d") :PSTR("%d.%d"), day(localTime), month(localTime)); @@ -6402,40 +6366,41 @@ void mode_2Dscrollingtext(void) { else if (!strncmp_P(token,PSTR("#YY"),3)) { sprintf (temp, ("%02d") , year(localTime)%100); advance = 3; } else if (!strncmp_P(token,PSTR("#HH"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), AmPmHour); advance = 3; } else if (!strncmp_P(token,PSTR("#MM"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), minute(localTime)); advance = 3; } - else if (!strncmp_P(token,PSTR("#SS"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), second(localTime)); advance = 3; } + else if (!strncmp_P(token,PSTR("#SS"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), second(localTime)); advance = 3; fontManager.setCacheNumbers(true);} // cache all numbers else if (!strncmp_P(token,PSTR("#MON"),4)) { sprintf (temp, ("%s") , monthShortStr(month(localTime))); advance = 4; } else if (!strncmp_P(token,PSTR("#MO"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), month(localTime)); advance = 3; } else if (!strncmp_P(token,PSTR("#DAY"),4)) { sprintf (temp, ("%s") , dayShortStr(weekday(localTime))); advance = 4; } else if (!strncmp_P(token,PSTR("#DD"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), day(localTime)); advance = 3; } - else { temp[0] = '#'; temp[1] = '\0'; zero = false; advance = 1; } - - if(zero) advance++; + else { temp[0] = '#'; temp[1] = '\0'; zero = false; advance = 1; } // Unknown token, just copy the # + + if(zero) advance++; // skip the '0' suffix size_t temp_len = strlen(temp); if (result_pos + temp_len < WLED_MAX_SEGNAME_LEN) { strcpy(text + result_pos, temp); result_pos += temp_len; } + i += advance; - } else { - if (result_pos < WLED_MAX_SEGNAME_LEN) text[result_pos++] = SEGMENT.name[i++]; - else break; + } + else { + if (result_pos < WLED_MAX_SEGNAME_LEN) { + text[result_pos++] = SEGMENT.name[i++]; // no token, just copy char + } else + break; // buffer full } } } - // PREPARE FONT CACHE - if (useCustomFont) { - if (strpbrk(text, "0123456789")) fontManager.setCacheNumbers(true); // Optimize for clocks - //while (!BusManager::canAllShow()) yield(); // on C3, accessing file system while sending causes glitchs, so wait -> TODO: do this in fontmanager before re-caching and only on C3 - } + // Load the font + fontManager.loadFont(fontNum, useCustomFont); // TODO: simplify this code, prepare is not really needed as a separate function. fontManager.prepare(text); - - if (useCustomFont && SEGMENT.data) { - FontHeader* header = (FontHeader*)SEGMENT.data; - letterHeight = header->height; - letterWidth = header->width; - } + // Get font dimensions + uint8_t letterHeight = fontManager.getFontHeight(); + uint8_t letterWidth = 8; // Max width (not used for layout with variable width) + uint8_t letterSpacing = fontManager.getFontSpacing(); + + // Calculate rotated dimensions unsigned rotLW, rotLH; if (rotate == 1 || rotate == -1) { rotLH = letterWidth; @@ -6445,102 +6410,89 @@ void mode_2Dscrollingtext(void) { rotLH = letterHeight; } - const int numberOfChars = utf8_strlen(text); - - // Calculate total width using variable width + // Calculate total text width int totalTextWidth = 0; int idx = 0; + const int numberOfChars = utf8_strlen(text); + for (int c = 0; c < numberOfChars; c++) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; - uint8_t w = fontManager.getCharacterWidth(unicode); - totalTextWidth += (rotate == 1 || rotate == -1) ? letterHeight : w; // if rotated +/-90, width is height + + if (rotate == 1 || rotate == -1) { + totalTextWidth += letterHeight; // Fixed dimension when rotated + } else { + uint8_t w = fontManager.getGlyphWidth(unicode); + totalTextWidth += w; + } if (c < numberOfChars - 1) totalTextWidth += letterSpacing; } - // If rotated, the "width" of the text string is actually dependent on orientation? - // Previous code: `int width = (numberOfChars * rotLW);` - // If rotated +/-90, rotLW = letterHeight. - // So it assumed fixed height as width. - // If variable width font is rotated 90 deg, the "height" of the char becomes its width in the string. - // "letterHeight" is constant for the font. So `maxW` doesn't matter for 90deg rotation? - // Yes, if rotated 90deg, the character takes `letterHeight` pixels horizontally. - - if (rotate == 1 || rotate == -1) { - totalTextWidth = numberOfChars * (letterHeight + letterSpacing); // Fixed vertical size - } - int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-rotLH)/2; - + // Y offset calculation + int yoffset = map(SEGMENT.intensity, 0, 255, -rows / 2, rows / 2) + (rows - rotLH) / 2; + if (totalTextWidth <= cols) { // scroll vertically int speed = map(SEGMENT.speed, 0, 255, 5000, 1000); int frac = strip.now % speed + 1; if (SEGMENT.intensity == 255) { - yoffset = (2 * frac * rows)/speed - rows; + yoffset = (2 * frac * rows) / speed - rows; } else if (SEGMENT.intensity == 0) { - yoffset = rows - (2 * frac * rows)/speed; + yoffset = rows - (2 * frac * rows) / speed; } } + // Animation step if (SEGENV.step < strip.now) { if (totalTextWidth > cols) { if (SEGMENT.check3) { - if (SEGENV.aux0 == 0) SEGENV.aux0 = totalTextWidth + cols - 1; - else --SEGENV.aux0; - } else ++SEGENV.aux0 %= totalTextWidth + cols; - } else SEGENV.aux0 = (cols + totalTextWidth)/2; - ++SEGENV.aux1 &= 0xFF; + if (SEGENV.aux0 == 0) SEGENV.aux0 = totalTextWidth + cols - 1; + else --SEGENV.aux0; + } else { + ++SEGENV.aux0 %= totalTextWidth + cols; + } + } else { + SEGENV.aux0 = (cols - totalTextWidth) / 2; // Center + } + ++SEGENV.aux1 &= 0xFF; SEGENV.step = strip.now + map(SEGMENT.speed, 0, 255, 250, 50); } - SEGMENT.fade_out(255 - (SEGMENT.custom1>>4)); + SEGMENT.fade_out(255 - (SEGMENT.custom1 >> 4)); uint32_t col1 = SEGMENT.color_from_palette(SEGENV.aux1, false, PALETTE_SOLID_WRAP, 0); uint32_t col2 = BLACK; - if (SEGMENT.check1) { - if (SEGMENT.palette == 0) { + + if (SEGMENT.check1) { + if (SEGMENT.palette == 0) { col1 = SEGCOLOR(0); col2 = SEGCOLOR(2); } - } else col2 = col1; + } else { + col2 = col1; + } - // Drawing Loop - idx = 0; // Reset index for UTF8 + // Draw characters + idx = 0; int currentXOffset = 0; - + for (int c = 0; c < numberOfChars; c++) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; - - uint8_t glyphWidth = fontManager.getCharacterWidth(unicode); - uint8_t spacing = letterSpacing; - - // Effective width for layout - int advance = 0; - - int drawX = 0; - - if (rotate == 1 || rotate == -1) { - // Vertical text? - // If rotated 90deg, the text is still horizontal but letters are sideways? - // Previous logic: `xoffset = int(cols) - int(SEGENV.aux0) + ((rotLW+2)*c);` - // `rotLW` was `letterHeight`. - // So it advanced by `letterHeight+2`. - // I will match this logic. - advance = letterHeight + spacing; - drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; - currentXOffset += advance; - } else { - advance = glyphWidth + spacing; - drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; - currentXOffset += advance; + uint8_t glyphWidth = fontManager.getGlyphWidth(unicode); + int drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; + int advance = (rotate == 1 || rotate == -1) ? letterHeight : glyphWidth; + + // Skip if off-screen + if (drawX + advance < 0) { + currentXOffset += advance + letterSpacing; + continue; } + if (drawX >= cols) break; - if (drawX + ((rotate == 1 || rotate == -1) ? letterHeight : glyphWidth) < 0) continue; - if (drawX >= cols) continue; - fontManager.drawCharacter(unicode, drawX, yoffset, col1, col2, rotate); + currentXOffset += advance + letterSpacing; } } static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,Custom Font,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; diff --git a/wled00/FX.h b/wled00/FX.h index a0e3b49ef3..148bf1b17a 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -273,68 +273,6 @@ extern byte realtimeMode; // used in getMappedPixelIndex() #define FX_MODE_TV_SIMULATOR 116 #define FX_MODE_DYNAMIC_SMOOTH 117 // candidate for removal (check3 in dynamic) -// Font Helper Class -// Registry entry for the RAM cache -struct GlyphEntry { - uint8_t code; // 0-255 index, same as in font - uint8_t width; - uint8_t height; - uint8_t padding; // padding is added anyway, might as well indicate it for future use -}; - -// Header for the RAM cache -struct FontHeader { - // Font metadata - uint8_t height; - uint8_t width; // Max width for variable fonts - uint8_t flags; // Font flags - uint8_t glyphCount; // Number of cached glyphs - - // Font range - uint8_t first; - uint8_t last; - uint16_t reserved; // Alignment - uint32_t firstUnicode; - - // Font tracking (stored in segment data) - uint8_t availableFonts; // Bitflags: bit 0-4 for fonts 0-4 - uint8_t cachedFontNum; // Currently cached font number (0-4, 0xFF = none) - uint8_t fontsScanned; // 1 if filesystem scanned, 0 otherwise - uint8_t padding; // Alignment - - // GlyphEntry registry[glyphCount]; // Variable length follows - // uint8_t bitmapData[]; // Variable length bitmap data follows -}; - -class FontManager { - public: - FontManager(Segment* seg) : _segment(seg), _flashFont(nullptr), _fileFont(nullptr) {} - - bool loadFont(const char* filename, const uint8_t* flashFont = nullptr, bool init = false); - void setFont(const uint8_t* flashFont, const char* filename); - void setCacheNumbers(bool cache) { _cacheNumbers = cache; } // If set, always cache digits 0-9 - void prepare(const char* text); - uint8_t getCharacterWidth(uint32_t code); - void drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate); - - private: - Segment* _segment; - const uint8_t* _flashFont; - const char* _fileFont; - - void scanAvailableFonts(); // Scan filesystem for available fonts - - // Helper methods for unified flash/file font access - uint8_t getGlyphWidth(uint32_t code); - const uint8_t* getGlyphBitmap(uint32_t code, uint8_t& outWidth, uint8_t& outHeight); - int32_t getGlyphIndex(uint32_t unicode, uint8_t first,uint8_t last, uint32_t firstUnicode); - int32_t getGlyphIndex(uint32_t unicode, FontHeader* header); - bool _cacheNumbers = false; - - void rebuildCache(const char* text); -}; - - // new 0.14 2D effects #define FX_MODE_2DSPACESHIPS 118 //gap fill #define FX_MODE_2DCRAZYBEES 119 //gap fill @@ -482,6 +420,7 @@ typedef enum mapping1D2D { } mapping1D2D_t; class WS2812FX; +class FontManager; // segment, 76 bytes class Segment { @@ -1128,4 +1067,185 @@ class WS2812FX { extern const char JSON_mode_names[]; extern const char JSON_palette_names[]; +#define LAST_ASCII_CHAR 126 +#define FONT_HEADER_SIZE 11 +/** + * Unified Font Format (Flash and RAM use IDENTICAL layout) + * + * Header Layout (11 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height + * [2] Fixed/max glyph width + * [3] Spacing between chars + * [4] Flags: (0x01 = variable width) + * [5] First Char + * [6] Last Char + * [7-10] Unicode Offset (32-bit little-endian) + * + * Followed by: + * - Width table (if variable width): [first..last] byte array + * - Bitmap data: bit-packed glyphs + */ + +// Abstract byte reader for unified flash/RAM access +class ByteReader { +public: + virtual uint8_t readByte(size_t offset) const = 0; + inline uint32_t readUInt32LE(size_t offset) const { + return readByte(offset) | + (readByte(offset + 1) << 8) | + (readByte(offset + 2) << 16) | + (readByte(offset + 3) << 24); + } + virtual ~ByteReader() {} +}; + +// PROGMEM reader for flash fonts +class FlashByteReader : public ByteReader { +private: + const uint8_t* _base; +public: + FlashByteReader() : _base(nullptr) {} // default constructor + FlashByteReader(const uint8_t* base) : _base(base) {} + + inline uint8_t readByte(size_t offset) const override { + return _base ? pgm_read_byte_near(_base + offset) : 0; + } +}; + +// RAM reader for cached fonts +class RAMByteReader : public ByteReader { +private: + const uint8_t* _base; +public: + RAMByteReader() : _base(nullptr) {} // default constructor + RAMByteReader(const uint8_t* base) : _base(base) {} + + inline uint8_t readByte(size_t offset) const override { + return _base ? _base[offset] : 0; + } +}; + +// Glyph entry in RAM cache +struct GlyphEntry { + uint8_t code; // Glyph index (0-255) + uint8_t width; // Width in pixels + uint8_t height; // Height in pixels +}; + +// Segment metadata (stored BEFORE the font data in RAM) +struct SegmentFontMetadata { + uint8_t availableFonts; // Bitflags for available fonts: set to 1 << fontNum if font is available in FS (0-4) + uint8_t cachedFontNum; // Currently cached font (0-4, 0xFF = none) + uint8_t fontsScanned; // 1 if filesystem scanned + uint8_t glyphCount; // Number of glyphs cached +}; + +// Memory layout for cached fonts: +// [SegmentFontMetadata] - 4 bytes +// [GlyphEntry array] - 4 bytes each +// [11-byte font header] - for compatibility and to store font info +// [Bitmap data] - sequential, matches registry order + +// Font header structure +struct FontHeader { + uint8_t height; + uint8_t width; + uint8_t spacing; + uint8_t flags; + uint8_t first; + uint8_t last; + uint32_t firstUnicode; +}; + +class FontManager { +public: + FontManager(Segment* seg) : + _segment(seg), + _flashFont(nullptr), + _fontNum(0), + _useFlashFont(false), + _cacheNumbers(false), + _headerValid(false), + _reader(nullptr), + _fontBase(nullptr) {} + + bool loadFont(uint8_t fontNum, bool useFile); + void setCacheNumbers(bool cache) { _cacheNumbers = cache; } + void prepare(const char* text); + + inline void beginFrame() { + if (!_headerValid) { + updateReader(); + if (_reader) { + parseHeader(*_reader, _cachedHeader); + _headerValid = true; + } + } + } + + // Get dimensions (use cached header) + inline uint8_t getFontHeight() { return _cachedHeader.height; } + inline uint8_t getFontSpacing() { return _cachedHeader.spacing; } + uint8_t getGlyphWidth(uint32_t unicode); + + // Rendering + void drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate); + +private: + Segment* _segment; + const uint8_t* _flashFont; + uint8_t _fontNum; // Font number (0-4) + bool _useFlashFont; // true = flash, false = file + bool _cacheNumbers; + + // Cached data for performance (non-static, per-instance) + bool _headerValid; + FontHeader _cachedHeader; + const ByteReader* _reader; + const uint8_t* _fontBase; + FlashByteReader _flashReader; + RAMByteReader _ramReader; + + // Invalidate cached header (call when font changes) + inline void invalidateHeader() { + _headerValid = false; + } + + inline void updateReader() { + if (_flashFont) { + _flashReader = FlashByteReader(_flashFont); + _reader = &_flashReader; + _fontBase = _flashFont; + } else if (_segment->data) { + SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; + // Font header starts after metadata + registry + const uint8_t* fontData = _segment->data + sizeof(SegmentFontMetadata) + (meta->glyphCount * sizeof(GlyphEntry)); + _ramReader = RAMByteReader(fontData); + _reader = &_ramReader; + _fontBase = fontData; + } else { + _reader = nullptr; + _fontBase = nullptr; + } + } + + // Metadata access (RAM only) + SegmentFontMetadata* getMetadata() { + return _segment->data ? (SegmentFontMetadata*)_segment->data : nullptr; + } + + // Unified operations (work identically for flash and RAM) + static bool parseHeader(const ByteReader& reader, FontHeader& hdr); + const uint8_t* getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, uint8_t& outHeight); + + // Glyph index calculation (pure function, inline for speed) + static inline int32_t getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode); + + // File font management + void scanAvailableFonts(); + void rebuildCache(const char* text); + uint8_t collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes, uint8_t maxCount); +}; + #endif diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index fe5a05c903..5dc412734c 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -583,534 +583,507 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu } #undef WU_WEIGHT -#endif // WLED_DISABLE_2D +#include "src/font/console_font_4x6.h" +#include "src/font/console_font_5x8.h" +#include "src/font/console_font_5x12.h" +#include "src/font/console_font_6x8.h" +#include "src/font/console_font_7x9.h" + #define LAST_ASCII_CHAR 126 -// FontManager implementation +// Pure glyph index calculator (inline for speed) +inline int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode) { + if (unicode <= LAST_ASCII_CHAR) { + if (unicode >= first && unicode <= last) return unicode - first; + } else if (firstUnicode > 0 && unicode >= firstUnicode) { + uint32_t adjusted = unicode - firstUnicode + LAST_ASCII_CHAR + 1; + if (adjusted >= first && adjusted <= last) return adjusted - first; + } + return -1; +} + +// Parse header from either flash or RAM (IDENTICAL format) +bool FontManager::parseHeader(const ByteReader& reader, FontHeader& hdr) { + if (reader.readByte(0) != 0x57) return false; // Magic check + hdr.height = reader.readByte(1); + hdr.width = reader.readByte(2); + hdr.spacing = reader.readByte(3); + hdr.flags = reader.readByte(4); + hdr.first = reader.readByte(5); + hdr.last = reader.readByte(6); + hdr.firstUnicode = reader.readUInt32LE(7); + return true; +} + +// Get glyph width +uint8_t FontManager::getGlyphWidth(uint32_t unicode) { + if (!_headerValid) return 0; + int32_t idx = getGlyphIndex(unicode, _cachedHeader.first, _cachedHeader.last, _cachedHeader.firstUnicode); + if (idx < 0) return 0; + + // For flash fonts, read from width table + if (_useFlashFont) { + if (_cachedHeader.flags & 0x01) { + return _reader->readByte(FONT_HEADER_SIZE + idx); + } else { + return _cachedHeader.width; + } + } + + // For cached fonts, look up in registry + if (!_segment->data) return 0; + SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; + GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); + + for (uint8_t k = 0; k < meta->glyphCount; k++) { + if (registry[k].code == idx) { + return registry[k].width; + } + } + + return 0; // Not found in cache +} + +// Get glyph bitmap (uses cached header and reader) +const uint8_t* FontManager::getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, uint8_t& outHeight) { + if (!_reader || !_fontBase) return nullptr; + + int32_t idx = getGlyphIndex(unicode, _cachedHeader.first, _cachedHeader.last, _cachedHeader.firstUnicode); + if (idx < 0) return nullptr; + // For flash fonts, calculate offset normally + if (_useFlashFont) { + uint8_t numGlyphs = _cachedHeader.last - _cachedHeader.first + 1; + outHeight = _cachedHeader.height; + size_t offset = FONT_HEADER_SIZE; // Start after header + + if (_cachedHeader.flags & 0x01) { + outWidth = _reader->readByte(FONT_HEADER_SIZE + idx); + offset += numGlyphs; + + for (int32_t i = 0; i < idx; i++) { + uint8_t w = _reader->readByte(FONT_HEADER_SIZE + i); + uint16_t bits = w * _cachedHeader.height; + offset += (bits + 7) / 8; + } + } else { + outWidth = _cachedHeader.width; + uint16_t bitsPerGlyph = _cachedHeader.width * _cachedHeader.height; + uint16_t bytesPerGlyph = (bitsPerGlyph + 7) / 8; + offset += idx * bytesPerGlyph; + } + + return _fontBase + offset; + } + + // For cached fonts, use registry lookup + if (!_segment->data) return nullptr; + + SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; + GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); + + // Find glyph in registry + uint32_t bitmapOffset = 0; + for (uint8_t k = 0; k < meta->glyphCount; k++) { + if (registry[k].code == idx) { + outWidth = registry[k].width; + outHeight = registry[k].height; + + // Bitmap starts after: metadata + registry + header + const uint8_t* bitmap = _segment->data + sizeof(SegmentFontMetadata) +(meta->glyphCount * sizeof(GlyphEntry)) + FONT_HEADER_SIZE + bitmapOffset; + return bitmap; + } + + // Accumulate offset to next glyph + uint16_t bits = registry[k].width * registry[k].height; + bitmapOffset += (bits + 7) / 8; + } + + return nullptr; // Glyph not found in cache +} + void FontManager::scanAvailableFonts() { - FontHeader* header = (FontHeader*)_segment->data; - if (!header) return; + SegmentFontMetadata* meta = getMetadata(); + if (!meta) return; + + meta->availableFonts = 0; + - header->availableFonts = 0; - const char* fontNames[] = {"/font.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf"}; for (int i = 0; i < 5; i++) { - if (WLED_FS.exists(fontNames[i])) { - header->availableFonts |= (1 << i); // Set bit i + char fileName[16]; + strcpy_P(fileName, PSTR("/font")); + if (i > 0) sprintf(fileName + 5, "%d", i); + strcat_P(fileName, PSTR(".wbf")); + if (WLED_FS.exists(fileName)) { + meta->availableFonts |= (1 << i); } } - header->fontsScanned = 1; + meta->fontsScanned = 1; } -bool FontManager::loadFont(const char* filename, const uint8_t* flashFont, bool init) { - _flashFont = flashFont; - _fileFont = filename; +bool FontManager::loadFont(uint8_t fontNum, bool useFile) { + _fontNum = fontNum; + _useFlashFont = !useFile; + switch (_fontNum) { + default: + case 0: _flashFont = tinypixie2_6px; break; + case 1: _flashFont = console_font_5x8; break; + case 2: _flashFont = console_font_6x8; break; + case 3: _flashFont = console_font_7x9; break; + case 4: _flashFont = console_font_5x12; break; + } + invalidateHeader(); - if (flashFont) return true; - if (!filename) return false; - - // Extract font number from filename (font.wbf=0, font1.wbf=1, etc.) - uint8_t fontNum = 0; - if (strlen(filename) > 5 && filename[5] >= '1' && filename[5] <= '4') { - fontNum = filename[5] - '0'; + if (_useFlashFont) { + updateReader(); + return true; + } + // File font requested + SegmentFontMetadata* meta = getMetadata(); // is null if data is not allocated yet + // Ensure segment data exists + if (!meta) { + if (!_segment->allocateData(sizeof(SegmentFontMetadata))) { + return false; } - - // Ensure segment data exists for font tracking - if (!_segment->data) { - if (!_segment->allocateData(sizeof(FontHeader))) { - return false; // Failed to allocate - } - FontHeader* header = (FontHeader*)_segment->data; - memset(header, 0, sizeof(FontHeader)); - header->cachedFontNum = 0xFF; // No font cached - header->fontsScanned = 0; + meta = getMetadata(); + memset(meta, 0, sizeof(SegmentFontMetadata)); + meta->cachedFontNum = 0xFF; + meta->fontsScanned = 0; + } + + // Scan filesystem only if not already scanned + if (!meta->fontsScanned) { + scanAvailableFonts(); + } + + // Determine which font to actually use (with fallback) + uint8_t fontToUse = fontNum; + + // Check if requested font is available + if (!(meta->availableFonts & (1 << fontNum))) { + // Not available - find first available font + fontToUse = 0xFF; + for (int i = 0; i < 5; i++) { + if (meta->availableFonts & (1 << i)) { + fontToUse = i; + break; + } } - FontHeader* header = (FontHeader*)_segment->data; - - // If initializing or font number changed, invalidate cache - if (init || fontNum != header->cachedFontNum) { - header->glyphCount = 0; // Invalidate glyph cache - header->cachedFontNum = fontNum; - - // Rescan filesystem if font changed (user may have added new fonts) - header->fontsScanned = 0; + if (fontToUse == 0xFF) { + _useFlashFont = true; // no custom fonts available, use flash font + updateReader(); + return true; } + } + + // Store the actual font being used + _fontNum = fontToUse; + + // Check if the ACTUAL font to use has changed + if (fontToUse != meta->cachedFontNum) { + // Font changed - clear cache but preserve scan results + uint8_t avail = meta->availableFonts; + uint8_t scanned = meta->fontsScanned; - // Scan filesystem on first use or after font change - if (!header->fontsScanned) { - scanAvailableFonts(); + if (!_segment->allocateData(sizeof(SegmentFontMetadata))) { + return false; } - - // Check if requested font is available - if (header->availableFonts & (1 << fontNum)) { - return true; // Font available, will be loaded by prepare->rebuildCache + meta = getMetadata(); + meta->availableFonts = avail; + meta->cachedFontNum = fontToUse; + meta->fontsScanned = scanned; + } + + return true; +} + +uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes, uint8_t maxCount) { + uint8_t count = 0; + + // Pre-add numbers if caching + if (_cacheNumbers) { + const char* nums = "0123456789:. "; // TOD: use printf + for (const char* p = nums; *p && count < maxCount; p++) { + int32_t idx = getGlyphIndex(*p, hdr.first, hdr.last, hdr.firstUnicode); + if (idx >= 0 && idx < 256) { + outCodes[count++] = idx; + } } + } + + // Parse text + size_t i = 0, len = strlen(text); + while (i < len && count < maxCount) { + uint8_t charLen; + uint32_t unicode = utf8_decode(&text[i], &charLen); + if (!charLen || charLen > 4) break; + i += charLen; - // Requested font not available - try fallback to any available font - for (int i = 0; i < 5; i++) { - if (header->availableFonts & (1 << i)) { - // Found an available font - const char* fallbackNames[] = {"/font.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf"}; - _fileFont = fallbackNames[i]; - header->cachedFontNum = i; - return true; - } + int32_t idx = getGlyphIndex(unicode, hdr.first, hdr.last, hdr.firstUnicode); + if (idx < 0) { + idx = getGlyphIndex('?', hdr.first, hdr.last, hdr.firstUnicode); } - // No fonts available at all - _fileFont = nullptr; - header->glyphCount = 0; - - return false; -} - -// Helper to get glyph index from unicode -int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode) { - // ASCII Range - if (unicode <= LAST_ASCII_CHAR) { - if (unicode >= first && unicode <= last) { - return unicode - first; - } - } - // Extended Range (uses Unicode offset) - else if (firstUnicode > 0 && unicode >= firstUnicode) { - uint32_t adjustedCode = unicode - firstUnicode + LAST_ASCII_CHAR + 1; - if (adjustedCode >= first && adjustedCode <= last) { - return adjustedCode - first; + if (idx >= 0 && idx < 256) { + // Add if unique + bool exists = false; + for (uint8_t k = 0; k < count; k++) { + if (outCodes[k] == idx) { + exists = true; + break; } + } + if (!exists) outCodes[count++] = idx; } - return -1; -} - -int32_t FontManager::getGlyphIndex(uint32_t unicode, FontHeader* header) { - if (!header) return -1; - return getGlyphIndex(unicode, header->first, header->last, header->firstUnicode); + } + return count; } void FontManager::prepare(const char* text) { - if (_flashFont) return; // PROGMEM fonts don't need preparation - if (!_fileFont) return; if (!text) return; + // Helper to ensure header is valid + auto ensureHeader = [this]() -> bool { + if (!_headerValid) { + updateReader(); + if (_reader && parseHeader(*_reader, _cachedHeader)) { + _headerValid = true; + return true; + } + return false; + } + return true; + }; + + // Flash fonts - just validate header and done + if (_useFlashFont) { + ensureHeader(); + return; + } - // Ensure data loaded for header + // Check if cache exists if (!_segment->data) { - Serial.println("FontManager: No data, rebuilding cache for header"); - rebuildCache(text); // Load header - if (!_segment->data) return; // Failed + rebuildCache(text); + ensureHeader(); + return; } - FontHeader* header = (FontHeader*)_segment->data; + SegmentFontMetadata* meta = getMetadata(); - // Check if cache was invalidated (glyphCount == 0) - if (header->glyphCount == 0) { + // If glyphCount is 0, cache is empty - rebuild + if (meta->glyphCount == 0) { rebuildCache(text); - if (!_segment->data) return; - header = (FontHeader*)_segment->data; + ensureHeader(); + return; } - - uint8_t neededCodes[64]; // Max unique chars - uint8_t neededCount = 0; - - // 0. Pre-add numbers if requested (Matrix/Clock mode) - if (_cacheNumbers) { - const char* nums = "0123456789:. "; - for (const char* p = nums; *p; p++) { - int32_t idx = getGlyphIndex((uint32_t)*p, header); - if (idx >= 0 && idx < 256) { - neededCodes[neededCount++] = (uint8_t)idx; - } - } + + // Validate header from existing cache + if (!ensureHeader()) { + rebuildCache(text); + ensureHeader(); + return; } - // 1. Decode text and find needed codes - size_t len = strlen(text); - size_t i = 0; - - while (i < len) { - uint8_t charLen; - uint32_t unicode = utf8_decode(&text[i], &charLen); - if (charLen == 0) { - // Malformed UTF8 - skip this byte to avoid infinite loop - i++; - continue; - } - i += charLen; - - int32_t index = getGlyphIndex(unicode, header); - - if (index < 0) { - // Fallback to '?' - index = getGlyphIndex('?', header); - } - - if (index >= 0 && index < 256) { - // Check if we already marked this code as needed - bool alreadyNeeded = false; - for (int k=0; kdata + sizeof(SegmentFontMetadata)); + + for (uint8_t k = 0; k < neededCount; k++) { + // Look up in registry bool found = false; - for (int c=0; cglyphCount; c++) { - if (registry[c].code == neededCodes[k]) { + for (uint8_t j = 0; j < meta->glyphCount; j++) { + if (registry[j].code == neededCodes[k]) { found = true; break; } } + if (!found) { - DEBUGFX_PRINTF("FontManager: Missing char idx %d\n", neededCodes[k]); - allCached = false; - break; + // Missing glyph - rebuild cache + rebuildCache(text); + ensureHeader(); + return; } } - - if (!allCached) { - DEBUGFX_PRINTLN("FontManager: Rebuilding cache due to missing chars"); - rebuildCache(text); - } + + // All glyphs present, cache is valid } void FontManager::rebuildCache(const char* text) { - if (_flashFont) return; - if (!_fileFont) return; - - DEBUGFX_PRINTF("FontManager::rebuildCache('%s') Font: %s\n", text ? text : "NULL", _fileFont); + if (_useFlashFont || !text) return; - // Preserve font tracking if segment data exists - uint8_t avail = 0, cached = 0xFF, scanned = 0; + // Preserve metadata + SegmentFontMetadata savedMeta = {0, 0xFF, 0, 0}; if (_segment->data) { - FontHeader* h = (FontHeader*)_segment->data; - avail = h->availableFonts; - cached = h->cachedFontNum; - scanned = h->fontsScanned; + memcpy(&savedMeta, _segment->data, sizeof(SegmentFontMetadata)); } - // Copy filename to local buffer in case _fileFont points to SEGENV.data which might be moved/freed by allocateData - char currentFontFile[32]; - if (_fileFont) strncpy(currentFontFile, _fileFont, 31); - else currentFontFile[0] = 0; - currentFontFile[31] = 0; - - while (!BusManager::canAllShow()) yield(); - File file = WLED_FS.open(currentFontFile, "r"); - // Fallback logic for missing fonts + // Build filename from font number TODO: make file name generation a function + char fileName[16]; + strcpy_P(fileName, PSTR("/font")); + if (_fontNum > 0) sprintf(fileName + 5, "%d", _fontNum); + strcat_P(fileName, PSTR(".wbf")); + #ifdef CONFIG_IDF_TARGET_ESP32C3 + while (!BusManager::canAllShow()) yield(); // accessing FS causes glitches due to RMT issue on C3 TODO: remove this when fixed + #endif + File file = WLED_FS.open(fileName, "r"); + + // Fallback logic - try other available fonts if (!file) { - // List of fallback fonts to try - // User requested: font.wbf, font1.wbf ... font4.wbf - // The user's instruction implies a desire to replace this static list with a dynamic sprintf loop. - // However, the provided snippet also contains a critical analysis of why this is problematic - // if _fileFont is a pointer to a stack-allocated buffer, as it would become invalid. - // Given the explicit comment "Abort implementation change for now to avoid breaking it." - // within the provided code, I will keep the existing working static list approach for now, - // as implementing the dynamic sprintf loop directly would introduce a bug with pointer lifetime. - const char* fallbackFonts[] = { "/font.wbf", "/font0.wbf", "/font1.wbf", "/font2.wbf", "/font3.wbf", "/font4.wbf" }; - - for (int i = 0; i < 6; i++) { - // Don't try the same file again if it was the initial request - if (strncmp(currentFontFile, fallbackFonts[i], 15) == 0) continue; - - file = WLED_FS.open(fallbackFonts[i], "r"); + SegmentFontMetadata* meta = getMetadata(); + if (meta) { + for (int i = 0; i < 5; i++) { + if (i == _fontNum) continue; // Already tried this one + if (meta->availableFonts & (1 << i)) { + strcpy_P(fileName, PSTR("/font")); + if (i > 0) sprintf(fileName + 5, "%d", i); + strcat_P(fileName, PSTR(".wbf")); + + file = WLED_FS.open(fileName, "r"); if (file) { - strncpy(currentFontFile, fallbackFonts[i], 31); // Update current file - break; + _fontNum = i; // Update to fallback font + break; } + } } + } } - + if (!file) return; - // Read header - // Check Magic - if (file.read() != 'W') { file.close(); return; } // Magic - - FontHeader tempHeader; - memset(&tempHeader, 0, sizeof(FontHeader)); - - uint8_t version; - file.read(&version, 1); - tempHeader.height = file.read(); - tempHeader.width = file.read(); - tempHeader.flags = file.read(); - tempHeader.first = file.read(); - tempHeader.last = file.read(); - uint32_t firstUnicode; - file.read((uint8_t*)&firstUnicode, 4); - tempHeader.firstUnicode = firstUnicode; - - // Identify unique codes needed + // Read header from file + FontHeader fileHdr; + if (file.read() != 'W') { file.close(); return; } + // TODO: check if this works: file.read((uint8_t*)&fileHdr, 10); // Read remaining 10 bytes of header + fileHdr.height = file.read(); + fileHdr.width = file.read(); + fileHdr.spacing = file.read(); + fileHdr.flags = file.read(); + fileHdr.first = file.read(); + fileHdr.last = file.read(); + file.read((uint8_t*)&fileHdr.firstUnicode, 4); + + // Collect needed glyphs (no need to sort!) uint8_t neededCodes[64]; - uint8_t neededCount = 0; - - // 0. Pre-add numbers if requested (Matrix/Clock mode) - if (_cacheNumbers) { - const char* nums = "0123456789:. "; - for (const char* p = nums; *p; p++) { - int32_t idx = getGlyphIndex((uint32_t)*p, tempHeader.first, tempHeader.last, firstUnicode); - if (idx >= 0 && idx < 256) { - neededCodes[neededCount++] = (uint8_t)idx; - } - } - } - - size_t len = strlen(text); - size_t i = 0; - while (i < len) { - uint8_t charLen; - uint32_t unicode = utf8_decode(&text[i], &charLen); - if (!charLen || charLen > 4) break; // safety check to prevent infinite loop - i += charLen; + uint8_t neededCount = collectNeededCodes(text, fileHdr, neededCodes, 64); - int32_t index = getGlyphIndex(unicode, tempHeader.first, tempHeader.last, firstUnicode); - - if (index < 0) { - index = getGlyphIndex('?', tempHeader.first, tempHeader.last, firstUnicode); - } - - if (index >= 0 && index < 256) { - // Add unique - bool known = false; - for (int k=0; k= numGlyphs) { - bitmapSizes[k] = 0; - continue; - } - - // Calculate file offset for this code - uint32_t offset = fileDataStart; - for (int j=0; jallocateData(totalRam)) { + if (!_segment->allocateData(ramFontSize)) { file.close(); return; } - // Write Header - uint8_t* ptr = _segment->data; - memcpy(ptr, &tempHeader, sizeof(FontHeader)); - ptr += sizeof(FontHeader); + // Write metadata + SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; + meta->availableFonts = savedMeta.availableFonts; + meta->cachedFontNum = savedMeta.cachedFontNum; + meta->fontsScanned = savedMeta.fontsScanned; + meta->glyphCount = neededCount; - // Write Registry - GlyphEntry* registry = (GlyphEntry*)ptr; - ptr += neededCount * sizeof(GlyphEntry); + uint8_t* ptr = _segment->data + sizeof(SegmentFontMetadata); - uint8_t* bitmapDst = ptr; - - for (int k=0; k 0) { - file.seek(fileOffsets[k]); - file.read(bitmapDst, bitmapSizes[k]); - bitmapDst += bitmapSizes[k]; - } + registry[k].height = fileHdr.height; } + ptr += neededCount * sizeof(GlyphEntry); - file.close(); -} - -// Unified glyph width getter for both flash and file fonts -uint8_t FontManager::getGlyphWidth(uint32_t code) { - if (_flashFont) { - const uint8_t* font = _flashFont; - uint8_t flags = pgm_read_byte_near(&font[3]); - uint8_t first = pgm_read_byte_near(&font[4]); - uint8_t last = pgm_read_byte_near(&font[5]); - - if (code < first || code > last) return 0; - uint8_t glyphIndex = code - first; - - if (flags & 0x01) { // Variable width - read from width table - // Width table starts at offset 10 (after header) - return pgm_read_byte_near(&font[10 + glyphIndex]); - } else { // Fixed width - return pgm_read_byte_near(&font[2]); - } - } + // Write font header (for compatibility and easy access to spacing/firstUnicode) + file.seek(0); // Go back to start of file + file.read(ptr, FONT_HEADER_SIZE); // could also write it from fileHdr, but this is simpler + ptr += FONT_HEADER_SIZE; - // File font - use registry - if (_segment->data) { - FontHeader* header = (FontHeader*)_segment->data; - int32_t index = getGlyphIndex(code, header); - - if (index >= 0) { - GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); - for (int k=0; kglyphCount; k++) { - if (registry[k].code == (uint8_t)index) { - return registry[k].width; - } - } - } - } - return 0; -} - -uint8_t FontManager::getCharacterWidth(uint32_t code) { - return getGlyphWidth(code); -} - -// Unified glyph bitmap getter for both flash and file fonts -const uint8_t* FontManager::getGlyphBitmap(uint32_t code, uint8_t& outWidth, uint8_t& outHeight) { - if (_flashFont) { - const uint8_t* font = _flashFont; - uint8_t h = pgm_read_byte_near(&font[1]); - uint8_t flags = pgm_read_byte_near(&font[4]); - uint8_t first = pgm_read_byte_near(&font[5]); - uint8_t last = pgm_read_byte_near(&font[6]); - - - if (code < first || code > last) return nullptr; - uint8_t glyphIndex = code - first; - - outHeight = h; - uint16_t offset = 10; // After 10-byte header (11 bytes total, but data at index 10) + // Write bitmap data in registry order (no sorting needed) + for (uint8_t k = 0; k < neededCount; k++) { + uint8_t code = neededCodes[k]; + uint16_t bits = widthTable[code] * fileHdr.height; + uint16_t bytes = (bits + 7) / 8; - if (flags & 0x01) { // Variable width - uint8_t numGlyphs = last - first + 1; - offset += numGlyphs; // Skip width table - outWidth = pgm_read_byte_near(&font[11 + glyphIndex]); - - // Sum bytes of all previous glyphs to find this one's offset - for (uint8_t i = 0; i < glyphIndex; i++) { - uint8_t w = pgm_read_byte_near(&font[11 + i]); - uint16_t bits = w * h; - offset += (bits + 7) / 8; // Round up to bytes - } - } else { // Fixed width - outWidth = pgm_read_byte_near(&font[2]); - uint16_t bitsPerGlyph = outWidth * h; - uint16_t bytesPerGlyph = (bitsPerGlyph + 7) / 8; - offset += glyphIndex * bytesPerGlyph; + // Calculate file offset + uint32_t offset = fileDataStart; + for (uint8_t j = 0; j < code; j++) { + uint16_t b = widthTable[j] * fileHdr.height; + offset += (b + 7) / 8; } - return &font[offset]; // PROGMEM pointer + // Read from file + file.seek(offset); + file.read(ptr, bytes); + ptr += bytes; } - // File font - bitmap in RAM cache - if (!_segment->data) return nullptr; - - FontHeader* header = (FontHeader*)_segment->data; - int32_t index = getGlyphIndex(code, header); - if (index < 0) return nullptr; - - GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(FontHeader)); - uint32_t bitmapOffset = 0; - - for (int k = 0; k < header->glyphCount; k++) { - if (registry[k].code == (uint8_t)index) { - outWidth = registry[k].width; - outHeight = registry[k].height; - uint8_t* bitmap = _segment->data + sizeof(FontHeader) + - (header->glyphCount * sizeof(GlyphEntry)) + bitmapOffset; - return bitmap; // RAM pointer - } - uint16_t bits = registry[k].width * registry[k].height; - bitmapOffset += (bits + 7) / 8; - } - return nullptr; + file.close(); } -void FontManager::drawCharacter(uint32_t code, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { - // Get bitmap using unified helper (works for both flash and file fonts) +void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { + if (!_reader || !_fontBase) return; + uint8_t w, h; - const uint8_t* bitmap = getGlyphBitmap(code, w, h); + const uint8_t* bitmap = getGlyphBitmap(unicode, w, h); if (!bitmap || w == 0) return; CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; - // Draw character bitmap - unified code for both flash and file fonts uint16_t bitIndex = 0; - for (int i = 0; i < h; i++) { - CRGBW c = ColorFromPalette(grad, (i + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); - for (int j = 0; j < w; j++) { - uint16_t bytePos = bitIndex >> 3; // bitIndex / 8 - uint8_t bitPos = 7 - (bitIndex & 7); // 7 - (bitIndex % 8) + for (int row = 0; row < h; row++) { + CRGBW c = ColorFromPalette(grad, (row + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); + + for (int col = 0; col < w; col++) { + uint16_t bytePos = bitIndex >> 3; + uint8_t bitPos = 7 - (bitIndex & 7); - // Read from bitmap - pgm_read for flash, direct for RAM - uint8_t byteVal = _flashFont ? - pgm_read_byte_near(&bitmap[bytePos]) : - bitmap[bytePos]; + // Direct pointer access for speed + uint8_t byteVal = _reader->readByte((bitmap - _fontBase) + bytePos); if ((byteVal >> bitPos) & 1) { - // Apply rotation int x0, y0; switch (rotate) { - case -1: x0 = x + (h-1) - i; y0 = y + j; break; + case -1: x0 = x + (h-1) - row; y0 = y + col; break; case -2: - case 2: x0 = x + (w-1) - j; y0 = y + (h-1) - i; break; - case 1: x0 = x + i; y0 = y + (w-1) - j; break; - default: x0 = x + j; y0 = y + i; break; + case 2: x0 = x + (w-1) - col; y0 = y + (h-1) - row; break; + case 1: x0 = x + row; y0 = y + (w-1) - col; break; + default: x0 = x + col; y0 = y + row; break; } - if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { + if (x0 >= 0 && x0 < (int)_segment->vWidth() && + y0 >= 0 && y0 < (int)_segment->vHeight()) { _segment->setPixelColorXYRaw(x0, y0, c.color32); } } bitIndex++; } } -} \ No newline at end of file +} + +#endif // WLED_DISABLE_2D \ No newline at end of file From c6e10f99e83fab6c67e3ae35fa80ec165dfab9b8 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 17:39:46 +0100 Subject: [PATCH 07/17] minor fix --- wled00/FX_2Dfcn.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 5dc412734c..be5fa4a156 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -1044,6 +1044,7 @@ void FontManager::rebuildCache(const char* text) { } file.close(); + invalidateHeader(); // Invalidate header to force re-parse with new data } void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { From 1339593976c54f80364d9a89f493ca7c724bb751 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 18:01:51 +0100 Subject: [PATCH 08/17] bugfix, now file fonts work again with extended chars --- wled00/FX_2Dfcn.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index be5fa4a156..ea06a0a049 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -845,6 +845,7 @@ void FontManager::prepare(const char* text) { // Helper to ensure header is valid auto ensureHeader = [this]() -> bool { + auto checkHeader = [this]() -> bool { if (!_headerValid) { updateReader(); if (_reader && parseHeader(*_reader, _cachedHeader)) { @@ -858,14 +859,13 @@ void FontManager::prepare(const char* text) { // Flash fonts - just validate header and done if (_useFlashFont) { - ensureHeader(); + checkHeader(); return; } // Check if cache exists if (!_segment->data) { rebuildCache(text); - ensureHeader(); return; } @@ -874,14 +874,12 @@ void FontManager::prepare(const char* text) { // If glyphCount is 0, cache is empty - rebuild if (meta->glyphCount == 0) { rebuildCache(text); - ensureHeader(); return; } // Validate header from existing cache - if (!ensureHeader()) { + if (!checkHeader()) { rebuildCache(text); - ensureHeader(); return; } @@ -904,7 +902,6 @@ void FontManager::prepare(const char* text) { if (!found) { // Missing glyph - rebuild cache rebuildCache(text); - ensureHeader(); return; } } @@ -1044,7 +1041,9 @@ void FontManager::rebuildCache(const char* text) { } file.close(); - invalidateHeader(); // Invalidate header to force re-parse with new data + memcpy(&_cachedHeader, &fileHdr, sizeof(FontHeader)); + _headerValid = true; // Mark as valid, we just loaded it directly + updateReader(); // Set up reader for cached access } void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { From 0f978bc5342c814f722e221e89faca905a6736bd Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 18:02:56 +0100 Subject: [PATCH 09/17] lost line --- wled00/FX_2Dfcn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index ea06a0a049..be7cc6e131 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -898,7 +898,7 @@ void FontManager::prepare(const char* text) { break; } } - + if (!found) { // Missing glyph - rebuild cache rebuildCache(text); From f61cbd78e53889b3e0b9a45412a01903e3e24aaa Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 18:03:07 +0100 Subject: [PATCH 10/17] another --- wled00/FX_2Dfcn.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index be7cc6e131..6247580da4 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -844,7 +844,6 @@ void FontManager::prepare(const char* text) { if (!text) return; // Helper to ensure header is valid - auto ensureHeader = [this]() -> bool { auto checkHeader = [this]() -> bool { if (!_headerValid) { updateReader(); From f729dc0fc43f8f01c80df6956ac77d166b184450 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 18:37:05 +0100 Subject: [PATCH 11/17] update to latest header format using 12 bytes --- wled00/FX.h | 7 +- wled00/FX_2Dfcn.cpp | 6 +- wled00/src/font/console_font_4x6.h | 387 +++++++++++++------- wled00/src/font/console_font_5x12.h | 539 ++++++++++++++-------------- wled00/src/font/console_font_5x8.h | 539 ++++++++++++++-------------- wled00/src/font/console_font_6x8.h | 539 ++++++++++++++-------------- wled00/src/font/console_font_7x9.h | 539 ++++++++++++++-------------- 7 files changed, 1354 insertions(+), 1202 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 148bf1b17a..99071eceac 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1068,11 +1068,11 @@ extern const char JSON_mode_names[]; extern const char JSON_palette_names[]; #define LAST_ASCII_CHAR 126 -#define FONT_HEADER_SIZE 11 +#define FONT_HEADER_SIZE 12 /** * Unified Font Format (Flash and RAM use IDENTICAL layout) * - * Header Layout (11 Bytes): + * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height * [2] Fixed/max glyph width @@ -1080,7 +1080,8 @@ extern const char JSON_palette_names[]; * [4] Flags: (0x01 = variable width) * [5] First Char * [6] Last Char - * [7-10] Unicode Offset (32-bit little-endian) + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian) * * Followed by: * - Width table (if variable width): [first..last] byte array diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 6247580da4..308da551e9 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -611,7 +611,8 @@ bool FontManager::parseHeader(const ByteReader& reader, FontHeader& hdr) { hdr.flags = reader.readByte(4); hdr.first = reader.readByte(5); hdr.last = reader.readByte(6); - hdr.firstUnicode = reader.readUInt32LE(7); + // [7] reserved: 0x00 + hdr.firstUnicode = reader.readUInt32LE(8); return true; } @@ -726,7 +727,7 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { _useFlashFont = !useFile; switch (_fontNum) { default: - case 0: _flashFont = tinypixie2_6px; break; + case 0: _flashFont = console_font_4x6; break; case 1: _flashFont = console_font_5x8; break; case 2: _flashFont = console_font_6x8; break; case 3: _flashFont = console_font_7x9; break; @@ -960,6 +961,7 @@ void FontManager::rebuildCache(const char* text) { fileHdr.flags = file.read(); fileHdr.first = file.read(); fileHdr.last = file.read(); + file.read(); // skip byte 7 (reserved) file.read((uint8_t*)&fileHdr.firstUnicode, 4); // Collect needed glyphs (no need to sort!) diff --git a/wled00/src/font/console_font_4x6.h b/wled00/src/font/console_font_4x6.h index 86504a1cdb..ee97fe94bb 100644 --- a/wled00/src/font/console_font_4x6.h +++ b/wled00/src/font/console_font_4x6.h @@ -1,23 +1,20 @@ - // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts /* - * WBF (WLED Bitmap Font) Packed Format - * Header Layout (11 Bytes): + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 6 - * [2] Fixed/max glyph width: 4 + * [2] Fixed/max glyph width: 3 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 * [6] Last Char: 126 - * [7-10] Unicode Offset (32-bit little-endian): 0x00000000 - * - * If variabls set ine width flag (0x01) i [4], header is followed by a - * width table of (Last Char - First Char + 1) bytes containing the - * width of each glyph. - * + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -41,116 +38,264 @@ * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ -// Font: TinyPixie2_6px -// Height: 6, Max Width: 6, Spacing: 1 -// Characters: 32-126 (95 glyphs) -// Unicode Offset: 0x00000000 -// Variable Width: Yes - -static const unsigned char tinypixie2_6px[] PROGMEM = { - 0x57, 0x06, 0x06, 0x01, 0x01, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, S, Flags, First, Last, UnicodeOffset (32bit) - // Width table - 0x03, 0x01, 0x03, 0x05, 0x03, 0x05, 0x06, 0x01, 0x02, 0x02, 0x05, 0x03, 0x01, 0x03, 0x01, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, - 0x06, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x04, 0x03, - 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x03, - 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x01, 0x05, 0x03, 0x03, - 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x05, 0x03, 0x03, 0x02, 0x03, 0x01, 0x03, 0x04, +static const unsigned char console_font_4x6[] PROGMEM = { + 0x57, 0x06, 0x03, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" ", w=3 */ - 0xE8, /* code=33, hex=0x21, ascii="!", w=1 */ - 0xB4, 0x00, 0x00, /* code=34, hex=0x22, ascii=""", w=3 */ - 0x57, 0xD5, 0xF5, 0x00, /* code=35, hex=0x23, ascii="#", w=5 */ - 0x5F, 0x3E, 0x80, /* code=36, hex=0x24, ascii="$", w=3 */ - 0xCE, 0x88, 0xB9, 0x80, /* code=37, hex=0x25, ascii="%", w=5 */ - 0x62, 0x46, 0x66, 0x74, 0x00, /* code=38, hex=0x26, ascii="&", w=6 */ - 0xC0, /* code=39, hex=0x27, ascii="'", w=1 */ - 0x6A, 0x40, /* code=40, hex=0x28, ascii="(", w=2 */ - 0x95, 0x80, /* code=41, hex=0x29, ascii=")", w=2 */ - 0x27, 0xDC, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*", w=5 */ - 0x0B, 0xA0, 0x00, /* code=43, hex=0x2B, ascii="+", w=3 */ - 0x0C, /* code=44, hex=0x2C, ascii=",", w=1 */ - 0x03, 0x80, 0x00, /* code=45, hex=0x2D, ascii="-", w=3 */ - 0x08, /* code=46, hex=0x2E, ascii=".", w=1 */ - 0x25, 0x48, 0x00, /* code=47, hex=0x2F, ascii="/", w=3 */ - 0x56, 0xD4, 0x00, /* code=48, hex=0x30, ascii="0", w=3 */ - 0x59, 0x2E, 0x00, /* code=49, hex=0x31, ascii="1", w=3 */ - 0xC5, 0x4E, 0x00, /* code=50, hex=0x32, ascii="2", w=3 */ - 0xE5, 0x1C, 0x00, /* code=51, hex=0x33, ascii="3", w=3 */ - 0x97, 0x92, 0x00, /* code=52, hex=0x34, ascii="4", w=3 */ - 0xF3, 0x1C, 0x00, /* code=53, hex=0x35, ascii="5", w=3 */ - 0x73, 0xD6, 0x00, /* code=54, hex=0x36, ascii="6", w=3 */ - 0xE5, 0x28, 0x00, /* code=55, hex=0x37, ascii="7", w=3 */ - 0xF7, 0xDE, 0x00, /* code=56, hex=0x38, ascii="8", w=3 */ - 0xD7, 0x9C, 0x00, /* code=57, hex=0x39, ascii="9", w=3 */ - 0x28, /* code=58, hex=0x3A, ascii=":", w=1 */ - 0x2C, /* code=59, hex=0x3B, ascii=";", w=1 */ - 0x2A, 0x22, 0x00, /* code=60, hex=0x3C, ascii="<", w=3 */ - 0x1C, 0x70, 0x00, /* code=61, hex=0x3D, ascii="=", w=3 */ - 0x88, 0xA8, 0x00, /* code=62, hex=0x3E, ascii=">", w=3 */ - 0xC5, 0x04, 0x00, /* code=63, hex=0x3F, ascii="?", w=3 */ - 0x7A, 0x1B, 0x6F, 0x81, 0xE0, /* code=64, hex=0x40, ascii="@", w=6 */ - 0xD6, 0xFA, 0x00, /* code=65, hex=0x41, ascii="A", w=3 */ - 0xD7, 0x5C, 0x00, /* code=66, hex=0x42, ascii="B", w=3 */ - 0x56, 0x54, 0x00, /* code=67, hex=0x43, ascii="C", w=3 */ - 0xD6, 0xDC, 0x00, /* code=68, hex=0x44, ascii="D", w=3 */ - 0xEE, 0xC0, /* code=69, hex=0x45, ascii="E", w=2 */ - 0xEE, 0x80, /* code=70, hex=0x46, ascii="F", w=2 */ - 0x72, 0xD6, 0x00, /* code=71, hex=0x47, ascii="G", w=3 */ - 0xB7, 0xDA, 0x00, /* code=72, hex=0x48, ascii="H", w=3 */ - 0xE9, 0x2E, 0x00, /* code=73, hex=0x49, ascii="I", w=3 */ - 0xD5, 0x60, /* code=74, hex=0x4A, ascii="J", w=2 */ - 0xB7, 0x5A, 0x00, /* code=75, hex=0x4B, ascii="K", w=3 */ - 0xAA, 0xC0, /* code=76, hex=0x4C, ascii="L", w=2 */ - 0x8E, 0xEB, 0x18, 0x80, /* code=77, hex=0x4D, ascii="M", w=5 */ - 0x99, 0xDB, 0x90, /* code=78, hex=0x4E, ascii="N", w=4 */ - 0xF6, 0xDE, 0x00, /* code=79, hex=0x4F, ascii="O", w=3 */ - 0xD6, 0xE8, 0x00, /* code=80, hex=0x50, ascii="P", w=3 */ - 0x56, 0xD6, 0x40, /* code=81, hex=0x51, ascii="Q", w=3 */ - 0xD6, 0xEA, 0x00, /* code=82, hex=0x52, ascii="R", w=3 */ - 0xED, 0xC0, /* code=83, hex=0x53, ascii="S", w=2 */ - 0xE9, 0x24, 0x00, /* code=84, hex=0x54, ascii="T", w=3 */ - 0xB6, 0xDE, 0x00, /* code=85, hex=0x55, ascii="U", w=3 */ - 0xB6, 0xA4, 0x00, /* code=86, hex=0x56, ascii="V", w=3 */ - 0xAD, 0x6A, 0xA5, 0x00, /* code=87, hex=0x57, ascii="W", w=5 */ - 0xB5, 0x5A, 0x00, /* code=88, hex=0x58, ascii="X", w=3 */ - 0xB5, 0x9C, 0x00, /* code=89, hex=0x59, ascii="Y", w=3 */ - 0xE5, 0x4E, 0x00, /* code=90, hex=0x5A, ascii="Z", w=3 */ - 0xEA, 0xC0, /* code=91, hex=0x5B, ascii="[", w=2 */ - 0x91, 0x12, 0x00, /* code=92, hex=0x5C, ascii="\", w=3 */ - 0xD5, 0xC0, /* code=93, hex=0x5D, ascii="]", w=2 */ - 0x22, 0xA2, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^", w=5 */ - 0x00, 0x01, 0xC0, /* code=95, hex=0x5F, ascii="_", w=3 */ - 0xC0, /* code=96, hex=0x60, ascii="`", w=1 */ - 0x19, 0xDE, 0x00, /* code=97, hex=0x61, ascii="a", w=3 */ - 0x9A, 0xDC, 0x00, /* code=98, hex=0x62, ascii="b", w=3 */ - 0x0E, 0x46, 0x00, /* code=99, hex=0x63, ascii="c", w=3 */ - 0x2E, 0xD6, 0x00, /* code=100, hex=0x64, ascii="d", w=3 */ - 0x0E, 0xE6, 0x00, /* code=101, hex=0x65, ascii="e", w=3 */ - 0x6E, 0x80, /* code=102, hex=0x66, ascii="f", w=2 */ - 0x0E, 0xB3, 0x80, /* code=103, hex=0x67, ascii="g", w=3 */ - 0x9A, 0xDA, 0x00, /* code=104, hex=0x68, ascii="h", w=3 */ - 0xB8, /* code=105, hex=0x69, ascii="i", w=1 */ - 0xBC, /* code=106, hex=0x6A, ascii="j", w=1 */ - 0x97, 0x6A, 0x00, /* code=107, hex=0x6B, ascii="k", w=3 */ - 0xF8, /* code=108, hex=0x6C, ascii="l", w=1 */ - 0x07, 0xAB, 0x5A, 0x80, /* code=109, hex=0x6D, ascii="m", w=5 */ - 0x1A, 0xDA, 0x00, /* code=110, hex=0x6E, ascii="n", w=3 */ - 0x0A, 0xD4, 0x00, /* code=111, hex=0x6F, ascii="o", w=3 */ - 0x1A, 0xDD, 0x00, /* code=112, hex=0x70, ascii="p", w=3 */ - 0x0A, 0xD6, 0x40, /* code=113, hex=0x71, ascii="q", w=3 */ - 0x3A, 0x80, /* code=114, hex=0x72, ascii="r", w=2 */ - 0x39, 0xC0, /* code=115, hex=0x73, ascii="s", w=2 */ - 0xBA, 0xC0, /* code=116, hex=0x74, ascii="t", w=2 */ - 0x16, 0xD6, 0x00, /* code=117, hex=0x75, ascii="u", w=3 */ - 0x16, 0xD4, 0x00, /* code=118, hex=0x76, ascii="v", w=3 */ - 0x04, 0x6B, 0x55, 0x00, /* code=119, hex=0x77, ascii="w", w=5 */ - 0x15, 0x2A, 0x00, /* code=120, hex=0x78, ascii="x", w=3 */ - 0x15, 0x9C, 0x00, /* code=121, hex=0x79, ascii="y", w=3 */ - 0x36, 0xC0, /* code=122, hex=0x7A, ascii="z", w=2 */ - 0x6B, 0x26, 0x00, /* code=123, hex=0x7B, ascii="{", w=3 */ - 0xFC, /* code=124, hex=0x7C, ascii="|", w=1 */ - 0xC9, 0xAC, 0x00, /* code=125, hex=0x7D, ascii="}", w=3 */ - 0x00, 0x5A, 0x00, /* code=126, hex=0x7E, ascii="~", w=4 */ -}; \ No newline at end of file + // 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x04, 0x90, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x04, 0x90, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x04, 0x90, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x90, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x04, 0x82, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x82, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x6D, 0xB6, 0xC0, // /* code=8, hex=0x08, ascii="^H" */ + // 0x04, 0x90, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x69, 0x26, 0xC0, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x12, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x04, 0x10, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x02, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x80, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x04, 0x90, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x24, 0x92, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x80, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x04, 0x10, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x24, 0x82, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x2D, 0x92, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x04, 0x82, 0x00, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x02, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x04, 0x10, 0x40, // /* code=23, hex=0x17, ascii="^W" */ + // 0x04, 0x00, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x10, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x01, 0x80, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x05, 0x90, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x90, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x04, 0x90, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x90, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x04, 0x80, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x00, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x24, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x24, 0x92, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x00, 0x82, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x20, 0x10, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x04, 0x12, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x24, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x04, 0x90, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x20, 0x02, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x20, 0x82, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x80, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x02, 0x40, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x80, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x12, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x04, 0x92, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x04, 0x02, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x20, 0x12, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x20, 0x02, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x04, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x24, 0x82, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x04, 0x90, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x20, 0x00, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x04, 0x10, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x04, 0x00, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x02, 0x40, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x80, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x82, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x20, 0x02, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x20, 0x00, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x24, 0x92, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x04, 0x92, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x24, 0x92, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x04, 0x90, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x24, 0x92, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x24, 0x92, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x24, 0x92, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x04, 0x90, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x24, 0x92, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x20, 0x02, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x10, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x24, 0x92, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x24, 0x92, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x24, 0x92, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x24, 0x92, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x04, 0x90, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x24, 0x92, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x04, 0x90, 0x00, /* code=81, hex=0x51, ascii="Q" */ + 0x24, 0x92, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x04, 0x82, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x20, 0x00, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x24, 0x92, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x24, 0x90, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x24, 0x92, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x24, 0x12, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x24, 0x00, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x20, 0x12, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x24, 0x92, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x24, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x20, 0x02, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x04, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0xC0, /* code=95, hex=0x5F, ascii="_" */ + 0x20, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x12, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x24, 0x92, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x10, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x10, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x90, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x80, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x90, 0x40, /* code=103, hex=0x67, ascii="g" */ + 0x24, 0x92, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x00, 0x00, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x00, 0x40, /* code=106, hex=0x6A, ascii="j" */ + 0x24, 0x92, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x00, 0x00, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x92, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x92, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x10, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x92, 0x40, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x10, 0x00, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x92, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x02, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x80, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x92, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x90, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x92, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x82, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x90, 0x40, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x80, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x80, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x00, 0x00, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x20, 0x02, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x28, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x90, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x04, 0x90, 0x40, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x20, 0x90, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x00, 0x90, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x04, 0x12, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x20, 0x12, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x20, 0x12, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x00, 0x12, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x04, 0x90, 0x40, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x04, 0x90, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x20, 0x90, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x20, 0x90, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x20, 0x00, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x04, 0x00, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x20, 0x00, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x20, 0x92, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x00, 0x92, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x00, 0x92, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x12, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x04, 0x92, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x04, 0x10, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x20, 0x10, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x20, 0x10, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x04, 0x12, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x20, 0x92, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x20, 0x90, 0x40, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x20, 0x90, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x20, 0x92, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x04, 0x90, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x00, 0x82, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x24, 0x10, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x04, 0x92, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x00, 0x02, 0x00, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x00, 0x12, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x00, 0x00, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x00, 0x92, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x00, 0x12, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x20, 0x92, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x20, 0x92, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x04, 0x82, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x04, 0x02, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x00, 0x10, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x04, 0x90, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x0C, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x24, 0x10, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x24, 0x10, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x00, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x05, 0x10, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x08, 0xA0, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x20, 0x82, 0x00, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x28, 0xA2, 0x80, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x4D, 0x34, 0xC0, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x00, 0x00, 0x00, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x01, 0x80, 0x00, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x0C, 0x30, 0x00, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x25, 0x92, 0x40, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x01, 0x92, 0x40, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x0C, 0x30, 0x00, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x2C, 0x32, 0x40, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x24, 0x92, 0x40, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x0C, 0x32, 0x40, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x2C, 0x30, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x25, 0x80, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x0C, 0x30, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x01, 0x80, 0x00, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x01, 0x80, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x01, 0x80, 0x00, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x00, 0x00, 0x00, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x01, 0x80, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x01, 0x80, 0x00, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x00, 0x00, 0x00, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x24, 0x92, 0x40, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x24, 0x90, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x04, 0x92, 0x40, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x2C, 0x30, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x0C, 0x32, 0x40, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x24, 0x92, 0x40, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x0C, 0x30, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x2C, 0x32, 0x40, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x0C, 0x30, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x25, 0x80, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x0C, 0x30, 0x00, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x01, 0x92, 0x40, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x24, 0x80, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x00, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x92, 0x40, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x25, 0x92, 0x40, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x0C, 0x30, 0x00, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x01, 0x80, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0x6D, 0xB6, 0xC0, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x36, 0xC0, // /* code=220, hex=0xDC, ascii="!\" */ + // 0x6D, 0xB6, 0xC0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x00, 0x00, 0x00, // /* code=222, hex=0xDE, ascii="!^" */ + // 0x6D, 0x80, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x92, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x04, 0x92, 0x40, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x24, 0x92, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x24, 0x92, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x24, 0x12, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x10, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x92, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x80, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x20, 0x82, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x04, 0x90, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x92, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x04, 0x10, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x92, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x04, 0x90, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x04, 0x90, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x04, 0x92, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x20, 0x82, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x04, 0x02, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x20, 0x82, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x04, 0x02, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x00, 0x00, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x00, 0x02, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x80, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x05, 0x14, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x04, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x80, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x10, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x24, 0x80, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x20, 0x90, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x90, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ +}; diff --git a/wled00/src/font/console_font_5x12.h b/wled00/src/font/console_font_5x12.h index 320e0f379d..95288f8691 100644 --- a/wled00/src/font/console_font_5x12.h +++ b/wled00/src/font/console_font_5x12.h @@ -1,19 +1,20 @@ -// font courtesy of https://github.com/idispatch/raster-fonts - // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts /* * WBF (WLED Bitmap Font) Packed Fixed-Width Format - * Header Layout (10 Bytes): - * [0] Magic 'W' (0x57) - * [1] Glyph height: 12 - * [2] Fixed glyph width: 5 - * [3] Flags: 0x00 (fixed width) - * [4] First Char: 32 - * [5] Last Char: 126 - * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 - * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 12 + * [2] Fixed/max glyph width: 4 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -34,266 +35,266 @@ * [Byte 1] [Byte 2] [Byte 3] * Final HEX for '!' = 0x22, 0x20, 0x20 * - * at the end of the stream, padding bits are added if necessary to fill the last byte + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ static const unsigned char console_font_5x12[] PROGMEM = { - 0x57, 0x0C, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + 0x57, 0x0C, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x74, 0x63, 0xB8, 0xC7, 0x75, 0x8B, 0x80, 0x00, // /* code=1, hex=0x01, ascii="^A" */ - // 0x77, 0xFF, 0x5F, 0xFE, 0xBB, 0xFB, 0x80, 0x00, // /* code=2, hex=0x02, ascii="^B" */ - // 0x02, 0xB7, 0xFF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ - // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ - // 0x23, 0x9C, 0xE2, 0x7F, 0xEE, 0x23, 0x80, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x23, 0x80, 0x00, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xF0, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x00, 0x07, 0x29, 0x4E, 0x00, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0xFF, 0xFF, 0xF8, 0xD6, 0xB1, 0xFF, 0xFF, 0xF0, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x0E, 0x32, 0xB2, 0x52, 0x93, 0x00, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x03, 0x25, 0x29, 0x31, 0x08, 0xE2, 0x00, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x08, 0x63, 0x10, 0x84, 0xE6, 0x00, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x32, 0x9C, 0xA5, 0x29, 0xCE, 0xC6, 0x00, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x00, 0x00, 0x0A, 0xBA, 0x2E, 0xA8, 0x00, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x21, 0x8E, 0x7B, 0x98, 0x80, 0x00, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x04, 0x67, 0x79, 0xC6, 0x10, 0x00, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x00, 0x14, 0xA5, 0x29, 0x40, 0x52, 0x80, 0x00, // /* code=19, hex=0x13, ascii="^S" */ - // 0x03, 0xB5, 0xAD, 0x69, 0x4A, 0x52, 0x80, 0x00, // /* code=20, hex=0x14, ascii="^T" */ - // 0x03, 0x25, 0x06, 0x49, 0x82, 0x93, 0x00, 0x00, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x80, 0x00, // /* code=22, hex=0x16, ascii="^V" */ - // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x3E, 0x00, // /* code=23, hex=0x17, ascii="^W" */ - // 0x01, 0x1D, 0x52, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x08, 0x42, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x00, 0x82, 0x78, 0x88, 0x00, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x00, 0x44, 0x79, 0x04, 0x00, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x00, 0x42, 0x1E, 0x00, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x00, 0xA5, 0x7D, 0x4A, 0x00, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x00, 0x42, 0x39, 0xDF, 0x00, 0x00, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x01, 0xF7, 0x38, 0x84, 0x00, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x01, 0x08, 0x42, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x52, 0x94, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x02, 0x95, 0xF5, 0x2B, 0xEA, 0x50, 0x00, 0x00, /* code=35, hex=0x23, ascii="#" */ - 0x02, 0x19, 0x28, 0x20, 0x82, 0x93, 0x08, 0x00, /* code=36, hex=0x24, ascii="$" */ - 0x06, 0xB4, 0x42, 0x21, 0x08, 0xB5, 0x80, 0x00, /* code=37, hex=0x25, ascii="%" */ - 0x02, 0x29, 0x4A, 0x22, 0xB2, 0x93, 0x40, 0x00, /* code=38, hex=0x26, ascii="&" */ - 0x31, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x01, 0x10, 0x84, 0x21, 0x08, 0x41, 0x00, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x02, 0x08, 0x42, 0x10, 0x84, 0x22, 0x00, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x09, 0x57, 0x3A, 0xA4, 0x00, 0x00, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x00, 0x42, 0x7C, 0x84, 0x00, 0x00, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x08, 0x80, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x84, 0x42, 0x21, 0x08, 0x84, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x03, 0xA5, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=48, hex=0x30, ascii="0" */ - 0x01, 0x19, 0x42, 0x10, 0x84, 0x27, 0x80, 0x00, /* code=49, hex=0x31, ascii="1" */ - 0x03, 0x25, 0x21, 0x11, 0x10, 0x87, 0x80, 0x00, /* code=50, hex=0x32, ascii="2" */ - 0x03, 0x24, 0x21, 0x30, 0x42, 0x93, 0x00, 0x00, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x8C, 0xA5, 0x4B, 0xC2, 0x10, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x07, 0xA1, 0x08, 0x70, 0x42, 0x93, 0x00, 0x00, /* code=53, hex=0x35, ascii="5" */ - 0x01, 0x91, 0x0E, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=54, hex=0x36, ascii="6" */ - 0x07, 0x84, 0x21, 0x10, 0x88, 0x42, 0x00, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x03, 0x25, 0x29, 0x32, 0x52, 0x93, 0x00, 0x00, /* code=56, hex=0x38, ascii="8" */ - 0x03, 0x25, 0x29, 0x49, 0xC2, 0x26, 0x00, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x00, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x08, 0x80, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x04, 0x44, 0x42, 0x08, 0x20, 0x80, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x00, 0x00, 0x78, 0x1E, 0x00, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x20, 0x82, 0x08, 0x44, 0x44, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x03, 0x25, 0x21, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x03, 0x25, 0x29, 0x5A, 0xD0, 0x83, 0x80, 0x00, /* code=64, hex=0x40, ascii="@" */ - 0x03, 0x25, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=65, hex=0x41, ascii="A" */ - 0x07, 0x25, 0x29, 0x72, 0x52, 0x97, 0x00, 0x00, /* code=66, hex=0x42, ascii="B" */ - 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x00, 0x00, /* code=67, hex=0x43, ascii="C" */ - 0x07, 0x25, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=68, hex=0x44, ascii="D" */ - 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x87, 0x80, 0x00, /* code=69, hex=0x45, ascii="E" */ - 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x84, 0x00, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x03, 0x25, 0x28, 0x42, 0xD2, 0x93, 0x00, 0x00, /* code=71, hex=0x47, ascii="G" */ - 0x04, 0xA5, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=72, hex=0x48, ascii="H" */ - 0x03, 0x88, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=73, hex=0x49, ascii="I" */ - 0x03, 0x88, 0x42, 0x10, 0x94, 0xA2, 0x00, 0x00, /* code=74, hex=0x4A, ascii="J" */ - 0x04, 0xA5, 0x4A, 0x62, 0x94, 0x94, 0x80, 0x00, /* code=75, hex=0x4B, ascii="K" */ - 0x04, 0x21, 0x08, 0x42, 0x10, 0x87, 0x80, 0x00, /* code=76, hex=0x4C, ascii="L" */ - 0x04, 0xA5, 0xEF, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=77, hex=0x4D, ascii="M" */ - 0x04, 0xA5, 0xAD, 0x5A, 0xD2, 0x94, 0x80, 0x00, /* code=78, hex=0x4E, ascii="N" */ - 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=79, hex=0x4F, ascii="O" */ - 0x07, 0x25, 0x29, 0x72, 0x10, 0x84, 0x00, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x08, 0x20, /* code=81, hex=0x51, ascii="Q" */ - 0x07, 0x25, 0x29, 0x73, 0x14, 0x94, 0x80, 0x00, /* code=82, hex=0x52, ascii="R" */ - 0x03, 0x25, 0x28, 0x30, 0x52, 0x93, 0x00, 0x00, /* code=83, hex=0x53, ascii="S" */ - 0x07, 0xC8, 0x42, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x04, 0xA5, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=85, hex=0x55, ascii="U" */ - 0x04, 0xA5, 0x29, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x04, 0xA5, 0x29, 0x4A, 0x5E, 0x94, 0x80, 0x00, /* code=87, hex=0x57, ascii="W" */ - 0x04, 0xA5, 0x26, 0x31, 0x92, 0x94, 0x80, 0x00, /* code=88, hex=0x58, ascii="X" */ - 0x04, 0x63, 0x15, 0x28, 0x84, 0x21, 0x00, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x07, 0x84, 0x42, 0x21, 0x10, 0x87, 0x80, 0x00, /* code=90, hex=0x5A, ascii="Z" */ - 0x03, 0x10, 0x84, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=91, hex=0x5B, ascii="[" */ - 0x04, 0x20, 0x84, 0x10, 0x84, 0x10, 0x80, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x00, 0x00, /* code=93, hex=0x5D, ascii="]" */ - 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, /* code=95, hex=0x5F, ascii="_" */ - 0x63, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x00, 0x06, 0x09, 0xD2, 0x93, 0x80, 0x00, /* code=97, hex=0x61, ascii="a" */ - 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x80, 0x00, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x84, 0x27, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x00, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, /* code=101, hex=0x65, ascii="e" */ - 0x01, 0x10, 0x8E, 0x21, 0x08, 0x42, 0x00, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0xC0, /* code=103, hex=0x67, ascii="g" */ - 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=104, hex=0x68, ascii="h" */ - 0x00, 0x08, 0x02, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x28, 0x80, /* code=106, hex=0x6A, ascii="j" */ - 0x04, 0x21, 0x09, 0x53, 0x18, 0xA4, 0x80, 0x00, /* code=107, hex=0x6B, ascii="k" */ - 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x00, 0x09, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x00, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x00, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x00, 0x0E, 0x4A, 0x52, 0x97, 0x21, 0x00, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0x20, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x00, 0x0B, 0x29, 0x08, 0x42, 0x00, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x00, 0x06, 0x49, 0x04, 0x93, 0x00, 0x00, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x10, 0x8E, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x00, 0x09, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x00, 0x09, 0x4A, 0x52, 0xF4, 0x80, 0x00, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x00, 0x09, 0x49, 0x8C, 0x94, 0x80, 0x00, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x00, 0x0F, 0x08, 0x88, 0x87, 0x80, 0x00, /* code=122, hex=0x7A, ascii="z" */ - 0x01, 0x10, 0x84, 0x41, 0x08, 0x41, 0x00, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x21, 0x08, 0x40, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x02, 0x08, 0x42, 0x08, 0x84, 0x22, 0x00, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x02, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x01, 0x08, 0xA5, 0x46, 0x31, 0x8F, 0xC0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x08, 0x80, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x01, 0x90, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x03, 0x24, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x00, 0x14, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x06, 0x08, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x01, 0x14, 0x46, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x89, 0x80, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x03, 0x24, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x00, 0x14, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x06, 0x08, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x00, 0x14, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x03, 0x24, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x03, 0x04, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x50, 0x19, 0x29, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x22, 0x88, 0xC9, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x32, 0x01, 0xE8, 0x43, 0xD0, 0x87, 0x80, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x00, 0x07, 0x14, 0xAE, 0xA2, 0x80, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x1D, 0xCA, 0x53, 0xD4, 0xA5, 0x80, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x03, 0x24, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x00, 0x14, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x03, 0x04, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x03, 0x24, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x06, 0x08, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x50, 0x19, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x50, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x00, 0x47, 0x46, 0x11, 0x71, 0x00, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x01, 0x14, 0x84, 0x71, 0x08, 0xD7, 0x80, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x04, 0x54, 0xAF, 0x93, 0xE4, 0x21, 0x00, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x07, 0x25, 0x2E, 0x4A, 0xF2, 0x94, 0x80, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x11, 0x08, 0x42, 0x38, 0x84, 0x21, 0x28, 0x80, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x01, 0x90, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=160, hex=0xA0, ascii="! " */ - // 0x01, 0x90, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x01, 0x90, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x01, 0x90, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x02, 0xA8, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x55, 0x01, 0x2D, 0x7A, 0xD2, 0x94, 0x80, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x03, 0x04, 0xE9, 0x38, 0x1E, 0x00, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x03, 0x25, 0x29, 0x30, 0x1E, 0x00, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x02, 0x10, 0x04, 0x22, 0x10, 0x93, 0x00, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x00, 0x03, 0xD0, 0x80, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x00, 0x03, 0xC2, 0x10, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x02, 0x14, 0xA2, 0x21, 0xD2, 0xA1, 0x80, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x02, 0x14, 0xA2, 0x21, 0x56, 0xB0, 0x80, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x00, 0xA5, 0x52, 0x8A, 0x50, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x01, 0x4A, 0x29, 0x54, 0xA0, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x00, 0x2A, 0x00, 0x28, 0x00, 0xA8, 0x00, 0xA0, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x02, 0x81, 0x50, 0x28, 0x15, 0x02, 0x81, 0x50, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x21, 0x08, 0x42, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x21, 0x08, 0x4E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x52, 0x94, 0xA5, 0x69, 0x4A, 0x52, 0x94, 0xA0, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0x00, 0x79, 0x4A, 0x52, 0x94, 0xA0, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x00, 0x0E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x52, 0x94, 0xAD, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x52, 0x94, 0xA5, 0x29, 0x4A, 0x52, 0x94, 0xA0, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x00, 0x0F, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x52, 0x94, 0xAD, 0x0B, 0xC0, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x52, 0x94, 0xA5, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x21, 0x08, 0x4E, 0x13, 0x80, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0x00, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x21, 0x08, 0x42, 0x1C, 0x00, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x21, 0x08, 0x42, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0x00, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x21, 0x08, 0x42, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x21, 0x08, 0x42, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x21, 0x08, 0x43, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x52, 0x94, 0xA5, 0x2D, 0x4A, 0x52, 0x94, 0xA0, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x52, 0x94, 0xA5, 0xA1, 0xE0, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x00, 0x07, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x52, 0x94, 0xAD, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x00, 0x0F, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x52, 0x94, 0xA5, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x52, 0x94, 0xAD, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x21, 0x08, 0x4F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x52, 0x94, 0xA5, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x00, 0x0F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x94, 0xA0, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x52, 0x94, 0xA5, 0x3C, 0x00, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x21, 0x08, 0x43, 0x90, 0xE0, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x00, 0x03, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x00, 0x3D, 0x4A, 0x52, 0x94, 0xA0, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x52, 0x94, 0xA5, 0x6D, 0x4A, 0x52, 0x94, 0xA0, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x21, 0x08, 0x4F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x21, 0x08, 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x00, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=220, hex=0xDC, ascii="!\" */ - // 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xC0, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, // /* code=222, hex=0xDE, ascii="!^" */ - // 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x00, 0x9B, 0x52, 0x96, 0x48, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x03, 0x25, 0x2A, 0x72, 0x52, 0x97, 0x21, 0x00, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x00, 0x1E, 0x94, 0x21, 0x08, 0x42, 0x00, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x80, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x00, 0x01, 0xF4, 0x90, 0x44, 0x4F, 0xC0, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x00, 0x0F, 0xD2, 0x94, 0x40, 0x00, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x00, 0x09, 0x4A, 0x52, 0x97, 0x21, 0x00, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x00, 0x00, 0x2A, 0x84, 0x21, 0x00, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x00, 0x00, 0x07, 0x11, 0x4A, 0x23, 0x80, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x00, 0x45, 0x47, 0xF1, 0x51, 0x00, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x00, 0x45, 0x46, 0x2A, 0x56, 0xC0, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x00, 0x0C, 0x84, 0x11, 0xD2, 0x93, 0x00, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x00, 0x05, 0x56, 0xAA, 0x00, 0x00, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x08, 0x47, 0x56, 0xAE, 0x21, 0x00, 0x00, // /* code=237, hex=0xED, ascii="!m" */ - // 0x00, 0x00, 0xE8, 0x43, 0x90, 0x83, 0x80, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0x00, 0xC9, 0x4A, 0x52, 0x90, 0x00, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0x01, 0xE0, 0x78, 0x1E, 0x00, 0x00, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x00, 0x42, 0x7C, 0x84, 0x07, 0xC0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x04, 0x10, 0x41, 0x11, 0x10, 0x07, 0x80, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x88, 0x88, 0x20, 0x82, 0x07, 0x80, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x04, 0x52, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x21, 0x08, 0x42, 0x10, 0x84, 0xA2, 0x00, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x08, 0x40, 0x7C, 0x04, 0x20, 0x00, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x00, 0x05, 0x50, 0x0A, 0xA0, 0x00, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x64, 0xA4, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0x02, 0x38, 0x80, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x01, 0xC8, 0x42, 0x12, 0x94, 0x61, 0x00, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0xA6, 0xA5, 0x29, 0x48, 0x00, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x64, 0x84, 0xC8, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x00, 0xE7, 0x39, 0xCE, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x34, 0x46, 0x44, 0x65, 0x43, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x37, 0x75, 0x77, 0x56, 0x73, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x02, 0x67, 0x77, 0x73, 0x31, 0x10, // /* code=3, hex=0x03, ascii="^C" */ + // 0x11, 0x33, 0x77, 0x73, 0x31, 0x10, // /* code=4, hex=0x04, ascii="^D" */ + // 0x13, 0x33, 0x17, 0x73, 0x13, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x11, 0x33, 0x77, 0x73, 0x13, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x77, 0x77, 0x74, 0x47, 0x77, 0x77, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x32, 0x23, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x77, 0x77, 0x45, 0x54, 0x77, 0x77, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x10, 0x13, 0x44, 0x43, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x03, 0x44, 0x43, 0x22, 0x72, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x11, 0x11, 0x11, 0x76, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x12, 0x32, 0x22, 0x33, 0x66, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x53, 0x43, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x46, 0x77, 0x76, 0x40, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x01, 0x37, 0x31, 0x00, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x01, 0x35, 0x11, 0x15, 0x31, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x22, 0x22, 0x20, 0x22, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x03, 0x66, 0x66, 0x22, 0x22, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x03, 0x44, 0x34, 0x30, 0x43, 0x00, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x01, 0x35, 0x11, 0x15, 0x31, 0x70, // /* code=23, hex=0x17, ascii="^W" */ + // 0x01, 0x35, 0x11, 0x11, 0x11, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x11, 0x11, 0x15, 0x31, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x02, 0x17, 0x12, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x01, 0x27, 0x21, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x02, 0x27, 0x22, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x01, 0x13, 0x37, 0x00, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x07, 0x33, 0x11, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x01, 0x11, 0x11, 0x10, 0x11, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x02, 0x27, 0x22, 0x72, 0x20, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x02, 0x34, 0x42, 0x10, 0x43, 0x10, /* code=36, hex=0x24, ascii="$" */ + 0x06, 0x61, 0x12, 0x22, 0x55, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x02, 0x55, 0x52, 0x54, 0x43, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x01, 0x22, 0x22, 0x22, 0x21, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x02, 0x11, 0x11, 0x11, 0x12, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x15, 0x33, 0x51, 0x00, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x01, 0x17, 0x11, 0x00, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x01, 0x12, 0x22, 0x44, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x03, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x01, 0x35, 0x11, 0x11, 0x17, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x03, 0x44, 0x01, 0x24, 0x47, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x03, 0x40, 0x03, 0x00, 0x43, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x12, 0x24, 0x70, 0x00, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x07, 0x44, 0x47, 0x00, 0x43, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x01, 0x24, 0x74, 0x44, 0x43, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x07, 0x00, 0x01, 0x12, 0x22, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x03, 0x44, 0x43, 0x44, 0x43, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x03, 0x44, 0x44, 0x30, 0x16, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x33, 0x00, 0x33, 0x12, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x01, 0x24, 0x42, 0x10, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x42, 0x10, 0x01, 0x24, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x03, 0x44, 0x01, 0x10, 0x11, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x03, 0x44, 0x45, 0x54, 0x43, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x03, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x07, 0x44, 0x47, 0x44, 0x47, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x03, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x07, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x07, 0x44, 0x47, 0x44, 0x47, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x07, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x03, 0x44, 0x44, 0x54, 0x43, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x04, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x03, 0x11, 0x11, 0x15, 0x52, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x04, 0x45, 0x56, 0x55, 0x44, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x04, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x04, 0x47, 0x74, 0x44, 0x44, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x04, 0x46, 0x65, 0x54, 0x44, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x03, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x07, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x03, 0x44, 0x44, 0x44, 0x43, 0x10, /* code=81, hex=0x51, ascii="Q" */ + 0x07, 0x44, 0x47, 0x65, 0x44, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x03, 0x44, 0x43, 0x04, 0x43, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x07, 0x11, 0x11, 0x11, 0x11, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x04, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x04, 0x44, 0x44, 0x22, 0x11, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x04, 0x44, 0x44, 0x47, 0x44, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x04, 0x44, 0x33, 0x34, 0x44, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x04, 0x44, 0x22, 0x11, 0x11, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x07, 0x01, 0x12, 0x24, 0x47, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x03, 0x22, 0x22, 0x22, 0x23, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x04, 0x42, 0x21, 0x11, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* code=95, hex=0x5F, ascii="_" */ + 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x30, 0x34, 0x43, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x44, 0x74, 0x44, 0x47, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x34, 0x47, 0x43, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x01, 0x22, 0x72, 0x22, 0x22, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x34, 0x44, 0x43, 0x03, /* code=103, hex=0x67, ascii="g" */ + 0x04, 0x44, 0x74, 0x44, 0x44, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x00, 0x10, 0x11, 0x11, 0x13, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x10, 0x11, 0x11, 0x11, 0x52, /* code=106, hex=0x6A, ascii="j" */ + 0x04, 0x44, 0x45, 0x66, 0x54, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x47, 0x44, 0x44, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x56, 0x44, 0x44, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x74, 0x44, 0x47, 0x44, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x52, 0x22, 0x22, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x34, 0x21, 0x43, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x22, 0x72, 0x22, 0x23, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x44, 0x44, 0x43, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x44, 0x22, 0x11, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x44, 0x44, 0x74, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x44, 0x33, 0x44, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x44, 0x44, 0x43, 0x07, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x70, 0x12, 0x47, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x01, 0x22, 0x24, 0x22, 0x21, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x11, 0x11, 0x01, 0x11, 0x11, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x11, 0x10, 0x11, 0x12, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x01, 0x12, 0x24, 0x44, 0x47, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x03, 0x44, 0x44, 0x44, 0x43, 0x12, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x00, 0x20, 0x44, 0x44, 0x43, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x01, 0x20, 0x34, 0x47, 0x43, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x03, 0x40, 0x34, 0x03, 0x43, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x00, 0x20, 0x34, 0x03, 0x43, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x06, 0x10, 0x34, 0x03, 0x43, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x21, 0x34, 0x03, 0x43, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x34, 0x44, 0x43, 0x16, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x03, 0x40, 0x34, 0x47, 0x43, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x00, 0x20, 0x34, 0x47, 0x43, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x06, 0x10, 0x34, 0x47, 0x43, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x00, 0x20, 0x31, 0x11, 0x13, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x03, 0x40, 0x31, 0x11, 0x13, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x03, 0x00, 0x31, 0x11, 0x13, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x20, 0x34, 0x44, 0x74, 0x44, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x12, 0x13, 0x44, 0x74, 0x44, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x12, 0x07, 0x44, 0x74, 0x47, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x31, 0x13, 0x52, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x37, 0x55, 0x75, 0x55, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x03, 0x40, 0x34, 0x44, 0x43, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x00, 0x20, 0x34, 0x44, 0x43, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x03, 0x00, 0x34, 0x44, 0x43, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x03, 0x40, 0x44, 0x44, 0x43, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x06, 0x10, 0x44, 0x44, 0x43, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x00, 0x20, 0x44, 0x44, 0x43, 0x07, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x20, 0x34, 0x44, 0x44, 0x43, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x20, 0x44, 0x44, 0x44, 0x43, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x01, 0x34, 0x44, 0x31, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x22, 0x27, 0x22, 0x67, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x04, 0x22, 0x71, 0x71, 0x11, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x07, 0x44, 0x74, 0x54, 0x44, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x01, 0x11, 0x13, 0x11, 0x11, 0x52, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x01, 0x20, 0x34, 0x03, 0x43, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x01, 0x20, 0x31, 0x11, 0x13, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x01, 0x20, 0x34, 0x44, 0x43, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x01, 0x20, 0x44, 0x44, 0x43, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x02, 0x50, 0x56, 0x44, 0x44, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x25, 0x04, 0x67, 0x54, 0x44, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x03, 0x03, 0x43, 0x07, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x03, 0x44, 0x43, 0x07, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x02, 0x20, 0x22, 0x44, 0x43, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x02, 0x22, 0x12, 0x34, 0x51, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x02, 0x22, 0x12, 0x25, 0x50, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x10, 0x11, 0x11, 0x11, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x02, 0x25, 0x52, 0x20, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x05, 0x52, 0x25, 0x50, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x00, 0x50, 0x02, 0x00, 0x50, 0x02, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x11, 0x11, 0x17, 0x11, 0x11, 0x11, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x11, 0x11, 0x71, 0x71, 0x11, 0x11, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x22, 0x22, 0x26, 0x22, 0x22, 0x22, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x07, 0x22, 0x22, 0x22, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x71, 0x71, 0x11, 0x11, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x22, 0x22, 0x60, 0x62, 0x22, 0x22, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x70, 0x62, 0x22, 0x22, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x22, 0x22, 0x60, 0x70, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x22, 0x22, 0x27, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x11, 0x11, 0x71, 0x70, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x07, 0x11, 0x11, 0x11, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x07, 0x11, 0x11, 0x11, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x11, 0x11, 0x17, 0x11, 0x11, 0x11, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x22, 0x22, 0x22, 0x30, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x32, 0x22, 0x22, 0x22, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x22, 0x22, 0x60, 0x70, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x70, 0x62, 0x22, 0x22, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x22, 0x22, 0x60, 0x62, 0x22, 0x22, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x11, 0x11, 0x70, 0x70, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x22, 0x22, 0x27, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x70, 0x71, 0x11, 0x11, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x07, 0x22, 0x22, 0x22, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x22, 0x22, 0x23, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x03, 0x22, 0x22, 0x22, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x22, 0x22, 0x26, 0x22, 0x22, 0x22, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x11, 0x11, 0x70, 0x71, 0x11, 0x11, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, // /* code=220, hex=0xDC, ascii="!\" */ + // 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=222, hex=0xDE, ascii="!^" */ + // 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x02, 0x55, 0x55, 0x20, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x44, 0x57, 0x44, 0x47, 0x44, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0x32, 0x22, 0x22, 0x22, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x00, 0x07, 0x22, 0x22, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x00, 0x07, 0x21, 0x01, 0x27, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x75, 0x55, 0x20, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x44, 0x44, 0x47, 0x44, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x00, 0x02, 0x51, 0x11, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x00, 0x00, 0x31, 0x22, 0x13, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x01, 0x24, 0x74, 0x21, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x01, 0x24, 0x42, 0x26, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x12, 0x21, 0x34, 0x43, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x25, 0x52, 0x00, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x11, 0x35, 0x53, 0x11, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0x03, 0x44, 0x74, 0x43, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x03, 0x44, 0x44, 0x40, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x01, 0x17, 0x11, 0x07, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x04, 0x21, 0x01, 0x24, 0x07, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x12, 0x42, 0x10, 0x07, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x11, 0x11, 0x11, 0x11, 0x52, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x11, 0x07, 0x01, 0x10, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x25, 0x02, 0x50, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x34, 0x43, 0x00, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x13, 0x10, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x01, 0x11, 0x11, 0x55, 0x31, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x56, 0x44, 0x44, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x34, 0x03, 0x47, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x03, 0x33, 0x33, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_5x8.h b/wled00/src/font/console_font_5x8.h index f2194a1f4e..4f503f2500 100644 --- a/wled00/src/font/console_font_5x8.h +++ b/wled00/src/font/console_font_5x8.h @@ -1,19 +1,20 @@ -// font courtesy of https://github.com/idispatch/raster-fonts - // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts /* * WBF (WLED Bitmap Font) Packed Fixed-Width Format - * Header Layout (10 Bytes): - * [0] Magic 'W' (0x57) - * [1] Glyph height: 8 - * [2] Fixed/max glyph width: 5 - * [3] Flags: 0x00 (fixed width) - * [4] First Char: 32 - * [5] Last Char: 126 - * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 - * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed/max glyph width: 4 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -34,266 +35,266 @@ * [Byte 1] [Byte 2] [Byte 3] * Final HEX for '!' = 0x22, 0x20, 0x20 * - * at the end of the stream, padding bits are added if necessary to fill the last byte + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ static const unsigned char console_font_5x8[] PROGMEM = { - 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + 0x57, 0x08, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x00, 0x1D, 0x5F, 0xED, 0xC0, // /* code=1, hex=0x01, ascii="^A" */ - // 0x00, 0x1D, 0x5F, 0xFD, 0xC0, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0x15, 0xFF, 0xB8, 0x80, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x08, 0xEF, 0xB8, 0x80, // /* code=4, hex=0x04, ascii="^D" */ - // 0x00, 0x1D, 0x5F, 0x90, 0x80, // /* code=5, hex=0x05, ascii="^E" */ - // 0x00, 0x08, 0xEF, 0xD4, 0x80, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x47, 0x10, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x0E, 0x36, 0xD1, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x00, 0x08, 0xA2, 0x38, 0x80, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x08, 0xA4, 0x62, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0x0E, 0x95, 0xEA, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x10, 0xC7, 0x31, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x04, 0x67, 0x18, 0x40, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x00, 0x08, 0xE2, 0x38, 0x80, // /* code=18, hex=0x12, ascii="^R" */ - // 0x00, 0x14, 0xA5, 0x01, 0x40, // /* code=19, hex=0x13, ascii="^S" */ - // 0x00, 0x1F, 0xAD, 0x29, 0x4A, // /* code=20, hex=0x14, ascii="^T" */ - // 0x00, 0x06, 0xC9, 0x24, 0xD8, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x7F, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ - // 0x00, 0x08, 0xE2, 0x38, 0x8E, // /* code=23, hex=0x17, ascii="^W" */ - // 0x00, 0x08, 0xE2, 0x10, 0x80, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x08, 0x42, 0x38, 0x80, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x00, 0x2F, 0x88, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x00, 0x8F, 0xA0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x08, 0x7C, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x00, 0xAF, 0xA8, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x00, 0x02, 0x3B, 0xE0, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x00, 0x0F, 0xB8, 0x80, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x00, 0x08, 0x42, 0x00, 0x80, /* code=33, hex=0x21, ascii="!" */ - 0x00, 0x14, 0xA0, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0x15, 0xF5, 0x7D, 0x40, /* code=35, hex=0x23, ascii="#" */ - 0x00, 0x08, 0x64, 0x19, 0x84, /* code=36, hex=0x24, ascii="$" */ - 0x02, 0x2A, 0xA3, 0x36, 0x40, /* code=37, hex=0x25, ascii="%" */ - 0x00, 0x0C, 0x86, 0xC9, 0xA0, /* code=38, hex=0x26, ascii="&" */ - 0x01, 0x08, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x00, 0x08, 0x84, 0x20, 0x80, /* code=40, hex=0x28, ascii="(" */ - 0x00, 0x10, 0x42, 0x11, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x14, 0x47, 0x11, 0x40, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x00, 0x47, 0x10, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0x88, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x01, 0xE0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0x80, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x04, 0x42, 0x21, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x00, 0x19, 0x29, 0x49, 0x80, /* code=48, hex=0x30, ascii="0" */ - 0x00, 0x08, 0xC2, 0x10, 0x80, /* code=49, hex=0x31, ascii="1" */ - 0x00, 0x19, 0x22, 0x23, 0xC0, /* code=50, hex=0x32, ascii="2" */ - 0x00, 0x38, 0x26, 0x0B, 0x80, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x04, 0x65, 0x78, 0x40, /* code=52, hex=0x34, ascii="4" */ - 0x00, 0x3D, 0x0E, 0x0B, 0x80, /* code=53, hex=0x35, ascii="5" */ - 0x00, 0x19, 0x0E, 0x49, 0x80, /* code=54, hex=0x36, ascii="6" */ - 0x00, 0x3C, 0x22, 0x21, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x00, 0x19, 0x26, 0x49, 0x80, /* code=56, hex=0x38, ascii="8" */ - 0x00, 0x19, 0x27, 0x09, 0x80, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0x02, 0x00, 0x80, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x00, 0x02, 0x00, 0x88, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x04, 0x44, 0x10, 0x40, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x00, 0xE0, 0x38, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x10, 0x41, 0x11, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x00, 0x18, 0x26, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x00, 0x1D, 0x1B, 0x41, 0xC0, /* code=64, hex=0x40, ascii="@" */ - 0x00, 0x19, 0x2F, 0x4A, 0x40, /* code=65, hex=0x41, ascii="A" */ - 0x00, 0x39, 0x2E, 0x4B, 0x80, /* code=66, hex=0x42, ascii="B" */ - 0x00, 0x1D, 0x08, 0x41, 0xC0, /* code=67, hex=0x43, ascii="C" */ - 0x00, 0x39, 0x29, 0x4B, 0x80, /* code=68, hex=0x44, ascii="D" */ - 0x00, 0x3D, 0x0E, 0x43, 0xC0, /* code=69, hex=0x45, ascii="E" */ - 0x00, 0x3D, 0x0E, 0x42, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x00, 0x19, 0x28, 0x49, 0xC0, /* code=71, hex=0x47, ascii="G" */ - 0x00, 0x25, 0x2F, 0x4A, 0x40, /* code=72, hex=0x48, ascii="H" */ - 0x00, 0x1C, 0x42, 0x11, 0xC0, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x04, 0x29, 0x49, 0x80, /* code=74, hex=0x4A, ascii="J" */ - 0x00, 0x25, 0x4C, 0x52, 0x40, /* code=75, hex=0x4B, ascii="K" */ - 0x00, 0x21, 0x08, 0x43, 0xC0, /* code=76, hex=0x4C, ascii="L" */ - 0x00, 0x25, 0xE9, 0x4A, 0x40, /* code=77, hex=0x4D, ascii="M" */ - 0x00, 0x25, 0xAB, 0x4A, 0x40, /* code=78, hex=0x4E, ascii="N" */ - 0x00, 0x19, 0x29, 0x49, 0x80, /* code=79, hex=0x4F, ascii="O" */ - 0x00, 0x39, 0x2E, 0x42, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x00, 0x19, 0x29, 0x49, 0x82, /* code=81, hex=0x51, ascii="Q" */ - 0x00, 0x39, 0x2E, 0x4A, 0x40, /* code=82, hex=0x52, ascii="R" */ - 0x00, 0x1D, 0x06, 0x0B, 0x80, /* code=83, hex=0x53, ascii="S" */ - 0x00, 0x3E, 0x42, 0x10, 0x80, /* code=84, hex=0x54, ascii="T" */ - 0x00, 0x25, 0x29, 0x49, 0x80, /* code=85, hex=0x55, ascii="U" */ - 0x00, 0x25, 0x29, 0x31, 0x80, /* code=86, hex=0x56, ascii="V" */ - 0x00, 0x23, 0x5A, 0xA9, 0x40, /* code=87, hex=0x57, ascii="W" */ - 0x00, 0x25, 0x26, 0x2A, 0x40, /* code=88, hex=0x58, ascii="X" */ - 0x00, 0x14, 0xA5, 0x10, 0x80, /* code=89, hex=0x59, ascii="Y" */ - 0x00, 0x3C, 0x44, 0x43, 0xC0, /* code=90, hex=0x5A, ascii="Z" */ - 0x00, 0x18, 0x84, 0x21, 0x80, /* code=91, hex=0x5B, ascii="[" */ - 0x00, 0x10, 0x82, 0x10, 0x40, /* code=92, hex=0x5C, ascii="\" */ - 0x00, 0x18, 0x42, 0x11, 0x80, /* code=93, hex=0x5D, ascii="]" */ - 0x00, 0x08, 0xA0, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x1F, /* code=95, hex=0x5F, ascii="_" */ - 0x00, 0x10, 0x40, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x00, 0xC1, 0x39, 0x40, /* code=97, hex=0x61, ascii="a" */ - 0x04, 0x21, 0xC9, 0x4B, 0x80, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x00, 0x64, 0x20, 0xC0, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x04, 0xE9, 0x49, 0xC0, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x00, 0xCF, 0x41, 0xC0, /* code=101, hex=0x65, ascii="e" */ - 0x00, 0x0C, 0x8E, 0x21, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x00, 0xE9, 0x38, 0x4C, /* code=103, hex=0x67, ascii="g" */ - 0x00, 0x21, 0xC9, 0x4A, 0x40, /* code=104, hex=0x68, ascii="h" */ - 0x01, 0x00, 0xC2, 0x11, 0xC0, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x80, 0x21, 0x08, 0x4C, /* code=106, hex=0x6A, ascii="j" */ - 0x00, 0x21, 0x4C, 0x52, 0x40, /* code=107, hex=0x6B, ascii="k" */ - 0x03, 0x08, 0x42, 0x11, 0xC0, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x01, 0x2F, 0x4A, 0x40, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x01, 0xC9, 0x4A, 0x40, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x00, 0xC9, 0x49, 0x80, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x01, 0xC9, 0x4B, 0x90, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x00, 0xE9, 0x49, 0xC2, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x00, 0xA6, 0x21, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x00, 0xEC, 0x1B, 0x80, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x11, 0xE4, 0x20, 0xC0, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x01, 0x29, 0x49, 0xC0, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x01, 0x29, 0x31, 0x80, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x01, 0x29, 0x7A, 0x40, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x01, 0x26, 0x32, 0x40, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x01, 0x29, 0x38, 0x4C, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x01, 0xE2, 0x23, 0xC0, /* code=122, hex=0x7A, ascii="z" */ - 0x00, 0x88, 0x84, 0x10, 0x40, /* code=123, hex=0x7B, ascii="{" */ - 0x01, 0x08, 0x42, 0x10, 0x80, /* code=124, hex=0x7C, ascii="|" */ - 0x02, 0x08, 0x21, 0x11, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x00, 0x00, 0xAA, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x00, 0x00, 0x45, 0x47, 0xE0, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x00, 0x1D, 0x08, 0x41, 0xC4, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x02, 0x81, 0x29, 0x49, 0xC0, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x11, 0x00, 0xCF, 0x41, 0xC0, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x22, 0x81, 0x82, 0x51, 0x40, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x02, 0x81, 0x82, 0x32, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x41, 0x01, 0x82, 0x32, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x01, 0x01, 0x82, 0x32, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x00, 0x64, 0x20, 0xC4, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x22, 0x80, 0xCF, 0x41, 0xC0, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x02, 0x80, 0xCF, 0x41, 0xC0, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x41, 0x00, 0xCF, 0x41, 0xC0, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x02, 0x80, 0xC2, 0x11, 0xC0, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x22, 0x80, 0xC2, 0x11, 0xC0, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x41, 0x00, 0xC2, 0x11, 0xC0, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0xA0, 0x19, 0x2F, 0x4A, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x20, 0x19, 0x2F, 0x4A, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x11, 0x3D, 0x0E, 0x43, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x01, 0xB7, 0xF2, 0xE0, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x1D, 0x4F, 0x52, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x22, 0x80, 0xC9, 0x49, 0x80, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x41, 0x00, 0xC9, 0x49, 0x80, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x22, 0x81, 0x29, 0x49, 0xC0, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x41, 0x01, 0x29, 0x49, 0xC0, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x02, 0x81, 0x29, 0x38, 0x4C, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x50, 0x25, 0x29, 0x49, 0x80, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x08, 0xE8, 0x41, 0xC4, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x01, 0x94, 0x8E, 0x23, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x06, 0xD4, 0xA2, 0x38, 0x80, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x06, 0x29, 0x6F, 0xCA, 0x20, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x01, 0x90, 0x8F, 0x21, 0x10, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x22, 0x01, 0x82, 0x32, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ - // 0x11, 0x00, 0xC2, 0x11, 0xC0, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x11, 0x00, 0xC9, 0x49, 0x80, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x11, 0x01, 0x29, 0x49, 0xC0, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x55, 0x01, 0xC9, 0x4A, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x55, 0x25, 0xAD, 0x5A, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x01, 0x14, 0x60, 0x38, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x01, 0x14, 0x40, 0x38, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x01, 0x00, 0x44, 0x49, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x00, 0x7E, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x00, 0x7C, 0x20, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x04, 0x25, 0x45, 0xC4, 0xE0, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x04, 0x65, 0x44, 0xCC, 0xE1, // /* code=172, hex=0xAC, ascii="!," */ - // 0x01, 0x00, 0x42, 0x38, 0x80, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x00, 0x05, 0x51, 0x40, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x00, 0x0A, 0x2A, 0x80, // /* code=175, hex=0xAF, ascii="!/" */ - // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=176, hex=0xB0, ascii="!0" */ - // 0xEA, 0xAE, 0xAE, 0xAA, 0xEA, // /* code=177, hex=0xB1, ascii="!1" */ - // 0xDB, 0xB6, 0xED, 0xBB, 0x6E, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x21, 0x08, 0x42, 0x10, 0x84, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x21, 0x09, 0xC2, 0x10, 0x84, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x21, 0x38, 0x4E, 0x10, 0x84, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x52, 0x95, 0xA5, 0x29, 0x4A, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x01, 0xE5, 0x29, 0x4A, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x38, 0x4E, 0x10, 0x84, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x52, 0xB4, 0x2D, 0x29, 0x4A, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x52, 0x94, 0xA5, 0x29, 0x4A, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x3C, 0x2D, 0x29, 0x4A, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x52, 0xB4, 0x2F, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x52, 0x95, 0xE0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x21, 0x38, 0x4E, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x01, 0xC2, 0x10, 0x84, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x21, 0x08, 0x70, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x21, 0x09, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x01, 0xF2, 0x10, 0x84, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x21, 0x08, 0x72, 0x10, 0x84, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x01, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x21, 0x09, 0xF2, 0x10, 0x84, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x21, 0x0E, 0x43, 0x90, 0x84, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x52, 0x94, 0xB5, 0x29, 0x4A, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x52, 0x96, 0x87, 0x80, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x1E, 0x85, 0xA9, 0x4A, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x52, 0xB6, 0x0F, 0x80, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x3E, 0x0D, 0xA9, 0x4A, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x52, 0x96, 0x85, 0xA9, 0x4A, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x3E, 0x0F, 0x80, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x52, 0xB6, 0x0D, 0xA9, 0x4A, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x21, 0x3E, 0x0F, 0x80, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x52, 0x95, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x3E, 0x0F, 0x90, 0x84, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x01, 0xF5, 0x29, 0x4A, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x52, 0x94, 0xF0, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x21, 0x0E, 0x43, 0x80, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x0E, 0x43, 0x90, 0x84, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0xF5, 0x29, 0x4A, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x52, 0x95, 0xF5, 0x29, 0x4A, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x21, 0x3E, 0x4F, 0x90, 0x84, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x21, 0x09, 0xC0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x72, 0x10, 0x84, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x0F, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ - // 0xE7, 0x39, 0xCE, 0x73, 0x9C, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x18, 0xC6, 0x31, 0x8C, 0x63, // /* code=222, hex=0xDE, ascii="!^" */ - // 0xFF, 0xFF, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x00, 0xD9, 0x49, 0xA0, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x03, 0x25, 0xE9, 0x4B, 0x90, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x03, 0x90, 0x84, 0x21, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x1C, 0xA5, 0x29, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x07, 0xD2, 0x44, 0x47, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x1F, 0x29, 0x49, 0x80, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x01, 0x29, 0x4B, 0xB0, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x04, 0xD4, 0x42, 0x10, 0x80, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x01, 0x08, 0xE8, 0xB8, 0x84, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x1D, 0x1F, 0xC5, 0xC0, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x1D, 0x18, 0xAB, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x64, 0x10, 0xC9, 0x49, 0x80, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x00, 0xEA, 0xD5, 0xC0, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x02, 0xEA, 0xA6, 0xC0, // /* code=237, hex=0xED, ascii="!m" */ - // 0x01, 0x90, 0xE4, 0x20, 0xC0, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x03, 0x25, 0x29, 0x4A, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0x3C, 0x0F, 0x03, 0xC0, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x09, 0xF2, 0x03, 0xE0, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x02, 0x08, 0x22, 0x23, 0xC0, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x88, 0x82, 0x09, 0xC0, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x06, 0x52, 0x10, 0x84, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x21, 0x08, 0x4A, 0x60, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x18, 0x0F, 0x01, 0x80, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x15, 0x40, 0x2A, 0x80, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x00, 0x08, 0xA2, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0xC6, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x40, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x00, 0x06, 0x22, 0x51, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x03, 0x14, 0xA0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x03, 0x04, 0x47, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x00, 0xE7, 0x38, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x00, 0x35, 0x76, 0x30, // /* code=1, hex=0x01, ascii="^A" */ + // 0x00, 0x35, 0x77, 0x30, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0x27, 0x73, 0x10, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x13, 0x73, 0x10, // /* code=4, hex=0x04, ascii="^D" */ + // 0x00, 0x35, 0x71, 0x10, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x13, 0x75, 0x10, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x01, 0x31, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x07, 0x76, 0x46, 0x77, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x01, 0x21, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x07, 0x76, 0x46, 0x77, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x10, 0x35, 0x20, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x00, 0x12, 0x13, 0x10, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x12, 0x26, 0x40, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x12, 0x26, 0x40, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x01, 0x21, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x23, 0x33, 0x20, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x01, 0x31, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x00, 0x13, 0x13, 0x10, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x22, 0x20, 0x20, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x36, 0x62, 0x22, // /* code=20, hex=0x14, ascii="^T" */ + // 0x00, 0x03, 0x42, 0x16, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x07, 0x70, // /* code=22, hex=0x16, ascii="^V" */ + // 0x00, 0x13, 0x13, 0x13, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x13, 0x11, 0x10, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x11, 0x13, 0x10, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x70, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x02, 0x72, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x47, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x02, 0x72, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x13, 0x70, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x73, 0x10, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x11, 0x10, 0x10, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0x22, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0x27, 0x27, 0x20, /* code=35, hex=0x23, ascii="#" */ + 0x00, 0x11, 0x21, 0x31, /* code=36, hex=0x24, ascii="$" */ + 0x02, 0x52, 0x13, 0x40, /* code=37, hex=0x25, ascii="%" */ + 0x00, 0x12, 0x34, 0x30, /* code=38, hex=0x26, ascii="&" */ + 0x01, 0x10, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x12, 0x22, 0x10, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x21, 0x11, 0x20, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x21, 0x31, 0x20, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x01, 0x31, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x12, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x07, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x10, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x01, 0x12, 0x20, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x34, 0x44, 0x30, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x13, 0x11, 0x10, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x34, 0x12, 0x70, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x70, 0x30, 0x70, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x01, 0x27, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0x74, 0x70, 0x70, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x34, 0x74, 0x30, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0x70, 0x12, 0x20, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x34, 0x34, 0x30, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x34, 0x30, 0x30, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x10, 0x10, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x10, 0x12, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x01, 0x21, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x03, 0x03, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x21, 0x01, 0x20, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x30, 0x30, 0x20, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x34, 0x54, 0x30, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x34, 0x74, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0x74, 0x74, 0x70, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x34, 0x44, 0x30, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0x74, 0x44, 0x70, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0x74, 0x74, 0x70, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0x74, 0x74, 0x40, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x34, 0x44, 0x30, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0x44, 0x74, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x31, 0x11, 0x30, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x00, 0x44, 0x30, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0x45, 0x65, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0x44, 0x44, 0x70, /* code=76, hex=0x4C, ascii="L" */ + 0x00, 0x47, 0x44, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0x46, 0x54, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x34, 0x44, 0x30, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0x74, 0x74, 0x40, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x34, 0x44, 0x30, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0x74, 0x74, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x34, 0x30, 0x70, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0x71, 0x11, 0x10, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0x44, 0x44, 0x30, /* code=85, hex=0x55, ascii="U" */ + 0x00, 0x44, 0x43, 0x30, /* code=86, hex=0x56, ascii="V" */ + 0x00, 0x45, 0x52, 0x20, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0x44, 0x32, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0x22, 0x21, 0x10, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0x71, 0x24, 0x70, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x32, 0x22, 0x30, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0x22, 0x11, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x31, 0x11, 0x30, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x12, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x07, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x21, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x03, 0x03, 0x20, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x47, 0x44, 0x70, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x01, 0x22, 0x10, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x03, 0x44, 0x30, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x03, 0x74, 0x30, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x12, 0x72, 0x20, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x03, 0x43, 0x03, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0x47, 0x44, 0x40, /* code=104, hex=0x68, ascii="h" */ + 0x01, 0x03, 0x11, 0x30, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x00, 0x00, 0x03, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0x45, 0x65, 0x40, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x11, 0x11, 0x30, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x04, 0x74, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x07, 0x44, 0x40, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x03, 0x44, 0x30, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x07, 0x44, 0x74, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x03, 0x44, 0x30, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x02, 0x32, 0x20, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x03, 0x61, 0x70, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x27, 0x22, 0x10, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x04, 0x44, 0x30, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x04, 0x43, 0x30, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x04, 0x47, 0x40, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x04, 0x33, 0x40, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x04, 0x43, 0x03, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x07, 0x12, 0x70, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x12, 0x21, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x01, 0x11, 0x11, 0x10, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x10, 0x01, 0x20, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x02, 0x50, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x01, 0x24, 0x70, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x34, 0x44, 0x31, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x02, 0x04, 0x44, 0x30, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x01, 0x03, 0x74, 0x30, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x12, 0x06, 0x15, 0x20, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x02, 0x06, 0x13, 0x50, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x21, 0x06, 0x13, 0x50, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x06, 0x13, 0x50, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x01, 0x22, 0x11, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x12, 0x03, 0x74, 0x30, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x02, 0x03, 0x74, 0x30, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x21, 0x03, 0x74, 0x30, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x02, 0x03, 0x11, 0x30, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x12, 0x03, 0x11, 0x30, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x21, 0x03, 0x11, 0x30, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x50, 0x34, 0x74, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x10, 0x34, 0x74, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x01, 0x74, 0x74, 0x70, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x06, 0x37, 0x50, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x35, 0x75, 0x50, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x12, 0x03, 0x44, 0x30, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x02, 0x03, 0x44, 0x30, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x21, 0x03, 0x44, 0x30, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x12, 0x04, 0x44, 0x30, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x21, 0x04, 0x44, 0x30, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x02, 0x04, 0x43, 0x03, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x02, 0x03, 0x44, 0x30, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x20, 0x44, 0x44, 0x30, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x13, 0x44, 0x31, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x22, 0x72, 0x70, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x06, 0x22, 0x13, 0x10, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x55, 0x74, 0x40, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x01, 0x22, 0x72, 0x24, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x12, 0x06, 0x13, 0x50, // /* code=160, hex=0xA0, ascii="! " */ + // 0x01, 0x03, 0x11, 0x30, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x01, 0x03, 0x44, 0x30, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x01, 0x04, 0x44, 0x30, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x25, 0x07, 0x44, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x25, 0x46, 0x65, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x01, 0x21, 0x03, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x01, 0x21, 0x03, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x01, 0x01, 0x24, 0x30, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x07, 0x40, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x07, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x04, 0x45, 0x24, 0x10, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x04, 0x45, 0x24, 0x10, // /* code=172, hex=0xAC, ascii="!," */ + // 0x01, 0x01, 0x13, 0x10, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0x25, 0x20, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x00, 0x52, 0x50, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x52, 0x52, 0x52, 0x52, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x72, 0x52, 0x72, 0x52, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x63, 0x63, 0x63, 0x63, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x11, 0x11, 0x11, 0x11, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x11, 0x17, 0x11, 0x11, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x11, 0x71, 0x71, 0x11, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x22, 0x26, 0x22, 0x22, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x07, 0x22, 0x22, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x71, 0x71, 0x11, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x22, 0x60, 0x62, 0x22, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x22, 0x22, 0x22, 0x22, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x70, 0x62, 0x22, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x22, 0x60, 0x70, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x22, 0x27, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x11, 0x71, 0x70, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x07, 0x11, 0x11, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x11, 0x11, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x11, 0x17, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x07, 0x11, 0x11, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x11, 0x11, 0x11, 0x11, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x07, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x11, 0x17, 0x11, 0x11, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x11, 0x11, 0x11, 0x11, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x22, 0x22, 0x22, 0x22, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x22, 0x22, 0x30, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x32, 0x22, 0x22, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x22, 0x60, 0x70, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x70, 0x62, 0x22, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x22, 0x22, 0x22, 0x22, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x70, 0x70, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x22, 0x60, 0x62, 0x22, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x11, 0x70, 0x70, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x22, 0x27, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x70, 0x71, 0x11, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x07, 0x22, 0x22, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x22, 0x23, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x11, 0x11, 0x10, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x11, 0x11, 0x11, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x03, 0x22, 0x22, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x22, 0x27, 0x22, 0x22, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x11, 0x71, 0x71, 0x11, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x11, 0x17, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x01, 0x11, 0x11, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0x77, 0x77, 0x77, 0x77, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x77, 0x77, // /* code=220, hex=0xDC, ascii="!\" */ + // 0x77, 0x77, 0x77, 0x77, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x00, 0x00, 0x00, 0x00, // /* code=222, hex=0xDE, ascii="!^" */ + // 0x77, 0x77, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x03, 0x44, 0x30, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x47, 0x44, 0x74, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x03, 0x22, 0x22, 0x20, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x32, 0x22, 0x20, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x07, 0x21, 0x24, 0x70, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x34, 0x44, 0x30, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x04, 0x44, 0x74, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x04, 0x21, 0x11, 0x10, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x01, 0x13, 0x43, 0x11, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x34, 0x74, 0x30, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x34, 0x42, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x34, 0x23, 0x44, 0x30, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x03, 0x55, 0x30, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x03, 0x52, 0x50, // /* code=237, hex=0xED, ascii="!m" */ + // 0x01, 0x23, 0x22, 0x10, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x03, 0x44, 0x44, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x70, 0x70, 0x70, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x17, 0x10, 0x70, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x02, 0x10, 0x12, 0x70, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x12, 0x10, 0x30, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x01, 0x11, 0x11, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x11, 0x11, 0x56, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x30, 0x70, 0x30, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x25, 0x02, 0x50, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x12, 0x10, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x03, 0x30, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x01, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x00, 0x15, 0x20, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x03, 0x22, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x03, 0x01, 0x30, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x03, 0x33, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_6x8.h b/wled00/src/font/console_font_6x8.h index 3fbe0b4054..7f6c590bf9 100644 --- a/wled00/src/font/console_font_6x8.h +++ b/wled00/src/font/console_font_6x8.h @@ -1,19 +1,20 @@ -// font courtesy of https://github.com/idispatch/raster-fonts - // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts /* * WBF (WLED Bitmap Font) Packed Fixed-Width Format - * Header Layout (10 Bytes): - * [0] Magic 'W' (0x57) - * [1] Glyph height: 8 - * [2] Fixed glyph width: 6 - * [3] Flags: 0x00 (fixed width) - * [4] First Char: 32 - * [5] Last Char: 126 - * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 - * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed/max glyph width: 5 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -34,266 +35,266 @@ * [Byte 1] [Byte 2] [Byte 3] * Final HEX for '!' = 0x22, 0x20, 0x20 * - * at the end of the stream, padding bits are added if necessary to fill the last byte + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ static const unsigned char console_font_6x8[] PROGMEM = { - 0x57, 0x08, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x39, 0x16, 0xD1, 0x55, 0x13, 0x80, // /* code=1, hex=0x01, ascii="^A" */ - // 0x39, 0xF5, 0x5F, 0x45, 0xF3, 0x80, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0xA7, 0xDF, 0x7C, 0xE1, 0x00, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x43, 0x9F, 0x7C, 0xE1, 0x00, // /* code=4, hex=0x04, ascii="^D" */ - // 0x10, 0xE3, 0x84, 0x7D, 0xF1, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x00, 0x43, 0x9F, 0x7C, 0x43, 0x80, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0xFF, 0xFF, 0xF3, 0xCF, 0xFF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x07, 0x92, 0x49, 0xE0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0xFF, 0xF8, 0x6D, 0xB6, 0x1F, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x70, 0xCD, 0x49, 0x23, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x39, 0x14, 0x4E, 0x10, 0xE1, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x10, 0x61, 0x44, 0x31, 0xC6, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x0C, 0xD2, 0xCD, 0x2D, 0xB6, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x01, 0x53, 0x9B, 0x39, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x20, 0xC3, 0x8F, 0x38, 0xC2, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x08, 0x63, 0x9E, 0x38, 0x60, 0x80, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x28, 0xA2, 0x8A, 0x28, 0x02, 0x80, // /* code=19, hex=0x13, ascii="^S" */ - // 0x3D, 0x55, 0x4D, 0x14, 0x51, 0x40, // /* code=20, hex=0x14, ascii="^T" */ - // 0x39, 0x13, 0x0A, 0x19, 0x13, 0x80, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x01, 0xE7, 0x80, // /* code=22, hex=0x16, ascii="^V" */ - // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x0E, // /* code=23, hex=0x17, ascii="^W" */ - // 0x10, 0xE7, 0xC4, 0x10, 0x41, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x10, 0x41, 0x04, 0x7C, 0xE1, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x41, 0x9F, 0x18, 0x40, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x43, 0x1F, 0x30, 0x40, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x10, 0x41, 0x07, 0xC0, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0xA2, 0x9F, 0x28, 0xA0, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x10, 0x43, 0x8E, 0x7D, 0xF0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x7D, 0xF3, 0x8E, 0x10, 0x40, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x10, 0xE3, 0x84, 0x10, 0x01, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x6D, 0xB4, 0x80, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0xA7, 0xCA, 0x29, 0xF2, 0x80, /* code=35, hex=0x23, ascii="#" */ - 0x20, 0xE4, 0x0C, 0x09, 0xC1, 0x00, /* code=36, hex=0x24, ascii="$" */ - 0x65, 0x90, 0x84, 0x21, 0x34, 0xC0, /* code=37, hex=0x25, ascii="%" */ - 0x21, 0x45, 0x08, 0x55, 0x23, 0x40, /* code=38, hex=0x26, ascii="&" */ - 0x30, 0xC2, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x10, 0x82, 0x08, 0x20, 0x81, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x20, 0x41, 0x04, 0x10, 0x42, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0xA3, 0x9F, 0x38, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x41, 0x1F, 0x10, 0x40, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x08, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x39, 0x14, 0xD5, 0x65, 0x13, 0x80, /* code=48, hex=0x30, ascii="0" */ - 0x10, 0xC1, 0x04, 0x10, 0x43, 0x80, /* code=49, hex=0x31, ascii="1" */ - 0x39, 0x10, 0x46, 0x21, 0x07, 0xC0, /* code=50, hex=0x32, ascii="2" */ - 0x39, 0x10, 0x4E, 0x05, 0x13, 0x80, /* code=51, hex=0x33, ascii="3" */ - 0x08, 0x62, 0x92, 0x7C, 0x20, 0x80, /* code=52, hex=0x34, ascii="4" */ - 0x7D, 0x04, 0x1E, 0x05, 0x13, 0x80, /* code=53, hex=0x35, ascii="5" */ - 0x18, 0x84, 0x1E, 0x45, 0x13, 0x80, /* code=54, hex=0x36, ascii="6" */ - 0x7C, 0x10, 0x84, 0x20, 0x82, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x39, 0x14, 0x4E, 0x45, 0x13, 0x80, /* code=56, hex=0x38, ascii="8" */ - 0x39, 0x14, 0x4F, 0x04, 0x23, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x08, /* code=59, hex=0x3B, ascii=";" */ - 0x08, 0x42, 0x10, 0x20, 0x40, 0x80, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x20, 0x40, 0x81, 0x08, 0x42, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x39, 0x10, 0x46, 0x10, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x39, 0x15, 0xD5, 0x5D, 0x03, 0x80, /* code=64, hex=0x40, ascii="@" */ - 0x39, 0x14, 0x51, 0x7D, 0x14, 0x40, /* code=65, hex=0x41, ascii="A" */ - 0x79, 0x14, 0x5E, 0x45, 0x17, 0x80, /* code=66, hex=0x42, ascii="B" */ - 0x39, 0x14, 0x10, 0x41, 0x13, 0x80, /* code=67, hex=0x43, ascii="C" */ - 0x79, 0x14, 0x51, 0x45, 0x17, 0x80, /* code=68, hex=0x44, ascii="D" */ - 0x7D, 0x04, 0x1E, 0x41, 0x07, 0xC0, /* code=69, hex=0x45, ascii="E" */ - 0x7D, 0x04, 0x1E, 0x41, 0x04, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x39, 0x14, 0x17, 0x45, 0x13, 0xC0, /* code=71, hex=0x47, ascii="G" */ - 0x45, 0x14, 0x5F, 0x45, 0x14, 0x40, /* code=72, hex=0x48, ascii="H" */ - 0x38, 0x41, 0x04, 0x10, 0x43, 0x80, /* code=73, hex=0x49, ascii="I" */ - 0x04, 0x10, 0x41, 0x45, 0x13, 0x80, /* code=74, hex=0x4A, ascii="J" */ - 0x45, 0x25, 0x18, 0x51, 0x24, 0x40, /* code=75, hex=0x4B, ascii="K" */ - 0x41, 0x04, 0x10, 0x41, 0x07, 0xC0, /* code=76, hex=0x4C, ascii="L" */ - 0x45, 0xB5, 0x51, 0x45, 0x14, 0x40, /* code=77, hex=0x4D, ascii="M" */ - 0x45, 0x95, 0x53, 0x45, 0x14, 0x40, /* code=78, hex=0x4E, ascii="N" */ - 0x39, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=79, hex=0x4F, ascii="O" */ - 0x79, 0x14, 0x5E, 0x41, 0x04, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x39, 0x14, 0x51, 0x55, 0x23, 0x40, /* code=81, hex=0x51, ascii="Q" */ - 0x79, 0x14, 0x5E, 0x49, 0x14, 0x40, /* code=82, hex=0x52, ascii="R" */ - 0x39, 0x14, 0x0E, 0x05, 0x13, 0x80, /* code=83, hex=0x53, ascii="S" */ - 0x7C, 0x41, 0x04, 0x10, 0x41, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x45, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=85, hex=0x55, ascii="U" */ - 0x45, 0x14, 0x51, 0x44, 0xA1, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x45, 0x15, 0x55, 0x55, 0x52, 0x80, /* code=87, hex=0x57, ascii="W" */ - 0x45, 0x12, 0x84, 0x29, 0x14, 0x40, /* code=88, hex=0x58, ascii="X" */ - 0x45, 0x14, 0x4A, 0x10, 0x41, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x78, 0x21, 0x08, 0x41, 0x07, 0x80, /* code=90, hex=0x5A, ascii="Z" */ - 0x38, 0x82, 0x08, 0x20, 0x83, 0x80, /* code=91, hex=0x5B, ascii="[" */ - 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x38, 0x20, 0x82, 0x08, 0x23, 0x80, /* code=93, hex=0x5D, ascii="]" */ - 0x10, 0xA4, 0x40, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, /* code=95, hex=0x5F, ascii="_" */ - 0x30, 0xC1, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x03, 0x81, 0x3D, 0x13, 0xC0, /* code=97, hex=0x61, ascii="a" */ - 0x41, 0x07, 0x91, 0x45, 0x17, 0x80, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x03, 0x91, 0x41, 0x13, 0x80, /* code=99, hex=0x63, ascii="c" */ - 0x04, 0x13, 0xD1, 0x45, 0x13, 0xC0, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x03, 0x91, 0x79, 0x03, 0x80, /* code=101, hex=0x65, ascii="e" */ - 0x18, 0x82, 0x1E, 0x20, 0x82, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x03, 0xD1, 0x44, 0xF0, 0x4E, /* code=103, hex=0x67, ascii="g" */ - 0x41, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=104, hex=0x68, ascii="h" */ - 0x10, 0x01, 0x04, 0x10, 0x41, 0x80, /* code=105, hex=0x69, ascii="i" */ - 0x08, 0x01, 0x82, 0x08, 0x24, 0x8C, /* code=106, hex=0x6A, ascii="j" */ - 0x41, 0x04, 0x94, 0x61, 0x44, 0x80, /* code=107, hex=0x6B, ascii="k" */ - 0x10, 0x41, 0x04, 0x10, 0x41, 0x80, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x06, 0x95, 0x55, 0x14, 0x40, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x03, 0x91, 0x45, 0x13, 0x80, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x07, 0x91, 0x45, 0x17, 0x90, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x03, 0xD1, 0x45, 0x13, 0xC1, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x05, 0x89, 0x20, 0x87, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x03, 0x90, 0x38, 0x13, 0x80, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x87, 0x88, 0x20, 0xA1, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x04, 0x92, 0x49, 0x62, 0x80, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x04, 0x51, 0x44, 0xA1, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x04, 0x51, 0x55, 0xF2, 0x80, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x04, 0x92, 0x31, 0x24, 0x80, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x04, 0x92, 0x48, 0xE1, 0x18, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x07, 0x82, 0x31, 0x07, 0x80, /* code=122, hex=0x7A, ascii="z" */ - 0x18, 0x82, 0x18, 0x20, 0x81, 0x80, /* code=123, hex=0x7B, ascii="{" */ - 0x10, 0x41, 0x00, 0x10, 0x41, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x30, 0x20, 0x83, 0x08, 0x23, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x29, 0x40, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x10, 0xE6, 0xD1, 0x45, 0xF0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x39, 0x14, 0x10, 0x44, 0xE1, 0x0C, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x48, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x0C, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x38, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x28, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x30, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x38, 0xA3, 0x81, 0x3D, 0x13, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0xE4, 0x50, 0x44, 0xE1, 0x0C, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x38, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x28, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x30, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x28, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x10, 0xA0, 0x04, 0x10, 0x41, 0x80, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x20, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x28, 0x01, 0x0A, 0x45, 0xF4, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x38, 0xA3, 0x9B, 0x45, 0xF4, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x0C, 0x07, 0xD0, 0x79, 0x07, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x07, 0x85, 0x7D, 0x43, 0xC0, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x3D, 0x45, 0x1F, 0x51, 0x45, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x38, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x28, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x60, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x38, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x60, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x28, 0x04, 0x92, 0x48, 0xE1, 0x18, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x48, 0xC4, 0x92, 0x49, 0x23, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x28, 0x04, 0x92, 0x49, 0x23, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x43, 0x90, 0x40, 0xE1, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x18, 0x92, 0x1E, 0x20, 0x95, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x44, 0xA1, 0x1F, 0x11, 0xF1, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x61, 0x45, 0x1A, 0x5D, 0x24, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x08, 0x51, 0x0E, 0x10, 0x45, 0x08, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x18, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ - // 0x18, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x18, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x18, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x29, 0x40, 0x1C, 0x49, 0x24, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x29, 0x40, 0x12, 0x69, 0x64, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x38, 0x13, 0xD1, 0x3C, 0x03, 0xC0, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x31, 0x24, 0x92, 0x30, 0x07, 0x80, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x10, 0x01, 0x0C, 0x41, 0x13, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x07, 0xD0, 0x41, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x0F, 0xC1, 0x04, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x41, 0x25, 0x0E, 0x44, 0x21, 0xC0, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x41, 0x25, 0x0B, 0x54, 0x70, 0x40, // /* code=172, hex=0xAC, ascii="!," */ - // 0x10, 0x01, 0x04, 0x38, 0xE1, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x02, 0x52, 0x24, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x04, 0x89, 0x48, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x54, 0x0A, 0x80, 0x54, 0x0A, 0x80, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x56, 0xA5, 0x6A, 0x56, 0xA5, 0x6A, // /* code=177, hex=0xB1, ascii="!1" */ - // 0xAB, 0xF5, 0x7F, 0xAB, 0xF5, 0x7F, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x10, 0x41, 0x3C, 0x10, 0x41, 0x04, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x13, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x51, 0x45, 0x34, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0x3C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x03, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x53, 0x41, 0x34, 0x51, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x03, 0xC1, 0x34, 0x51, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x53, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x51, 0x45, 0x3C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x13, 0xC1, 0x3C, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0x3C, 0x10, 0x41, 0x04, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x10, 0x41, 0x07, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x10, 0x41, 0x3F, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0x3F, 0x10, 0x41, 0x04, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x10, 0x41, 0x07, 0x10, 0x41, 0x04, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x10, 0x41, 0x3F, 0x10, 0x41, 0x04, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x10, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x51, 0x45, 0x17, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x51, 0x74, 0x1F, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x01, 0xF4, 0x17, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x53, 0x70, 0x3F, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x03, 0xF0, 0x37, 0x51, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x51, 0x74, 0x17, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x53, 0x70, 0x37, 0x51, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x13, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x51, 0x45, 0x3F, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x03, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0x3F, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x51, 0x45, 0x1F, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x10, 0x71, 0x07, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x1F, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x51, 0x45, 0x37, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x13, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x10, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x07, 0x10, 0x41, 0x04, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ - // 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, // /* code=222, hex=0xDE, ascii="!^" */ - // 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x03, 0x52, 0x48, 0xD0, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x01, 0xC4, 0x9C, 0x49, 0x27, 0x10, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x79, 0x24, 0x10, 0x41, 0x04, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x01, 0xF2, 0x8A, 0x28, 0xA2, 0x80, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x79, 0x22, 0x04, 0x21, 0x27, 0x80, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x03, 0xD2, 0x48, 0xC0, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x04, 0x92, 0x49, 0xC4, 0x10, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x02, 0x94, 0x10, 0x41, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x38, 0x43, 0x91, 0x38, 0x43, 0x80, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x31, 0x24, 0x9E, 0x49, 0x23, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0xE4, 0x51, 0x28, 0xA6, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x31, 0x02, 0x04, 0x39, 0x23, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x02, 0x95, 0x54, 0xA0, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x43, 0x95, 0x54, 0xE1, 0x00, // /* code=237, hex=0xED, ascii="!m" */ - // 0x00, 0xE4, 0x1E, 0x40, 0xE0, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0xC4, 0x92, 0x49, 0x20, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x43, 0x84, 0x00, 0xE0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x40, 0xC0, 0x8C, 0x40, 0x07, 0x80, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x08, 0xC4, 0x0C, 0x08, 0x07, 0x80, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x21, 0x44, 0x10, 0x41, 0x04, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x10, 0x41, 0x04, 0x11, 0x42, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x40, 0x1F, 0x00, 0x40, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0xA5, 0x00, 0x29, 0x40, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x31, 0x24, 0x8C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x00, 0x71, 0x04, 0x51, 0x42, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x50, 0xA2, 0x8A, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x60, 0x42, 0x1C, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x07, 0x9E, 0x79, 0xE0, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x19, 0x0C, 0x42, 0x90, 0x60, // /* code=1, hex=0x01, ascii="^A" */ + // 0x19, 0xCA, 0x72, 0x1C, 0x60, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0x8E, 0x73, 0x8C, 0x20, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x46, 0x73, 0x8C, 0x20, // /* code=4, hex=0x04, ascii="^D" */ + // 0x08, 0xC6, 0x13, 0x9C, 0x20, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x46, 0x73, 0x84, 0x60, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x31, 0x80, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x7B, 0xDE, 0xC6, 0x3D, 0xEF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x0E, 0x42, 0x1C, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x7B, 0xD0, 0xB5, 0xA1, 0xEF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x40, 0x32, 0x10, 0x60, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x19, 0x08, 0x30, 0x8C, 0x20, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x08, 0x42, 0x11, 0x9C, 0xC0, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0xC4, 0x31, 0x18, 0xC0, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x01, 0x46, 0x61, 0x94, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x10, 0xC6, 0x31, 0x8C, 0x40, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x46, 0x71, 0x84, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x08, 0xCE, 0x13, 0x8C, 0x20, // /* code=18, hex=0x12, ascii="^R" */ + // 0x10, 0x84, 0x21, 0x00, 0x40, // /* code=19, hex=0x13, ascii="^S" */ + // 0x19, 0x4A, 0x30, 0x84, 0x20, // /* code=20, hex=0x14, ascii="^T" */ + // 0x19, 0x06, 0x20, 0x90, 0x60, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x1C, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ + // 0x08, 0xCE, 0x13, 0x8C, 0x23, // /* code=23, hex=0x17, ascii="^W" */ + // 0x08, 0xCE, 0x10, 0x84, 0x20, // /* code=24, hex=0x18, ascii="^X" */ + // 0x08, 0x42, 0x13, 0x8C, 0x20, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x42, 0x70, 0x84, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x46, 0x71, 0x84, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x42, 0x10, 0xE0, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x84, 0x71, 0x08, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x08, 0x46, 0x33, 0x9C, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x39, 0xC6, 0x30, 0x84, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x08, 0xC6, 0x10, 0x80, 0x20, /* code=33, hex=0x21, ascii="!" */ + 0x31, 0x88, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0x8E, 0x21, 0x1C, 0x40, /* code=35, hex=0x23, ascii="#" */ + 0x10, 0xC8, 0x30, 0x1C, 0x20, /* code=36, hex=0x24, ascii="$" */ + 0x31, 0x80, 0x11, 0x10, 0x80, /* code=37, hex=0x25, ascii="%" */ + 0x11, 0x4A, 0x22, 0x90, 0x60, /* code=38, hex=0x26, ascii="&" */ + 0x18, 0xC4, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x08, 0x84, 0x21, 0x08, 0x20, /* code=40, hex=0x28, ascii="(" */ + 0x10, 0x42, 0x10, 0x84, 0x40, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x86, 0x71, 0x88, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x42, 0x70, 0x84, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x0C, 0x62, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x70, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x0C, 0x60, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x00, 0x11, 0x10, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x19, 0x08, 0x53, 0x10, 0x60, /* code=48, hex=0x30, ascii="0" */ + 0x08, 0xC2, 0x10, 0x84, 0x60, /* code=49, hex=0x31, ascii="1" */ + 0x19, 0x00, 0x11, 0x10, 0xE0, /* code=50, hex=0x32, ascii="2" */ + 0x19, 0x00, 0x30, 0x10, 0x60, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x44, 0x43, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x39, 0x08, 0x70, 0x10, 0x60, /* code=53, hex=0x35, ascii="5" */ + 0x08, 0x88, 0x72, 0x10, 0x60, /* code=54, hex=0x36, ascii="6" */ + 0x38, 0x00, 0x11, 0x08, 0x40, /* code=55, hex=0x37, ascii="7" */ + 0x19, 0x08, 0x32, 0x10, 0x60, /* code=56, hex=0x38, ascii="8" */ + 0x19, 0x08, 0x30, 0x00, 0x60, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x06, 0x30, 0x0C, 0x60, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x06, 0x30, 0x0C, 0x62, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x44, 0x41, 0x04, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x0E, 0x00, 0x1C, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x10, 0x40, 0x00, 0x04, 0x40, /* code=62, hex=0x3E, ascii=">" */ + 0x19, 0x00, 0x10, 0x80, 0x20, /* code=63, hex=0x3F, ascii="?" */ + 0x19, 0x0A, 0x52, 0x90, 0x60, /* code=64, hex=0x40, ascii="@" */ + 0x19, 0x08, 0x43, 0x90, 0x80, /* code=65, hex=0x41, ascii="A" */ + 0x39, 0x08, 0x72, 0x10, 0xE0, /* code=66, hex=0x42, ascii="B" */ + 0x19, 0x08, 0x42, 0x10, 0x60, /* code=67, hex=0x43, ascii="C" */ + 0x39, 0x08, 0x42, 0x10, 0xE0, /* code=68, hex=0x44, ascii="D" */ + 0x39, 0x08, 0x72, 0x10, 0xE0, /* code=69, hex=0x45, ascii="E" */ + 0x39, 0x08, 0x72, 0x10, 0x80, /* code=70, hex=0x46, ascii="F" */ + 0x19, 0x08, 0x52, 0x10, 0x60, /* code=71, hex=0x47, ascii="G" */ + 0x21, 0x08, 0x72, 0x10, 0x80, /* code=72, hex=0x48, ascii="H" */ + 0x18, 0x42, 0x10, 0x84, 0x60, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x00, 0x02, 0x10, 0x60, /* code=74, hex=0x4A, ascii="J" */ + 0x21, 0x0A, 0x62, 0x90, 0x80, /* code=75, hex=0x4B, ascii="K" */ + 0x21, 0x08, 0x42, 0x10, 0xE0, /* code=76, hex=0x4C, ascii="L" */ + 0x21, 0x8A, 0x42, 0x10, 0x80, /* code=77, hex=0x4D, ascii="M" */ + 0x21, 0x8A, 0x42, 0x10, 0x80, /* code=78, hex=0x4E, ascii="N" */ + 0x19, 0x08, 0x42, 0x10, 0x60, /* code=79, hex=0x4F, ascii="O" */ + 0x39, 0x08, 0x72, 0x10, 0x80, /* code=80, hex=0x50, ascii="P" */ + 0x19, 0x08, 0x42, 0x90, 0x60, /* code=81, hex=0x51, ascii="Q" */ + 0x39, 0x08, 0x72, 0x10, 0x80, /* code=82, hex=0x52, ascii="R" */ + 0x19, 0x08, 0x30, 0x10, 0x60, /* code=83, hex=0x53, ascii="S" */ + 0x38, 0x42, 0x10, 0x84, 0x20, /* code=84, hex=0x54, ascii="T" */ + 0x21, 0x08, 0x42, 0x10, 0x60, /* code=85, hex=0x55, ascii="U" */ + 0x21, 0x08, 0x42, 0x08, 0x20, /* code=86, hex=0x56, ascii="V" */ + 0x21, 0x0A, 0x52, 0x94, 0x40, /* code=87, hex=0x57, ascii="W" */ + 0x21, 0x04, 0x11, 0x10, 0x80, /* code=88, hex=0x58, ascii="X" */ + 0x21, 0x08, 0x20, 0x84, 0x20, /* code=89, hex=0x59, ascii="Y" */ + 0x38, 0x02, 0x22, 0x10, 0xE0, /* code=90, hex=0x5A, ascii="Z" */ + 0x18, 0x84, 0x21, 0x08, 0x60, /* code=91, hex=0x5B, ascii="[" */ + 0x01, 0x04, 0x10, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x18, 0x00, 0x00, 0x00, 0x60, /* code=93, hex=0x5D, ascii="]" */ + 0x08, 0x88, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x0F, /* code=95, hex=0x5F, ascii="_" */ + 0x18, 0xC2, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x06, 0x01, 0x90, 0x60, /* code=97, hex=0x61, ascii="a" */ + 0x21, 0x0E, 0x42, 0x10, 0xE0, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x06, 0x42, 0x10, 0x60, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x06, 0x42, 0x10, 0x60, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x06, 0x43, 0x90, 0x60, /* code=101, hex=0x65, ascii="e" */ + 0x08, 0x84, 0x71, 0x08, 0x40, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x06, 0x42, 0x0C, 0x03, /* code=103, hex=0x67, ascii="g" */ + 0x21, 0x0E, 0x42, 0x10, 0x80, /* code=104, hex=0x68, ascii="h" */ + 0x08, 0x02, 0x10, 0x84, 0x20, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x02, 0x00, 0x00, 0x83, /* code=106, hex=0x6A, ascii="j" */ + 0x21, 0x08, 0x53, 0x14, 0x80, /* code=107, hex=0x6B, ascii="k" */ + 0x08, 0x42, 0x10, 0x84, 0x20, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x0C, 0x52, 0x90, 0x80, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x0E, 0x42, 0x10, 0x80, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x06, 0x42, 0x10, 0x60, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x0E, 0x42, 0x10, 0xE4, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x06, 0x42, 0x10, 0x60, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x0A, 0x21, 0x08, 0xE0, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x06, 0x41, 0x80, 0x60, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x8E, 0x21, 0x08, 0x20, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x08, 0x42, 0x14, 0x40, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x08, 0x42, 0x08, 0x20, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x08, 0x42, 0x9C, 0x40, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x08, 0x41, 0x90, 0x80, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x08, 0x42, 0x0C, 0x26, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x0E, 0x01, 0x90, 0xE0, /* code=122, hex=0x7A, ascii="z" */ + 0x08, 0x84, 0x61, 0x08, 0x20, /* code=123, hex=0x7B, ascii="{" */ + 0x08, 0x42, 0x00, 0x84, 0x20, /* code=124, hex=0x7C, ascii="|" */ + 0x18, 0x00, 0x00, 0x00, 0x60, /* code=125, hex=0x7D, ascii="}" */ + 0x11, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x08, 0xCC, 0x42, 0x1C, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x19, 0x08, 0x42, 0x0C, 0x23, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x20, 0x08, 0x42, 0x14, 0x40, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x00, 0x06, 0x43, 0x90, 0x60, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x18, 0x06, 0x01, 0x90, 0x60, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x10, 0x06, 0x01, 0x90, 0x60, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x18, 0x06, 0x01, 0x90, 0x60, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x18, 0x86, 0x01, 0x90, 0x60, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0xC8, 0x42, 0x0C, 0x23, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x18, 0x06, 0x43, 0x90, 0x60, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x10, 0x06, 0x43, 0x90, 0x60, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x18, 0x06, 0x43, 0x90, 0x60, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x10, 0x02, 0x10, 0x84, 0x20, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x08, 0x80, 0x10, 0x84, 0x20, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x10, 0x02, 0x10, 0x84, 0x20, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x10, 0x02, 0x22, 0x1C, 0x80, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x18, 0x86, 0x62, 0x1C, 0x80, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x00, 0x0E, 0x43, 0x90, 0xE0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x0E, 0x13, 0x94, 0x60, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x19, 0x4A, 0x72, 0x94, 0xA0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x18, 0x06, 0x42, 0x10, 0x60, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x10, 0x06, 0x42, 0x10, 0x60, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x30, 0x06, 0x42, 0x10, 0x60, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x18, 0x08, 0x42, 0x14, 0x40, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x30, 0x08, 0x42, 0x14, 0x40, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x10, 0x08, 0x42, 0x0C, 0x26, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x20, 0xC8, 0x42, 0x10, 0x60, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x10, 0x08, 0x42, 0x10, 0x60, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x46, 0x42, 0x0C, 0x20, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x08, 0x84, 0x71, 0x08, 0xA0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x20, 0x82, 0x70, 0x9C, 0x20, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x31, 0x4A, 0x62, 0x90, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x00, 0x42, 0x30, 0x84, 0xA2, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x08, 0x06, 0x01, 0x90, 0x60, // /* code=160, hex=0xA0, ascii="! " */ + // 0x08, 0x02, 0x10, 0x84, 0x20, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x08, 0x06, 0x42, 0x10, 0x60, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x08, 0x08, 0x42, 0x14, 0x40, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x11, 0x40, 0x72, 0x10, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x11, 0x40, 0x43, 0x14, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x18, 0x06, 0x41, 0x80, 0x60, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x19, 0x08, 0x41, 0x80, 0xE0, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x08, 0x02, 0x32, 0x10, 0x60, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x0E, 0x42, 0x10, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x1E, 0x00, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x21, 0x0A, 0x32, 0x00, 0x20, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x21, 0x0A, 0x22, 0x84, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x08, 0x02, 0x11, 0x8C, 0x20, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x04, 0x41, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x08, 0x22, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x28, 0x14, 0x02, 0x81, 0x40, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x2A, 0x8A, 0xA2, 0xA8, 0xAA, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x53, 0xCA, 0xF5, 0x3C, 0xAF, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x08, 0x42, 0xF0, 0x84, 0x21, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x0B, 0xC2, 0xF0, 0x84, 0x21, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x29, 0x4A, 0xD2, 0x94, 0xA5, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0xF2, 0x94, 0xA5, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x03, 0xC2, 0xF0, 0x84, 0x21, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x2B, 0x42, 0xD2, 0x94, 0xA5, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x29, 0x4A, 0x52, 0x94, 0xA5, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x03, 0xC2, 0xD2, 0x94, 0xA5, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x2B, 0x42, 0xF0, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x29, 0x4A, 0xF0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x0B, 0xC2, 0xF0, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0xF0, 0x84, 0x21, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x08, 0x42, 0x10, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x08, 0x42, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0xF0, 0x84, 0x21, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x08, 0x42, 0xF0, 0x84, 0x21, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x29, 0x4A, 0x52, 0x94, 0xA5, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x29, 0x48, 0x70, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x01, 0xC8, 0x52, 0x94, 0xA5, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x2B, 0x40, 0xF0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x03, 0xC0, 0xD2, 0x94, 0xA5, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x29, 0x48, 0x52, 0x94, 0xA5, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x03, 0xC0, 0xF0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x2B, 0x40, 0xD2, 0x94, 0xA5, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x0B, 0xC0, 0xF0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x29, 0x4A, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x03, 0xC0, 0xF0, 0x84, 0x21, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0xF2, 0x94, 0xA5, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x29, 0x4A, 0x70, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x08, 0x42, 0x10, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x42, 0x10, 0x84, 0x21, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x72, 0x94, 0xA5, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x29, 0x4A, 0xD2, 0x94, 0xA5, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x0B, 0xC0, 0xF0, 0x84, 0x21, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x08, 0x42, 0xF0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x10, 0x84, 0x21, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x07, 0xBD, 0xEF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0x73, 0x9C, 0xE7, 0x39, 0xCE, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=222, hex=0xDE, ascii="!^" */ + // 0x7B, 0xDE, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x06, 0x42, 0x0C, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x01, 0xC8, 0x72, 0x10, 0xE4, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x39, 0x08, 0x42, 0x10, 0x80, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x01, 0xC4, 0x21, 0x08, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x39, 0x04, 0x11, 0x10, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x06, 0x42, 0x0C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x08, 0x42, 0x1C, 0x84, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x04, 0x50, 0x84, 0x20, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x18, 0x46, 0x41, 0x84, 0x60, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x19, 0x08, 0x72, 0x10, 0x60, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0xC8, 0x41, 0x08, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x19, 0x04, 0x11, 0x90, 0x60, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x04, 0x52, 0x88, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x46, 0x52, 0x8C, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0xC8, 0x72, 0x0C, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0xC8, 0x42, 0x10, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x01, 0xC0, 0x70, 0x1C, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x46, 0x10, 0x0C, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x20, 0xC0, 0x32, 0x00, 0xE0, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0xC8, 0x30, 0x00, 0xE0, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x02, 0x10, 0x84, 0x21, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x08, 0x42, 0x10, 0x94, 0x40, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x40, 0x70, 0x04, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x8A, 0x01, 0x14, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x19, 0x08, 0x30, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x31, 0x80, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x20, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x42, 0x12, 0x94, 0x40, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x28, 0x84, 0x20, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x30, 0x44, 0x70, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x0E, 0x73, 0x9C, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ }; diff --git a/wled00/src/font/console_font_7x9.h b/wled00/src/font/console_font_7x9.h index 58513addb7..c9996fb003 100644 --- a/wled00/src/font/console_font_7x9.h +++ b/wled00/src/font/console_font_7x9.h @@ -1,19 +1,20 @@ -// font courtesy of https://github.com/idispatch/raster-fonts - // code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), // which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts /* * WBF (WLED Bitmap Font) Packed Fixed-Width Format - * Header Layout (10 Bytes): - * [0] Magic 'W' (0x57) - * [1] Glyph height: 9 - * [2] Fixed glyph width: 7 - * [3] Flags: 0x00 (fixed width) - * [4] First Char: 32 - * [5] Last Char: 126 - * [6-9] Unicode Offset (not used in built in fonts): 0x00000000 - * if variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes containing the width of each glyph + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 9 + * [2] Fixed/max glyph width: 6 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. * Packing: row-by-row, top first bitstream, MSB-first. */ @@ -34,266 +35,266 @@ * [Byte 1] [Byte 2] [Byte 3] * Final HEX for '!' = 0x22, 0x20, 0x20 * - * at the end of the stream, padding bits are added if necessary to fill the last byte + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte */ static const unsigned char console_font_7x9[] PROGMEM = { - 0x57, 0x09, 0x07, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, // Header: 'W', H, W, Flags, First, Last, UnicodeOffset + 0x57, 0x09, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x38, 0x8A, 0xAD, 0x58, 0x35, 0x65, 0x3C, 0x00, // /* code=1, hex=0x01, ascii="^A" */ - // 0x38, 0xFB, 0x5E, 0xBF, 0xF7, 0x71, 0xBE, 0x00, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0xDB, 0xFF, 0xFF, 0xEF, 0x8E, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x20, 0xE3, 0xEF, 0xEF, 0x8E, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ - // 0x38, 0x70, 0x46, 0xBF, 0xFA, 0xC4, 0x3E, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x10, 0x71, 0xF7, 0xFF, 0xEA, 0x84, 0x1C, 0x00, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0xFF, 0xFF, 0x9E, 0x1C, 0x3C, 0xFF, 0xFF, 0xFE, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0xFF, 0xCF, 0x0C, 0xC9, 0x98, 0x79, 0xFF, 0xFE, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x0E, 0x0C, 0x28, 0xC3, 0xCC, 0xD9, 0x9E, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x3C, 0xCD, 0x99, 0xE1, 0x87, 0x86, 0x0C, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x70, 0xB1, 0x02, 0x04, 0x18, 0x30, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0x78, 0x91, 0xE2, 0x44, 0x9B, 0x36, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x92, 0xA8, 0xE1, 0x4E, 0xE7, 0x15, 0x49, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x40, 0xC1, 0xC3, 0xC7, 0x0C, 0x10, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x08, 0x30, 0xE3, 0xC3, 0x83, 0x02, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x6C, 0xD9, 0xB3, 0x66, 0xC0, 0x1B, 0x36, 0x00, // /* code=19, hex=0x13, ascii="^S" */ - // 0x00, 0x79, 0x52, 0xA3, 0xC2, 0x85, 0x0A, 0x00, // /* code=20, hex=0x14, ascii="^T" */ - // 0x3C, 0xCD, 0x81, 0xE6, 0x6C, 0xCF, 0x03, 0x66, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0x00, 0x00, // /* code=22, hex=0x16, ascii="^V" */ - // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x7C, // /* code=23, hex=0x17, ascii="^W" */ - // 0x00, 0x30, 0xF2, 0xD1, 0x83, 0x06, 0x0C, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x30, 0x60, 0xC1, 0x8B, 0x4F, 0x0C, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x00, 0x60, 0x67, 0xE1, 0x86, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x00, 0x61, 0x87, 0xE6, 0x06, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x00, 0x06, 0x0C, 0x1F, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x00, 0x93, 0x3F, 0xEC, 0xC9, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x00, 0x00, 0x83, 0x8F, 0xBF, 0x80, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x00, 0x07, 0xF7, 0xC7, 0x04, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x00, 0x30, 0x60, 0xC1, 0x80, 0x06, 0x0C, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x00, 0xD9, 0xB2, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0xD9, 0xB7, 0xF6, 0xDF, 0xDB, 0x36, 0x00, /* code=35, hex=0x23, ascii="#" */ - 0x08, 0x30, 0xF3, 0x03, 0xC0, 0xDF, 0x0C, 0x10, /* code=36, hex=0x24, ascii="$" */ - 0x70, 0xA5, 0xD8, 0x61, 0x87, 0xDA, 0x87, 0x00, /* code=37, hex=0x25, ascii="%" */ - 0x38, 0xD9, 0xB1, 0xC6, 0xED, 0x9B, 0x1F, 0x00, /* code=38, hex=0x26, ascii="&" */ - 0x00, 0x30, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x00, 0x18, 0x61, 0x83, 0x06, 0x06, 0x06, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x00, 0x60, 0x60, 0x60, 0xC1, 0x86, 0x18, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x89, 0xB1, 0xCF, 0xE7, 0x1B, 0x22, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x00, 0x60, 0xC7, 0xEF, 0xC6, 0x0C, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x60, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x18, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x00, 0x79, 0x9B, 0x77, 0x6C, 0xD9, 0x9E, 0x00, /* code=48, hex=0x30, ascii="0" */ - 0x00, 0x31, 0xE0, 0xC1, 0x83, 0x06, 0x3F, 0x00, /* code=49, hex=0x31, ascii="1" */ - 0x00, 0x79, 0x9A, 0x31, 0xC6, 0x19, 0xBF, 0x00, /* code=50, hex=0x32, ascii="2" */ - 0x00, 0x79, 0x98, 0x31, 0xC0, 0xD9, 0x9E, 0x00, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x18, 0x71, 0xE6, 0xCF, 0xC3, 0x0F, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x00, 0xFD, 0x9B, 0x07, 0xC0, 0xD9, 0x9E, 0x00, /* code=53, hex=0x35, ascii="5" */ - 0x00, 0x38, 0xC3, 0x07, 0xCC, 0xD9, 0x9E, 0x00, /* code=54, hex=0x36, ascii="6" */ - 0x00, 0xFD, 0x98, 0x30, 0xC3, 0x06, 0x0C, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x00, 0x79, 0x9B, 0x33, 0xCC, 0xD9, 0x9E, 0x00, /* code=56, hex=0x38, ascii="8" */ - 0x00, 0x79, 0x9B, 0x33, 0xE0, 0xC3, 0x1C, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x60, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x00, 0x61, 0x86, 0x06, 0x06, 0x00, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x00, 0xC0, 0xC0, 0xC3, 0x0C, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x00, 0x79, 0x98, 0x30, 0xC3, 0x00, 0x0C, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x00, 0x79, 0x8B, 0x76, 0xAD, 0x98, 0x9E, 0x00, /* code=64, hex=0x40, ascii="@" */ - 0x00, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, /* code=65, hex=0x41, ascii="A" */ - 0x00, 0xF9, 0x9B, 0x37, 0xCC, 0xD9, 0xBE, 0x00, /* code=66, hex=0x42, ascii="B" */ - 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x00, /* code=67, hex=0x43, ascii="C" */ - 0x00, 0xF9, 0x9B, 0x36, 0x6C, 0xD9, 0xBE, 0x00, /* code=68, hex=0x44, ascii="D" */ - 0x00, 0xFD, 0x9B, 0x07, 0x8C, 0x19, 0xBF, 0x00, /* code=69, hex=0x45, ascii="E" */ - 0x00, 0xFD, 0x9B, 0x07, 0xCC, 0x18, 0x30, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x00, 0x79, 0x9B, 0x06, 0xEC, 0xD9, 0x9F, 0x00, /* code=71, hex=0x47, ascii="G" */ - 0x00, 0xCD, 0x9B, 0x37, 0xEC, 0xD9, 0xB3, 0x00, /* code=72, hex=0x48, ascii="H" */ - 0x00, 0x78, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x3C, 0x30, 0x60, 0xCD, 0x9B, 0x1C, 0x00, /* code=74, hex=0x4A, ascii="J" */ - 0x00, 0xCD, 0xB3, 0x67, 0x8D, 0x9B, 0x33, 0x00, /* code=75, hex=0x4B, ascii="K" */ - 0x00, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xBF, 0x00, /* code=76, hex=0x4C, ascii="L" */ - 0x01, 0x8F, 0x1F, 0x7F, 0xFA, 0xF5, 0xEB, 0x00, /* code=77, hex=0x4D, ascii="M" */ - 0x00, 0xCD, 0xDB, 0xB7, 0xED, 0xD9, 0xB3, 0x00, /* code=78, hex=0x4E, ascii="N" */ - 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=79, hex=0x4F, ascii="O" */ - 0x00, 0xF9, 0x9B, 0x36, 0x6F, 0x98, 0x30, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x00, 0x79, 0x9B, 0x36, 0x6E, 0xDB, 0x9E, 0x06, /* code=81, hex=0x51, ascii="Q" */ - 0x00, 0xF9, 0x9B, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=82, hex=0x52, ascii="R" */ - 0x00, 0x79, 0x9B, 0x03, 0xC0, 0xD9, 0x9E, 0x00, /* code=83, hex=0x53, ascii="S" */ - 0x00, 0xFD, 0x68, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x00, 0xCD, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=85, hex=0x55, ascii="U" */ - 0x01, 0x8F, 0x1B, 0x66, 0xC7, 0x0E, 0x08, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x01, 0x8F, 0x5E, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=87, hex=0x57, ascii="W" */ - 0x00, 0xCD, 0x99, 0xE1, 0x87, 0x99, 0xB3, 0x00, /* code=88, hex=0x58, ascii="X" */ - 0x00, 0xCD, 0x9B, 0x33, 0xC3, 0x06, 0x1E, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x00, 0xFD, 0x98, 0x61, 0x86, 0x19, 0xBF, 0x00, /* code=90, hex=0x5A, ascii="Z" */ - 0x00, 0x78, 0xC1, 0x83, 0x06, 0x0C, 0x1E, 0x00, /* code=91, hex=0x5B, ascii="[" */ - 0x00, 0xC1, 0x81, 0x83, 0x03, 0x06, 0x06, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x00, 0x78, 0x30, 0x60, 0xC1, 0x83, 0x1E, 0x00, /* code=93, hex=0x5D, ascii="]" */ - 0x00, 0x20, 0xE3, 0x60, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, /* code=95, hex=0x5F, ascii="_" */ - 0x00, 0x60, 0xC0, 0xC1, 0x80, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x00, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, /* code=97, hex=0x61, ascii="a" */ - 0x00, 0xC1, 0x83, 0xE6, 0x6C, 0xD9, 0xAE, 0x00, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x00, 0x01, 0xE6, 0x6C, 0x19, 0x9E, 0x00, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x0C, 0x19, 0xF6, 0x6C, 0xD9, 0x9D, 0x00, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x00, 0x01, 0xE6, 0x6F, 0xD8, 0x1E, 0x00, /* code=101, hex=0x65, ascii="e" */ - 0x00, 0x38, 0xD9, 0x87, 0xC6, 0x0C, 0x3C, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xCF, 0x83, 0x3C, /* code=103, hex=0x67, ascii="g" */ - 0x00, 0xC1, 0x83, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=104, hex=0x68, ascii="h" */ - 0x18, 0x30, 0x00, 0xC3, 0x83, 0x06, 0x1E, 0x00, /* code=105, hex=0x69, ascii="i" */ - 0x0C, 0x18, 0x00, 0x63, 0xC1, 0x93, 0x36, 0x38, /* code=106, hex=0x6A, ascii="j" */ - 0x00, 0xC1, 0x83, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=107, hex=0x6B, ascii="k" */ - 0x00, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x00, 0x03, 0x6F, 0xFA, 0xF5, 0xEB, 0x00, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x00, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x00, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x00, 0x03, 0xE6, 0x6C, 0xDD, 0xB6, 0x60, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xDB, 0x9B, 0x06, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x00, 0x01, 0x37, 0xE6, 0x0C, 0x3C, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x00, 0x01, 0xE6, 0x07, 0x81, 0x9E, 0x00, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x20, 0xC7, 0xE3, 0x06, 0x0D, 0x8E, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x00, 0x03, 0x36, 0x6C, 0xDB, 0x9B, 0x00, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x00, 0x06, 0x3C, 0x6D, 0x8E, 0x08, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x00, 0x06, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x00, 0x06, 0x36, 0xC7, 0x1B, 0x63, 0x00, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x00, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x00, 0x03, 0xF0, 0x63, 0x0C, 0x3F, 0x00, /* code=122, hex=0x7A, ascii="z" */ - 0x00, 0x38, 0xC1, 0x86, 0x06, 0x0C, 0x0E, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x18, 0x30, 0x60, 0xC0, 0x03, 0x06, 0x0C, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x00, 0xE0, 0x60, 0xC0, 0xC3, 0x06, 0x38, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x00, 0x20, 0xEB, 0x70, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x00, 0x00, 0x20, 0xE3, 0x6C, 0x5F, 0x80, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x78, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x66, 0xCC, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x0C, 0x30, 0x01, 0xF6, 0x2F, 0xD8, 0x1F, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x1C, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x36, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x18, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x1C, 0x28, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x00, 0x00, 0xE3, 0x6C, 0x0D, 0x8E, 0x78, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x08, 0x38, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x66, 0xCC, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x18, 0x18, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x66, 0xCC, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x10, 0x70, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x30, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0xC6, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x38, 0x50, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x1C, 0x61, 0xFB, 0x07, 0xCC, 0x18, 0x3F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x00, 0x03, 0xE1, 0xAF, 0xF6, 0x3F, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x3C, 0xE2, 0xC5, 0xFF, 0x36, 0x6F, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x10, 0x70, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x66, 0xCC, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x18, 0x18, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x08, 0x38, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x18, 0x18, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x66, 0xCC, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x66, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x66, 0x01, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x08, 0x10, 0xF3, 0x06, 0x07, 0x84, 0x08, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x1C, 0x6C, 0xC1, 0x87, 0xC6, 0x0F, 0x33, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x66, 0xCC, 0xF0, 0xC7, 0xE3, 0x1F, 0x8C, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0xE1, 0xA3, 0x47, 0xAC, 0xDB, 0xF3, 0x03, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x0E, 0x30, 0x60, 0xC7, 0xE3, 0x06, 0x0C, 0x70, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x06, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=160, hex=0xA0, ascii="! " */ - // 0x0C, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x0C, 0x30, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x0C, 0x30, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x77, 0xB8, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x77, 0xB8, 0x03, 0x37, 0x6F, 0xDB, 0xB3, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x38, 0x18, 0xF3, 0x63, 0x40, 0x1F, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x3C, 0xCD, 0x99, 0xE0, 0x0F, 0xC0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x00, 0x30, 0x00, 0xC3, 0x0C, 0x19, 0x9E, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x01, 0xE3, 0xC6, 0x0C, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x03, 0xE7, 0xC1, 0x83, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x60, 0xC1, 0x83, 0x71, 0xA0, 0x86, 0x0F, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x60, 0xC1, 0x83, 0x67, 0xC5, 0x9F, 0x06, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x00, 0x30, 0x00, 0xC1, 0x87, 0x8F, 0x0C, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x00, 0xCB, 0x3C, 0xCC, 0xCC, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x03, 0x33, 0x33, 0x2C, 0xF3, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x54, 0x02, 0xA8, 0x05, 0x40, 0x2A, 0x80, 0x54, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x92, 0x90, 0x94, 0x94, 0x84, 0xA4, 0xA4, 0x24, // /* code=177, hex=0xB1, ascii="!1" */ - // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x10, 0x20, 0x40, 0x8F, 0x02, 0x04, 0x08, 0x10, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x00, 0x07, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x28, 0x50, 0xA7, 0x40, 0x9D, 0x0A, 0x14, 0x28, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x28, 0x50, 0xA1, 0x42, 0x85, 0x0A, 0x14, 0x28, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x00, 0x07, 0xC0, 0x9D, 0x0A, 0x14, 0x28, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x28, 0x50, 0xA7, 0x40, 0x9F, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0x00, 0x0F, 0x02, 0x04, 0x08, 0x10, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x10, 0x20, 0x40, 0x81, 0xE0, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x10, 0x20, 0x40, 0x8F, 0xE0, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x04, 0x08, 0x10, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x10, 0x20, 0x40, 0x81, 0xE2, 0x04, 0x08, 0x10, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x10, 0x20, 0x40, 0x8F, 0xE2, 0x04, 0x08, 0x10, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x28, 0x50, 0xA1, 0x42, 0xE5, 0x0A, 0x14, 0x28, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x28, 0x50, 0xA1, 0x72, 0x07, 0xC0, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x00, 0x01, 0xF2, 0x05, 0xCA, 0x14, 0x28, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x28, 0x50, 0xA7, 0x70, 0x1F, 0xC0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x00, 0x07, 0xF0, 0x1D, 0xCA, 0x14, 0x28, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x28, 0x50, 0xA1, 0x72, 0x05, 0xCA, 0x14, 0x28, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x28, 0x50, 0xA7, 0x70, 0x1D, 0xCA, 0x14, 0x28, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x10, 0x20, 0x47, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC4, 0x08, 0x10, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x28, 0x50, 0xA1, 0x43, 0xE0, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC0, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x00, 0x00, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x00, 0x03, 0xE5, 0x0A, 0x14, 0x28, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x10, 0x20, 0x47, 0xF1, 0x1F, 0xC4, 0x08, 0x10, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x10, 0x20, 0x40, 0x8F, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x00, 0x01, 0xE2, 0x04, 0x08, 0x10, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, // /* code=220, hex=0xDC, ascii="!\" */ - // 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF0, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, // /* code=222, hex=0xDE, ascii="!^" */ - // 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x69, 0xA3, 0x46, 0x86, 0x80, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x7C, 0xCD, 0x9B, 0x66, 0x6C, 0x59, 0xB6, 0x08, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x00, 0xFD, 0x8B, 0x06, 0x0C, 0x18, 0x30, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x01, 0xB7, 0xFF, 0x6C, 0xDB, 0x36, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x01, 0xFF, 0x1B, 0x03, 0x86, 0x19, 0xFF, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x00, 0x01, 0xF6, 0xCD, 0x9B, 0x1C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x00, 0x01, 0xB3, 0x66, 0xCF, 0xB1, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x01, 0xEB, 0x50, 0xE1, 0x86, 0x0C, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x3C, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x1E, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x79, 0x9B, 0x37, 0xEC, 0xD9, 0x9E, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xC9, 0x33, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x00, 0x79, 0x81, 0x81, 0x87, 0x99, 0x9E, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x00, 0x01, 0xA4, 0xA9, 0x52, 0x9A, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x04, 0x79, 0x9B, 0x77, 0x6C, 0xCF, 0x08, 0x20, // /* code=237, hex=0xED, ascii="!m" */ - // 0x1E, 0x61, 0x83, 0x07, 0xEC, 0x0C, 0x0F, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0xB3, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x30, 0x63, 0xF1, 0x83, 0x00, 0x3F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x00, 0x60, 0x60, 0x61, 0x86, 0x00, 0x1E, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x18, 0x61, 0x81, 0x81, 0x80, 0x1E, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x0C, 0x34, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x2C, 0x30, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x30, 0x60, 0x07, 0xE0, 0x06, 0x0C, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x00, 0x6B, 0xB0, 0x03, 0x5D, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x00, 0x79, 0x9B, 0x33, 0xC0, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x00, 0xC1, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x0E, 0x18, 0x30, 0x60, 0xCD, 0x8F, 0x06, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x00, 0xF1, 0xB3, 0x66, 0xCD, 0x80, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x00, 0x71, 0x30, 0xC3, 0x0F, 0x80, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0xF9, 0xF3, 0xE7, 0xC0, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x1C, 0x85, 0x55, 0x41, 0x54, 0x8F, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x1C, 0xF6, 0x9A, 0x7D, 0x76, 0x0F, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xD7, 0xDF, 0x7C, 0xF1, 0xC2, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x21, 0xCF, 0x7C, 0xF1, 0xC2, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x1C, 0x70, 0x9A, 0x7D, 0xA0, 0x8F, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x08, 0x73, 0xDF, 0x7C, 0xA0, 0x87, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0xC7, 0x1C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x7D, 0xF7, 0x18, 0x61, 0xC7, 0xDF, 0x7C, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x31, 0xCC, 0x30, 0x70, 0xC0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x7D, 0xC6, 0x13, 0x4D, 0x87, 0x1F, 0x7C, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x04, 0x00, 0x43, 0x1C, 0xC3, 0x07, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x1C, 0xC3, 0x07, 0x0C, 0x70, 0xC3, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x71, 0x44, 0x10, 0x43, 0x0C, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x71, 0x07, 0x10, 0x43, 0x4D, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x48, 0xA1, 0xC5, 0x74, 0x72, 0x92, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x41, 0x87, 0x1C, 0x71, 0x84, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x00, 0x43, 0x1C, 0x30, 0x40, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x08, 0x73, 0xC2, 0x08, 0xF1, 0xC2, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x34, 0xD3, 0x4D, 0x34, 0x03, 0x4D, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x72, 0x8A, 0x1C, 0x20, 0x82, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x1C, 0xC3, 0x07, 0x30, 0xC1, 0xC0, 0x30, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC0, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x08, 0x73, 0xC2, 0x08, 0xF1, 0xC2, 0x3C, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x31, 0xCB, 0x0C, 0x30, 0xC3, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x30, 0xC3, 0x0C, 0xB1, 0xC3, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0xC1, 0x3C, 0x10, 0xC0, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0xC6, 0x3C, 0x60, 0xC0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x30, 0xC3, 0xC0, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x01, 0x0C, 0x7C, 0xC1, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x02, 0x1C, 0xF7, 0xC0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x1F, 0x3C, 0x70, 0x80, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x30, 0xC3, 0x0C, 0x00, 0xC3, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0xD3, 0x48, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xD3, 0x5F, 0x35, 0xF3, 0x4D, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x04, 0x31, 0xCC, 0x1C, 0x03, 0xC3, 0x08, /* code=36, hex=0x24, ascii="$" */ + 0x38, 0xA3, 0x81, 0x0C, 0x73, 0x41, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x1C, 0xD3, 0x47, 0x34, 0xD3, 0x47, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x00, 0x30, 0xC6, 0x18, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x10, 0xC6, 0x18, 0x60, 0xC1, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x60, 0xC1, 0x04, 0x10, 0xC6, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x83, 0x47, 0x7C, 0x73, 0x48, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0xC3, 0x3C, 0xF0, 0xC3, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x30, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x3C, 0xF0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x10, 0x43, 0x0C, 0x61, 0x8C, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x73, 0x0D, 0x38, 0xC3, 0x07, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x33, 0xC3, 0x0C, 0x30, 0xCF, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x73, 0x08, 0x0C, 0x63, 0x0F, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x73, 0x00, 0x0C, 0x03, 0x07, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x10, 0xC7, 0x34, 0xF0, 0x43, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0xF3, 0x0C, 0x3C, 0x03, 0x07, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x31, 0x8C, 0x3C, 0xC3, 0x07, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0xF3, 0x00, 0x04, 0x30, 0xC3, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x73, 0x0C, 0x1C, 0xC3, 0x07, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x73, 0x0C, 0x1C, 0x00, 0x47, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x01, 0x86, 0x00, 0x01, 0x86, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x01, 0x86, 0x00, 0x01, 0x86, 0x30, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x00, 0xC6, 0x30, 0x60, 0xC0, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x01, 0x83, 0x04, 0x31, 0x80, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x73, 0x00, 0x04, 0x30, 0x03, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x73, 0x0D, 0x34, 0xD3, 0x07, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x21, 0xC5, 0x34, 0xF6, 0x18, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0F, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0xF3, 0x0C, 0x30, 0xC3, 0x0F, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0F, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0C, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x73, 0x0C, 0x34, 0xC3, 0x07, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0xC3, 0x0C, 0x3C, 0xC3, 0x0C, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x70, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x30, 0x41, 0x04, 0xD3, 0x47, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0xC3, 0x4D, 0x3C, 0xD3, 0x4C, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x01, 0x86, 0x1D, 0x7D, 0xA6, 0x9A, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0xC3, 0x8E, 0x3C, 0xD3, 0x0C, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0xF3, 0x0C, 0x30, 0xF3, 0x0C, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x73, 0x0C, 0x30, 0xE3, 0x47, 0x00, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0xF3, 0x0C, 0x34, 0xF3, 0x4C, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x73, 0x0C, 0x1C, 0x03, 0x07, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0xF2, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0xC3, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x01, 0x86, 0x0D, 0x34, 0x71, 0xC2, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x01, 0x86, 0x9A, 0x68, 0xF3, 0x48, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0xC3, 0x07, 0x0C, 0x73, 0x0C, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0xC3, 0x0C, 0x1C, 0x30, 0xC7, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0xF3, 0x01, 0x0C, 0x63, 0x0F, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x71, 0x86, 0x18, 0x61, 0x87, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0xC3, 0x06, 0x18, 0x30, 0xC1, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x70, 0x41, 0x04, 0x10, 0x47, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x21, 0xCD, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3C, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x61, 0x83, 0x0C, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x07, 0x00, 0x73, 0x07, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x00, 0xC3, 0x0F, 0x30, 0xC3, 0x0B, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x07, 0x30, 0xF3, 0x07, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x31, 0x86, 0x3C, 0x61, 0x8F, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x07, 0x30, 0xC1, 0xC0, 0x1C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0xC3, 0x0D, 0x38, 0xC3, 0x0C, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x0C, 0x30, 0x03, 0x1C, 0x30, 0xC7, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x04, 0x10, 0x01, 0x1C, 0x12, 0x4D, 0x1C, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0xC3, 0x0C, 0x34, 0xF3, 0x4C, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x00, 0x30, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x0D, 0x7D, 0xA6, 0x9A, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x0D, 0x38, 0xC3, 0x0C, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x0F, 0x30, 0xC3, 0x8D, 0x30, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x07, 0x30, 0xC3, 0x46, 0x00, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x04, 0x3C, 0x61, 0x8F, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x07, 0x30, 0x70, 0x07, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x21, 0x9F, 0x18, 0x61, 0x83, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x0C, 0x30, 0xC3, 0x46, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x18, 0x60, 0xD1, 0xC2, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x1A, 0x68, 0xF3, 0x48, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x18, 0x34, 0x73, 0x58, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x0C, 0x30, 0x60, 0xCD, 0x1C, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x0F, 0x00, 0x31, 0x8F, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x31, 0x86, 0x30, 0x61, 0x83, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x0C, 0x30, 0xC3, 0x00, 0x30, 0xC3, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x00, 0xE0, 0xC3, 0x04, 0x30, 0xCE, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x21, 0xCD, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x43, 0x18, 0xC3, 0xC0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x3C, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x30, 0xC0, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x04, 0x30, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x0C, 0x60, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x18, 0x60, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x0C, 0x10, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x0C, 0x20, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x03, 0x18, 0xC1, 0x83, 0x3C, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x04, 0x30, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x30, 0xC0, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x0C, 0x10, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x30, 0xC0, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x08, 0x70, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x18, 0x30, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x60, 0x21, 0xC5, 0x34, 0xF6, 0x18, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x1C, 0x51, 0xC5, 0x34, 0xF6, 0x18, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x0C, 0x63, 0xCC, 0x3C, 0xC3, 0x0F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x0F, 0x0C, 0xF6, 0xCF, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x31, 0xCB, 0x2D, 0xF6, 0xDB, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x08, 0x70, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x30, 0xC0, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x0C, 0x10, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x04, 0x30, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x0C, 0x10, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x30, 0xC0, 0x0C, 0x30, 0x60, 0xCD, 0x1C, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x30, 0x01, 0xCC, 0x30, 0xC3, 0x07, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x30, 0x03, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x04, 0x11, 0xCC, 0x30, 0x70, 0x82, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x0C, 0x61, 0x86, 0x3C, 0x61, 0xCC, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x30, 0xC1, 0xC3, 0x3C, 0x33, 0xC3, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x71, 0xA6, 0x9E, 0x65, 0xB6, 0x40, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x04, 0x30, 0xC3, 0x3C, 0x30, 0xC3, 0x38, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x00, 0x10, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x04, 0x30, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x04, 0x30, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x04, 0x30, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x39, 0xB0, 0x0D, 0x38, 0xC3, 0x0C, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x39, 0xB0, 0x0C, 0x38, 0xF3, 0x4C, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x1C, 0x11, 0xCD, 0x18, 0x03, 0xC0, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x1C, 0xC3, 0x07, 0x00, 0xF0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x00, 0x30, 0x03, 0x18, 0xC3, 0x07, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x07, 0x1C, 0x61, 0x80, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x0F, 0x3C, 0x10, 0x40, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x30, 0xC3, 0x0D, 0x0C, 0x00, 0xC3, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x30, 0xC3, 0x0D, 0x3C, 0x53, 0xC1, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x30, 0x03, 0x0C, 0x71, 0xC3, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x01, 0x8C, 0x64, 0xC1, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x06, 0x4C, 0x18, 0xC6, 0x40, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x28, 0x05, 0x40, 0x28, 0x05, 0x40, 0x28, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x48, 0x91, 0x12, 0x24, 0x44, 0x89, 0x10, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x54, 0xA5, 0x4A, 0x54, 0xA5, 0x4A, 0x54, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x08, 0x20, 0x82, 0x78, 0x20, 0x82, 0x08, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x08, 0x20, 0x9E, 0x09, 0xE0, 0x82, 0x08, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x14, 0x51, 0x45, 0x74, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x7C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x1E, 0x09, 0xE0, 0x82, 0x08, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x14, 0x51, 0x5D, 0x05, 0xD1, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x1F, 0x05, 0xD1, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x14, 0x51, 0x5D, 0x05, 0xF0, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x14, 0x51, 0x45, 0x7C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x08, 0x20, 0x9E, 0x09, 0xE0, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x78, 0x20, 0x82, 0x08, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x08, 0x20, 0x82, 0x0C, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x08, 0x20, 0x82, 0x7C, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x7C, 0x20, 0x82, 0x08, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x08, 0x20, 0x82, 0x0C, 0x20, 0x82, 0x08, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x08, 0x20, 0x82, 0x7C, 0x20, 0x82, 0x08, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x08, 0x20, 0x83, 0x08, 0x30, 0x82, 0x08, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x14, 0x51, 0x45, 0x10, 0x70, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x07, 0x10, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x14, 0x51, 0x5D, 0x01, 0xF0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x1F, 0x01, 0xD1, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x14, 0x51, 0x45, 0x10, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x1F, 0x01, 0xF0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x14, 0x51, 0x5D, 0x01, 0xD1, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x08, 0x20, 0x9F, 0x01, 0xF0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x14, 0x51, 0x45, 0x7C, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x1F, 0x01, 0xF0, 0x82, 0x08, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x7C, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x14, 0x51, 0x45, 0x1C, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x08, 0x20, 0x83, 0x08, 0x30, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x03, 0x08, 0x30, 0x82, 0x08, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x1C, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x14, 0x51, 0x45, 0x74, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x08, 0x20, 0x9F, 0x09, 0xF0, 0x82, 0x08, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x08, 0x20, 0x82, 0x78, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x0C, 0x20, 0x82, 0x08, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0x7D, 0xF7, 0xDF, 0x7D, 0xF7, 0xDF, 0x7C, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x01, 0xF7, 0xDF, 0x7C, // /* code=220, hex=0xDC, ascii="!\" */ + // 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x78, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x04, 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=222, hex=0xDE, ascii="!^" */ + // 0x7D, 0xF7, 0xDF, 0x7C, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x63, 0x4D, 0x34, 0x60, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x3C, 0xC3, 0x0D, 0x30, 0xC3, 0x0D, 0x04, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x03, 0x5F, 0x78, 0xC3, 0x4D, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x01, 0xF6, 0x0C, 0x1C, 0x63, 0x1F, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x07, 0x34, 0xD3, 0x47, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x06, 0x18, 0x61, 0xCC, 0x20, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x03, 0xCD, 0x04, 0x10, 0xC3, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x1C, 0x31, 0xCC, 0x30, 0x70, 0xC7, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x73, 0x0C, 0x3C, 0xC3, 0x07, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x73, 0x0C, 0x30, 0xC1, 0x0C, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x73, 0x06, 0x0C, 0x73, 0x07, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x06, 0x24, 0x92, 0x46, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x73, 0x0D, 0x38, 0xC1, 0xC2, 0x10, // /* code=237, hex=0xED, ascii="!m" */ + // 0x0C, 0x63, 0x0C, 0x3C, 0xC1, 0x83, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x01, 0xCC, 0x30, 0xC3, 0x0C, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x30, 0xCF, 0x0C, 0x30, 0x0F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x00, 0x60, 0xC1, 0x0C, 0x60, 0x07, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x10, 0xC6, 0x0C, 0x10, 0x07, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x04, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xCB, 0x18, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x30, 0xC0, 0x3C, 0x00, 0xC3, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0xCE, 0x00, 0x33, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x73, 0x0C, 0x1C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0xC7, 0x1C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x03, 0x0C, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x04, 0x10, 0x41, 0x04, 0xD1, 0xC1, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x00, 0xF3, 0x4D, 0x34, 0xD0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x00, 0x72, 0x43, 0x18, 0xF0, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0xF3, 0xCF, 0x3C, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; From e50dc583e2e6332e8d7a95d97eaa3f3b66dacda1 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 18:50:34 +0100 Subject: [PATCH 12/17] fixed up the fonts --- wled00/src/font/console_font_4x6.h | 510 +++++++++++++-------------- wled00/src/font/console_font_5x12.h | 516 ++++++++++++++-------------- wled00/src/font/console_font_5x8.h | 516 ++++++++++++++-------------- wled00/src/font/console_font_6x8.h | 516 ++++++++++++++-------------- wled00/src/font/console_font_7x9.h | 516 ++++++++++++++-------------- 5 files changed, 1287 insertions(+), 1287 deletions(-) diff --git a/wled00/src/font/console_font_4x6.h b/wled00/src/font/console_font_4x6.h index ee97fe94bb..3032192f69 100644 --- a/wled00/src/font/console_font_4x6.h +++ b/wled00/src/font/console_font_4x6.h @@ -7,7 +7,7 @@ * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 6 - * [2] Fixed/max glyph width: 3 + * [2] Fixed/max glyph width: 4 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 @@ -40,262 +40,262 @@ static const unsigned char console_font_4x6[] PROGMEM = { - 0x57, 0x06, 0x03, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + 0x57, 0x06, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset // 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x04, 0x90, 0x00, // /* code=1, hex=0x01, ascii="^A" */ - // 0x04, 0x90, 0x00, // /* code=2, hex=0x02, ascii="^B" */ - // 0x04, 0x90, 0x00, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x90, 0x00, // /* code=4, hex=0x04, ascii="^D" */ - // 0x04, 0x82, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x00, 0x82, 0x00, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x6D, 0xB6, 0xC0, // /* code=8, hex=0x08, ascii="^H" */ - // 0x04, 0x90, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x69, 0x26, 0xC0, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x12, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x04, 0x10, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x02, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0x80, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x04, 0x90, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x24, 0x92, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x80, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x04, 0x10, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x24, 0x82, 0x00, // /* code=19, hex=0x13, ascii="^S" */ - // 0x2D, 0x92, 0x00, // /* code=20, hex=0x14, ascii="^T" */ - // 0x04, 0x82, 0x00, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x02, 0x00, // /* code=22, hex=0x16, ascii="^V" */ - // 0x04, 0x10, 0x40, // /* code=23, hex=0x17, ascii="^W" */ - // 0x04, 0x00, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x10, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x01, 0x80, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x05, 0x90, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x90, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x04, 0x90, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x90, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x04, 0x80, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + // 0x25, 0x75, 0x20, // /* code=1, hex=0x01, ascii="^A" */ + // 0x27, 0x57, 0x20, // /* code=2, hex=0x02, ascii="^B" */ + // 0x05, 0x77, 0x20, // /* code=3, hex=0x03, ascii="^C" */ + // 0x02, 0x77, 0x20, // /* code=4, hex=0x04, ascii="^D" */ + // 0x27, 0x72, 0x70, // /* code=5, hex=0x05, ascii="^E" */ + // 0x22, 0x72, 0x70, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x20, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xDF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x07, 0x57, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xF8, 0xA8, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x03, 0x16, 0x60, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x25, 0x27, 0x20, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x23, 0x22, 0x60, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x23, 0x51, 0x20, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x27, 0x57, 0x20, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x46, 0x76, 0x40, // /* code=16, hex=0x10, ascii="^P" */ + // 0x13, 0x73, 0x10, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x27, 0x27, 0x20, // /* code=18, hex=0x12, ascii="^R" */ + // 0x55, 0x50, 0x50, // /* code=19, hex=0x13, ascii="^S" */ + // 0x7D, 0xD5, 0x50, // /* code=20, hex=0x14, ascii="^T" */ + // 0x36, 0x53, 0x60, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x70, // /* code=22, hex=0x16, ascii="^V" */ + // 0x27, 0x27, 0x27, // /* code=23, hex=0x17, ascii="^W" */ + // 0x27, 0x22, 0x20, // /* code=24, hex=0x18, ascii="^X" */ + // 0x22, 0x27, 0x20, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x02, 0xF2, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x04, 0xF4, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x47, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x05, 0x75, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x02, 0x77, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x07, 0x72, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x00, 0x00, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x24, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x24, 0x92, 0x00, /* code=35, hex=0x23, ascii="#" */ - 0x00, 0x82, 0x00, /* code=36, hex=0x24, ascii="$" */ - 0x20, 0x10, 0x00, /* code=37, hex=0x25, ascii="%" */ - 0x04, 0x12, 0x00, /* code=38, hex=0x26, ascii="&" */ - 0x24, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x04, 0x90, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x20, 0x02, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x20, 0x82, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x80, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x02, 0x40, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x80, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x12, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x04, 0x92, 0x00, /* code=48, hex=0x30, ascii="0" */ - 0x04, 0x02, 0x00, /* code=49, hex=0x31, ascii="1" */ - 0x20, 0x12, 0x00, /* code=50, hex=0x32, ascii="2" */ - 0x20, 0x02, 0x00, /* code=51, hex=0x33, ascii="3" */ - 0x04, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x24, 0x82, 0x00, /* code=53, hex=0x35, ascii="5" */ - 0x04, 0x90, 0x00, /* code=54, hex=0x36, ascii="6" */ - 0x20, 0x00, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x04, 0x10, 0x00, /* code=56, hex=0x38, ascii="8" */ - 0x04, 0x00, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x02, 0x40, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x80, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x82, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x20, 0x02, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x20, 0x00, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x24, 0x92, 0x00, /* code=64, hex=0x40, ascii="@" */ - 0x04, 0x92, 0x00, /* code=65, hex=0x41, ascii="A" */ - 0x24, 0x92, 0x00, /* code=66, hex=0x42, ascii="B" */ - 0x04, 0x90, 0x00, /* code=67, hex=0x43, ascii="C" */ - 0x24, 0x92, 0x00, /* code=68, hex=0x44, ascii="D" */ - 0x24, 0x92, 0x00, /* code=69, hex=0x45, ascii="E" */ - 0x24, 0x92, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x04, 0x90, 0x00, /* code=71, hex=0x47, ascii="G" */ - 0x24, 0x92, 0x00, /* code=72, hex=0x48, ascii="H" */ - 0x20, 0x02, 0x00, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x10, 0x00, /* code=74, hex=0x4A, ascii="J" */ - 0x24, 0x92, 0x00, /* code=75, hex=0x4B, ascii="K" */ - 0x24, 0x92, 0x00, /* code=76, hex=0x4C, ascii="L" */ - 0x24, 0x92, 0x00, /* code=77, hex=0x4D, ascii="M" */ - 0x24, 0x92, 0x00, /* code=78, hex=0x4E, ascii="N" */ - 0x04, 0x90, 0x00, /* code=79, hex=0x4F, ascii="O" */ - 0x24, 0x92, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x04, 0x90, 0x00, /* code=81, hex=0x51, ascii="Q" */ - 0x24, 0x92, 0x00, /* code=82, hex=0x52, ascii="R" */ - 0x04, 0x82, 0x00, /* code=83, hex=0x53, ascii="S" */ - 0x20, 0x00, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x24, 0x92, 0x00, /* code=85, hex=0x55, ascii="U" */ - 0x24, 0x90, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x24, 0x92, 0x00, /* code=87, hex=0x57, ascii="W" */ - 0x24, 0x12, 0x00, /* code=88, hex=0x58, ascii="X" */ - 0x24, 0x00, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x20, 0x12, 0x00, /* code=90, hex=0x5A, ascii="Z" */ - 0x24, 0x92, 0x00, /* code=91, hex=0x5B, ascii="[" */ - 0x24, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x20, 0x02, 0x00, /* code=93, hex=0x5D, ascii="]" */ - 0x04, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0xC0, /* code=95, hex=0x5F, ascii="_" */ - 0x20, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x12, 0x00, /* code=97, hex=0x61, ascii="a" */ - 0x24, 0x92, 0x00, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x10, 0x00, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x10, 0x00, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x90, 0x00, /* code=101, hex=0x65, ascii="e" */ - 0x00, 0x80, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x90, 0x40, /* code=103, hex=0x67, ascii="g" */ - 0x24, 0x92, 0x00, /* code=104, hex=0x68, ascii="h" */ - 0x00, 0x00, 0x00, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x00, 0x40, /* code=106, hex=0x6A, ascii="j" */ - 0x24, 0x92, 0x00, /* code=107, hex=0x6B, ascii="k" */ - 0x00, 0x00, 0x00, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x92, 0x00, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x92, 0x00, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x10, 0x00, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x92, 0x40, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x10, 0x00, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x92, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x02, 0x00, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x80, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x92, 0x00, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x90, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x92, 0x00, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x82, 0x00, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x90, 0x40, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x80, 0x00, /* code=122, hex=0x7A, ascii="z" */ - 0x00, 0x80, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x00, 0x00, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x20, 0x02, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x28, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x00, 0x90, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x04, 0x90, 0x40, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x20, 0x90, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x00, 0x90, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x04, 0x12, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x20, 0x12, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x20, 0x12, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x00, 0x12, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x04, 0x90, 0x40, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x04, 0x90, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x20, 0x90, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x20, 0x90, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x20, 0x00, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x04, 0x00, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x20, 0x00, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x20, 0x92, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x00, 0x92, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x00, 0x92, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x12, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x04, 0x92, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x04, 0x10, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x20, 0x10, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x20, 0x10, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x04, 0x12, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x20, 0x92, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x20, 0x90, 0x40, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x20, 0x90, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x20, 0x92, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x04, 0x90, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x00, 0x82, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x24, 0x10, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x04, 0x92, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x00, 0x02, 0x00, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x00, 0x12, 0x00, // /* code=160, hex=0xA0, ascii="! " */ - // 0x00, 0x00, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x00, 0x92, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x00, 0x12, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x20, 0x92, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x20, 0x92, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x04, 0x82, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x04, 0x02, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x00, 0x10, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x04, 0x90, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x0C, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x24, 0x10, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x24, 0x10, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x00, 0x00, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x05, 0x10, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x08, 0xA0, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x20, 0x82, 0x00, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x28, 0xA2, 0x80, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x4D, 0x34, 0xC0, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x00, 0x00, 0x00, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x01, 0x80, 0x00, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x0C, 0x30, 0x00, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x25, 0x92, 0x40, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x01, 0x92, 0x40, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x0C, 0x30, 0x00, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x2C, 0x32, 0x40, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x24, 0x92, 0x40, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x0C, 0x32, 0x40, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x2C, 0x30, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x25, 0x80, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x0C, 0x30, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x01, 0x80, 0x00, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x01, 0x80, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x01, 0x80, 0x00, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x00, 0x00, 0x00, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x01, 0x80, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x01, 0x80, 0x00, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x00, 0x00, 0x00, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x24, 0x92, 0x40, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x24, 0x90, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x04, 0x92, 0x40, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x2C, 0x30, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x0C, 0x32, 0x40, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x24, 0x92, 0x40, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x0C, 0x30, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x2C, 0x32, 0x40, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x0C, 0x30, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x25, 0x80, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x0C, 0x30, 0x00, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x01, 0x92, 0x40, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x24, 0x80, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x00, 0x00, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x92, 0x40, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x25, 0x92, 0x40, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x0C, 0x30, 0x00, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x01, 0x80, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x00, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0x6D, 0xB6, 0xC0, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x36, 0xC0, // /* code=220, hex=0xDC, ascii="!\" */ - // 0x6D, 0xB6, 0xC0, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x00, 0x00, 0x00, // /* code=222, hex=0xDE, ascii="!^" */ - // 0x6D, 0x80, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x92, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x04, 0x92, 0x40, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x24, 0x92, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x24, 0x92, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x24, 0x12, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x10, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x92, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x80, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x20, 0x82, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x04, 0x90, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x92, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x04, 0x10, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x92, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x04, 0x90, 0x00, // /* code=237, hex=0xED, ascii="!m" */ - // 0x04, 0x90, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x04, 0x92, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x20, 0x82, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x04, 0x02, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x20, 0x82, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x04, 0x02, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x00, 0x00, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x00, 0x02, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x80, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x05, 0x14, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x04, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x80, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x00, 0x10, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x24, 0x80, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x20, 0x90, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x90, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + 0x22, 0x20, 0x20, /* code=33, hex=0x21, ascii="!" */ + 0x55, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x57, 0x57, 0x50, /* code=35, hex=0x23, ascii="#" */ + 0x23, 0x63, 0x62, /* code=36, hex=0x24, ascii="$" */ + 0x41, 0x24, 0x10, /* code=37, hex=0x25, ascii="%" */ + 0x25, 0x35, 0x70, /* code=38, hex=0x26, ascii="&" */ + 0x64, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x24, 0x44, 0x20, /* code=40, hex=0x28, ascii="(" */ + 0x42, 0x22, 0x40, /* code=41, hex=0x29, ascii=")" */ + 0x52, 0x72, 0x50, /* code=42, hex=0x2A, ascii="*" */ + 0x02, 0x72, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x64, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x70, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x20, /* code=46, hex=0x2E, ascii="." */ + 0x11, 0x24, 0x40, /* code=47, hex=0x2F, ascii="/" */ + 0x35, 0x55, 0x60, /* code=48, hex=0x30, ascii="0" */ + 0x26, 0x22, 0x70, /* code=49, hex=0x31, ascii="1" */ + 0x61, 0x24, 0x70, /* code=50, hex=0x32, ascii="2" */ + 0x61, 0x21, 0x60, /* code=51, hex=0x33, ascii="3" */ + 0x15, 0x71, 0x10, /* code=52, hex=0x34, ascii="4" */ + 0x74, 0x61, 0x60, /* code=53, hex=0x35, ascii="5" */ + 0x24, 0x65, 0x20, /* code=54, hex=0x36, ascii="6" */ + 0x71, 0x32, 0x20, /* code=55, hex=0x37, ascii="7" */ + 0x25, 0x25, 0x20, /* code=56, hex=0x38, ascii="8" */ + 0x25, 0x31, 0x20, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x20, 0x20, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x20, 0x64, /* code=59, hex=0x3B, ascii=";" */ + 0x12, 0x42, 0x10, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x70, 0x70, /* code=61, hex=0x3D, ascii="=" */ + 0x42, 0x12, 0x40, /* code=62, hex=0x3E, ascii=">" */ + 0x61, 0x20, 0x20, /* code=63, hex=0x3F, ascii="?" */ + 0x75, 0x54, 0x70, /* code=64, hex=0x40, ascii="@" */ + 0x25, 0x75, 0x50, /* code=65, hex=0x41, ascii="A" */ + 0x65, 0x65, 0x60, /* code=66, hex=0x42, ascii="B" */ + 0x34, 0x44, 0x30, /* code=67, hex=0x43, ascii="C" */ + 0x65, 0x55, 0x60, /* code=68, hex=0x44, ascii="D" */ + 0x74, 0x64, 0x70, /* code=69, hex=0x45, ascii="E" */ + 0x74, 0x64, 0x40, /* code=70, hex=0x46, ascii="F" */ + 0x34, 0x55, 0x30, /* code=71, hex=0x47, ascii="G" */ + 0x55, 0x75, 0x50, /* code=72, hex=0x48, ascii="H" */ + 0x72, 0x22, 0x70, /* code=73, hex=0x49, ascii="I" */ + 0x11, 0x15, 0x20, /* code=74, hex=0x4A, ascii="J" */ + 0x55, 0x65, 0x50, /* code=75, hex=0x4B, ascii="K" */ + 0x44, 0x44, 0x70, /* code=76, hex=0x4C, ascii="L" */ + 0x57, 0x75, 0x50, /* code=77, hex=0x4D, ascii="M" */ + 0x57, 0x55, 0x50, /* code=78, hex=0x4E, ascii="N" */ + 0x25, 0x55, 0x20, /* code=79, hex=0x4F, ascii="O" */ + 0x65, 0x64, 0x40, /* code=80, hex=0x50, ascii="P" */ + 0x25, 0x57, 0x30, /* code=81, hex=0x51, ascii="Q" */ + 0x65, 0x65, 0x50, /* code=82, hex=0x52, ascii="R" */ + 0x34, 0x71, 0x60, /* code=83, hex=0x53, ascii="S" */ + 0x72, 0x22, 0x20, /* code=84, hex=0x54, ascii="T" */ + 0x55, 0x55, 0x70, /* code=85, hex=0x55, ascii="U" */ + 0x55, 0x55, 0x20, /* code=86, hex=0x56, ascii="V" */ + 0x55, 0x77, 0x50, /* code=87, hex=0x57, ascii="W" */ + 0x55, 0x25, 0x50, /* code=88, hex=0x58, ascii="X" */ + 0x55, 0x22, 0x20, /* code=89, hex=0x59, ascii="Y" */ + 0x71, 0x24, 0x70, /* code=90, hex=0x5A, ascii="Z" */ + 0x64, 0x44, 0x60, /* code=91, hex=0x5B, ascii="[" */ + 0x44, 0x21, 0x10, /* code=92, hex=0x5C, ascii="\" */ + 0x62, 0x22, 0x60, /* code=93, hex=0x5D, ascii="]" */ + 0x25, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x0F, /* code=95, hex=0x5F, ascii="_" */ + 0x62, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x35, 0x70, /* code=97, hex=0x61, ascii="a" */ + 0x44, 0x65, 0x60, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x34, 0x30, /* code=99, hex=0x63, ascii="c" */ + 0x11, 0x35, 0x30, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x76, 0x30, /* code=101, hex=0x65, ascii="e" */ + 0x12, 0x72, 0x20, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x75, 0x17, /* code=103, hex=0x67, ascii="g" */ + 0x44, 0x65, 0x50, /* code=104, hex=0x68, ascii="h" */ + 0x20, 0x22, 0x20, /* code=105, hex=0x69, ascii="i" */ + 0x20, 0x22, 0x26, /* code=106, hex=0x6A, ascii="j" */ + 0x44, 0x56, 0x50, /* code=107, hex=0x6B, ascii="k" */ + 0x22, 0x22, 0x20, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x77, 0x50, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x65, 0x50, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x25, 0x20, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x65, 0x64, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x35, 0x31, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x64, 0x40, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x32, 0x60, /* code=115, hex=0x73, ascii="s" */ + 0x02, 0x72, 0x30, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x55, 0x70, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x55, 0x20, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x57, 0x70, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x52, 0x50, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x55, 0x24, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x62, 0x30, /* code=122, hex=0x7A, ascii="z" */ + 0x32, 0x62, 0x30, /* code=123, hex=0x7B, ascii="{" */ + 0x22, 0x22, 0x20, /* code=124, hex=0x7C, ascii="|" */ + 0x62, 0x32, 0x60, /* code=125, hex=0x7D, ascii="}" */ + 0x5A, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x02, 0x57, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x34, 0x47, 0x24, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x50, 0x55, 0x30, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x12, 0x76, 0x30, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x25, 0x35, 0x70, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x50, 0x35, 0x70, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x42, 0x35, 0x70, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x20, 0x35, 0x70, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x07, 0x47, 0x26, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x25, 0x76, 0x30, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x50, 0x76, 0x30, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x42, 0x76, 0x30, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x50, 0x22, 0x20, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x25, 0x02, 0x20, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x42, 0x02, 0x20, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x52, 0x57, 0x50, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x22, 0x57, 0x50, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x12, 0x76, 0x70, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x37, 0x60, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x36, 0x76, 0x70, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x25, 0x25, 0x20, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x50, 0x25, 0x20, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x42, 0x25, 0x20, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x25, 0x05, 0x70, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x42, 0x55, 0x70, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x50, 0x55, 0x24, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x52, 0x55, 0x20, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x55, 0x70, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x27, 0x47, 0x20, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x12, 0x72, 0x70, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x57, 0x27, 0x20, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x65, 0x50, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x32, 0x32, 0x60, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x12, 0x35, 0x70, // /* code=160, hex=0xA0, ascii="! " */ + // 0x12, 0x02, 0x20, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x12, 0x75, 0x70, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x12, 0x05, 0x70, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x70, 0x75, 0x50, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x70, 0x57, 0x50, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x35, 0x70, 0x70, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x25, 0x20, 0x70, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x20, 0x24, 0x30, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x07, 0x44, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x0E, 0x22, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x45, 0x25, 0x30, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x45, 0x27, 0x10, // /* code=172, hex=0xAC, ascii="!," */ + // 0x20, 0x22, 0x20, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x05, 0xA5, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x0A, 0x5A, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x41, 0x41, 0x41, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x5A, 0x5A, 0x5A, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xBE, 0xBE, 0xBE, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x22, 0x22, 0x22, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x22, 0xE2, 0x22, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x2E, 0x2E, 0x22, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x55, 0xD5, 0x55, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0xF5, 0x55, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x0E, 0x2E, 0x22, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x5D, 0x1D, 0x55, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x55, 0x55, 0x55, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x0F, 0x1D, 0x55, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x5D, 0x1F, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x55, 0xF0, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x2E, 0x2E, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0xE2, 0x22, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x22, 0x30, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x22, 0xF0, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0xF2, 0x22, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x22, 0x32, 0x22, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0xF0, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x22, 0xF2, 0x22, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x23, 0x23, 0x22, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x55, 0x55, 0x55, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x55, 0x47, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x07, 0x45, 0x55, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x5D, 0x0F, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x0F, 0x0D, 0x55, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x55, 0x45, 0x55, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x0F, 0x0F, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x5D, 0x0D, 0x55, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x2F, 0x0F, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x55, 0xF0, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x0F, 0x0F, 0x22, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0xF5, 0x55, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x55, 0x70, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x23, 0x23, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x03, 0x23, 0x22, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x75, 0x55, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x55, 0xD5, 0x55, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x2F, 0x0F, 0x22, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x22, 0xE0, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x32, 0x22, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x0F, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xCC, 0xCC, 0xCC, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x33, 0x33, 0x33, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xF0, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x76, 0x70, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x25, 0x65, 0x64, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x75, 0x44, 0x40, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x75, 0x55, 0x50, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x74, 0x24, 0x70, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x35, 0x20, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x55, 0x74, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x01, 0x62, 0x20, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x72, 0x52, 0x70, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x25, 0x75, 0x20, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x02, 0x55, 0x50, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x34, 0x25, 0x20, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x75, 0x70, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x27, 0x57, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x34, 0x74, 0x30, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x25, 0x55, 0x50, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x70, 0x70, 0x70, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x27, 0x20, 0x70, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x61, 0x60, 0x70, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x34, 0x30, 0x70, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x01, 0x22, 0x22, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x22, 0x22, 0x40, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x20, 0x70, 0x20, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x05, 0xA5, 0xA0, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x25, 0x20, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x02, 0x72, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x20, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x32, 0x26, 0x20, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x75, 0x50, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x62, 0x46, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x66, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ // 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_5x12.h b/wled00/src/font/console_font_5x12.h index 95288f8691..24d37cb011 100644 --- a/wled00/src/font/console_font_5x12.h +++ b/wled00/src/font/console_font_5x12.h @@ -7,7 +7,7 @@ * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 12 - * [2] Fixed/max glyph width: 4 + * [2] Fixed/max glyph width: 5 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 @@ -39,262 +39,262 @@ */ static const unsigned char console_font_5x12[] PROGMEM = { - 0x57, 0x0C, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + 0x57, 0x0C, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x34, 0x46, 0x44, 0x65, 0x43, 0x00, // /* code=1, hex=0x01, ascii="^A" */ - // 0x37, 0x75, 0x77, 0x56, 0x73, 0x00, // /* code=2, hex=0x02, ascii="^B" */ - // 0x02, 0x67, 0x77, 0x73, 0x31, 0x10, // /* code=3, hex=0x03, ascii="^C" */ - // 0x11, 0x33, 0x77, 0x73, 0x31, 0x10, // /* code=4, hex=0x04, ascii="^D" */ - // 0x13, 0x33, 0x17, 0x73, 0x13, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x11, 0x33, 0x77, 0x73, 0x13, 0x00, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x77, 0x77, 0x74, 0x47, 0x77, 0x77, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x00, 0x32, 0x23, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x77, 0x77, 0x45, 0x54, 0x77, 0x77, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x10, 0x13, 0x44, 0x43, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x03, 0x44, 0x43, 0x22, 0x72, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x11, 0x11, 0x11, 0x76, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x12, 0x32, 0x22, 0x33, 0x66, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x00, 0x00, 0x53, 0x43, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x46, 0x77, 0x76, 0x40, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x01, 0x37, 0x31, 0x00, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x01, 0x35, 0x11, 0x15, 0x31, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x00, 0x22, 0x22, 0x20, 0x22, 0x00, // /* code=19, hex=0x13, ascii="^S" */ - // 0x03, 0x66, 0x66, 0x22, 0x22, 0x00, // /* code=20, hex=0x14, ascii="^T" */ - // 0x03, 0x44, 0x34, 0x30, 0x43, 0x00, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, // /* code=22, hex=0x16, ascii="^V" */ - // 0x01, 0x35, 0x11, 0x15, 0x31, 0x70, // /* code=23, hex=0x17, ascii="^W" */ - // 0x01, 0x35, 0x11, 0x11, 0x11, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x11, 0x11, 0x15, 0x31, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x02, 0x17, 0x12, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x01, 0x27, 0x21, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x02, 0x27, 0x22, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x01, 0x13, 0x37, 0x00, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x07, 0x33, 0x11, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x01, 0x11, 0x11, 0x10, 0x11, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x02, 0x27, 0x22, 0x72, 0x20, 0x00, /* code=35, hex=0x23, ascii="#" */ - 0x02, 0x34, 0x42, 0x10, 0x43, 0x10, /* code=36, hex=0x24, ascii="$" */ - 0x06, 0x61, 0x12, 0x22, 0x55, 0x00, /* code=37, hex=0x25, ascii="%" */ - 0x02, 0x55, 0x52, 0x54, 0x43, 0x00, /* code=38, hex=0x26, ascii="&" */ - 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x01, 0x22, 0x22, 0x22, 0x21, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x02, 0x11, 0x11, 0x11, 0x12, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x15, 0x33, 0x51, 0x00, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x01, 0x17, 0x11, 0x00, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x01, 0x12, 0x22, 0x44, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x03, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=48, hex=0x30, ascii="0" */ - 0x01, 0x35, 0x11, 0x11, 0x17, 0x00, /* code=49, hex=0x31, ascii="1" */ - 0x03, 0x44, 0x01, 0x24, 0x47, 0x00, /* code=50, hex=0x32, ascii="2" */ - 0x03, 0x40, 0x03, 0x00, 0x43, 0x00, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x12, 0x24, 0x70, 0x00, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x07, 0x44, 0x47, 0x00, 0x43, 0x00, /* code=53, hex=0x35, ascii="5" */ - 0x01, 0x24, 0x74, 0x44, 0x43, 0x00, /* code=54, hex=0x36, ascii="6" */ - 0x07, 0x00, 0x01, 0x12, 0x22, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x03, 0x44, 0x43, 0x44, 0x43, 0x00, /* code=56, hex=0x38, ascii="8" */ - 0x03, 0x44, 0x44, 0x30, 0x16, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x00, 0x33, 0x00, 0x33, 0x12, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x01, 0x24, 0x42, 0x10, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x42, 0x10, 0x01, 0x24, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x03, 0x44, 0x01, 0x10, 0x11, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x03, 0x44, 0x45, 0x54, 0x43, 0x00, /* code=64, hex=0x40, ascii="@" */ - 0x03, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=65, hex=0x41, ascii="A" */ - 0x07, 0x44, 0x47, 0x44, 0x47, 0x00, /* code=66, hex=0x42, ascii="B" */ - 0x03, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=67, hex=0x43, ascii="C" */ - 0x07, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=68, hex=0x44, ascii="D" */ - 0x07, 0x44, 0x47, 0x44, 0x47, 0x00, /* code=69, hex=0x45, ascii="E" */ - 0x07, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x03, 0x44, 0x44, 0x54, 0x43, 0x00, /* code=71, hex=0x47, ascii="G" */ - 0x04, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=72, hex=0x48, ascii="H" */ - 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=73, hex=0x49, ascii="I" */ - 0x03, 0x11, 0x11, 0x15, 0x52, 0x00, /* code=74, hex=0x4A, ascii="J" */ - 0x04, 0x45, 0x56, 0x55, 0x44, 0x00, /* code=75, hex=0x4B, ascii="K" */ - 0x04, 0x44, 0x44, 0x44, 0x47, 0x00, /* code=76, hex=0x4C, ascii="L" */ - 0x04, 0x47, 0x74, 0x44, 0x44, 0x00, /* code=77, hex=0x4D, ascii="M" */ - 0x04, 0x46, 0x65, 0x54, 0x44, 0x00, /* code=78, hex=0x4E, ascii="N" */ - 0x03, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=79, hex=0x4F, ascii="O" */ - 0x07, 0x44, 0x47, 0x44, 0x44, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x03, 0x44, 0x44, 0x44, 0x43, 0x10, /* code=81, hex=0x51, ascii="Q" */ - 0x07, 0x44, 0x47, 0x65, 0x44, 0x00, /* code=82, hex=0x52, ascii="R" */ - 0x03, 0x44, 0x43, 0x04, 0x43, 0x00, /* code=83, hex=0x53, ascii="S" */ - 0x07, 0x11, 0x11, 0x11, 0x11, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x04, 0x44, 0x44, 0x44, 0x43, 0x00, /* code=85, hex=0x55, ascii="U" */ - 0x04, 0x44, 0x44, 0x22, 0x11, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x04, 0x44, 0x44, 0x47, 0x44, 0x00, /* code=87, hex=0x57, ascii="W" */ - 0x04, 0x44, 0x33, 0x34, 0x44, 0x00, /* code=88, hex=0x58, ascii="X" */ - 0x04, 0x44, 0x22, 0x11, 0x11, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x07, 0x01, 0x12, 0x24, 0x47, 0x00, /* code=90, hex=0x5A, ascii="Z" */ - 0x03, 0x22, 0x22, 0x22, 0x23, 0x00, /* code=91, hex=0x5B, ascii="[" */ - 0x04, 0x42, 0x21, 0x11, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=93, hex=0x5D, ascii="]" */ - 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* code=95, hex=0x5F, ascii="_" */ - 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x00, 0x30, 0x34, 0x43, 0x00, /* code=97, hex=0x61, ascii="a" */ - 0x04, 0x44, 0x74, 0x44, 0x47, 0x00, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x00, 0x34, 0x47, 0x43, 0x00, /* code=101, hex=0x65, ascii="e" */ - 0x01, 0x22, 0x72, 0x22, 0x22, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x00, 0x34, 0x44, 0x43, 0x03, /* code=103, hex=0x67, ascii="g" */ - 0x04, 0x44, 0x74, 0x44, 0x44, 0x00, /* code=104, hex=0x68, ascii="h" */ - 0x00, 0x10, 0x11, 0x11, 0x13, 0x00, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x10, 0x11, 0x11, 0x11, 0x52, /* code=106, hex=0x6A, ascii="j" */ - 0x04, 0x44, 0x45, 0x66, 0x54, 0x00, /* code=107, hex=0x6B, ascii="k" */ - 0x03, 0x11, 0x11, 0x11, 0x13, 0x00, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x00, 0x47, 0x44, 0x44, 0x00, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x00, 0x56, 0x44, 0x44, 0x00, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x00, 0x74, 0x44, 0x47, 0x44, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x00, 0x34, 0x44, 0x43, 0x00, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x00, 0x52, 0x22, 0x22, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x00, 0x34, 0x21, 0x43, 0x00, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x22, 0x72, 0x22, 0x23, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x00, 0x44, 0x44, 0x43, 0x00, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x00, 0x44, 0x22, 0x11, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x00, 0x44, 0x44, 0x74, 0x00, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x00, 0x44, 0x33, 0x44, 0x00, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x00, 0x44, 0x44, 0x43, 0x07, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x00, 0x70, 0x12, 0x47, 0x00, /* code=122, hex=0x7A, ascii="z" */ - 0x01, 0x22, 0x24, 0x22, 0x21, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x11, 0x11, 0x01, 0x11, 0x11, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x02, 0x11, 0x10, 0x11, 0x12, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x01, 0x12, 0x24, 0x44, 0x47, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x03, 0x44, 0x44, 0x44, 0x43, 0x12, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x00, 0x20, 0x44, 0x44, 0x43, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x01, 0x20, 0x34, 0x47, 0x43, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x03, 0x40, 0x34, 0x03, 0x43, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x00, 0x20, 0x34, 0x03, 0x43, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x06, 0x10, 0x34, 0x03, 0x43, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x01, 0x21, 0x34, 0x03, 0x43, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x00, 0x34, 0x44, 0x43, 0x16, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x03, 0x40, 0x34, 0x47, 0x43, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x00, 0x20, 0x34, 0x47, 0x43, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x06, 0x10, 0x34, 0x47, 0x43, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x00, 0x20, 0x31, 0x11, 0x13, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x03, 0x40, 0x31, 0x11, 0x13, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x03, 0x00, 0x31, 0x11, 0x13, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x20, 0x34, 0x44, 0x74, 0x44, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x12, 0x13, 0x44, 0x74, 0x44, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x12, 0x07, 0x44, 0x74, 0x47, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x00, 0x31, 0x13, 0x52, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x37, 0x55, 0x75, 0x55, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x03, 0x40, 0x34, 0x44, 0x43, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x00, 0x20, 0x34, 0x44, 0x43, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x03, 0x00, 0x34, 0x44, 0x43, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x03, 0x40, 0x44, 0x44, 0x43, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x06, 0x10, 0x44, 0x44, 0x43, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x00, 0x20, 0x44, 0x44, 0x43, 0x07, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x20, 0x34, 0x44, 0x44, 0x43, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x20, 0x44, 0x44, 0x44, 0x43, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x01, 0x34, 0x44, 0x31, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x01, 0x22, 0x27, 0x22, 0x67, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x04, 0x22, 0x71, 0x71, 0x11, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x07, 0x44, 0x74, 0x54, 0x44, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x01, 0x11, 0x13, 0x11, 0x11, 0x52, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x01, 0x20, 0x34, 0x03, 0x43, 0x00, // /* code=160, hex=0xA0, ascii="! " */ - // 0x01, 0x20, 0x31, 0x11, 0x13, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x01, 0x20, 0x34, 0x44, 0x43, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x01, 0x20, 0x44, 0x44, 0x43, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x02, 0x50, 0x56, 0x44, 0x44, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x25, 0x04, 0x67, 0x54, 0x44, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x03, 0x03, 0x43, 0x07, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x03, 0x44, 0x43, 0x07, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x02, 0x20, 0x22, 0x44, 0x43, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x02, 0x22, 0x12, 0x34, 0x51, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x02, 0x22, 0x12, 0x25, 0x50, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x00, 0x10, 0x11, 0x11, 0x11, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x02, 0x25, 0x52, 0x20, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x05, 0x52, 0x25, 0x50, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x00, 0x50, 0x02, 0x00, 0x50, 0x02, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x11, 0x11, 0x17, 0x11, 0x11, 0x11, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x11, 0x11, 0x71, 0x71, 0x11, 0x11, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x22, 0x22, 0x26, 0x22, 0x22, 0x22, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0x07, 0x22, 0x22, 0x22, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x00, 0x71, 0x71, 0x11, 0x11, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x22, 0x22, 0x60, 0x62, 0x22, 0x22, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x00, 0x70, 0x62, 0x22, 0x22, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x22, 0x22, 0x60, 0x70, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x22, 0x22, 0x27, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x11, 0x11, 0x71, 0x70, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0x07, 0x11, 0x11, 0x11, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0x07, 0x11, 0x11, 0x11, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x11, 0x11, 0x17, 0x11, 0x11, 0x11, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x22, 0x22, 0x22, 0x30, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x00, 0x32, 0x22, 0x22, 0x22, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x22, 0x22, 0x60, 0x70, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x00, 0x70, 0x62, 0x22, 0x22, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x22, 0x22, 0x60, 0x62, 0x22, 0x22, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x11, 0x11, 0x70, 0x70, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x22, 0x22, 0x27, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x00, 0x70, 0x71, 0x11, 0x11, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0x07, 0x22, 0x22, 0x22, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x22, 0x22, 0x23, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x03, 0x22, 0x22, 0x22, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x22, 0x22, 0x26, 0x22, 0x22, 0x22, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x11, 0x11, 0x70, 0x71, 0x11, 0x11, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, // /* code=220, hex=0xDC, ascii="!\" */ - // 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // /* code=222, hex=0xDE, ascii="!^" */ - // 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x02, 0x55, 0x55, 0x20, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x03, 0x44, 0x57, 0x44, 0x47, 0x44, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x00, 0x32, 0x22, 0x22, 0x22, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x00, 0x07, 0x22, 0x22, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x00, 0x07, 0x21, 0x01, 0x27, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x00, 0x75, 0x55, 0x20, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x00, 0x44, 0x44, 0x47, 0x44, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x00, 0x02, 0x51, 0x11, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x00, 0x00, 0x31, 0x22, 0x13, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x01, 0x24, 0x74, 0x21, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x01, 0x24, 0x42, 0x26, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x00, 0x12, 0x21, 0x34, 0x43, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x00, 0x25, 0x52, 0x00, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x11, 0x35, 0x53, 0x11, 0x00, // /* code=237, hex=0xED, ascii="!m" */ - // 0x00, 0x03, 0x44, 0x74, 0x43, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0x03, 0x44, 0x44, 0x40, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x01, 0x17, 0x11, 0x07, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x04, 0x21, 0x01, 0x24, 0x07, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x12, 0x42, 0x10, 0x07, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x11, 0x11, 0x11, 0x11, 0x52, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x11, 0x07, 0x01, 0x10, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x00, 0x25, 0x02, 0x50, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x34, 0x43, 0x00, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0x13, 0x10, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x01, 0x11, 0x11, 0x55, 0x31, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x56, 0x44, 0x44, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x34, 0x03, 0x47, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x03, 0x33, 0x33, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x74, 0x63, 0xB8, 0xC7, 0x75, 0x8B, 0x80, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x77, 0xFF, 0x5F, 0xFE, 0xBB, 0xFB, 0x80, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x02, 0xB7, 0xFF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x71, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x23, 0x9C, 0xE2, 0x7F, 0xEE, 0x23, 0x80, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x21, 0x1C, 0xEF, 0xFF, 0xEE, 0x23, 0x80, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xF0, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x07, 0x29, 0x4E, 0x00, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xFF, 0xF8, 0xD6, 0xB1, 0xFF, 0xFF, 0xF0, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x0E, 0x32, 0xB2, 0x52, 0x93, 0x00, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x03, 0x25, 0x29, 0x31, 0x08, 0xE2, 0x00, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x08, 0x63, 0x10, 0x84, 0xE6, 0x00, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x32, 0x9C, 0xA5, 0x29, 0xCE, 0xC6, 0x00, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x0A, 0xBA, 0x2E, 0xA8, 0x00, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x21, 0x8E, 0x7B, 0x98, 0x80, 0x00, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x04, 0x67, 0x79, 0xC6, 0x10, 0x00, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x14, 0xA5, 0x29, 0x40, 0x52, 0x80, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x03, 0xB5, 0xAD, 0x69, 0x4A, 0x52, 0x80, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x03, 0x25, 0x06, 0x49, 0x82, 0x93, 0x00, 0x00, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x80, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x01, 0x1D, 0x52, 0x10, 0x95, 0x71, 0x3E, 0x00, // /* code=23, hex=0x17, ascii="^W" */ + // 0x01, 0x1D, 0x52, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x08, 0x42, 0x10, 0x95, 0x71, 0x00, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x82, 0x78, 0x88, 0x00, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x44, 0x79, 0x04, 0x00, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x42, 0x1E, 0x00, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0xA5, 0x7D, 0x4A, 0x00, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x42, 0x39, 0xDF, 0x00, 0x00, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x01, 0xF7, 0x38, 0x84, 0x00, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x01, 0x08, 0x42, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x52, 0x94, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x02, 0x95, 0xF5, 0x2B, 0xEA, 0x50, 0x00, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x02, 0x19, 0x28, 0x20, 0x82, 0x93, 0x08, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x06, 0xB4, 0x42, 0x21, 0x08, 0xB5, 0x80, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x02, 0x29, 0x4A, 0x22, 0xB2, 0x93, 0x40, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x31, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x01, 0x10, 0x84, 0x21, 0x08, 0x41, 0x00, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x02, 0x08, 0x42, 0x10, 0x84, 0x22, 0x00, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x09, 0x57, 0x3A, 0xA4, 0x00, 0x00, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x42, 0x7C, 0x84, 0x00, 0x00, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x08, 0x80, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x84, 0x42, 0x21, 0x08, 0x84, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x03, 0xA5, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x01, 0x19, 0x42, 0x10, 0x84, 0x27, 0x80, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x03, 0x25, 0x21, 0x11, 0x10, 0x87, 0x80, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x03, 0x24, 0x21, 0x30, 0x42, 0x93, 0x00, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x8C, 0xA5, 0x4B, 0xC2, 0x10, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x07, 0xA1, 0x08, 0x70, 0x42, 0x93, 0x00, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x01, 0x91, 0x0E, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x07, 0x84, 0x21, 0x10, 0x88, 0x42, 0x00, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x03, 0x25, 0x29, 0x32, 0x52, 0x93, 0x00, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x03, 0x25, 0x29, 0x49, 0xC2, 0x26, 0x00, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x00, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x06, 0x30, 0x00, 0x63, 0x08, 0x80, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x04, 0x44, 0x42, 0x08, 0x20, 0x80, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x00, 0x78, 0x1E, 0x00, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x20, 0x82, 0x08, 0x44, 0x44, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x03, 0x25, 0x21, 0x10, 0x80, 0x21, 0x00, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x03, 0x25, 0x29, 0x5A, 0xD0, 0x83, 0x80, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x03, 0x25, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x07, 0x25, 0x29, 0x72, 0x52, 0x97, 0x00, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x00, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x07, 0x25, 0x29, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x87, 0x80, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x07, 0xA1, 0x08, 0x7A, 0x10, 0x84, 0x00, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x03, 0x25, 0x28, 0x42, 0xD2, 0x93, 0x00, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x04, 0xA5, 0x29, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x03, 0x88, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x03, 0x88, 0x42, 0x10, 0x94, 0xA2, 0x00, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x04, 0xA5, 0x4A, 0x62, 0x94, 0x94, 0x80, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x04, 0x21, 0x08, 0x42, 0x10, 0x87, 0x80, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x04, 0xA5, 0xEF, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x04, 0xA5, 0xAD, 0x5A, 0xD2, 0x94, 0x80, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x07, 0x25, 0x29, 0x72, 0x10, 0x84, 0x00, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x03, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x08, 0x20, /* code=81, hex=0x51, ascii="Q" */ + 0x07, 0x25, 0x29, 0x73, 0x14, 0x94, 0x80, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x03, 0x25, 0x28, 0x30, 0x52, 0x93, 0x00, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x07, 0xC8, 0x42, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x04, 0xA5, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x04, 0xA5, 0x29, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x04, 0xA5, 0x29, 0x4A, 0x5E, 0x94, 0x80, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x04, 0xA5, 0x26, 0x31, 0x92, 0x94, 0x80, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x04, 0x63, 0x15, 0x28, 0x84, 0x21, 0x00, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x07, 0x84, 0x42, 0x21, 0x10, 0x87, 0x80, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x03, 0x10, 0x84, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x04, 0x20, 0x84, 0x10, 0x84, 0x10, 0x80, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x00, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, /* code=95, hex=0x5F, ascii="_" */ + 0x63, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x06, 0x09, 0xD2, 0x93, 0x80, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x97, 0x00, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x80, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x84, 0x27, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x01, 0x10, 0x8E, 0x21, 0x08, 0x42, 0x00, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0xC0, /* code=103, hex=0x67, ascii="g" */ + 0x04, 0x21, 0x0E, 0x4A, 0x52, 0x94, 0x80, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x00, 0x08, 0x02, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x28, 0x80, /* code=106, hex=0x6A, ascii="j" */ + 0x04, 0x21, 0x09, 0x53, 0x18, 0xA4, 0x80, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x08, 0x42, 0x10, 0x84, 0x23, 0x80, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x09, 0x7A, 0x52, 0x94, 0x80, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x0E, 0x4A, 0x52, 0x97, 0x21, 0x00, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x07, 0x4A, 0x52, 0x93, 0x84, 0x20, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x0B, 0x29, 0x08, 0x42, 0x00, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x06, 0x49, 0x04, 0x93, 0x00, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x10, 0x8E, 0x21, 0x08, 0x43, 0x00, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x09, 0x49, 0x4A, 0x21, 0x00, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0xF4, 0x80, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x09, 0x49, 0x8C, 0x94, 0x80, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x0F, 0x08, 0x88, 0x87, 0x80, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x01, 0x10, 0x84, 0x41, 0x08, 0x41, 0x00, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x21, 0x08, 0x40, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x08, 0x42, 0x08, 0x84, 0x22, 0x00, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x02, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x01, 0x08, 0xA5, 0x46, 0x31, 0x8F, 0xC0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x03, 0x25, 0x28, 0x42, 0x10, 0x93, 0x08, 0x80, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x01, 0x90, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x03, 0x24, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x00, 0x14, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x06, 0x08, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x14, 0x46, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x07, 0x42, 0x10, 0x83, 0x89, 0x80, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x03, 0x24, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x00, 0x14, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x06, 0x08, 0x06, 0x4A, 0x5E, 0x83, 0x80, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x00, 0x14, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x03, 0x24, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x03, 0x04, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x50, 0x19, 0x29, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x22, 0x88, 0xC9, 0x4B, 0xD2, 0x94, 0x80, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x32, 0x01, 0xE8, 0x43, 0xD0, 0x87, 0x80, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x07, 0x14, 0xAE, 0xA2, 0x80, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x1D, 0xCA, 0x53, 0xD4, 0xA5, 0x80, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x03, 0x24, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x00, 0x14, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x03, 0x04, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x03, 0x24, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x06, 0x08, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x00, 0x14, 0x09, 0x4A, 0x52, 0x93, 0x85, 0xC0, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x50, 0x19, 0x29, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x25, 0x29, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x00, 0x47, 0x46, 0x11, 0x71, 0x00, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x14, 0x84, 0x71, 0x08, 0xD7, 0x80, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x04, 0x54, 0xAF, 0x93, 0xE4, 0x21, 0x00, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x07, 0x25, 0x2E, 0x4A, 0xF2, 0x94, 0x80, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x11, 0x08, 0x42, 0x38, 0x84, 0x21, 0x28, 0x80, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x01, 0x90, 0x06, 0x48, 0x4E, 0x93, 0x80, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x01, 0x90, 0x06, 0x10, 0x84, 0x23, 0x80, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x01, 0x90, 0x06, 0x4A, 0x52, 0x93, 0x00, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x01, 0x90, 0x09, 0x4A, 0x52, 0x93, 0x80, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x02, 0xA8, 0x0A, 0x6A, 0x52, 0x94, 0x80, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x55, 0x01, 0x2D, 0x7A, 0xD2, 0x94, 0x80, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x03, 0x04, 0xE9, 0x38, 0x1E, 0x00, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x03, 0x25, 0x29, 0x30, 0x1E, 0x00, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x02, 0x10, 0x04, 0x22, 0x10, 0x93, 0x00, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x03, 0xD0, 0x80, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x03, 0xC2, 0x10, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x02, 0x14, 0xA2, 0x21, 0xD2, 0xA1, 0x80, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x02, 0x14, 0xA2, 0x21, 0x56, 0xB0, 0x80, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x08, 0x02, 0x10, 0x84, 0x21, 0x00, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0xA5, 0x52, 0x8A, 0x50, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x01, 0x4A, 0x29, 0x54, 0xA0, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x00, 0x2A, 0x00, 0x28, 0x00, 0xA8, 0x00, 0xA0, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x02, 0x81, 0x50, 0x28, 0x15, 0x02, 0x81, 0x50, // /* code=177, hex=0xB1, ascii="!1" */ + // 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x21, 0x08, 0x42, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x21, 0x08, 0x4E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x52, 0x94, 0xA5, 0x69, 0x4A, 0x52, 0x94, 0xA0, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x79, 0x4A, 0x52, 0x94, 0xA0, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x0E, 0x13, 0x84, 0x21, 0x08, 0x40, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x52, 0x94, 0xAD, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x52, 0x94, 0xA5, 0x29, 0x4A, 0x52, 0x94, 0xA0, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x0F, 0x0B, 0x4A, 0x52, 0x94, 0xA0, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x52, 0x94, 0xAD, 0x0B, 0xC0, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x52, 0x94, 0xA5, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x21, 0x08, 0x4E, 0x13, 0x80, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x70, 0x84, 0x21, 0x08, 0x40, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x21, 0x08, 0x42, 0x1C, 0x00, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x21, 0x08, 0x42, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x21, 0x08, 0x42, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x21, 0x08, 0x42, 0x7C, 0x84, 0x21, 0x08, 0x40, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x21, 0x08, 0x43, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x52, 0x94, 0xA5, 0x2D, 0x4A, 0x52, 0x94, 0xA0, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x52, 0x94, 0xA5, 0xA1, 0xE0, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x07, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x52, 0x94, 0xAD, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x0F, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x52, 0x94, 0xA5, 0xA1, 0x6A, 0x52, 0x94, 0xA0, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x52, 0x94, 0xAD, 0x83, 0x6A, 0x52, 0x94, 0xA0, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x21, 0x08, 0x4F, 0x83, 0xE0, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x52, 0x94, 0xA5, 0x7C, 0x00, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x0F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x94, 0xA0, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x52, 0x94, 0xA5, 0x3C, 0x00, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x21, 0x08, 0x43, 0x90, 0xE0, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x03, 0x90, 0xE4, 0x21, 0x08, 0x40, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x3D, 0x4A, 0x52, 0x94, 0xA0, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x52, 0x94, 0xA5, 0x6D, 0x4A, 0x52, 0x94, 0xA0, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x21, 0x08, 0x4F, 0x83, 0xE4, 0x21, 0x08, 0x40, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x21, 0x08, 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x1C, 0x84, 0x21, 0x08, 0x40, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xC0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x00, 0x9B, 0x52, 0x96, 0x48, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x25, 0x2A, 0x72, 0x52, 0x97, 0x21, 0x00, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0x1E, 0x94, 0x21, 0x08, 0x42, 0x00, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x00, 0x00, 0x7D, 0x4A, 0x52, 0x80, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x00, 0x01, 0xF4, 0x90, 0x44, 0x4F, 0xC0, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x0F, 0xD2, 0x94, 0x40, 0x00, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x09, 0x4A, 0x52, 0x97, 0x21, 0x00, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x00, 0x00, 0x2A, 0x84, 0x21, 0x00, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x00, 0x00, 0x07, 0x11, 0x4A, 0x23, 0x80, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x00, 0x45, 0x47, 0xF1, 0x51, 0x00, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x00, 0x45, 0x46, 0x2A, 0x56, 0xC0, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x0C, 0x84, 0x11, 0xD2, 0x93, 0x00, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x05, 0x56, 0xAA, 0x00, 0x00, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x08, 0x47, 0x56, 0xAE, 0x21, 0x00, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0x00, 0xE8, 0x43, 0x90, 0x83, 0x80, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x00, 0xC9, 0x4A, 0x52, 0x90, 0x00, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x01, 0xE0, 0x78, 0x1E, 0x00, 0x00, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x00, 0x42, 0x7C, 0x84, 0x07, 0xC0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x04, 0x10, 0x41, 0x11, 0x10, 0x07, 0x80, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x88, 0x88, 0x20, 0x82, 0x07, 0x80, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x04, 0x52, 0x10, 0x84, 0x21, 0x08, 0x40, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, 0xA2, 0x00, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x08, 0x40, 0x7C, 0x04, 0x20, 0x00, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x05, 0x50, 0x0A, 0xA0, 0x00, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x64, 0xA4, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x02, 0x38, 0x80, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x01, 0xC8, 0x42, 0x12, 0x94, 0x61, 0x00, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0xA6, 0xA5, 0x29, 0x48, 0x00, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x64, 0x84, 0xC8, 0x78, 0x00, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x00, 0xE7, 0x39, 0xCE, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_5x8.h b/wled00/src/font/console_font_5x8.h index 4f503f2500..f5404eca27 100644 --- a/wled00/src/font/console_font_5x8.h +++ b/wled00/src/font/console_font_5x8.h @@ -7,7 +7,7 @@ * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 8 - * [2] Fixed/max glyph width: 4 + * [2] Fixed/max glyph width: 5 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 @@ -39,262 +39,262 @@ */ static const unsigned char console_font_5x8[] PROGMEM = { - 0x57, 0x08, 0x04, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x00, 0x35, 0x76, 0x30, // /* code=1, hex=0x01, ascii="^A" */ - // 0x00, 0x35, 0x77, 0x30, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0x27, 0x73, 0x10, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x13, 0x73, 0x10, // /* code=4, hex=0x04, ascii="^D" */ - // 0x00, 0x35, 0x71, 0x10, // /* code=5, hex=0x05, ascii="^E" */ - // 0x00, 0x13, 0x75, 0x10, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x01, 0x31, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x07, 0x76, 0x46, 0x77, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x01, 0x21, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x07, 0x76, 0x46, 0x77, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x10, 0x35, 0x20, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x00, 0x12, 0x13, 0x10, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x12, 0x26, 0x40, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0x12, 0x26, 0x40, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x00, 0x01, 0x21, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x23, 0x33, 0x20, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x01, 0x31, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x00, 0x13, 0x13, 0x10, // /* code=18, hex=0x12, ascii="^R" */ - // 0x00, 0x22, 0x20, 0x20, // /* code=19, hex=0x13, ascii="^S" */ - // 0x00, 0x36, 0x62, 0x22, // /* code=20, hex=0x14, ascii="^T" */ - // 0x00, 0x03, 0x42, 0x16, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x07, 0x70, // /* code=22, hex=0x16, ascii="^V" */ - // 0x00, 0x13, 0x13, 0x13, // /* code=23, hex=0x17, ascii="^W" */ - // 0x00, 0x13, 0x11, 0x10, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x11, 0x13, 0x10, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x00, 0x70, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x02, 0x72, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x47, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x02, 0x72, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x00, 0x13, 0x70, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x00, 0x73, 0x10, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x00, 0x11, 0x10, 0x10, /* code=33, hex=0x21, ascii="!" */ - 0x00, 0x22, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0x27, 0x27, 0x20, /* code=35, hex=0x23, ascii="#" */ - 0x00, 0x11, 0x21, 0x31, /* code=36, hex=0x24, ascii="$" */ - 0x02, 0x52, 0x13, 0x40, /* code=37, hex=0x25, ascii="%" */ - 0x00, 0x12, 0x34, 0x30, /* code=38, hex=0x26, ascii="&" */ - 0x01, 0x10, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x00, 0x12, 0x22, 0x10, /* code=40, hex=0x28, ascii="(" */ - 0x00, 0x21, 0x11, 0x20, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x21, 0x31, 0x20, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x01, 0x31, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x12, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x07, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x10, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x01, 0x12, 0x20, /* code=47, hex=0x2F, ascii="/" */ - 0x00, 0x34, 0x44, 0x30, /* code=48, hex=0x30, ascii="0" */ - 0x00, 0x13, 0x11, 0x10, /* code=49, hex=0x31, ascii="1" */ - 0x00, 0x34, 0x12, 0x70, /* code=50, hex=0x32, ascii="2" */ - 0x00, 0x70, 0x30, 0x70, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x01, 0x27, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x00, 0x74, 0x70, 0x70, /* code=53, hex=0x35, ascii="5" */ - 0x00, 0x34, 0x74, 0x30, /* code=54, hex=0x36, ascii="6" */ - 0x00, 0x70, 0x12, 0x20, /* code=55, hex=0x37, ascii="7" */ - 0x00, 0x34, 0x34, 0x30, /* code=56, hex=0x38, ascii="8" */ - 0x00, 0x34, 0x30, 0x30, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x00, 0x10, 0x10, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x00, 0x10, 0x12, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x01, 0x21, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x03, 0x03, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x21, 0x01, 0x20, /* code=62, hex=0x3E, ascii=">" */ - 0x00, 0x30, 0x30, 0x20, /* code=63, hex=0x3F, ascii="?" */ - 0x00, 0x34, 0x54, 0x30, /* code=64, hex=0x40, ascii="@" */ - 0x00, 0x34, 0x74, 0x40, /* code=65, hex=0x41, ascii="A" */ - 0x00, 0x74, 0x74, 0x70, /* code=66, hex=0x42, ascii="B" */ - 0x00, 0x34, 0x44, 0x30, /* code=67, hex=0x43, ascii="C" */ - 0x00, 0x74, 0x44, 0x70, /* code=68, hex=0x44, ascii="D" */ - 0x00, 0x74, 0x74, 0x70, /* code=69, hex=0x45, ascii="E" */ - 0x00, 0x74, 0x74, 0x40, /* code=70, hex=0x46, ascii="F" */ - 0x00, 0x34, 0x44, 0x30, /* code=71, hex=0x47, ascii="G" */ - 0x00, 0x44, 0x74, 0x40, /* code=72, hex=0x48, ascii="H" */ - 0x00, 0x31, 0x11, 0x30, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x00, 0x44, 0x30, /* code=74, hex=0x4A, ascii="J" */ - 0x00, 0x45, 0x65, 0x40, /* code=75, hex=0x4B, ascii="K" */ - 0x00, 0x44, 0x44, 0x70, /* code=76, hex=0x4C, ascii="L" */ - 0x00, 0x47, 0x44, 0x40, /* code=77, hex=0x4D, ascii="M" */ - 0x00, 0x46, 0x54, 0x40, /* code=78, hex=0x4E, ascii="N" */ - 0x00, 0x34, 0x44, 0x30, /* code=79, hex=0x4F, ascii="O" */ - 0x00, 0x74, 0x74, 0x40, /* code=80, hex=0x50, ascii="P" */ - 0x00, 0x34, 0x44, 0x30, /* code=81, hex=0x51, ascii="Q" */ - 0x00, 0x74, 0x74, 0x40, /* code=82, hex=0x52, ascii="R" */ - 0x00, 0x34, 0x30, 0x70, /* code=83, hex=0x53, ascii="S" */ - 0x00, 0x71, 0x11, 0x10, /* code=84, hex=0x54, ascii="T" */ - 0x00, 0x44, 0x44, 0x30, /* code=85, hex=0x55, ascii="U" */ - 0x00, 0x44, 0x43, 0x30, /* code=86, hex=0x56, ascii="V" */ - 0x00, 0x45, 0x52, 0x20, /* code=87, hex=0x57, ascii="W" */ - 0x00, 0x44, 0x32, 0x40, /* code=88, hex=0x58, ascii="X" */ - 0x00, 0x22, 0x21, 0x10, /* code=89, hex=0x59, ascii="Y" */ - 0x00, 0x71, 0x24, 0x70, /* code=90, hex=0x5A, ascii="Z" */ - 0x00, 0x32, 0x22, 0x30, /* code=91, hex=0x5B, ascii="[" */ - 0x00, 0x22, 0x11, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x00, 0x31, 0x11, 0x30, /* code=93, hex=0x5D, ascii="]" */ - 0x00, 0x12, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x07, /* code=95, hex=0x5F, ascii="_" */ - 0x00, 0x21, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x03, 0x03, 0x20, /* code=97, hex=0x61, ascii="a" */ - 0x04, 0x47, 0x44, 0x70, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x01, 0x22, 0x10, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x03, 0x44, 0x30, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x03, 0x74, 0x30, /* code=101, hex=0x65, ascii="e" */ - 0x00, 0x12, 0x72, 0x20, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x03, 0x43, 0x03, /* code=103, hex=0x67, ascii="g" */ - 0x00, 0x47, 0x44, 0x40, /* code=104, hex=0x68, ascii="h" */ - 0x01, 0x03, 0x11, 0x30, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x00, 0x00, 0x03, /* code=106, hex=0x6A, ascii="j" */ - 0x00, 0x45, 0x65, 0x40, /* code=107, hex=0x6B, ascii="k" */ - 0x03, 0x11, 0x11, 0x30, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x04, 0x74, 0x40, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x07, 0x44, 0x40, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x03, 0x44, 0x30, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x07, 0x44, 0x74, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x03, 0x44, 0x30, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x02, 0x32, 0x20, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x03, 0x61, 0x70, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x27, 0x22, 0x10, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x04, 0x44, 0x30, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x04, 0x43, 0x30, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x04, 0x47, 0x40, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x04, 0x33, 0x40, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x04, 0x43, 0x03, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x07, 0x12, 0x70, /* code=122, hex=0x7A, ascii="z" */ - 0x00, 0x12, 0x21, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x01, 0x11, 0x11, 0x10, /* code=124, hex=0x7C, ascii="|" */ - 0x02, 0x10, 0x01, 0x20, /* code=125, hex=0x7D, ascii="}" */ - 0x00, 0x02, 0x50, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x00, 0x01, 0x24, 0x70, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x00, 0x34, 0x44, 0x31, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x02, 0x04, 0x44, 0x30, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x01, 0x03, 0x74, 0x30, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x12, 0x06, 0x15, 0x20, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x02, 0x06, 0x13, 0x50, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x21, 0x06, 0x13, 0x50, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x01, 0x06, 0x13, 0x50, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x01, 0x22, 0x11, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x12, 0x03, 0x74, 0x30, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x02, 0x03, 0x74, 0x30, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x21, 0x03, 0x74, 0x30, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x02, 0x03, 0x11, 0x30, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x12, 0x03, 0x11, 0x30, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x21, 0x03, 0x11, 0x30, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x50, 0x34, 0x74, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x10, 0x34, 0x74, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x01, 0x74, 0x74, 0x70, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x06, 0x37, 0x50, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x35, 0x75, 0x50, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x12, 0x03, 0x44, 0x30, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x02, 0x03, 0x44, 0x30, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x21, 0x03, 0x44, 0x30, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x12, 0x04, 0x44, 0x30, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x21, 0x04, 0x44, 0x30, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x02, 0x04, 0x43, 0x03, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x02, 0x03, 0x44, 0x30, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x20, 0x44, 0x44, 0x30, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x13, 0x44, 0x31, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x01, 0x22, 0x72, 0x70, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x06, 0x22, 0x13, 0x10, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x06, 0x55, 0x74, 0x40, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x01, 0x22, 0x72, 0x24, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x12, 0x06, 0x13, 0x50, // /* code=160, hex=0xA0, ascii="! " */ - // 0x01, 0x03, 0x11, 0x30, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x01, 0x03, 0x44, 0x30, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x01, 0x04, 0x44, 0x30, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x25, 0x07, 0x44, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x25, 0x46, 0x65, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x01, 0x21, 0x03, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x01, 0x21, 0x03, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x01, 0x01, 0x24, 0x30, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x07, 0x40, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x07, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x04, 0x45, 0x24, 0x10, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x04, 0x45, 0x24, 0x10, // /* code=172, hex=0xAC, ascii="!," */ - // 0x01, 0x01, 0x13, 0x10, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x00, 0x25, 0x20, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x00, 0x52, 0x50, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x52, 0x52, 0x52, 0x52, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x72, 0x52, 0x72, 0x52, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x63, 0x63, 0x63, 0x63, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x11, 0x11, 0x11, 0x11, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x11, 0x17, 0x11, 0x11, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x11, 0x71, 0x71, 0x11, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x22, 0x26, 0x22, 0x22, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x07, 0x22, 0x22, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x71, 0x71, 0x11, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x22, 0x60, 0x62, 0x22, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x22, 0x22, 0x22, 0x22, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x70, 0x62, 0x22, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x22, 0x60, 0x70, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x22, 0x27, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x11, 0x71, 0x70, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x07, 0x11, 0x11, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x11, 0x11, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x11, 0x17, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x07, 0x11, 0x11, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x11, 0x11, 0x11, 0x11, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x07, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x11, 0x17, 0x11, 0x11, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x11, 0x11, 0x11, 0x11, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x22, 0x22, 0x22, 0x22, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x22, 0x22, 0x30, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x32, 0x22, 0x22, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x22, 0x60, 0x70, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x70, 0x62, 0x22, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x22, 0x22, 0x22, 0x22, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x70, 0x70, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x22, 0x60, 0x62, 0x22, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x11, 0x70, 0x70, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x22, 0x27, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x70, 0x71, 0x11, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x07, 0x22, 0x22, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x22, 0x23, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x11, 0x11, 0x10, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x11, 0x11, 0x11, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x03, 0x22, 0x22, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x22, 0x27, 0x22, 0x22, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x11, 0x71, 0x71, 0x11, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x11, 0x17, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x01, 0x11, 0x11, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0x77, 0x77, 0x77, 0x77, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x77, 0x77, // /* code=220, hex=0xDC, ascii="!\" */ - // 0x77, 0x77, 0x77, 0x77, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x00, 0x00, 0x00, 0x00, // /* code=222, hex=0xDE, ascii="!^" */ - // 0x77, 0x77, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x03, 0x44, 0x30, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x03, 0x47, 0x44, 0x74, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x03, 0x22, 0x22, 0x20, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x32, 0x22, 0x20, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x07, 0x21, 0x24, 0x70, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x34, 0x44, 0x30, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x04, 0x44, 0x74, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x04, 0x21, 0x11, 0x10, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x01, 0x13, 0x43, 0x11, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x34, 0x74, 0x30, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x34, 0x42, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x34, 0x23, 0x44, 0x30, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x03, 0x55, 0x30, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x03, 0x52, 0x50, // /* code=237, hex=0xED, ascii="!m" */ - // 0x01, 0x23, 0x22, 0x10, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x03, 0x44, 0x44, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0x70, 0x70, 0x70, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x17, 0x10, 0x70, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x02, 0x10, 0x12, 0x70, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x12, 0x10, 0x30, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x01, 0x11, 0x11, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x11, 0x11, 0x56, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x30, 0x70, 0x30, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x25, 0x02, 0x50, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x00, 0x12, 0x10, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x03, 0x30, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x01, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x00, 0x00, 0x15, 0x20, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x03, 0x22, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x03, 0x01, 0x30, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x03, 0x33, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x00, 0x1D, 0x5F, 0xED, 0xC0, // /* code=1, hex=0x01, ascii="^A" */ + // 0x00, 0x1D, 0x5F, 0xFD, 0xC0, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0x15, 0xFF, 0xB8, 0x80, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x08, 0xEF, 0xB8, 0x80, // /* code=4, hex=0x04, ascii="^D" */ + // 0x00, 0x1D, 0x5F, 0x90, 0x80, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x08, 0xEF, 0xD4, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x47, 0x10, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x0E, 0x36, 0xD1, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x00, 0x08, 0xA2, 0x38, 0x80, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x08, 0xA4, 0x62, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x0E, 0x95, 0xEA, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x10, 0xC7, 0x31, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x04, 0x67, 0x18, 0x40, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x00, 0x08, 0xE2, 0x38, 0x80, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x14, 0xA5, 0x01, 0x40, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x1F, 0xAD, 0x29, 0x4A, // /* code=20, hex=0x14, ascii="^T" */ + // 0x00, 0x06, 0xC9, 0x24, 0xD8, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x7F, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ + // 0x00, 0x08, 0xE2, 0x38, 0x8E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x08, 0xE2, 0x10, 0x80, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x08, 0x42, 0x38, 0x80, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x2F, 0x88, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x8F, 0xA0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x08, 0x7C, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0xAF, 0xA8, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x02, 0x3B, 0xE0, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x0F, 0xB8, 0x80, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x08, 0x42, 0x00, 0x80, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0x14, 0xA0, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0x15, 0xF5, 0x7D, 0x40, /* code=35, hex=0x23, ascii="#" */ + 0x00, 0x08, 0x64, 0x19, 0x84, /* code=36, hex=0x24, ascii="$" */ + 0x02, 0x2A, 0xA3, 0x36, 0x40, /* code=37, hex=0x25, ascii="%" */ + 0x00, 0x0C, 0x86, 0xC9, 0xA0, /* code=38, hex=0x26, ascii="&" */ + 0x01, 0x08, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x08, 0x84, 0x20, 0x80, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x10, 0x42, 0x11, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x14, 0x47, 0x11, 0x40, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x47, 0x10, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x88, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x01, 0xE0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x80, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x04, 0x42, 0x21, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x08, 0xC2, 0x10, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x19, 0x22, 0x23, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x38, 0x26, 0x0B, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x04, 0x65, 0x78, 0x40, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0x3D, 0x0E, 0x0B, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x19, 0x0E, 0x49, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0x3C, 0x22, 0x21, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x19, 0x26, 0x49, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x19, 0x27, 0x09, 0x80, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x02, 0x00, 0x80, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x02, 0x00, 0x88, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x04, 0x44, 0x10, 0x40, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0xE0, 0x38, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x10, 0x41, 0x11, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x18, 0x26, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x1D, 0x1B, 0x41, 0xC0, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x19, 0x2F, 0x4A, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0x39, 0x2E, 0x4B, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x1D, 0x08, 0x41, 0xC0, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0x39, 0x29, 0x4B, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0x3D, 0x0E, 0x43, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0x3D, 0x0E, 0x42, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x19, 0x28, 0x49, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0x25, 0x2F, 0x4A, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x1C, 0x42, 0x11, 0xC0, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x04, 0x29, 0x49, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0x25, 0x4C, 0x52, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0x21, 0x08, 0x43, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x00, 0x25, 0xE9, 0x4A, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0x25, 0xAB, 0x4A, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0x39, 0x2E, 0x42, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x19, 0x29, 0x49, 0x82, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0x39, 0x2E, 0x4A, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x1D, 0x06, 0x0B, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0x3E, 0x42, 0x10, 0x80, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0x25, 0x29, 0x49, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x00, 0x25, 0x29, 0x31, 0x80, /* code=86, hex=0x56, ascii="V" */ + 0x00, 0x23, 0x5A, 0xA9, 0x40, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0x25, 0x26, 0x2A, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0x14, 0xA5, 0x10, 0x80, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0x3C, 0x44, 0x43, 0xC0, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x18, 0x84, 0x21, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0x10, 0x82, 0x10, 0x40, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x18, 0x42, 0x11, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x08, 0xA0, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x1F, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x10, 0x40, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0xC1, 0x39, 0x40, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x21, 0xC9, 0x4B, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x64, 0x20, 0xC0, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x04, 0xE9, 0x49, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0xCF, 0x41, 0xC0, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x0C, 0x8E, 0x21, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0xE9, 0x38, 0x4C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0x21, 0xC9, 0x4A, 0x40, /* code=104, hex=0x68, ascii="h" */ + 0x01, 0x00, 0xC2, 0x11, 0xC0, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x80, 0x21, 0x08, 0x4C, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0x21, 0x4C, 0x52, 0x40, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x08, 0x42, 0x11, 0xC0, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x01, 0x2F, 0x4A, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x01, 0xC9, 0x4A, 0x40, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0xC9, 0x49, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x01, 0xC9, 0x4B, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0xE9, 0x49, 0xC2, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0xA6, 0x21, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0xEC, 0x1B, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x11, 0xE4, 0x20, 0xC0, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x01, 0x29, 0x49, 0xC0, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x01, 0x29, 0x31, 0x80, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x01, 0x29, 0x7A, 0x40, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x01, 0x26, 0x32, 0x40, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x01, 0x29, 0x38, 0x4C, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x01, 0xE2, 0x23, 0xC0, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x88, 0x84, 0x10, 0x40, /* code=123, hex=0x7B, ascii="{" */ + 0x01, 0x08, 0x42, 0x10, 0x80, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x08, 0x21, 0x11, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x00, 0xAA, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x45, 0x47, 0xE0, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x1D, 0x08, 0x41, 0xC4, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x02, 0x81, 0x29, 0x49, 0xC0, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x11, 0x00, 0xCF, 0x41, 0xC0, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x22, 0x81, 0x82, 0x51, 0x40, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x02, 0x81, 0x82, 0x32, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x41, 0x01, 0x82, 0x32, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x01, 0x82, 0x32, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x64, 0x20, 0xC4, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x22, 0x80, 0xCF, 0x41, 0xC0, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x02, 0x80, 0xCF, 0x41, 0xC0, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x41, 0x00, 0xCF, 0x41, 0xC0, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x02, 0x80, 0xC2, 0x11, 0xC0, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x22, 0x80, 0xC2, 0x11, 0xC0, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x41, 0x00, 0xC2, 0x11, 0xC0, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xA0, 0x19, 0x2F, 0x4A, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x20, 0x19, 0x2F, 0x4A, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x11, 0x3D, 0x0E, 0x43, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x01, 0xB7, 0xF2, 0xE0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x1D, 0x4F, 0x52, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x22, 0x80, 0xC9, 0x49, 0x80, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x41, 0x00, 0xC9, 0x49, 0x80, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x22, 0x81, 0x29, 0x49, 0xC0, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x41, 0x01, 0x29, 0x49, 0xC0, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x02, 0x81, 0x29, 0x38, 0x4C, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x25, 0x29, 0x49, 0x80, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x08, 0xE8, 0x41, 0xC4, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x94, 0x8E, 0x23, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x06, 0xD4, 0xA2, 0x38, 0x80, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x29, 0x6F, 0xCA, 0x20, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x01, 0x90, 0x8F, 0x21, 0x10, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x22, 0x01, 0x82, 0x32, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x11, 0x00, 0xC2, 0x11, 0xC0, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x11, 0x00, 0xC9, 0x49, 0x80, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x11, 0x01, 0x29, 0x49, 0xC0, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x55, 0x01, 0xC9, 0x4A, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x55, 0x25, 0xAD, 0x5A, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x01, 0x14, 0x60, 0x38, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x01, 0x14, 0x40, 0x38, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x01, 0x00, 0x44, 0x49, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x7E, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x7C, 0x20, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x04, 0x25, 0x45, 0xC4, 0xE0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x04, 0x65, 0x44, 0xCC, 0xE1, // /* code=172, hex=0xAC, ascii="!," */ + // 0x01, 0x00, 0x42, 0x38, 0x80, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0x05, 0x51, 0x40, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x00, 0x0A, 0x2A, 0x80, // /* code=175, hex=0xAF, ascii="!/" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=176, hex=0xB0, ascii="!0" */ + // 0xEA, 0xAE, 0xAE, 0xAA, 0xEA, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xDB, 0xB6, 0xED, 0xBB, 0x6E, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x21, 0x09, 0xC2, 0x10, 0x84, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x21, 0x38, 0x4E, 0x10, 0x84, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x52, 0x95, 0xA5, 0x29, 0x4A, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x01, 0xE5, 0x29, 0x4A, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x38, 0x4E, 0x10, 0x84, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x52, 0xB4, 0x2D, 0x29, 0x4A, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x52, 0x94, 0xA5, 0x29, 0x4A, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x3C, 0x2D, 0x29, 0x4A, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x52, 0xB4, 0x2F, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x52, 0x95, 0xE0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x21, 0x38, 0x4E, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x01, 0xC2, 0x10, 0x84, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x21, 0x08, 0x70, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x21, 0x09, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x01, 0xF2, 0x10, 0x84, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x21, 0x08, 0x72, 0x10, 0x84, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x01, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x21, 0x09, 0xF2, 0x10, 0x84, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x21, 0x0E, 0x43, 0x90, 0x84, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x52, 0x94, 0xB5, 0x29, 0x4A, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x52, 0x96, 0x87, 0x80, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x1E, 0x85, 0xA9, 0x4A, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x52, 0xB6, 0x0F, 0x80, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x3E, 0x0D, 0xA9, 0x4A, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x52, 0x96, 0x85, 0xA9, 0x4A, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x3E, 0x0F, 0x80, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x52, 0xB6, 0x0D, 0xA9, 0x4A, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x21, 0x3E, 0x0F, 0x80, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x52, 0x95, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x3E, 0x0F, 0x90, 0x84, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x01, 0xF5, 0x29, 0x4A, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x52, 0x94, 0xF0, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x21, 0x0E, 0x43, 0x80, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x0E, 0x43, 0x90, 0x84, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0xF5, 0x29, 0x4A, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x52, 0x95, 0xF5, 0x29, 0x4A, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x21, 0x3E, 0x4F, 0x90, 0x84, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x21, 0x09, 0xC0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x72, 0x10, 0x84, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x0F, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE7, 0x39, 0xCE, 0x73, 0x9C, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x18, 0xC6, 0x31, 0x8C, 0x63, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x00, 0xD9, 0x49, 0xA0, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x25, 0xE9, 0x4B, 0x90, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x03, 0x90, 0x84, 0x21, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x1C, 0xA5, 0x29, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x07, 0xD2, 0x44, 0x47, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x1F, 0x29, 0x49, 0x80, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x01, 0x29, 0x4B, 0xB0, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x04, 0xD4, 0x42, 0x10, 0x80, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x01, 0x08, 0xE8, 0xB8, 0x84, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x1D, 0x1F, 0xC5, 0xC0, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x1D, 0x18, 0xAB, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x64, 0x10, 0xC9, 0x49, 0x80, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0xEA, 0xD5, 0xC0, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x02, 0xEA, 0xA6, 0xC0, // /* code=237, hex=0xED, ascii="!m" */ + // 0x01, 0x90, 0xE4, 0x20, 0xC0, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x03, 0x25, 0x29, 0x4A, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x3C, 0x0F, 0x03, 0xC0, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x09, 0xF2, 0x03, 0xE0, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x02, 0x08, 0x22, 0x23, 0xC0, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x88, 0x82, 0x09, 0xC0, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x06, 0x52, 0x10, 0x84, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x21, 0x08, 0x4A, 0x60, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x18, 0x0F, 0x01, 0x80, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x15, 0x40, 0x2A, 0x80, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x08, 0xA2, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0xC6, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x40, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x06, 0x22, 0x51, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x03, 0x14, 0xA0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x03, 0x04, 0x47, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x00, 0xE7, 0x38, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; diff --git a/wled00/src/font/console_font_6x8.h b/wled00/src/font/console_font_6x8.h index 7f6c590bf9..47be78bb5f 100644 --- a/wled00/src/font/console_font_6x8.h +++ b/wled00/src/font/console_font_6x8.h @@ -7,7 +7,7 @@ * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 8 - * [2] Fixed/max glyph width: 5 + * [2] Fixed/max glyph width: 6 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 @@ -39,262 +39,262 @@ */ static const unsigned char console_font_6x8[] PROGMEM = { - 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + 0x57, 0x08, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x19, 0x0C, 0x42, 0x90, 0x60, // /* code=1, hex=0x01, ascii="^A" */ - // 0x19, 0xCA, 0x72, 0x1C, 0x60, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0x8E, 0x73, 0x8C, 0x20, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x46, 0x73, 0x8C, 0x20, // /* code=4, hex=0x04, ascii="^D" */ - // 0x08, 0xC6, 0x13, 0x9C, 0x20, // /* code=5, hex=0x05, ascii="^E" */ - // 0x00, 0x46, 0x73, 0x84, 0x60, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0x31, 0x80, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x7B, 0xDE, 0xC6, 0x3D, 0xEF, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x0E, 0x42, 0x1C, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x7B, 0xD0, 0xB5, 0xA1, 0xEF, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x00, 0x40, 0x32, 0x10, 0x60, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x19, 0x08, 0x30, 0x8C, 0x20, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x08, 0x42, 0x11, 0x9C, 0xC0, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0xC4, 0x31, 0x18, 0xC0, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x01, 0x46, 0x61, 0x94, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x10, 0xC6, 0x31, 0x8C, 0x40, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x46, 0x71, 0x84, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x08, 0xCE, 0x13, 0x8C, 0x20, // /* code=18, hex=0x12, ascii="^R" */ - // 0x10, 0x84, 0x21, 0x00, 0x40, // /* code=19, hex=0x13, ascii="^S" */ - // 0x19, 0x4A, 0x30, 0x84, 0x20, // /* code=20, hex=0x14, ascii="^T" */ - // 0x19, 0x06, 0x20, 0x90, 0x60, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x1C, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ - // 0x08, 0xCE, 0x13, 0x8C, 0x23, // /* code=23, hex=0x17, ascii="^W" */ - // 0x08, 0xCE, 0x10, 0x84, 0x20, // /* code=24, hex=0x18, ascii="^X" */ - // 0x08, 0x42, 0x13, 0x8C, 0x20, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x42, 0x70, 0x84, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x46, 0x71, 0x84, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x42, 0x10, 0xE0, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x84, 0x71, 0x08, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x08, 0x46, 0x33, 0x9C, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x39, 0xC6, 0x30, 0x84, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x08, 0xC6, 0x10, 0x80, 0x20, /* code=33, hex=0x21, ascii="!" */ - 0x31, 0x88, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0x8E, 0x21, 0x1C, 0x40, /* code=35, hex=0x23, ascii="#" */ - 0x10, 0xC8, 0x30, 0x1C, 0x20, /* code=36, hex=0x24, ascii="$" */ - 0x31, 0x80, 0x11, 0x10, 0x80, /* code=37, hex=0x25, ascii="%" */ - 0x11, 0x4A, 0x22, 0x90, 0x60, /* code=38, hex=0x26, ascii="&" */ - 0x18, 0xC4, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x08, 0x84, 0x21, 0x08, 0x20, /* code=40, hex=0x28, ascii="(" */ - 0x10, 0x42, 0x10, 0x84, 0x40, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x86, 0x71, 0x88, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x42, 0x70, 0x84, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x0C, 0x62, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x70, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x0C, 0x60, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x00, 0x11, 0x10, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x19, 0x08, 0x53, 0x10, 0x60, /* code=48, hex=0x30, ascii="0" */ - 0x08, 0xC2, 0x10, 0x84, 0x60, /* code=49, hex=0x31, ascii="1" */ - 0x19, 0x00, 0x11, 0x10, 0xE0, /* code=50, hex=0x32, ascii="2" */ - 0x19, 0x00, 0x30, 0x10, 0x60, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x44, 0x43, 0x80, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x39, 0x08, 0x70, 0x10, 0x60, /* code=53, hex=0x35, ascii="5" */ - 0x08, 0x88, 0x72, 0x10, 0x60, /* code=54, hex=0x36, ascii="6" */ - 0x38, 0x00, 0x11, 0x08, 0x40, /* code=55, hex=0x37, ascii="7" */ - 0x19, 0x08, 0x32, 0x10, 0x60, /* code=56, hex=0x38, ascii="8" */ - 0x19, 0x08, 0x30, 0x00, 0x60, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x06, 0x30, 0x0C, 0x60, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x06, 0x30, 0x0C, 0x62, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x44, 0x41, 0x04, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x0E, 0x00, 0x1C, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x10, 0x40, 0x00, 0x04, 0x40, /* code=62, hex=0x3E, ascii=">" */ - 0x19, 0x00, 0x10, 0x80, 0x20, /* code=63, hex=0x3F, ascii="?" */ - 0x19, 0x0A, 0x52, 0x90, 0x60, /* code=64, hex=0x40, ascii="@" */ - 0x19, 0x08, 0x43, 0x90, 0x80, /* code=65, hex=0x41, ascii="A" */ - 0x39, 0x08, 0x72, 0x10, 0xE0, /* code=66, hex=0x42, ascii="B" */ - 0x19, 0x08, 0x42, 0x10, 0x60, /* code=67, hex=0x43, ascii="C" */ - 0x39, 0x08, 0x42, 0x10, 0xE0, /* code=68, hex=0x44, ascii="D" */ - 0x39, 0x08, 0x72, 0x10, 0xE0, /* code=69, hex=0x45, ascii="E" */ - 0x39, 0x08, 0x72, 0x10, 0x80, /* code=70, hex=0x46, ascii="F" */ - 0x19, 0x08, 0x52, 0x10, 0x60, /* code=71, hex=0x47, ascii="G" */ - 0x21, 0x08, 0x72, 0x10, 0x80, /* code=72, hex=0x48, ascii="H" */ - 0x18, 0x42, 0x10, 0x84, 0x60, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x00, 0x02, 0x10, 0x60, /* code=74, hex=0x4A, ascii="J" */ - 0x21, 0x0A, 0x62, 0x90, 0x80, /* code=75, hex=0x4B, ascii="K" */ - 0x21, 0x08, 0x42, 0x10, 0xE0, /* code=76, hex=0x4C, ascii="L" */ - 0x21, 0x8A, 0x42, 0x10, 0x80, /* code=77, hex=0x4D, ascii="M" */ - 0x21, 0x8A, 0x42, 0x10, 0x80, /* code=78, hex=0x4E, ascii="N" */ - 0x19, 0x08, 0x42, 0x10, 0x60, /* code=79, hex=0x4F, ascii="O" */ - 0x39, 0x08, 0x72, 0x10, 0x80, /* code=80, hex=0x50, ascii="P" */ - 0x19, 0x08, 0x42, 0x90, 0x60, /* code=81, hex=0x51, ascii="Q" */ - 0x39, 0x08, 0x72, 0x10, 0x80, /* code=82, hex=0x52, ascii="R" */ - 0x19, 0x08, 0x30, 0x10, 0x60, /* code=83, hex=0x53, ascii="S" */ - 0x38, 0x42, 0x10, 0x84, 0x20, /* code=84, hex=0x54, ascii="T" */ - 0x21, 0x08, 0x42, 0x10, 0x60, /* code=85, hex=0x55, ascii="U" */ - 0x21, 0x08, 0x42, 0x08, 0x20, /* code=86, hex=0x56, ascii="V" */ - 0x21, 0x0A, 0x52, 0x94, 0x40, /* code=87, hex=0x57, ascii="W" */ - 0x21, 0x04, 0x11, 0x10, 0x80, /* code=88, hex=0x58, ascii="X" */ - 0x21, 0x08, 0x20, 0x84, 0x20, /* code=89, hex=0x59, ascii="Y" */ - 0x38, 0x02, 0x22, 0x10, 0xE0, /* code=90, hex=0x5A, ascii="Z" */ - 0x18, 0x84, 0x21, 0x08, 0x60, /* code=91, hex=0x5B, ascii="[" */ - 0x01, 0x04, 0x10, 0x00, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x18, 0x00, 0x00, 0x00, 0x60, /* code=93, hex=0x5D, ascii="]" */ - 0x08, 0x88, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x0F, /* code=95, hex=0x5F, ascii="_" */ - 0x18, 0xC2, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x06, 0x01, 0x90, 0x60, /* code=97, hex=0x61, ascii="a" */ - 0x21, 0x0E, 0x42, 0x10, 0xE0, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x06, 0x42, 0x10, 0x60, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x06, 0x42, 0x10, 0x60, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x06, 0x43, 0x90, 0x60, /* code=101, hex=0x65, ascii="e" */ - 0x08, 0x84, 0x71, 0x08, 0x40, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x06, 0x42, 0x0C, 0x03, /* code=103, hex=0x67, ascii="g" */ - 0x21, 0x0E, 0x42, 0x10, 0x80, /* code=104, hex=0x68, ascii="h" */ - 0x08, 0x02, 0x10, 0x84, 0x20, /* code=105, hex=0x69, ascii="i" */ - 0x00, 0x02, 0x00, 0x00, 0x83, /* code=106, hex=0x6A, ascii="j" */ - 0x21, 0x08, 0x53, 0x14, 0x80, /* code=107, hex=0x6B, ascii="k" */ - 0x08, 0x42, 0x10, 0x84, 0x20, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x0C, 0x52, 0x90, 0x80, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x0E, 0x42, 0x10, 0x80, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x06, 0x42, 0x10, 0x60, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x0E, 0x42, 0x10, 0xE4, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x06, 0x42, 0x10, 0x60, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x0A, 0x21, 0x08, 0xE0, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x06, 0x41, 0x80, 0x60, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x8E, 0x21, 0x08, 0x20, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x08, 0x42, 0x14, 0x40, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x08, 0x42, 0x08, 0x20, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x08, 0x42, 0x9C, 0x40, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x08, 0x41, 0x90, 0x80, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x08, 0x42, 0x0C, 0x26, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x0E, 0x01, 0x90, 0xE0, /* code=122, hex=0x7A, ascii="z" */ - 0x08, 0x84, 0x61, 0x08, 0x20, /* code=123, hex=0x7B, ascii="{" */ - 0x08, 0x42, 0x00, 0x84, 0x20, /* code=124, hex=0x7C, ascii="|" */ - 0x18, 0x00, 0x00, 0x00, 0x60, /* code=125, hex=0x7D, ascii="}" */ - 0x11, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x08, 0xCC, 0x42, 0x1C, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x19, 0x08, 0x42, 0x0C, 0x23, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x20, 0x08, 0x42, 0x14, 0x40, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x00, 0x06, 0x43, 0x90, 0x60, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x18, 0x06, 0x01, 0x90, 0x60, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x10, 0x06, 0x01, 0x90, 0x60, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x18, 0x06, 0x01, 0x90, 0x60, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x18, 0x86, 0x01, 0x90, 0x60, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0xC8, 0x42, 0x0C, 0x23, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x18, 0x06, 0x43, 0x90, 0x60, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x10, 0x06, 0x43, 0x90, 0x60, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x18, 0x06, 0x43, 0x90, 0x60, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x10, 0x02, 0x10, 0x84, 0x20, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x08, 0x80, 0x10, 0x84, 0x20, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x10, 0x02, 0x10, 0x84, 0x20, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x10, 0x02, 0x22, 0x1C, 0x80, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x18, 0x86, 0x62, 0x1C, 0x80, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x00, 0x0E, 0x43, 0x90, 0xE0, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x0E, 0x13, 0x94, 0x60, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x19, 0x4A, 0x72, 0x94, 0xA0, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x18, 0x06, 0x42, 0x10, 0x60, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x10, 0x06, 0x42, 0x10, 0x60, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x30, 0x06, 0x42, 0x10, 0x60, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x18, 0x08, 0x42, 0x14, 0x40, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x30, 0x08, 0x42, 0x14, 0x40, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x10, 0x08, 0x42, 0x0C, 0x26, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x20, 0xC8, 0x42, 0x10, 0x60, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x10, 0x08, 0x42, 0x10, 0x60, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x00, 0x46, 0x42, 0x0C, 0x20, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x08, 0x84, 0x71, 0x08, 0xA0, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x20, 0x82, 0x70, 0x9C, 0x20, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x31, 0x4A, 0x62, 0x90, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x00, 0x42, 0x30, 0x84, 0xA2, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x08, 0x06, 0x01, 0x90, 0x60, // /* code=160, hex=0xA0, ascii="! " */ - // 0x08, 0x02, 0x10, 0x84, 0x20, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x08, 0x06, 0x42, 0x10, 0x60, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x08, 0x08, 0x42, 0x14, 0x40, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x11, 0x40, 0x72, 0x10, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x11, 0x40, 0x43, 0x14, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x18, 0x06, 0x41, 0x80, 0x60, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x19, 0x08, 0x41, 0x80, 0xE0, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x08, 0x02, 0x32, 0x10, 0x60, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x0E, 0x42, 0x10, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x1E, 0x00, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x21, 0x0A, 0x32, 0x00, 0x20, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x21, 0x0A, 0x22, 0x84, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x08, 0x02, 0x11, 0x8C, 0x20, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x04, 0x41, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x08, 0x22, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x28, 0x14, 0x02, 0x81, 0x40, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x2A, 0x8A, 0xA2, 0xA8, 0xAA, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x53, 0xCA, 0xF5, 0x3C, 0xAF, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x08, 0x42, 0xF0, 0x84, 0x21, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x0B, 0xC2, 0xF0, 0x84, 0x21, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x29, 0x4A, 0xD2, 0x94, 0xA5, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0xF2, 0x94, 0xA5, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x03, 0xC2, 0xF0, 0x84, 0x21, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x2B, 0x42, 0xD2, 0x94, 0xA5, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x29, 0x4A, 0x52, 0x94, 0xA5, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x03, 0xC2, 0xD2, 0x94, 0xA5, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x2B, 0x42, 0xF0, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x29, 0x4A, 0xF0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x0B, 0xC2, 0xF0, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0xF0, 0x84, 0x21, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x08, 0x42, 0x10, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x08, 0x42, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0xF0, 0x84, 0x21, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x08, 0x42, 0xF0, 0x84, 0x21, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x29, 0x4A, 0x52, 0x94, 0xA5, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x29, 0x48, 0x70, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x01, 0xC8, 0x52, 0x94, 0xA5, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x2B, 0x40, 0xF0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x03, 0xC0, 0xD2, 0x94, 0xA5, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x29, 0x48, 0x52, 0x94, 0xA5, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x03, 0xC0, 0xF0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x2B, 0x40, 0xD2, 0x94, 0xA5, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x0B, 0xC0, 0xF0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x29, 0x4A, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x03, 0xC0, 0xF0, 0x84, 0x21, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0xF2, 0x94, 0xA5, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x29, 0x4A, 0x70, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x08, 0x42, 0x10, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x42, 0x10, 0x84, 0x21, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x72, 0x94, 0xA5, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x29, 0x4A, 0xD2, 0x94, 0xA5, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x0B, 0xC0, 0xF0, 0x84, 0x21, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x08, 0x42, 0xF0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x10, 0x84, 0x21, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x07, 0xBD, 0xEF, // /* code=220, hex=0xDC, ascii="!\" */ - // 0x73, 0x9C, 0xE7, 0x39, 0xCE, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x08, 0x42, 0x10, 0x84, 0x21, // /* code=222, hex=0xDE, ascii="!^" */ - // 0x7B, 0xDE, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x06, 0x42, 0x0C, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x01, 0xC8, 0x72, 0x10, 0xE4, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x39, 0x08, 0x42, 0x10, 0x80, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x01, 0xC4, 0x21, 0x08, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x39, 0x04, 0x11, 0x10, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x06, 0x42, 0x0C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x08, 0x42, 0x1C, 0x84, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x04, 0x50, 0x84, 0x20, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x18, 0x46, 0x41, 0x84, 0x60, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x19, 0x08, 0x72, 0x10, 0x60, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0xC8, 0x41, 0x08, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x19, 0x04, 0x11, 0x90, 0x60, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x04, 0x52, 0x88, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x46, 0x52, 0x8C, 0x20, // /* code=237, hex=0xED, ascii="!m" */ - // 0x00, 0xC8, 0x72, 0x0C, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0xC8, 0x42, 0x10, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x01, 0xC0, 0x70, 0x1C, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x46, 0x10, 0x0C, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x20, 0xC0, 0x32, 0x00, 0xE0, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0xC8, 0x30, 0x00, 0xE0, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x00, 0x02, 0x10, 0x84, 0x21, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x08, 0x42, 0x10, 0x94, 0x40, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x40, 0x70, 0x04, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x8A, 0x01, 0x14, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x19, 0x08, 0x30, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0x31, 0x80, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x20, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x00, 0x42, 0x12, 0x94, 0x40, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x28, 0x84, 0x20, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x30, 0x44, 0x70, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0x0E, 0x73, 0x9C, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x39, 0x16, 0xD1, 0x55, 0x13, 0x80, // /* code=1, hex=0x01, ascii="^A" */ + // 0x39, 0xF5, 0x5F, 0x45, 0xF3, 0x80, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xA7, 0xDF, 0x7C, 0xE1, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x43, 0x9F, 0x7C, 0xE1, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x10, 0xE3, 0x84, 0x7D, 0xF1, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x43, 0x9F, 0x7C, 0x43, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0xF3, 0xCF, 0xFF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x07, 0x92, 0x49, 0xE0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xF8, 0x6D, 0xB6, 0x1F, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x70, 0xCD, 0x49, 0x23, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x39, 0x14, 0x4E, 0x10, 0xE1, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x10, 0x61, 0x44, 0x31, 0xC6, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x0C, 0xD2, 0xCD, 0x2D, 0xB6, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x01, 0x53, 0x9B, 0x39, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x20, 0xC3, 0x8F, 0x38, 0xC2, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x08, 0x63, 0x9E, 0x38, 0x60, 0x80, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x28, 0xA2, 0x8A, 0x28, 0x02, 0x80, // /* code=19, hex=0x13, ascii="^S" */ + // 0x3D, 0x55, 0x4D, 0x14, 0x51, 0x40, // /* code=20, hex=0x14, ascii="^T" */ + // 0x39, 0x13, 0x0A, 0x19, 0x13, 0x80, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x01, 0xE7, 0x80, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x0E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x10, 0xE7, 0xC4, 0x10, 0x41, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x10, 0x41, 0x04, 0x7C, 0xE1, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x41, 0x9F, 0x18, 0x40, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x43, 0x1F, 0x30, 0x40, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x10, 0x41, 0x07, 0xC0, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0xA2, 0x9F, 0x28, 0xA0, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x10, 0x43, 0x8E, 0x7D, 0xF0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x7D, 0xF3, 0x8E, 0x10, 0x40, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x10, 0xE3, 0x84, 0x10, 0x01, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x6D, 0xB4, 0x80, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xA7, 0xCA, 0x29, 0xF2, 0x80, /* code=35, hex=0x23, ascii="#" */ + 0x20, 0xE4, 0x0C, 0x09, 0xC1, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x65, 0x90, 0x84, 0x21, 0x34, 0xC0, /* code=37, hex=0x25, ascii="%" */ + 0x21, 0x45, 0x08, 0x55, 0x23, 0x40, /* code=38, hex=0x26, ascii="&" */ + 0x30, 0xC2, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x10, 0x82, 0x08, 0x20, 0x81, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x20, 0x41, 0x04, 0x10, 0x42, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0xA3, 0x9F, 0x38, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x41, 0x1F, 0x10, 0x40, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x08, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x39, 0x14, 0xD5, 0x65, 0x13, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x10, 0xC1, 0x04, 0x10, 0x43, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x39, 0x10, 0x46, 0x21, 0x07, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x39, 0x10, 0x4E, 0x05, 0x13, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x08, 0x62, 0x92, 0x7C, 0x20, 0x80, /* code=52, hex=0x34, ascii="4" */ + 0x7D, 0x04, 0x1E, 0x05, 0x13, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x18, 0x84, 0x1E, 0x45, 0x13, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x7C, 0x10, 0x84, 0x20, 0x82, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x39, 0x14, 0x4E, 0x45, 0x13, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x39, 0x14, 0x4F, 0x04, 0x23, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x08, /* code=59, hex=0x3B, ascii=";" */ + 0x08, 0x42, 0x10, 0x20, 0x40, 0x80, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x20, 0x40, 0x81, 0x08, 0x42, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x39, 0x10, 0x46, 0x10, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x39, 0x15, 0xD5, 0x5D, 0x03, 0x80, /* code=64, hex=0x40, ascii="@" */ + 0x39, 0x14, 0x51, 0x7D, 0x14, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x79, 0x14, 0x5E, 0x45, 0x17, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x39, 0x14, 0x10, 0x41, 0x13, 0x80, /* code=67, hex=0x43, ascii="C" */ + 0x79, 0x14, 0x51, 0x45, 0x17, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x7D, 0x04, 0x1E, 0x41, 0x07, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x7D, 0x04, 0x1E, 0x41, 0x04, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x39, 0x14, 0x17, 0x45, 0x13, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x45, 0x14, 0x5F, 0x45, 0x14, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x38, 0x41, 0x04, 0x10, 0x43, 0x80, /* code=73, hex=0x49, ascii="I" */ + 0x04, 0x10, 0x41, 0x45, 0x13, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x45, 0x25, 0x18, 0x51, 0x24, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x41, 0x04, 0x10, 0x41, 0x07, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x45, 0xB5, 0x51, 0x45, 0x14, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x45, 0x95, 0x53, 0x45, 0x14, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x39, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x79, 0x14, 0x5E, 0x41, 0x04, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x39, 0x14, 0x51, 0x55, 0x23, 0x40, /* code=81, hex=0x51, ascii="Q" */ + 0x79, 0x14, 0x5E, 0x49, 0x14, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x39, 0x14, 0x0E, 0x05, 0x13, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x7C, 0x41, 0x04, 0x10, 0x41, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x45, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x45, 0x14, 0x51, 0x44, 0xA1, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x45, 0x15, 0x55, 0x55, 0x52, 0x80, /* code=87, hex=0x57, ascii="W" */ + 0x45, 0x12, 0x84, 0x29, 0x14, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x45, 0x14, 0x4A, 0x10, 0x41, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x78, 0x21, 0x08, 0x41, 0x07, 0x80, /* code=90, hex=0x5A, ascii="Z" */ + 0x38, 0x82, 0x08, 0x20, 0x83, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x38, 0x20, 0x82, 0x08, 0x23, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x10, 0xA4, 0x40, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, /* code=95, hex=0x5F, ascii="_" */ + 0x30, 0xC1, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x03, 0x81, 0x3D, 0x13, 0xC0, /* code=97, hex=0x61, ascii="a" */ + 0x41, 0x07, 0x91, 0x45, 0x17, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x03, 0x91, 0x41, 0x13, 0x80, /* code=99, hex=0x63, ascii="c" */ + 0x04, 0x13, 0xD1, 0x45, 0x13, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x03, 0x91, 0x79, 0x03, 0x80, /* code=101, hex=0x65, ascii="e" */ + 0x18, 0x82, 0x1E, 0x20, 0x82, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x03, 0xD1, 0x44, 0xF0, 0x4E, /* code=103, hex=0x67, ascii="g" */ + 0x41, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=104, hex=0x68, ascii="h" */ + 0x10, 0x01, 0x04, 0x10, 0x41, 0x80, /* code=105, hex=0x69, ascii="i" */ + 0x08, 0x01, 0x82, 0x08, 0x24, 0x8C, /* code=106, hex=0x6A, ascii="j" */ + 0x41, 0x04, 0x94, 0x61, 0x44, 0x80, /* code=107, hex=0x6B, ascii="k" */ + 0x10, 0x41, 0x04, 0x10, 0x41, 0x80, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x06, 0x95, 0x55, 0x14, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x03, 0x91, 0x45, 0x13, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x07, 0x91, 0x45, 0x17, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x03, 0xD1, 0x45, 0x13, 0xC1, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x05, 0x89, 0x20, 0x87, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x03, 0x90, 0x38, 0x13, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x87, 0x88, 0x20, 0xA1, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x04, 0x92, 0x49, 0x62, 0x80, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x04, 0x51, 0x44, 0xA1, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x04, 0x51, 0x55, 0xF2, 0x80, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x04, 0x92, 0x31, 0x24, 0x80, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x04, 0x92, 0x48, 0xE1, 0x18, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x07, 0x82, 0x31, 0x07, 0x80, /* code=122, hex=0x7A, ascii="z" */ + 0x18, 0x82, 0x18, 0x20, 0x81, 0x80, /* code=123, hex=0x7B, ascii="{" */ + 0x10, 0x41, 0x00, 0x10, 0x41, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x30, 0x20, 0x83, 0x08, 0x23, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x29, 0x40, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x10, 0xE6, 0xD1, 0x45, 0xF0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x39, 0x14, 0x10, 0x44, 0xE1, 0x0C, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x48, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x38, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x28, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x30, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x38, 0xA3, 0x81, 0x3D, 0x13, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0xE4, 0x50, 0x44, 0xE1, 0x0C, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x38, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x28, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x30, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x28, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0xA0, 0x04, 0x10, 0x41, 0x80, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x20, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x28, 0x01, 0x0A, 0x45, 0xF4, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0xA3, 0x9B, 0x45, 0xF4, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x0C, 0x07, 0xD0, 0x79, 0x07, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x07, 0x85, 0x7D, 0x43, 0xC0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x3D, 0x45, 0x1F, 0x51, 0x45, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x38, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x28, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x60, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x38, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x60, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x28, 0x04, 0x92, 0x48, 0xE1, 0x18, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x48, 0xC4, 0x92, 0x49, 0x23, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x28, 0x04, 0x92, 0x49, 0x23, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x43, 0x90, 0x40, 0xE1, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x18, 0x92, 0x1E, 0x20, 0x95, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x44, 0xA1, 0x1F, 0x11, 0xF1, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x61, 0x45, 0x1A, 0x5D, 0x24, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x08, 0x51, 0x0E, 0x10, 0x45, 0x08, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x18, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x18, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x18, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x18, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x29, 0x40, 0x1C, 0x49, 0x24, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x29, 0x40, 0x12, 0x69, 0x64, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x13, 0xD1, 0x3C, 0x03, 0xC0, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x31, 0x24, 0x92, 0x30, 0x07, 0x80, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x10, 0x01, 0x0C, 0x41, 0x13, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x07, 0xD0, 0x41, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x0F, 0xC1, 0x04, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x41, 0x25, 0x0E, 0x44, 0x21, 0xC0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x41, 0x25, 0x0B, 0x54, 0x70, 0x40, // /* code=172, hex=0xAC, ascii="!," */ + // 0x10, 0x01, 0x04, 0x38, 0xE1, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x02, 0x52, 0x24, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x04, 0x89, 0x48, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x0A, 0x80, 0x54, 0x0A, 0x80, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x56, 0xA5, 0x6A, 0x56, 0xA5, 0x6A, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAB, 0xF5, 0x7F, 0xAB, 0xF5, 0x7F, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x41, 0x3C, 0x10, 0x41, 0x04, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x13, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x51, 0x45, 0x34, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x3C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x03, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x53, 0x41, 0x34, 0x51, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x03, 0xC1, 0x34, 0x51, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x53, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x51, 0x45, 0x3C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x13, 0xC1, 0x3C, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x3C, 0x10, 0x41, 0x04, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x41, 0x07, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x41, 0x3F, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x3F, 0x10, 0x41, 0x04, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x41, 0x07, 0x10, 0x41, 0x04, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x41, 0x3F, 0x10, 0x41, 0x04, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x51, 0x45, 0x17, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x51, 0x74, 0x1F, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x01, 0xF4, 0x17, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x53, 0x70, 0x3F, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x03, 0xF0, 0x37, 0x51, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x51, 0x74, 0x17, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x53, 0x70, 0x37, 0x51, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x13, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x51, 0x45, 0x3F, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x03, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x3F, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x51, 0x45, 0x1F, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x71, 0x07, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x1F, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x51, 0x45, 0x37, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x13, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x07, 0x10, 0x41, 0x04, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x03, 0x52, 0x48, 0xD0, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x01, 0xC4, 0x9C, 0x49, 0x27, 0x10, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x79, 0x24, 0x10, 0x41, 0x04, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x01, 0xF2, 0x8A, 0x28, 0xA2, 0x80, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x79, 0x22, 0x04, 0x21, 0x27, 0x80, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x03, 0xD2, 0x48, 0xC0, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x04, 0x92, 0x49, 0xC4, 0x10, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x02, 0x94, 0x10, 0x41, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x38, 0x43, 0x91, 0x38, 0x43, 0x80, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x31, 0x24, 0x9E, 0x49, 0x23, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0xE4, 0x51, 0x28, 0xA6, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x31, 0x02, 0x04, 0x39, 0x23, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x02, 0x95, 0x54, 0xA0, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x43, 0x95, 0x54, 0xE1, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0xE4, 0x1E, 0x40, 0xE0, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0xC4, 0x92, 0x49, 0x20, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x43, 0x84, 0x00, 0xE0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x40, 0xC0, 0x8C, 0x40, 0x07, 0x80, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x08, 0xC4, 0x0C, 0x08, 0x07, 0x80, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x21, 0x44, 0x10, 0x41, 0x04, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x10, 0x41, 0x04, 0x11, 0x42, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x40, 0x1F, 0x00, 0x40, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0xA5, 0x00, 0x29, 0x40, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x31, 0x24, 0x8C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x71, 0x04, 0x51, 0x42, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x50, 0xA2, 0x8A, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x60, 0x42, 0x1C, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x07, 0x9E, 0x79, 0xE0, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ }; diff --git a/wled00/src/font/console_font_7x9.h b/wled00/src/font/console_font_7x9.h index c9996fb003..e26f1b6b3a 100644 --- a/wled00/src/font/console_font_7x9.h +++ b/wled00/src/font/console_font_7x9.h @@ -7,7 +7,7 @@ * Header Layout (12 Bytes): * [0] Magic 'W' (0x57) * [1] Glyph height: 9 - * [2] Fixed/max glyph width: 6 + * [2] Fixed/max glyph width: 7 * [3] Spacing between chars: 1 * [4] Flags: 0x00 (0x01 = variable width) * [5] First Char: 32 @@ -39,262 +39,262 @@ */ static const unsigned char console_font_7x9[] PROGMEM = { - 0x57, 0x09, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + 0x57, 0x09, 0x07, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ - // 0x1C, 0x85, 0x55, 0x41, 0x54, 0x8F, 0x00, // /* code=1, hex=0x01, ascii="^A" */ - // 0x1C, 0xF6, 0x9A, 0x7D, 0x76, 0x0F, 0x00, // /* code=2, hex=0x02, ascii="^B" */ - // 0x00, 0xD7, 0xDF, 0x7C, 0xF1, 0xC2, 0x00, // /* code=3, hex=0x03, ascii="^C" */ - // 0x00, 0x21, 0xCF, 0x7C, 0xF1, 0xC2, 0x00, // /* code=4, hex=0x04, ascii="^D" */ - // 0x1C, 0x70, 0x9A, 0x7D, 0xA0, 0x8F, 0x00, // /* code=5, hex=0x05, ascii="^E" */ - // 0x08, 0x73, 0xDF, 0x7C, 0xA0, 0x87, 0x00, // /* code=6, hex=0x06, ascii="^F" */ - // 0x00, 0x00, 0xC7, 0x1C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ - // 0x7D, 0xF7, 0x18, 0x61, 0xC7, 0xDF, 0x7C, // /* code=8, hex=0x08, ascii="^H" */ - // 0x00, 0x31, 0xCC, 0x30, 0x70, 0xC0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ - // 0x7D, 0xC6, 0x13, 0x4D, 0x87, 0x1F, 0x7C, // /* code=10, hex=0x0A, ascii="^J" */ - // 0x04, 0x00, 0x43, 0x1C, 0xC3, 0x07, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ - // 0x1C, 0xC3, 0x07, 0x0C, 0x70, 0xC3, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ - // 0x00, 0x71, 0x44, 0x10, 0x43, 0x0C, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ - // 0x00, 0x71, 0x07, 0x10, 0x43, 0x4D, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ - // 0x48, 0xA1, 0xC5, 0x74, 0x72, 0x92, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ - // 0x00, 0x41, 0x87, 0x1C, 0x71, 0x84, 0x00, // /* code=16, hex=0x10, ascii="^P" */ - // 0x00, 0x00, 0x43, 0x1C, 0x30, 0x40, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ - // 0x08, 0x73, 0xC2, 0x08, 0xF1, 0xC2, 0x00, // /* code=18, hex=0x12, ascii="^R" */ - // 0x34, 0xD3, 0x4D, 0x34, 0x03, 0x4D, 0x00, // /* code=19, hex=0x13, ascii="^S" */ - // 0x00, 0x72, 0x8A, 0x1C, 0x20, 0x82, 0x00, // /* code=20, hex=0x14, ascii="^T" */ - // 0x1C, 0xC3, 0x07, 0x30, 0xC1, 0xC0, 0x30, // /* code=21, hex=0x15, ascii="^U" */ - // 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC0, 0x00, // /* code=22, hex=0x16, ascii="^V" */ - // 0x08, 0x73, 0xC2, 0x08, 0xF1, 0xC2, 0x3C, // /* code=23, hex=0x17, ascii="^W" */ - // 0x00, 0x31, 0xCB, 0x0C, 0x30, 0xC3, 0x00, // /* code=24, hex=0x18, ascii="^X" */ - // 0x00, 0x30, 0xC3, 0x0C, 0xB1, 0xC3, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ - // 0x00, 0x00, 0xC1, 0x3C, 0x10, 0xC0, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ - // 0x00, 0x00, 0xC6, 0x3C, 0x60, 0xC0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ - // 0x00, 0x00, 0x00, 0x30, 0xC3, 0xC0, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ - // 0x00, 0x01, 0x0C, 0x7C, 0xC1, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ - // 0x00, 0x00, 0x02, 0x1C, 0xF7, 0xC0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ - // 0x00, 0x00, 0x1F, 0x3C, 0x70, 0x80, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ - 0x00, 0x30, 0xC3, 0x0C, 0x00, 0xC3, 0x00, /* code=33, hex=0x21, ascii="!" */ - 0x00, 0xD3, 0x48, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ - 0x00, 0xD3, 0x5F, 0x35, 0xF3, 0x4D, 0x00, /* code=35, hex=0x23, ascii="#" */ - 0x04, 0x31, 0xCC, 0x1C, 0x03, 0xC3, 0x08, /* code=36, hex=0x24, ascii="$" */ - 0x38, 0xA3, 0x81, 0x0C, 0x73, 0x41, 0x00, /* code=37, hex=0x25, ascii="%" */ - 0x1C, 0xD3, 0x47, 0x34, 0xD3, 0x47, 0x00, /* code=38, hex=0x26, ascii="&" */ - 0x00, 0x30, 0xC6, 0x18, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ - 0x00, 0x10, 0xC6, 0x18, 0x60, 0xC1, 0x00, /* code=40, hex=0x28, ascii="(" */ - 0x00, 0x60, 0xC1, 0x04, 0x10, 0xC6, 0x00, /* code=41, hex=0x29, ascii=")" */ - 0x00, 0x83, 0x47, 0x7C, 0x73, 0x48, 0x00, /* code=42, hex=0x2A, ascii="*" */ - 0x00, 0x00, 0xC3, 0x3C, 0xF0, 0xC3, 0x00, /* code=43, hex=0x2B, ascii="+" */ - 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x30, /* code=44, hex=0x2C, ascii="," */ - 0x00, 0x00, 0x00, 0x3C, 0xF0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ - 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, /* code=46, hex=0x2E, ascii="." */ - 0x00, 0x10, 0x43, 0x0C, 0x61, 0x8C, 0x00, /* code=47, hex=0x2F, ascii="/" */ - 0x00, 0x73, 0x0D, 0x38, 0xC3, 0x07, 0x00, /* code=48, hex=0x30, ascii="0" */ - 0x00, 0x33, 0xC3, 0x0C, 0x30, 0xCF, 0x00, /* code=49, hex=0x31, ascii="1" */ - 0x00, 0x73, 0x08, 0x0C, 0x63, 0x0F, 0x00, /* code=50, hex=0x32, ascii="2" */ - 0x00, 0x73, 0x00, 0x0C, 0x03, 0x07, 0x00, /* code=51, hex=0x33, ascii="3" */ - 0x00, 0x10, 0xC7, 0x34, 0xF0, 0x43, 0x00, /* code=52, hex=0x34, ascii="4" */ - 0x00, 0xF3, 0x0C, 0x3C, 0x03, 0x07, 0x00, /* code=53, hex=0x35, ascii="5" */ - 0x00, 0x31, 0x8C, 0x3C, 0xC3, 0x07, 0x00, /* code=54, hex=0x36, ascii="6" */ - 0x00, 0xF3, 0x00, 0x04, 0x30, 0xC3, 0x00, /* code=55, hex=0x37, ascii="7" */ - 0x00, 0x73, 0x0C, 0x1C, 0xC3, 0x07, 0x00, /* code=56, hex=0x38, ascii="8" */ - 0x00, 0x73, 0x0C, 0x1C, 0x00, 0x47, 0x00, /* code=57, hex=0x39, ascii="9" */ - 0x00, 0x01, 0x86, 0x00, 0x01, 0x86, 0x00, /* code=58, hex=0x3A, ascii=":" */ - 0x00, 0x01, 0x86, 0x00, 0x01, 0x86, 0x30, /* code=59, hex=0x3B, ascii=";" */ - 0x00, 0x00, 0xC6, 0x30, 0x60, 0xC0, 0x00, /* code=60, hex=0x3C, ascii="<" */ - 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ - 0x00, 0x01, 0x83, 0x04, 0x31, 0x80, 0x00, /* code=62, hex=0x3E, ascii=">" */ - 0x00, 0x73, 0x00, 0x04, 0x30, 0x03, 0x00, /* code=63, hex=0x3F, ascii="?" */ - 0x00, 0x73, 0x0D, 0x34, 0xD3, 0x07, 0x00, /* code=64, hex=0x40, ascii="@" */ - 0x00, 0x21, 0xC5, 0x34, 0xF6, 0x18, 0x00, /* code=65, hex=0x41, ascii="A" */ - 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0F, 0x00, /* code=66, hex=0x42, ascii="B" */ - 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=67, hex=0x43, ascii="C" */ - 0x00, 0xF3, 0x0C, 0x30, 0xC3, 0x0F, 0x00, /* code=68, hex=0x44, ascii="D" */ - 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0F, 0x00, /* code=69, hex=0x45, ascii="E" */ - 0x00, 0xF3, 0x0C, 0x3C, 0xC3, 0x0C, 0x00, /* code=70, hex=0x46, ascii="F" */ - 0x00, 0x73, 0x0C, 0x34, 0xC3, 0x07, 0x00, /* code=71, hex=0x47, ascii="G" */ - 0x00, 0xC3, 0x0C, 0x3C, 0xC3, 0x0C, 0x00, /* code=72, hex=0x48, ascii="H" */ - 0x00, 0x70, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=73, hex=0x49, ascii="I" */ - 0x00, 0x30, 0x41, 0x04, 0xD3, 0x47, 0x00, /* code=74, hex=0x4A, ascii="J" */ - 0x00, 0xC3, 0x4D, 0x3C, 0xD3, 0x4C, 0x00, /* code=75, hex=0x4B, ascii="K" */ - 0x00, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0x00, /* code=76, hex=0x4C, ascii="L" */ - 0x01, 0x86, 0x1D, 0x7D, 0xA6, 0x9A, 0x00, /* code=77, hex=0x4D, ascii="M" */ - 0x00, 0xC3, 0x8E, 0x3C, 0xD3, 0x0C, 0x00, /* code=78, hex=0x4E, ascii="N" */ - 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=79, hex=0x4F, ascii="O" */ - 0x00, 0xF3, 0x0C, 0x30, 0xF3, 0x0C, 0x00, /* code=80, hex=0x50, ascii="P" */ - 0x00, 0x73, 0x0C, 0x30, 0xE3, 0x47, 0x00, /* code=81, hex=0x51, ascii="Q" */ - 0x00, 0xF3, 0x0C, 0x34, 0xF3, 0x4C, 0x00, /* code=82, hex=0x52, ascii="R" */ - 0x00, 0x73, 0x0C, 0x1C, 0x03, 0x07, 0x00, /* code=83, hex=0x53, ascii="S" */ - 0x00, 0xF2, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=84, hex=0x54, ascii="T" */ - 0x00, 0xC3, 0x0C, 0x30, 0xC3, 0x07, 0x00, /* code=85, hex=0x55, ascii="U" */ - 0x01, 0x86, 0x0D, 0x34, 0x71, 0xC2, 0x00, /* code=86, hex=0x56, ascii="V" */ - 0x01, 0x86, 0x9A, 0x68, 0xF3, 0x48, 0x00, /* code=87, hex=0x57, ascii="W" */ - 0x00, 0xC3, 0x07, 0x0C, 0x73, 0x0C, 0x00, /* code=88, hex=0x58, ascii="X" */ - 0x00, 0xC3, 0x0C, 0x1C, 0x30, 0xC7, 0x00, /* code=89, hex=0x59, ascii="Y" */ - 0x00, 0xF3, 0x01, 0x0C, 0x63, 0x0F, 0x00, /* code=90, hex=0x5A, ascii="Z" */ - 0x00, 0x71, 0x86, 0x18, 0x61, 0x87, 0x00, /* code=91, hex=0x5B, ascii="[" */ - 0x00, 0xC3, 0x06, 0x18, 0x30, 0xC1, 0x00, /* code=92, hex=0x5C, ascii="\" */ - 0x00, 0x70, 0x41, 0x04, 0x10, 0x47, 0x00, /* code=93, hex=0x5D, ascii="]" */ - 0x00, 0x21, 0xCD, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3C, /* code=95, hex=0x5F, ascii="_" */ - 0x00, 0x61, 0x83, 0x0C, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ - 0x00, 0x00, 0x07, 0x00, 0x73, 0x07, 0x00, /* code=97, hex=0x61, ascii="a" */ - 0x00, 0xC3, 0x0F, 0x30, 0xC3, 0x0B, 0x00, /* code=98, hex=0x62, ascii="b" */ - 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=99, hex=0x63, ascii="c" */ - 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=100, hex=0x64, ascii="d" */ - 0x00, 0x00, 0x07, 0x30, 0xF3, 0x07, 0x00, /* code=101, hex=0x65, ascii="e" */ - 0x00, 0x31, 0x86, 0x3C, 0x61, 0x8F, 0x00, /* code=102, hex=0x66, ascii="f" */ - 0x00, 0x00, 0x07, 0x30, 0xC1, 0xC0, 0x1C, /* code=103, hex=0x67, ascii="g" */ - 0x00, 0xC3, 0x0D, 0x38, 0xC3, 0x0C, 0x00, /* code=104, hex=0x68, ascii="h" */ - 0x0C, 0x30, 0x03, 0x1C, 0x30, 0xC7, 0x00, /* code=105, hex=0x69, ascii="i" */ - 0x04, 0x10, 0x01, 0x1C, 0x12, 0x4D, 0x1C, /* code=106, hex=0x6A, ascii="j" */ - 0x00, 0xC3, 0x0C, 0x34, 0xF3, 0x4C, 0x00, /* code=107, hex=0x6B, ascii="k" */ - 0x00, 0x30, 0xC3, 0x0C, 0x30, 0xC7, 0x00, /* code=108, hex=0x6C, ascii="l" */ - 0x00, 0x00, 0x0D, 0x7D, 0xA6, 0x9A, 0x00, /* code=109, hex=0x6D, ascii="m" */ - 0x00, 0x00, 0x0D, 0x38, 0xC3, 0x0C, 0x00, /* code=110, hex=0x6E, ascii="n" */ - 0x00, 0x00, 0x07, 0x30, 0xC3, 0x07, 0x00, /* code=111, hex=0x6F, ascii="o" */ - 0x00, 0x00, 0x0F, 0x30, 0xC3, 0x8D, 0x30, /* code=112, hex=0x70, ascii="p" */ - 0x00, 0x00, 0x07, 0x30, 0xC3, 0x46, 0x00, /* code=113, hex=0x71, ascii="q" */ - 0x00, 0x00, 0x04, 0x3C, 0x61, 0x8F, 0x00, /* code=114, hex=0x72, ascii="r" */ - 0x00, 0x00, 0x07, 0x30, 0x70, 0x07, 0x00, /* code=115, hex=0x73, ascii="s" */ - 0x00, 0x21, 0x9F, 0x18, 0x61, 0x83, 0x00, /* code=116, hex=0x74, ascii="t" */ - 0x00, 0x00, 0x0C, 0x30, 0xC3, 0x46, 0x00, /* code=117, hex=0x75, ascii="u" */ - 0x00, 0x00, 0x18, 0x60, 0xD1, 0xC2, 0x00, /* code=118, hex=0x76, ascii="v" */ - 0x00, 0x00, 0x1A, 0x68, 0xF3, 0x48, 0x00, /* code=119, hex=0x77, ascii="w" */ - 0x00, 0x00, 0x18, 0x34, 0x73, 0x58, 0x00, /* code=120, hex=0x78, ascii="x" */ - 0x00, 0x00, 0x0C, 0x30, 0x60, 0xCD, 0x1C, /* code=121, hex=0x79, ascii="y" */ - 0x00, 0x00, 0x0F, 0x00, 0x31, 0x8F, 0x00, /* code=122, hex=0x7A, ascii="z" */ - 0x00, 0x31, 0x86, 0x30, 0x61, 0x83, 0x00, /* code=123, hex=0x7B, ascii="{" */ - 0x0C, 0x30, 0xC3, 0x00, 0x30, 0xC3, 0x00, /* code=124, hex=0x7C, ascii="|" */ - 0x00, 0xE0, 0xC3, 0x04, 0x30, 0xCE, 0x00, /* code=125, hex=0x7D, ascii="}" */ - 0x00, 0x21, 0xCD, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ - // 0x00, 0x00, 0x43, 0x18, 0xC3, 0xC0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ - // 0x00, 0x73, 0x0C, 0x30, 0xC3, 0x07, 0x3C, // /* code=128, hex=0x80, ascii="!^@" */ - // 0x30, 0xC0, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ - // 0x04, 0x30, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ - // 0x0C, 0x60, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ - // 0x18, 0x60, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ - // 0x0C, 0x10, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ - // 0x0C, 0x20, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ - // 0x00, 0x00, 0x03, 0x18, 0xC1, 0x83, 0x3C, // /* code=135, hex=0x87, ascii="!^G" */ - // 0x04, 0x30, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ - // 0x30, 0xC0, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ - // 0x0C, 0x10, 0x07, 0x30, 0xF3, 0x07, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ - // 0x30, 0xC0, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ - // 0x08, 0x70, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ - // 0x18, 0x30, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ - // 0x60, 0x21, 0xC5, 0x34, 0xF6, 0x18, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ - // 0x1C, 0x51, 0xC5, 0x34, 0xF6, 0x18, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ - // 0x0C, 0x63, 0xCC, 0x3C, 0xC3, 0x0F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ - // 0x00, 0x00, 0x0F, 0x0C, 0xF6, 0xCF, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ - // 0x00, 0x31, 0xCB, 0x2D, 0xF6, 0xDB, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ - // 0x08, 0x70, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ - // 0x30, 0xC0, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ - // 0x0C, 0x10, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ - // 0x04, 0x30, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ - // 0x0C, 0x10, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ - // 0x30, 0xC0, 0x0C, 0x30, 0x60, 0xCD, 0x1C, // /* code=152, hex=0x98, ascii="!^X" */ - // 0x30, 0x01, 0xCC, 0x30, 0xC3, 0x07, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ - // 0x30, 0x03, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ - // 0x04, 0x11, 0xCC, 0x30, 0x70, 0x82, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ - // 0x0C, 0x61, 0x86, 0x3C, 0x61, 0xCC, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ - // 0x30, 0xC1, 0xC3, 0x3C, 0x33, 0xC3, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ - // 0x71, 0xA6, 0x9E, 0x65, 0xB6, 0x40, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ - // 0x04, 0x30, 0xC3, 0x3C, 0x30, 0xC3, 0x38, // /* code=159, hex=0x9F, ascii="!^_" */ - // 0x00, 0x10, 0x07, 0x00, 0x73, 0x07, 0x00, // /* code=160, hex=0xA0, ascii="! " */ - // 0x04, 0x30, 0x07, 0x0C, 0x30, 0xC7, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ - // 0x04, 0x30, 0x07, 0x30, 0xC3, 0x07, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ - // 0x04, 0x30, 0x0C, 0x30, 0xC3, 0x07, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ - // 0x39, 0xB0, 0x0D, 0x38, 0xC3, 0x0C, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ - // 0x39, 0xB0, 0x0C, 0x38, 0xF3, 0x4C, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ - // 0x1C, 0x11, 0xCD, 0x18, 0x03, 0xC0, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ - // 0x1C, 0xC3, 0x07, 0x00, 0xF0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ - // 0x00, 0x30, 0x03, 0x18, 0xC3, 0x07, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ - // 0x00, 0x00, 0x07, 0x1C, 0x61, 0x80, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ - // 0x00, 0x00, 0x0F, 0x3C, 0x10, 0x40, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ - // 0x30, 0xC3, 0x0D, 0x0C, 0x00, 0xC3, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ - // 0x30, 0xC3, 0x0D, 0x3C, 0x53, 0xC1, 0x00, // /* code=172, hex=0xAC, ascii="!," */ - // 0x00, 0x30, 0x03, 0x0C, 0x71, 0xC3, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ - // 0x00, 0x01, 0x8C, 0x64, 0xC1, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ - // 0x00, 0x06, 0x4C, 0x18, 0xC6, 0x40, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ - // 0x28, 0x05, 0x40, 0x28, 0x05, 0x40, 0x28, // /* code=176, hex=0xB0, ascii="!0" */ - // 0x48, 0x91, 0x12, 0x24, 0x44, 0x89, 0x10, // /* code=177, hex=0xB1, ascii="!1" */ - // 0x54, 0xA5, 0x4A, 0x54, 0xA5, 0x4A, 0x54, // /* code=178, hex=0xB2, ascii="!2" */ - // 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, // /* code=179, hex=0xB3, ascii="!3" */ - // 0x08, 0x20, 0x82, 0x78, 0x20, 0x82, 0x08, // /* code=180, hex=0xB4, ascii="!4" */ - // 0x08, 0x20, 0x9E, 0x09, 0xE0, 0x82, 0x08, // /* code=181, hex=0xB5, ascii="!5" */ - // 0x14, 0x51, 0x45, 0x74, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ - // 0x00, 0x00, 0x00, 0x7C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ - // 0x00, 0x00, 0x1E, 0x09, 0xE0, 0x82, 0x08, // /* code=184, hex=0xB8, ascii="!8" */ - // 0x14, 0x51, 0x5D, 0x05, 0xD1, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ - // 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ - // 0x00, 0x00, 0x1F, 0x05, 0xD1, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ - // 0x14, 0x51, 0x5D, 0x05, 0xF0, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ - // 0x14, 0x51, 0x45, 0x7C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ - // 0x08, 0x20, 0x9E, 0x09, 0xE0, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ - // 0x00, 0x00, 0x00, 0x78, 0x20, 0x82, 0x08, // /* code=191, hex=0xBF, ascii="!?" */ - // 0x08, 0x20, 0x82, 0x0C, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ - // 0x08, 0x20, 0x82, 0x7C, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ - // 0x00, 0x00, 0x00, 0x7C, 0x20, 0x82, 0x08, // /* code=194, hex=0xC2, ascii="!B" */ - // 0x08, 0x20, 0x82, 0x0C, 0x20, 0x82, 0x08, // /* code=195, hex=0xC3, ascii="!C" */ - // 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ - // 0x08, 0x20, 0x82, 0x7C, 0x20, 0x82, 0x08, // /* code=197, hex=0xC5, ascii="!E" */ - // 0x08, 0x20, 0x83, 0x08, 0x30, 0x82, 0x08, // /* code=198, hex=0xC6, ascii="!F" */ - // 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ - // 0x14, 0x51, 0x45, 0x10, 0x70, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ - // 0x00, 0x00, 0x07, 0x10, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ - // 0x14, 0x51, 0x5D, 0x01, 0xF0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ - // 0x00, 0x00, 0x1F, 0x01, 0xD1, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ - // 0x14, 0x51, 0x45, 0x10, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ - // 0x00, 0x00, 0x1F, 0x01, 0xF0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ - // 0x14, 0x51, 0x5D, 0x01, 0xD1, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ - // 0x08, 0x20, 0x9F, 0x01, 0xF0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ - // 0x14, 0x51, 0x45, 0x7C, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ - // 0x00, 0x00, 0x1F, 0x01, 0xF0, 0x82, 0x08, // /* code=209, hex=0xD1, ascii="!Q" */ - // 0x00, 0x00, 0x00, 0x7C, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ - // 0x14, 0x51, 0x45, 0x1C, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ - // 0x08, 0x20, 0x83, 0x08, 0x30, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ - // 0x00, 0x00, 0x03, 0x08, 0x30, 0x82, 0x08, // /* code=213, hex=0xD5, ascii="!U" */ - // 0x00, 0x00, 0x00, 0x1C, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ - // 0x14, 0x51, 0x45, 0x74, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ - // 0x08, 0x20, 0x9F, 0x09, 0xF0, 0x82, 0x08, // /* code=216, hex=0xD8, ascii="!X" */ - // 0x08, 0x20, 0x82, 0x78, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ - // 0x00, 0x00, 0x00, 0x0C, 0x20, 0x82, 0x08, // /* code=218, hex=0xDA, ascii="!Z" */ - // 0x7D, 0xF7, 0xDF, 0x7D, 0xF7, 0xDF, 0x7C, // /* code=219, hex=0xDB, ascii="![" */ - // 0x00, 0x00, 0x00, 0x01, 0xF7, 0xDF, 0x7C, // /* code=220, hex=0xDC, ascii="!\" */ - // 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x78, // /* code=221, hex=0xDD, ascii="!]" */ - // 0x04, 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=222, hex=0xDE, ascii="!^" */ - // 0x7D, 0xF7, 0xDF, 0x7C, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ - // 0x00, 0x63, 0x4D, 0x34, 0x60, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ - // 0x3C, 0xC3, 0x0D, 0x30, 0xC3, 0x0D, 0x04, // /* code=225, hex=0xE1, ascii="!a" */ - // 0x00, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ - // 0x00, 0x03, 0x5F, 0x78, 0xC3, 0x4D, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ - // 0x01, 0xF6, 0x0C, 0x1C, 0x63, 0x1F, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ - // 0x00, 0x00, 0x07, 0x34, 0xD3, 0x47, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ - // 0x00, 0x00, 0x06, 0x18, 0x61, 0xCC, 0x20, // /* code=230, hex=0xE6, ascii="!f" */ - // 0x00, 0x03, 0xCD, 0x04, 0x10, 0xC3, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ - // 0x1C, 0x31, 0xCC, 0x30, 0x70, 0xC7, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ - // 0x00, 0x73, 0x0C, 0x3C, 0xC3, 0x07, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ - // 0x00, 0x73, 0x0C, 0x30, 0xC1, 0x0C, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ - // 0x00, 0x73, 0x06, 0x0C, 0x73, 0x07, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ - // 0x00, 0x00, 0x06, 0x24, 0x92, 0x46, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ - // 0x00, 0x73, 0x0D, 0x38, 0xC1, 0xC2, 0x10, // /* code=237, hex=0xED, ascii="!m" */ - // 0x0C, 0x63, 0x0C, 0x3C, 0xC1, 0x83, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ - // 0x00, 0x01, 0xCC, 0x30, 0xC3, 0x0C, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ - // 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ - // 0x00, 0x30, 0xCF, 0x0C, 0x30, 0x0F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ - // 0x00, 0x60, 0xC1, 0x0C, 0x60, 0x07, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ - // 0x00, 0x10, 0xC6, 0x0C, 0x10, 0x07, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ - // 0x04, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, // /* code=244, hex=0xF4, ascii="!t" */ - // 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xCB, 0x18, // /* code=245, hex=0xF5, ascii="!u" */ - // 0x00, 0x30, 0xC0, 0x3C, 0x00, 0xC3, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ - // 0x00, 0x00, 0xCE, 0x00, 0x33, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ - // 0x00, 0x73, 0x0C, 0x1C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ - // 0x00, 0x00, 0xC7, 0x1C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ - // 0x00, 0x00, 0x03, 0x0C, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ - // 0x04, 0x10, 0x41, 0x04, 0xD1, 0xC1, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ - // 0x00, 0xF3, 0x4D, 0x34, 0xD0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ - // 0x00, 0x72, 0x43, 0x18, 0xF0, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ - // 0x00, 0xF3, 0xCF, 0x3C, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x38, 0x8A, 0xAD, 0x58, 0x35, 0x65, 0x3C, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x38, 0xFB, 0x5E, 0xBF, 0xF7, 0x71, 0xBE, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xDB, 0xFF, 0xFF, 0xEF, 0x8E, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x20, 0xE3, 0xEF, 0xEF, 0x8E, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x38, 0x70, 0x46, 0xBF, 0xFA, 0xC4, 0x3E, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x10, 0x71, 0xF7, 0xFF, 0xEA, 0x84, 0x1C, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0x9E, 0x1C, 0x3C, 0xFF, 0xFF, 0xFE, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xCF, 0x0C, 0xC9, 0x98, 0x79, 0xFF, 0xFE, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x0E, 0x0C, 0x28, 0xC3, 0xCC, 0xD9, 0x9E, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x3C, 0xCD, 0x99, 0xE1, 0x87, 0x86, 0x0C, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x70, 0xB1, 0x02, 0x04, 0x18, 0x30, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x78, 0x91, 0xE2, 0x44, 0x9B, 0x36, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x92, 0xA8, 0xE1, 0x4E, 0xE7, 0x15, 0x49, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x40, 0xC1, 0xC3, 0xC7, 0x0C, 0x10, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x08, 0x30, 0xE3, 0xC3, 0x83, 0x02, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x6C, 0xD9, 0xB3, 0x66, 0xC0, 0x1B, 0x36, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x79, 0x52, 0xA3, 0xC2, 0x85, 0x0A, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x3C, 0xCD, 0x81, 0xE6, 0x6C, 0xCF, 0x03, 0x66, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0x00, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x7C, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x30, 0xF2, 0xD1, 0x83, 0x06, 0x0C, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x30, 0x60, 0xC1, 0x8B, 0x4F, 0x0C, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x60, 0x67, 0xE1, 0x86, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x61, 0x87, 0xE6, 0x06, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x06, 0x0C, 0x1F, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0x93, 0x3F, 0xEC, 0xC9, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x00, 0x83, 0x8F, 0xBF, 0x80, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x07, 0xF7, 0xC7, 0x04, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x30, 0x60, 0xC1, 0x80, 0x06, 0x0C, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0xD9, 0xB2, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xD9, 0xB7, 0xF6, 0xDF, 0xDB, 0x36, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x08, 0x30, 0xF3, 0x03, 0xC0, 0xDF, 0x0C, 0x10, /* code=36, hex=0x24, ascii="$" */ + 0x70, 0xA5, 0xD8, 0x61, 0x87, 0xDA, 0x87, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x38, 0xD9, 0xB1, 0xC6, 0xED, 0x9B, 0x1F, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x00, 0x30, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x18, 0x61, 0x83, 0x06, 0x06, 0x06, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x60, 0x60, 0x60, 0xC1, 0x86, 0x18, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x89, 0xB1, 0xCF, 0xE7, 0x1B, 0x22, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x60, 0xC7, 0xEF, 0xC6, 0x0C, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x60, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x18, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x79, 0x9B, 0x77, 0x6C, 0xD9, 0x9E, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x31, 0xE0, 0xC1, 0x83, 0x06, 0x3F, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x79, 0x9A, 0x31, 0xC6, 0x19, 0xBF, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x79, 0x98, 0x31, 0xC0, 0xD9, 0x9E, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x18, 0x71, 0xE6, 0xCF, 0xC3, 0x0F, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0xFD, 0x9B, 0x07, 0xC0, 0xD9, 0x9E, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x38, 0xC3, 0x07, 0xCC, 0xD9, 0x9E, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0xFD, 0x98, 0x30, 0xC3, 0x06, 0x0C, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x79, 0x9B, 0x33, 0xCC, 0xD9, 0x9E, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x79, 0x9B, 0x33, 0xE0, 0xC3, 0x1C, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x60, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x00, 0x61, 0x86, 0x06, 0x06, 0x00, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x00, 0xC0, 0xC0, 0xC3, 0x0C, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x79, 0x98, 0x30, 0xC3, 0x00, 0x0C, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x79, 0x8B, 0x76, 0xAD, 0x98, 0x9E, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0xF9, 0x9B, 0x37, 0xCC, 0xD9, 0xBE, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6C, 0xD9, 0xBE, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0xFD, 0x9B, 0x07, 0x8C, 0x19, 0xBF, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0xFD, 0x9B, 0x07, 0xCC, 0x18, 0x30, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x79, 0x9B, 0x06, 0xEC, 0xD9, 0x9F, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0xCD, 0x9B, 0x37, 0xEC, 0xD9, 0xB3, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x78, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x3C, 0x30, 0x60, 0xCD, 0x9B, 0x1C, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0xCD, 0xB3, 0x67, 0x8D, 0x9B, 0x33, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xBF, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x01, 0x8F, 0x1F, 0x7F, 0xFA, 0xF5, 0xEB, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0xCD, 0xDB, 0xB7, 0xED, 0xD9, 0xB3, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6F, 0x98, 0x30, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x79, 0x9B, 0x36, 0x6E, 0xDB, 0x9E, 0x06, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0xF9, 0x9B, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x79, 0x9B, 0x03, 0xC0, 0xD9, 0x9E, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0xFD, 0x68, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0xCD, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x01, 0x8F, 0x1B, 0x66, 0xC7, 0x0E, 0x08, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x01, 0x8F, 0x5E, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0xCD, 0x99, 0xE1, 0x87, 0x99, 0xB3, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0xCD, 0x9B, 0x33, 0xC3, 0x06, 0x1E, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0xFD, 0x98, 0x61, 0x86, 0x19, 0xBF, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x78, 0xC1, 0x83, 0x06, 0x0C, 0x1E, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0xC1, 0x81, 0x83, 0x03, 0x06, 0x06, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x78, 0x30, 0x60, 0xC1, 0x83, 0x1E, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x20, 0xE3, 0x60, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x60, 0xC0, 0xC1, 0x80, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x00, 0xC1, 0x83, 0xE6, 0x6C, 0xD9, 0xAE, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0x19, 0x9E, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x0C, 0x19, 0xF6, 0x6C, 0xD9, 0x9D, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x01, 0xE6, 0x6F, 0xD8, 0x1E, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x38, 0xD9, 0x87, 0xC6, 0x0C, 0x3C, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xCF, 0x83, 0x3C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0xC1, 0x83, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x18, 0x30, 0x00, 0xC3, 0x83, 0x06, 0x1E, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x0C, 0x18, 0x00, 0x63, 0xC1, 0x93, 0x36, 0x38, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0xC1, 0x83, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x00, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x03, 0x6F, 0xFA, 0xF5, 0xEB, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x03, 0xE6, 0x6C, 0xDD, 0xB6, 0x60, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xDB, 0x9B, 0x06, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x01, 0x37, 0xE6, 0x0C, 0x3C, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x01, 0xE6, 0x07, 0x81, 0x9E, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x20, 0xC7, 0xE3, 0x06, 0x0D, 0x8E, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x03, 0x36, 0x6C, 0xDB, 0x9B, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x06, 0x3C, 0x6D, 0x8E, 0x08, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x06, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x06, 0x36, 0xC7, 0x1B, 0x63, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x03, 0xF0, 0x63, 0x0C, 0x3F, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x38, 0xC1, 0x86, 0x06, 0x0C, 0x0E, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x18, 0x30, 0x60, 0xC0, 0x03, 0x06, 0x0C, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x00, 0xE0, 0x60, 0xC0, 0xC3, 0x06, 0x38, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x20, 0xEB, 0x70, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x20, 0xE3, 0x6C, 0x5F, 0x80, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x78, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x66, 0xCC, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x30, 0x01, 0xF6, 0x2F, 0xD8, 0x1F, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x1C, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x36, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x18, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x1C, 0x28, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x00, 0xE3, 0x6C, 0x0D, 0x8E, 0x78, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x08, 0x38, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x66, 0xCC, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0x70, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x30, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xC6, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0x50, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x1C, 0x61, 0xFB, 0x07, 0xCC, 0x18, 0x3F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x03, 0xE1, 0xAF, 0xF6, 0x3F, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x3C, 0xE2, 0xC5, 0xFF, 0x36, 0x6F, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x10, 0x70, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x08, 0x38, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x18, 0x18, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x66, 0xCC, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x66, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x66, 0x01, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x08, 0x10, 0xF3, 0x06, 0x07, 0x84, 0x08, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x1C, 0x6C, 0xC1, 0x87, 0xC6, 0x0F, 0x33, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x66, 0xCC, 0xF0, 0xC7, 0xE3, 0x1F, 0x8C, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0xE1, 0xA3, 0x47, 0xAC, 0xDB, 0xF3, 0x03, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x0E, 0x30, 0x60, 0xC7, 0xE3, 0x06, 0x0C, 0x70, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x06, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x0C, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x0C, 0x30, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x0C, 0x30, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x77, 0xB8, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x77, 0xB8, 0x03, 0x37, 0x6F, 0xDB, 0xB3, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x18, 0xF3, 0x63, 0x40, 0x1F, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x3C, 0xCD, 0x99, 0xE0, 0x0F, 0xC0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x00, 0x30, 0x00, 0xC3, 0x0C, 0x19, 0x9E, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x01, 0xE3, 0xC6, 0x0C, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x03, 0xE7, 0xC1, 0x83, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x60, 0xC1, 0x83, 0x71, 0xA0, 0x86, 0x0F, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x60, 0xC1, 0x83, 0x67, 0xC5, 0x9F, 0x06, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x30, 0x00, 0xC1, 0x87, 0x8F, 0x0C, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0xCB, 0x3C, 0xCC, 0xCC, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x03, 0x33, 0x33, 0x2C, 0xF3, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x02, 0xA8, 0x05, 0x40, 0x2A, 0x80, 0x54, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x92, 0x90, 0x94, 0x94, 0x84, 0xA4, 0xA4, 0x24, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x20, 0x40, 0x8F, 0x02, 0x04, 0x08, 0x10, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x07, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9D, 0x0A, 0x14, 0x28, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x28, 0x50, 0xA1, 0x42, 0x85, 0x0A, 0x14, 0x28, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x07, 0xC0, 0x9D, 0x0A, 0x14, 0x28, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9F, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x0F, 0x02, 0x04, 0x08, 0x10, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x20, 0x40, 0x81, 0xE0, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE0, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x04, 0x08, 0x10, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x20, 0x40, 0x81, 0xE2, 0x04, 0x08, 0x10, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE2, 0x04, 0x08, 0x10, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x28, 0x50, 0xA1, 0x42, 0xE5, 0x0A, 0x14, 0x28, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x28, 0x50, 0xA1, 0x72, 0x07, 0xC0, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x01, 0xF2, 0x05, 0xCA, 0x14, 0x28, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1F, 0xC0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1D, 0xCA, 0x14, 0x28, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x28, 0x50, 0xA1, 0x72, 0x05, 0xCA, 0x14, 0x28, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1D, 0xCA, 0x14, 0x28, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x10, 0x20, 0x47, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC4, 0x08, 0x10, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x28, 0x50, 0xA1, 0x43, 0xE0, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC0, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x00, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x03, 0xE5, 0x0A, 0x14, 0x28, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x10, 0x20, 0x47, 0xF1, 0x1F, 0xC4, 0x08, 0x10, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x20, 0x40, 0x8F, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x01, 0xE2, 0x04, 0x08, 0x10, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x69, 0xA3, 0x46, 0x86, 0x80, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x7C, 0xCD, 0x9B, 0x66, 0x6C, 0x59, 0xB6, 0x08, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0xFD, 0x8B, 0x06, 0x0C, 0x18, 0x30, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x01, 0xB7, 0xFF, 0x6C, 0xDB, 0x36, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x01, 0xFF, 0x1B, 0x03, 0x86, 0x19, 0xFF, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x01, 0xF6, 0xCD, 0x9B, 0x1C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x01, 0xB3, 0x66, 0xCF, 0xB1, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x01, 0xEB, 0x50, 0xE1, 0x86, 0x0C, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x3C, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x1E, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x79, 0x9B, 0x37, 0xEC, 0xD9, 0x9E, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xC9, 0x33, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x79, 0x81, 0x81, 0x87, 0x99, 0x9E, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x01, 0xA4, 0xA9, 0x52, 0x9A, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x04, 0x79, 0x9B, 0x77, 0x6C, 0xCF, 0x08, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x1E, 0x61, 0x83, 0x07, 0xEC, 0x0C, 0x0F, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0xB3, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x30, 0x63, 0xF1, 0x83, 0x00, 0x3F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x00, 0x60, 0x60, 0x61, 0x86, 0x00, 0x1E, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x18, 0x61, 0x81, 0x81, 0x80, 0x1E, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x0C, 0x34, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x2C, 0x30, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x30, 0x60, 0x07, 0xE0, 0x06, 0x0C, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x6B, 0xB0, 0x03, 0x5D, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x79, 0x9B, 0x33, 0xC0, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, 0xC1, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x0E, 0x18, 0x30, 0x60, 0xCD, 0x8F, 0x06, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x00, 0xF1, 0xB3, 0x66, 0xCD, 0x80, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x00, 0x71, 0x30, 0xC3, 0x0F, 0x80, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0xF9, 0xF3, 0xE7, 0xC0, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ }; From 5d3c554ff5c75b9ccd9229a557d32907f6a0780c Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 19:19:45 +0100 Subject: [PATCH 13/17] fix off by one, new font uses full 0-127 ASCII --- wled00/FX.h | 2 +- wled00/FX_2Dfcn.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 99071eceac..92943f7dd5 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1067,7 +1067,7 @@ class WS2812FX { extern const char JSON_mode_names[]; extern const char JSON_palette_names[]; -#define LAST_ASCII_CHAR 126 +#define LAST_ASCII_CHAR 127 #define FONT_HEADER_SIZE 12 /** * Unified Font Format (Flash and RAM use IDENTICAL layout) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 308da551e9..97e5266c26 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -589,8 +589,6 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu #include "src/font/console_font_6x8.h" #include "src/font/console_font_7x9.h" -#define LAST_ASCII_CHAR 126 - // Pure glyph index calculator (inline for speed) inline int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode) { if (unicode <= LAST_ASCII_CHAR) { From 619d700997debcfbaba6db9c6fa9f4fee4a2f499 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 15 Feb 2026 19:40:55 +0100 Subject: [PATCH 14/17] bugfix, update some comments --- wled00/FX.cpp | 2 +- wled00/FX.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 4ab62ecd8c..8ac1ea69a2 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6397,7 +6397,7 @@ void mode_2Dscrollingtext(void) { // Get font dimensions uint8_t letterHeight = fontManager.getFontHeight(); - uint8_t letterWidth = 8; // Max width (not used for layout with variable width) + uint8_t letterWidth = fontManager.getFontWidth(); // for fonts with variable width, this is the max letter width TODO: actually use variable width uint8_t letterSpacing = fontManager.getFontSpacing(); // Calculate rotated dimensions diff --git a/wled00/FX.h b/wled00/FX.h index 92943f7dd5..641e03bf3a 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1082,10 +1082,10 @@ extern const char JSON_palette_names[]; * [6] Last Char * [7] reserved: 0x00 * [8-11] Unicode Offset (32-bit little-endian) - * + * * Followed by: * - Width table (if variable width): [first..last] byte array - * - Bitmap data: bit-packed glyphs + * - Bitmap data: bit-packed glyphs - top left to bottom right, row by row, MSB first, see src/font files for example */ // Abstract byte reader for unified flash/RAM access @@ -1187,6 +1187,7 @@ class FontManager { // Get dimensions (use cached header) inline uint8_t getFontHeight() { return _cachedHeader.height; } + inline uint8_t getFontWidth() { return _cachedHeader.width; } inline uint8_t getFontSpacing() { return _cachedHeader.spacing; } uint8_t getGlyphWidth(uint32_t unicode); From 76a3ea409bc55ceb515fe0f9852efccf4b31c200 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Mon, 16 Feb 2026 21:03:48 +0100 Subject: [PATCH 15/17] fix reasonable rabbit suggestions --- wled00/FX.h | 14 +++++------ wled00/FX_2Dfcn.cpp | 57 +++++++-------------------------------------- wled00/util.cpp | 36 ++++++++++++++-------------- 3 files changed, 34 insertions(+), 73 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 641e03bf3a..c6512e5f94 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -811,8 +811,8 @@ class Segment { inline void fillCircle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c, bool soft = false) {} inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c, bool soft = false) {} inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c, bool soft = false) {} - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) {} - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, CRGB c, CRGB c2 = CRGB::Black, int8_t rotate = 0) {} + inline void drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, uint32_t color, uint32_t col2 = 0, int8_t rotate = 0) {} + inline void drawCharacter(uint32_t unicode, int16_t x, int16_t y, const uint8_t* fontData, File &fontFile, CRGB c, CRGB c2 = CRGB::Black, int8_t rotate = 0) {} inline void wu_pixel(uint32_t x, uint32_t y, CRGB c) {} #endif friend class WS2812FX; @@ -1093,10 +1093,10 @@ class ByteReader { public: virtual uint8_t readByte(size_t offset) const = 0; inline uint32_t readUInt32LE(size_t offset) const { - return readByte(offset) | - (readByte(offset + 1) << 8) | - (readByte(offset + 2) << 16) | - (readByte(offset + 3) << 24); + return (uint32_t)(readByte(offset)) | + ((uint32_t)(readByte(offset + 1)) << 8) | + ((uint32_t)(readByte(offset + 2)) << 16) | + ((uint32_t)(readByte(offset + 3)) << 24); } virtual ~ByteReader() {} }; @@ -1145,7 +1145,7 @@ struct SegmentFontMetadata { // Memory layout for cached fonts: // [SegmentFontMetadata] - 4 bytes // [GlyphEntry array] - 4 bytes each -// [11-byte font header] - for compatibility and to store font info +// [12-byte font header] - for compatibility and to store font info // [Bitmap data] - sequential, matches registry order // Font header structure diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 97e5266c26..4b69181ec7 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -676,38 +676,29 @@ const uint8_t* FontManager::getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, // For cached fonts, use registry lookup if (!_segment->data) return nullptr; - SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); - // Find glyph in registry uint32_t bitmapOffset = 0; for (uint8_t k = 0; k < meta->glyphCount; k++) { if (registry[k].code == idx) { outWidth = registry[k].width; outHeight = registry[k].height; - // Bitmap starts after: metadata + registry + header const uint8_t* bitmap = _segment->data + sizeof(SegmentFontMetadata) +(meta->glyphCount * sizeof(GlyphEntry)) + FONT_HEADER_SIZE + bitmapOffset; return bitmap; } - // Accumulate offset to next glyph uint16_t bits = registry[k].width * registry[k].height; bitmapOffset += (bits + 7) / 8; } - return nullptr; // Glyph not found in cache } void FontManager::scanAvailableFonts() { SegmentFontMetadata* meta = getMetadata(); if (!meta) return; - meta->availableFonts = 0; - - - for (int i = 0; i < 5; i++) { char fileName[16]; strcpy_P(fileName, PSTR("/font")); @@ -754,10 +745,8 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { if (!meta->fontsScanned) { scanAvailableFonts(); } - // Determine which font to actually use (with fallback) uint8_t fontToUse = fontNum; - // Check if requested font is available if (!(meta->availableFonts & (1 << fontNum))) { // Not available - find first available font @@ -768,23 +757,19 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { break; } } - if (fontToUse == 0xFF) { _useFlashFont = true; // no custom fonts available, use flash font updateReader(); return true; } } - // Store the actual font being used _fontNum = fontToUse; - // Check if the ACTUAL font to use has changed if (fontToUse != meta->cachedFontNum) { // Font changed - clear cache but preserve scan results uint8_t avail = meta->availableFonts; uint8_t scanned = meta->fontsScanned; - if (!_segment->allocateData(sizeof(SegmentFontMetadata))) { return false; } @@ -792,14 +777,13 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { meta->availableFonts = avail; meta->cachedFontNum = fontToUse; meta->fontsScanned = scanned; + meta->glyphCount = 0; } - return true; } uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes, uint8_t maxCount) { uint8_t count = 0; - // Pre-add numbers if caching if (_cacheNumbers) { const char* nums = "0123456789:. "; // TOD: use printf @@ -810,7 +794,6 @@ uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, } } } - // Parse text size_t i = 0, len = strlen(text); while (i < len && count < maxCount) { @@ -818,12 +801,10 @@ uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, uint32_t unicode = utf8_decode(&text[i], &charLen); if (!charLen || charLen > 4) break; i += charLen; - int32_t idx = getGlyphIndex(unicode, hdr.first, hdr.last, hdr.firstUnicode); if (idx < 0) { idx = getGlyphIndex('?', hdr.first, hdr.last, hdr.firstUnicode); } - if (idx >= 0 && idx < 256) { // Add if unique bool exists = false; @@ -866,15 +847,12 @@ void FontManager::prepare(const char* text) { rebuildCache(text); return; } - SegmentFontMetadata* meta = getMetadata(); - // If glyphCount is 0, cache is empty - rebuild if (meta->glyphCount == 0) { rebuildCache(text); return; } - // Validate header from existing cache if (!checkHeader()) { rebuildCache(text); @@ -886,7 +864,6 @@ void FontManager::prepare(const char* text) { uint8_t neededCount = collectNeededCodes(text, _cachedHeader, neededCodes, 64); GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); - for (uint8_t k = 0; k < neededCount; k++) { // Look up in registry bool found = false; @@ -903,7 +880,6 @@ void FontManager::prepare(const char* text) { return; } } - // All glyphs present, cache is valid } @@ -936,7 +912,6 @@ void FontManager::rebuildCache(const char* text) { strcpy_P(fileName, PSTR("/font")); if (i > 0) sprintf(fileName + 5, "%d", i); strcat_P(fileName, PSTR(".wbf")); - file = WLED_FS.open(fileName, "r"); if (file) { _fontNum = i; // Update to fallback font @@ -946,7 +921,6 @@ void FontManager::rebuildCache(const char* text) { } } } - if (!file) return; // Read header from file @@ -965,23 +939,22 @@ void FontManager::rebuildCache(const char* text) { // Collect needed glyphs (no need to sort!) uint8_t neededCodes[64]; uint8_t neededCount = collectNeededCodes(text, fileHdr, neededCodes, 64); - + if (fileHdr.last < fileHdr.first) { file.close(); return; } // Invalid header uint8_t numGlyphs = fileHdr.last - fileHdr.first + 1; uint8_t widthTable[numGlyphs]; - + // Read width table if (fileHdr.flags & 0x01) { - file.read(widthTable, numGlyphs); + if (file.read(widthTable, numGlyphs) != numGlyphs) { file.close(); return; } // width table incomplete } else { for (uint8_t k = 0; k < numGlyphs; k++) { widthTable[k] = fileHdr.width; } } - // Calculate size: metadata + registry + header + bitmaps uint32_t fileDataStart = FONT_HEADER_SIZE + ((fileHdr.flags & 0x01) ? numGlyphs : 0); size_t ramFontSize = sizeof(SegmentFontMetadata) + (neededCount * sizeof(GlyphEntry)) + FONT_HEADER_SIZE; // Just the header, no width table needed - + for (uint8_t k = 0; k < neededCount; k++) { uint8_t code = neededCodes[k]; if (code < numGlyphs) { @@ -989,22 +962,20 @@ void FontManager::rebuildCache(const char* text) { ramFontSize += (bits + 7) / 8; } } - // Allocate RAM if (!_segment->allocateData(ramFontSize)) { file.close(); return; } - // Write metadata SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; meta->availableFonts = savedMeta.availableFonts; meta->cachedFontNum = savedMeta.cachedFontNum; meta->fontsScanned = savedMeta.fontsScanned; meta->glyphCount = neededCount; - + uint8_t* ptr = _segment->data + sizeof(SegmentFontMetadata); - + // Write registry (GlyphEntry array) GlyphEntry* registry = (GlyphEntry*)ptr; for (uint8_t k = 0; k < neededCount; k++) { @@ -1014,31 +985,28 @@ void FontManager::rebuildCache(const char* text) { registry[k].height = fileHdr.height; } ptr += neededCount * sizeof(GlyphEntry); - + // Write font header (for compatibility and easy access to spacing/firstUnicode) file.seek(0); // Go back to start of file file.read(ptr, FONT_HEADER_SIZE); // could also write it from fileHdr, but this is simpler ptr += FONT_HEADER_SIZE; - + // Write bitmap data in registry order (no sorting needed) for (uint8_t k = 0; k < neededCount; k++) { uint8_t code = neededCodes[k]; uint16_t bits = widthTable[code] * fileHdr.height; uint16_t bytes = (bits + 7) / 8; - // Calculate file offset uint32_t offset = fileDataStart; for (uint8_t j = 0; j < code; j++) { uint16_t b = widthTable[j] * fileHdr.height; offset += (b + 7) / 8; } - // Read from file file.seek(offset); file.read(ptr, bytes); ptr += bytes; } - file.close(); memcpy(&_cachedHeader, &fileHdr, sizeof(FontHeader)); _headerValid = true; // Mark as valid, we just loaded it directly @@ -1047,24 +1015,18 @@ void FontManager::rebuildCache(const char* text) { void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { if (!_reader || !_fontBase) return; - uint8_t w, h; const uint8_t* bitmap = getGlyphBitmap(unicode, w, h); if (!bitmap || w == 0) return; - CRGBPalette16 grad = col2 ? CRGBPalette16(CRGB(color), CRGB(col2)) : SEGPALETTE; - uint16_t bitIndex = 0; for (int row = 0; row < h; row++) { CRGBW c = ColorFromPalette(grad, (row + 1) * 255 / h, 255, LINEARBLEND_NOWRAP); - for (int col = 0; col < w; col++) { uint16_t bytePos = bitIndex >> 3; uint8_t bitPos = 7 - (bitIndex & 7); - // Direct pointer access for speed uint8_t byteVal = _reader->readByte((bitmap - _fontBase) + bytePos); - if ((byteVal >> bitPos) & 1) { int x0, y0; switch (rotate) { @@ -1074,7 +1036,6 @@ void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t case 1: x0 = x + row; y0 = y + (w-1) - col; break; default: x0 = x + col; y0 = y + row; break; } - if (x0 >= 0 && x0 < (int)_segment->vWidth() && y0 >= 0 && y0 < (int)_segment->vHeight()) { _segment->setPixelColorXYRaw(x0, y0, c.color32); diff --git a/wled00/util.cpp b/wled00/util.cpp index 5f57c29f91..20f922ccb5 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -163,36 +163,36 @@ bool isAsterisksOnly(const char* str, byte maxLen) } /* - UTF-8 to unicode onversion: + UTF-8 to unicode conversion: 1 byte: 0xxxxxxx: U+0000 - U+007F 2 bytes: 110xxxxx 10xxxxxx: U+0080 - U+07FF 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx: U+0800 - U+FFFF - 4 bytes: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx: U+10000 - U+10FFFFc + 4 bytes: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx: U+10000 - U+10FFFF */ #define UTF8_LEN(c) ((c) < 0x80 ? 1 : ((c) < 0xE0 ? 2 : ((c) < 0xF0 ? 3 : 4))) // determine UTF-8 sequence length from first byte uint32_t utf8_decode(const char *s, uint8_t *len) { - uint8_t c = (uint8_t)s[0]; - if (c == '\0') { - return 0; - } - uint8_t n = UTF8_LEN(c); // number of bytes in this UTF-8 sequence - uint32_t cp = c; - *len = n; // return byte count to caller - if (n > 1) { - // check if there are enough continuation bytes - if (strlen(s) < n) { + uint8_t c = (uint8_t)s[0]; + if (c == '\0') { + return 0; + } + uint8_t n = UTF8_LEN(c); // number of bytes in this UTF-8 sequence + uint32_t cp = c; + *len = n; // return byte count to caller + if (n > 1) { + // check if there are enough continuation bytes + for (uint8_t i = 1; i < n; i++) { + if ((s[i] & 0xC0) != 0x80) { // not a valid continuation byte (also catches '\0') *len = 1; // invalid sequence, return default char return '?'; } - cp &= (1U << (8 - n)) - 1; // mask off the UTF-8 prefix bits (110, 1110, 11110) - for (uint8_t i = 1; i < n; i++) - cp = (cp << 6) | (s[i] & 0x3F); // Each continuation byte has the form: 10xxxxxx, the lower 6 bits are appended to the code point. - // note: no error checking is done, if the input strint is invalid, it will return invalid code points. could check and return '?' but what to do with a malformed string? } - - return cp; + cp &= (1U << (8 - n)) - 1; // mask off the UTF-8 prefix bits (110, 1110, 11110) + for (uint8_t i = 1; i < n; i++) + cp = (cp << 6) | (s[i] & 0x3F); // Each continuation byte has the form: 10xxxxxx, the lower 6 bits are appended to the code point. + } + return cp; } // Count the number of UTF-8 characters in a string From 3962c6b3c2764b7dbf441a4958611799b620fedc Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Tue, 24 Feb 2026 16:44:50 +0100 Subject: [PATCH 16/17] code cleanup, WIP --- wled00/FX.cpp | 94 +++--- wled00/FX.h | 24 +- wled00/FX_2Dfcn.cpp | 48 ++- wled00/src/font/font_TinyPixie2_6px.h | 146 +++++++++ .../font/{ => old fonts}/console_font_4x6.h | 0 .../src/font/old fonts/console_font_4x6.wbf | Bin 0 -> 297 bytes .../old fonts/console_font_4x6_showcase.png | Bin 0 -> 30967 bytes wled00/src/font/old fonts/console_font_5x12.h | 300 ++++++++++++++++++ .../src/font/old fonts/console_font_5x12.wbf | Bin 0 -> 772 bytes .../old fonts/console_font_5x12_showcase.png | Bin 0 -> 40939 bytes wled00/src/font/old fonts/console_font_5x8.h | 300 ++++++++++++++++++ .../src/font/old fonts/console_font_5x8.wbf | Bin 0 -> 487 bytes .../old fonts/console_font_5x8_showcase.png | Bin 0 -> 33264 bytes wled00/src/font/old fonts/console_font_6x8.h | 300 ++++++++++++++++++ .../src/font/old fonts/console_font_6x8.wbf | Bin 0 -> 582 bytes .../old fonts/console_font_6x8_showcase.png | Bin 0 -> 36868 bytes wled00/src/font/old fonts/console_font_7x9.h | 300 ++++++++++++++++++ .../src/font/old fonts/console_font_7x9.wbf | Bin 0 -> 772 bytes .../old fonts/console_font_7x9_showcase.png | Bin 0 -> 40789 bytes 19 files changed, 1426 insertions(+), 86 deletions(-) create mode 100644 wled00/src/font/font_TinyPixie2_6px.h rename wled00/src/font/{ => old fonts}/console_font_4x6.h (100%) create mode 100644 wled00/src/font/old fonts/console_font_4x6.wbf create mode 100644 wled00/src/font/old fonts/console_font_4x6_showcase.png create mode 100644 wled00/src/font/old fonts/console_font_5x12.h create mode 100644 wled00/src/font/old fonts/console_font_5x12.wbf create mode 100644 wled00/src/font/old fonts/console_font_5x12_showcase.png create mode 100644 wled00/src/font/old fonts/console_font_5x8.h create mode 100644 wled00/src/font/old fonts/console_font_5x8.wbf create mode 100644 wled00/src/font/old fonts/console_font_5x8_showcase.png create mode 100644 wled00/src/font/old fonts/console_font_6x8.h create mode 100644 wled00/src/font/old fonts/console_font_6x8.wbf create mode 100644 wled00/src/font/old fonts/console_font_6x8_showcase.png create mode 100644 wled00/src/font/old fonts/console_font_7x9.h create mode 100644 wled00/src/font/old fonts/console_font_7x9.wbf create mode 100644 wled00/src/font/old fonts/console_font_7x9_showcase.png diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 8ac1ea69a2..33e3f2c482 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6309,16 +6309,6 @@ void mode_2Dscrollingtext(void) { const int cols = SEG_W; const int rows = SEG_H; - // Font selection - const uint8_t* selectedFont = nullptr; - char fileName[32]; - bool useCustomFont = SEGMENT.check2; - uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); - bool init = (SEGENV.call == 0); - - // letters are rotated - const int8_t rotate = map(SEGMENT.custom3, 0, 31, -2, 2); - // generate time/date if there are any # tokens char text[WLED_MAX_SEGNAME_LEN+1] = {'\0'}; size_t result_pos = 0; @@ -6333,10 +6323,13 @@ void mode_2Dscrollingtext(void) { sprintf_P(sec, PSTR(":%02d"), second(localTime)); } + // prepare text string from segment name size_t len = 0; if (SEGMENT.name) len = strlen(SEGMENT.name); // note: SEGMENT.name is limited to WLED_MAX_SEGNAME_LEN - if (len == 0) { // fallback if empty segment name: display date and time + if (len == 0) { + // fallback if empty segment name: display date and time "#MON #DD #YYYY #TIME" sprintf_P(text, PSTR("%s %d, %d %d:%02d%s"), monthShortStr(month(localTime)), day(localTime), year(localTime), AmPmHour, minute(localTime), sec); + fontManager.cacheNumbers(true); // cache all numbers when using clock to avoid frequent re-caching } else { size_t i = 0; while (i < len) { @@ -6353,7 +6346,7 @@ void mode_2Dscrollingtext(void) { token[j] = '\0'; int advance = 5; // number of chars to advance in 'text' after processing the token - // Process token + // process token char temp[32]; if (!strncmp_P(token,PSTR("#DATE"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d.%04d"):PSTR("%d.%d.%d"), day(localTime), month(localTime), year(localTime)); else if (!strncmp_P(token,PSTR("#DDMM"),5)) sprintf_P(temp, zero?PSTR("%02d.%02d") :PSTR("%d.%d"), day(localTime), month(localTime)); @@ -6366,7 +6359,7 @@ void mode_2Dscrollingtext(void) { else if (!strncmp_P(token,PSTR("#YY"),3)) { sprintf (temp, ("%02d") , year(localTime)%100); advance = 3; } else if (!strncmp_P(token,PSTR("#HH"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), AmPmHour); advance = 3; } else if (!strncmp_P(token,PSTR("#MM"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), minute(localTime)); advance = 3; } - else if (!strncmp_P(token,PSTR("#SS"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), second(localTime)); advance = 3; fontManager.setCacheNumbers(true);} // cache all numbers + else if (!strncmp_P(token,PSTR("#SS"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), second(localTime)); advance = 3; } else if (!strncmp_P(token,PSTR("#MON"),4)) { sprintf (temp, ("%s") , monthShortStr(month(localTime))); advance = 4; } else if (!strncmp_P(token,PSTR("#MO"),3)) { sprintf (temp, zero? ("%02d") : ("%d"), month(localTime)); advance = 3; } else if (!strncmp_P(token,PSTR("#DAY"),4)) { sprintf (temp, ("%s") , dayShortStr(weekday(localTime))); advance = 4; } @@ -6379,7 +6372,7 @@ void mode_2Dscrollingtext(void) { strcpy(text + result_pos, temp); result_pos += temp_len; } - + fontManager.cacheNumbers(true); // cache all numbers when using clocks to avoid frequent re-caching i += advance; } else { @@ -6391,25 +6384,23 @@ void mode_2Dscrollingtext(void) { } } + // Font selection + bool useCustomFont = SEGMENT.check2; + uint8_t fontNum = map(SEGMENT.custom2, 0, 255, 0, 4); + + // letters orientation: -2/+2 = upside down, -1 = 90° clockwise, 0 = normal, 1 = 90° counterclockwise + const int8_t rotate = map(SEGMENT.custom3, 0, 31, -2, 2); + const bool isRotated = (rotate == 1 || rotate == -1); // +/- 90° rotated, swap width and height for calculations + // Load the font fontManager.loadFont(fontNum, useCustomFont); // TODO: simplify this code, prepare is not really needed as a separate function. fontManager.prepare(text); // Get font dimensions - uint8_t letterHeight = fontManager.getFontHeight(); - uint8_t letterWidth = fontManager.getFontWidth(); // for fonts with variable width, this is the max letter width TODO: actually use variable width + uint8_t glyphHeight = fontManager.getFontHeight(); + uint8_t fontWidth = fontManager.getFontWidth(); // for fonts with variable width, this is the max letter width uint8_t letterSpacing = fontManager.getFontSpacing(); - // Calculate rotated dimensions - unsigned rotLW, rotLH; - if (rotate == 1 || rotate == -1) { - rotLH = letterWidth; - rotLW = letterHeight; - } else { - rotLW = letterWidth; - rotLH = letterHeight; - } - // Calculate total text width int totalTextWidth = 0; int idx = 0; @@ -6420,33 +6411,33 @@ void mode_2Dscrollingtext(void) { uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; - if (rotate == 1 || rotate == -1) { - totalTextWidth += letterHeight; // Fixed dimension when rotated + if (isRotated) { + totalTextWidth += glyphHeight + 1; // use height when rotated, spacing of 1 } else { - uint8_t w = fontManager.getGlyphWidth(unicode); - totalTextWidth += w; + totalTextWidth += fontManager.getGlyphWidth(unicode) + letterSpacing; } if (c < numberOfChars - 1) totalTextWidth += letterSpacing; } + totalTextWidth -= letterSpacing; // remove spacing after last character - // Y offset calculation - int yoffset = map(SEGMENT.intensity, 0, 255, -rows / 2, rows / 2) + (rows - rotLH) / 2; + // y-offset calculation + int yoffset = map(SEGMENT.intensity, 0, 255, -rows / 2, rows / 2); if (totalTextWidth <= cols) { - // scroll vertically + // if text fits matrix width, scroll vertically int speed = map(SEGMENT.speed, 0, 255, 5000, 1000); int frac = strip.now % speed + 1; if (SEGMENT.intensity == 255) { - yoffset = (2 * frac * rows) / speed - rows; + yoffset = (2 * frac * rows)/speed - rows; } else if (SEGMENT.intensity == 0) { - yoffset = rows - (2 * frac * rows) / speed; + yoffset = rows - (2 * frac * rows)/speed; } } - // Animation step + // scroll step (AUX0 is current scrolling offset) if (SEGENV.step < strip.now) { if (totalTextWidth > cols) { - if (SEGMENT.check3) { + if (SEGMENT.check3) { // reverse direction if (SEGENV.aux0 == 0) SEGENV.aux0 = totalTextWidth + cols - 1; else --SEGENV.aux0; } else { @@ -6455,44 +6446,47 @@ void mode_2Dscrollingtext(void) { } else { SEGENV.aux0 = (cols - totalTextWidth) / 2; // Center } - ++SEGENV.aux1 &= 0xFF; + ++SEGENV.aux1 &= 0xFF; // color shift SEGENV.step = strip.now + map(SEGMENT.speed, 0, 255, 250, 50); } - SEGMENT.fade_out(255 - (SEGMENT.custom1 >> 4)); + SEGMENT.fade_out(255 - (SEGMENT.custom1>>4)); // trail uint32_t col1 = SEGMENT.color_from_palette(SEGENV.aux1, false, PALETTE_SOLID_WRAP, 0); uint32_t col2 = BLACK; - if (SEGMENT.check1) { - if (SEGMENT.palette == 0) { + // if gradient is selected and palette is default (0) drawCharacter() uses gradient from SEGCOLOR(0) to SEGCOLOR(2) + // otherwise col2 == BLACK means use currently selected palette for gradient + // if gradient is not selected set both colors the same + if (SEGMENT.check1) { // use gradient + if (SEGMENT.palette == 0) { // use colors for gradient col1 = SEGCOLOR(0); col2 = SEGCOLOR(2); } - } else { - col2 = col1; - } + } else col2 = col1; // force characters to use single color (from palette) // Draw characters idx = 0; - int currentXOffset = 0; + int currentXOffset = 0; // offset of current glyph from text start for (int c = 0; c < numberOfChars; c++) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[idx], &charLen); idx += charLen; uint8_t glyphWidth = fontManager.getGlyphWidth(unicode); - int drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; - int advance = (rotate == 1 || rotate == -1) ? letterHeight : glyphWidth; + int drawX = int(cols) - int(SEGENV.aux0) + currentXOffset; // AUX0 is scrolling offset + int advance = isRotated ? glyphHeight + 1 : glyphWidth + letterSpacing; // when rotated use spacing of 1 // Skip if off-screen if (drawX + advance < 0) { - currentXOffset += advance + letterSpacing; + currentXOffset += advance; continue; } if (drawX >= cols) break; + unsigned rotHeight = isRotated ? glyphWidth : glyphHeight; // use (variable) glyph-width for height if 90° rotated + int16_t drawY = yoffset + (rows - rotHeight) / 2; // center glyph vertically - fontManager.drawCharacter(unicode, drawX, yoffset, col1, col2, rotate); - currentXOffset += advance + letterSpacing; + fontManager.drawCharacter(unicode, drawX, drawY, col1, col2, rotate); + currentXOffset += advance; } } static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size,Rotate,Gradient,Custom Font,Reverse;!,!,Gradient;!;2;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0"; diff --git a/wled00/FX.h b/wled00/FX.h index c6512e5f94..b73bfc0946 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1148,6 +1148,10 @@ struct SegmentFontMetadata { // [12-byte font header] - for compatibility and to store font info // [Bitmap data] - sequential, matches registry order +static constexpr uint8_t MAX_CACHED_GLYPHS = 64; // max segment string length is 64 chars so this is absolute worst case +static constexpr uint8_t MAX_FONTS = 5; // scrolli text supports font numbers 0-4 +static constexpr size_t FONT_NAME_BUFFER_SIZE = 16; // font names is /fontX.wbf + // Font header structure struct FontHeader { uint8_t height; @@ -1172,7 +1176,7 @@ class FontManager { _fontBase(nullptr) {} bool loadFont(uint8_t fontNum, bool useFile); - void setCacheNumbers(bool cache) { _cacheNumbers = cache; } + void cacheNumbers(bool cache) { _cacheNumbers = cache; } void prepare(const char* text); inline void beginFrame() { @@ -1184,13 +1188,13 @@ class FontManager { } } } - + // Get dimensions (use cached header) inline uint8_t getFontHeight() { return _cachedHeader.height; } inline uint8_t getFontWidth() { return _cachedHeader.width; } inline uint8_t getFontSpacing() { return _cachedHeader.spacing; } uint8_t getGlyphWidth(uint32_t unicode); - + // Rendering void drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate); @@ -1200,7 +1204,7 @@ class FontManager { uint8_t _fontNum; // Font number (0-4) bool _useFlashFont; // true = flash, false = file bool _cacheNumbers; - + // Cached data for performance (non-static, per-instance) bool _headerValid; FontHeader _cachedHeader; @@ -1208,7 +1212,7 @@ class FontManager { const uint8_t* _fontBase; FlashByteReader _flashReader; RAMByteReader _ramReader; - + // Invalidate cached header (call when font changes) inline void invalidateHeader() { _headerValid = false; @@ -1231,23 +1235,23 @@ class FontManager { _fontBase = nullptr; } } - + // Metadata access (RAM only) SegmentFontMetadata* getMetadata() { return _segment->data ? (SegmentFontMetadata*)_segment->data : nullptr; } - + // Unified operations (work identically for flash and RAM) static bool parseHeader(const ByteReader& reader, FontHeader& hdr); const uint8_t* getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, uint8_t& outHeight); - + // Glyph index calculation (pure function, inline for speed) static inline int32_t getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode); - + // File font management void scanAvailableFonts(); void rebuildCache(const char* text); - uint8_t collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes, uint8_t maxCount); + uint8_t collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes); }; #endif diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 4b69181ec7..b45282871b 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -583,7 +583,7 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu } #undef WU_WEIGHT -#include "src/font/console_font_4x6.h" +#include "src/font/font_TinyPixie2_6px.h" #include "src/font/console_font_5x8.h" #include "src/font/console_font_5x12.h" #include "src/font/console_font_6x8.h" @@ -699,8 +699,8 @@ void FontManager::scanAvailableFonts() { SegmentFontMetadata* meta = getMetadata(); if (!meta) return; meta->availableFonts = 0; - for (int i = 0; i < 5; i++) { - char fileName[16]; + for (int i = 0; i < MAX_FONTS; i++) { + char fileName[FONT_NAME_BUFFER_SIZE]; strcpy_P(fileName, PSTR("/font")); if (i > 0) sprintf(fileName + 5, "%d", i); strcat_P(fileName, PSTR(".wbf")); @@ -716,7 +716,7 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { _useFlashFont = !useFile; switch (_fontNum) { default: - case 0: _flashFont = console_font_4x6; break; + case 0: _flashFont = font_TinyPixie2_6px; break; case 1: _flashFont = console_font_5x8; break; case 2: _flashFont = console_font_6x8; break; case 3: _flashFont = console_font_7x9; break; @@ -751,7 +751,7 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { if (!(meta->availableFonts & (1 << fontNum))) { // Not available - find first available font fontToUse = 0xFF; - for (int i = 0; i < 5; i++) { + for (int i = 0; i < MAX_FONTS; i++) { if (meta->availableFonts & (1 << i)) { fontToUse = i; break; @@ -782,12 +782,12 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { return true; } -uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes, uint8_t maxCount) { +uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, uint8_t* outCodes) { uint8_t count = 0; - // Pre-add numbers if caching + // Pre-add numbers if caching (for clock use without constant re-caching) if (_cacheNumbers) { - const char* nums = "0123456789:. "; // TOD: use printf - for (const char* p = nums; *p && count < maxCount; p++) { + static const char s_nums[] PROGMEM = "0123456789:. "; + for (const char* p = s_nums; *p && count < MAX_CACHED_GLYPHS; p++) { int32_t idx = getGlyphIndex(*p, hdr.first, hdr.last, hdr.firstUnicode); if (idx >= 0 && idx < 256) { outCodes[count++] = idx; @@ -796,10 +796,10 @@ uint8_t FontManager::collectNeededCodes(const char* text, const FontHeader& hdr, } // Parse text size_t i = 0, len = strlen(text); - while (i < len && count < maxCount) { + while (i < len && count < MAX_CACHED_GLYPHS) { uint8_t charLen; uint32_t unicode = utf8_decode(&text[i], &charLen); - if (!charLen || charLen > 4) break; + if (!charLen) break; // invalid input, stop processing i += charLen; int32_t idx = getGlyphIndex(unicode, hdr.first, hdr.last, hdr.firstUnicode); if (idx < 0) { @@ -860,8 +860,8 @@ void FontManager::prepare(const char* text) { } // Check if all needed glyphs are present - uint8_t neededCodes[64]; - uint8_t neededCount = collectNeededCodes(text, _cachedHeader, neededCodes, 64); + uint8_t neededCodes[MAX_CACHED_GLYPHS]; + uint8_t neededCount = collectNeededCodes(text, _cachedHeader, neededCodes); GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); for (uint8_t k = 0; k < neededCount; k++) { @@ -893,7 +893,7 @@ void FontManager::rebuildCache(const char* text) { } // Build filename from font number TODO: make file name generation a function - char fileName[16]; + char fileName[FONT_NAME_BUFFER_SIZE]; strcpy_P(fileName, PSTR("/font")); if (_fontNum > 0) sprintf(fileName + 5, "%d", _fontNum); strcat_P(fileName, PSTR(".wbf")); @@ -906,7 +906,7 @@ void FontManager::rebuildCache(const char* text) { if (!file) { SegmentFontMetadata* meta = getMetadata(); if (meta) { - for (int i = 0; i < 5; i++) { + for (int i = 0; i < MAX_FONTS; i++) { if (i == _fontNum) continue; // Already tried this one if (meta->availableFonts & (1 << i)) { strcpy_P(fileName, PSTR("/font")); @@ -936,9 +936,9 @@ void FontManager::rebuildCache(const char* text) { file.read(); // skip byte 7 (reserved) file.read((uint8_t*)&fileHdr.firstUnicode, 4); - // Collect needed glyphs (no need to sort!) - uint8_t neededCodes[64]; - uint8_t neededCount = collectNeededCodes(text, fileHdr, neededCodes, 64); + // Collect needed glyphs + uint8_t neededCodes[MAX_CACHED_GLYPHS]; + uint8_t neededCount = collectNeededCodes(text, fileHdr, neededCodes); if (fileHdr.last < fileHdr.first) { file.close(); return; } // Invalid header uint8_t numGlyphs = fileHdr.last - fileHdr.first + 1; uint8_t widthTable[numGlyphs]; @@ -1025,21 +1025,17 @@ void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t for (int col = 0; col < w; col++) { uint16_t bytePos = bitIndex >> 3; uint8_t bitPos = 7 - (bitIndex & 7); - // Direct pointer access for speed - uint8_t byteVal = _reader->readByte((bitmap - _fontBase) + bytePos); + uint8_t byteVal = _reader->readByte((bitmap - _fontBase) + bytePos); // note: could read only if new byte is needed but this is fast enough and simpler if ((byteVal >> bitPos) & 1) { int x0, y0; switch (rotate) { - case -1: x0 = x + (h-1) - row; y0 = y + col; break; + case -1: x0 = x + row; y0 = y + col; break; // 90° CW + case 1: x0 = x + (h-1) - row; y0 = y + (w-1) - col; break; // 90° CCW case -2: case 2: x0 = x + (w-1) - col; y0 = y + (h-1) - row; break; - case 1: x0 = x + row; y0 = y + (w-1) - col; break; default: x0 = x + col; y0 = y + row; break; } - if (x0 >= 0 && x0 < (int)_segment->vWidth() && - y0 >= 0 && y0 < (int)_segment->vHeight()) { - _segment->setPixelColorXYRaw(x0, y0, c.color32); - } + _segment->setPixelColorXY(x0, y0, c.color32); // bounds checking is done in setPixelColorXY } bitIndex++; } diff --git a/wled00/src/font/font_TinyPixie2_6px.h b/wled00/src/font/font_TinyPixie2_6px.h new file mode 100644 index 0000000000..7c2ca12d88 --- /dev/null +++ b/wled00/src/font/font_TinyPixie2_6px.h @@ -0,0 +1,146 @@ +// TinyPixie2, public domain, source: https://nimblebeastscollective.itch.io/nb-pixel-font-bundle +// ASCII chars 0-31 and 127-255 are not included to save memory + +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 6 + * [2] Fixed/max glyph width: 4 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte + */ + +static const unsigned char font_TinyPixie2_6px[] PROGMEM = { + 0x57, 0x06, 0x04, 0x01, 0x01, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + + // Width table + 0x03, 0x01, 0x03, 0x05, 0x03, 0x05, 0x06, 0x01, 0x02, 0x02, 0x05, 0x03, 0x01, 0x03, 0x01, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, + 0x06, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x04, 0x03, + 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03, 0x02, 0x05, 0x03, + 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x01, 0x05, 0x03, 0x03, + 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x05, 0x03, 0x03, 0x02, 0x03, 0x01, 0x03, 0x04, + + 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" ", w=3 */ + 0xE8, /* code=33, hex=0x21, ascii="!", w=1 */ + 0xB4, 0x00, 0x00, /* code=34, hex=0x22, ascii=""", w=3 */ + 0x57, 0xD5, 0xF5, 0x00, /* code=35, hex=0x23, ascii="#", w=5 */ + 0x5F, 0x3E, 0x80, /* code=36, hex=0x24, ascii="$", w=3 */ + 0xCE, 0x88, 0xB9, 0x80, /* code=37, hex=0x25, ascii="%", w=5 */ + 0x62, 0x46, 0x66, 0x74, 0x00, /* code=38, hex=0x26, ascii="&", w=6 */ + 0xC0, /* code=39, hex=0x27, ascii="'", w=1 */ + 0x6A, 0x40, /* code=40, hex=0x28, ascii="(", w=2 */ + 0x95, 0x80, /* code=41, hex=0x29, ascii=")", w=2 */ + 0x27, 0xDC, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*", w=5 */ + 0x0B, 0xA0, 0x00, /* code=43, hex=0x2B, ascii="+", w=3 */ + 0x0C, /* code=44, hex=0x2C, ascii=",", w=1 */ + 0x03, 0x80, 0x00, /* code=45, hex=0x2D, ascii="-", w=3 */ + 0x08, /* code=46, hex=0x2E, ascii=".", w=1 */ + 0x25, 0x48, 0x00, /* code=47, hex=0x2F, ascii="/", w=3 */ + 0x56, 0xD4, 0x00, /* code=48, hex=0x30, ascii="0", w=3 */ + 0x59, 0x2E, 0x00, /* code=49, hex=0x31, ascii="1", w=3 */ + 0xC5, 0x4E, 0x00, /* code=50, hex=0x32, ascii="2", w=3 */ + 0xE5, 0x1C, 0x00, /* code=51, hex=0x33, ascii="3", w=3 */ + 0x97, 0x92, 0x00, /* code=52, hex=0x34, ascii="4", w=3 */ + 0xF3, 0x1C, 0x00, /* code=53, hex=0x35, ascii="5", w=3 */ + 0x73, 0xD6, 0x00, /* code=54, hex=0x36, ascii="6", w=3 */ + 0xE5, 0x28, 0x00, /* code=55, hex=0x37, ascii="7", w=3 */ + 0xF7, 0xDE, 0x00, /* code=56, hex=0x38, ascii="8", w=3 */ + 0xD7, 0x9C, 0x00, /* code=57, hex=0x39, ascii="9", w=3 */ + 0x28, /* code=58, hex=0x3A, ascii=":", w=1 */ + 0x2C, /* code=59, hex=0x3B, ascii=";", w=1 */ + 0x2A, 0x22, 0x00, /* code=60, hex=0x3C, ascii="<", w=3 */ + 0x1C, 0x70, 0x00, /* code=61, hex=0x3D, ascii="=", w=3 */ + 0x88, 0xA8, 0x00, /* code=62, hex=0x3E, ascii=">", w=3 */ + 0xC5, 0x04, 0x00, /* code=63, hex=0x3F, ascii="?", w=3 */ + 0x7A, 0x1B, 0x6F, 0x81, 0xE0, /* code=64, hex=0x40, ascii="@", w=6 */ + 0xD6, 0xFA, 0x00, /* code=65, hex=0x41, ascii="A", w=3 */ + 0xD7, 0x5C, 0x00, /* code=66, hex=0x42, ascii="B", w=3 */ + 0x56, 0x54, 0x00, /* code=67, hex=0x43, ascii="C", w=3 */ + 0xD6, 0xDC, 0x00, /* code=68, hex=0x44, ascii="D", w=3 */ + 0xEE, 0xC0, /* code=69, hex=0x45, ascii="E", w=2 */ + 0xEE, 0x80, /* code=70, hex=0x46, ascii="F", w=2 */ + 0x72, 0xD6, 0x00, /* code=71, hex=0x47, ascii="G", w=3 */ + 0xB7, 0xDA, 0x00, /* code=72, hex=0x48, ascii="H", w=3 */ + 0xE9, 0x2E, 0x00, /* code=73, hex=0x49, ascii="I", w=3 */ + 0xD5, 0x60, /* code=74, hex=0x4A, ascii="J", w=2 */ + 0xB7, 0x5A, 0x00, /* code=75, hex=0x4B, ascii="K", w=3 */ + 0xAA, 0xC0, /* code=76, hex=0x4C, ascii="L", w=2 */ + 0x8E, 0xEB, 0x18, 0x80, /* code=77, hex=0x4D, ascii="M", w=5 */ + 0x99, 0xDB, 0x90, /* code=78, hex=0x4E, ascii="N", w=4 */ + 0xF6, 0xDE, 0x00, /* code=79, hex=0x4F, ascii="O", w=3 */ + 0xD6, 0xE8, 0x00, /* code=80, hex=0x50, ascii="P", w=3 */ + 0x56, 0xD6, 0x40, /* code=81, hex=0x51, ascii="Q", w=3 */ + 0xD6, 0xEA, 0x00, /* code=82, hex=0x52, ascii="R", w=3 */ + 0xED, 0xC0, /* code=83, hex=0x53, ascii="S", w=2 */ + 0xE9, 0x24, 0x00, /* code=84, hex=0x54, ascii="T", w=3 */ + 0xB6, 0xDE, 0x00, /* code=85, hex=0x55, ascii="U", w=3 */ + 0xB6, 0xA4, 0x00, /* code=86, hex=0x56, ascii="V", w=3 */ + 0xAD, 0x6A, 0xA5, 0x00, /* code=87, hex=0x57, ascii="W", w=5 */ + 0xB5, 0x5A, 0x00, /* code=88, hex=0x58, ascii="X", w=3 */ + 0xB5, 0x9C, 0x00, /* code=89, hex=0x59, ascii="Y", w=3 */ + 0xE5, 0x4E, 0x00, /* code=90, hex=0x5A, ascii="Z", w=3 */ + 0xEA, 0xC0, /* code=91, hex=0x5B, ascii="[", w=2 */ + 0x91, 0x12, 0x00, /* code=92, hex=0x5C, ascii="\", w=3 */ + 0xD5, 0xC0, /* code=93, hex=0x5D, ascii="]", w=2 */ + 0x22, 0xA2, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^", w=5 */ + 0x00, 0x01, 0xC0, /* code=95, hex=0x5F, ascii="_", w=3 */ + 0xC0, /* code=96, hex=0x60, ascii="`", w=1 */ + 0x19, 0xDE, 0x00, /* code=97, hex=0x61, ascii="a", w=3 */ + 0x9A, 0xDC, 0x00, /* code=98, hex=0x62, ascii="b", w=3 */ + 0x0E, 0x46, 0x00, /* code=99, hex=0x63, ascii="c", w=3 */ + 0x2E, 0xD6, 0x00, /* code=100, hex=0x64, ascii="d", w=3 */ + 0x0E, 0xE6, 0x00, /* code=101, hex=0x65, ascii="e", w=3 */ + 0x6E, 0x80, /* code=102, hex=0x66, ascii="f", w=2 */ + 0x0E, 0xB3, 0x80, /* code=103, hex=0x67, ascii="g", w=3 */ + 0x9A, 0xDA, 0x00, /* code=104, hex=0x68, ascii="h", w=3 */ + 0xB8, /* code=105, hex=0x69, ascii="i", w=1 */ + 0xBC, /* code=106, hex=0x6A, ascii="j", w=1 */ + 0x97, 0x6A, 0x00, /* code=107, hex=0x6B, ascii="k", w=3 */ + 0xF8, /* code=108, hex=0x6C, ascii="l", w=1 */ + 0x07, 0xAB, 0x5A, 0x80, /* code=109, hex=0x6D, ascii="m", w=5 */ + 0x1A, 0xDA, 0x00, /* code=110, hex=0x6E, ascii="n", w=3 */ + 0x0A, 0xD4, 0x00, /* code=111, hex=0x6F, ascii="o", w=3 */ + 0x1A, 0xDD, 0x00, /* code=112, hex=0x70, ascii="p", w=3 */ + 0x0A, 0xD6, 0x40, /* code=113, hex=0x71, ascii="q", w=3 */ + 0x3A, 0x80, /* code=114, hex=0x72, ascii="r", w=2 */ + 0x39, 0xC0, /* code=115, hex=0x73, ascii="s", w=2 */ + 0xBA, 0xC0, /* code=116, hex=0x74, ascii="t", w=2 */ + 0x16, 0xD6, 0x00, /* code=117, hex=0x75, ascii="u", w=3 */ + 0x16, 0xD4, 0x00, /* code=118, hex=0x76, ascii="v", w=3 */ + 0x04, 0x6B, 0x55, 0x00, /* code=119, hex=0x77, ascii="w", w=5 */ + 0x15, 0x2A, 0x00, /* code=120, hex=0x78, ascii="x", w=3 */ + 0x15, 0x9C, 0x00, /* code=121, hex=0x79, ascii="y", w=3 */ + 0x36, 0xC0, /* code=122, hex=0x7A, ascii="z", w=2 */ + 0x6B, 0x26, 0x00, /* code=123, hex=0x7B, ascii="{", w=3 */ + 0xFC, /* code=124, hex=0x7C, ascii="|", w=1 */ + 0xC9, 0xAC, 0x00, /* code=125, hex=0x7D, ascii="}", w=3 */ + 0x00, 0x5A, 0x00, /* code=126, hex=0x7E, ascii="~", w=4 */ +}; \ No newline at end of file diff --git a/wled00/src/font/console_font_4x6.h b/wled00/src/font/old fonts/console_font_4x6.h similarity index 100% rename from wled00/src/font/console_font_4x6.h rename to wled00/src/font/old fonts/console_font_4x6.h diff --git a/wled00/src/font/old fonts/console_font_4x6.wbf b/wled00/src/font/old fonts/console_font_4x6.wbf new file mode 100644 index 0000000000000000000000000000000000000000..db5f181ac851f85bb0d8a256c3e33000282b6df2 GIT binary patch literal 297 zcmXYsu};J=5JZO)q9uuRqTMt0)xId{!^t18I{^EIq}mR>q_fe{>Uc`Wxmw3$3(YM#NA5zP zy}7woP`x(8NVL7H+qjg}1z#ksS=T&t;$`E-XniCp9D>G;qp%Yyd2rE}!rhz}Ln10d za%XWYhGwfdq;RSxlic6@=V?c;p(J#^?mfPJvk-af`U~=a ZHXRlZQ3xR_ZVa)Qd^`EwpW5^Z`~nn-LahJ* literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_4x6_showcase.png b/wled00/src/font/old fonts/console_font_4x6_showcase.png new file mode 100644 index 0000000000000000000000000000000000000000..5f27a069d63250241c886edf1a567af729d0b365 GIT binary patch literal 30967 zcmagGcUV))8!dd~VBuh)NKu+X5RnqlBORgw(xfP2Ksp?xmw@!HA|0fIG!+4rE*(M< z0w^Fz?;u2K2)&o&&Za28@80M69{(`x?7e5^owuyDW+whBN-}5ux%kgtfBkhvPFCu{ zUw@IH|N83~;nWFm#iM4Z^sm1t{*sfr{m|*yYy}w_rlFDUK9`l1@w!6ebrypJ?QxCc z7hfq-*yuCG9y=~UL3*BYSNQMb(}CAXc>g}jd-WN2%~v6>OV>_4dqytw<7@8oS#wFj zAG6wBYW5j(bjlAaG*J01-xaPc|=4g=#zUtb%m)3&)Q|9d+O# zaZ0|-J+q&V1!MFQZ2fp(4A>>_J}UYNlPl=jK|$jq{ZWbVBC}Rh5s2_2ouST6-FsM8 zFAP|Xx7|vJ?r?a~{$A!96re-opDC3je|Jds4GXxoYjg9{k*9BwR6w?*$@y|%&WH&Li2K;K0}-txdQJuvK#|Iu^sxz~s?fBU>|u6+-neFbhLu?kQP z_ac2MUER0man%OYe52a4yC{d>?dV-4rFBRGmMp)ibnnk#-jIXwX{-GEk`$(r>~-i` zH?Ht~eX+h#Dkv-CftQ~C!GMT6Te%!R{c|%W;RkWkL1e`-S=l#vd#1oS$~+;&wsp7w zRh6t1LzqUSKPNi1`Ae+u7-(&MT2D&}b$cMc4YzZts61Mv!x(oIW0q6jBc=YD1W*koO5l`Z9#j4sSvRN*H!i<%%pHk+!&tzZ}a?f<<#eO zT4z6pIC{dFTyS(vu^5TIm48(e8Fm}(le=dk4Y4vTk+Ia49R4NgE?uJUTHnVSX@7Yx zoIs0m7iTJ8u4o^nLvu21`NGqm*KIYe9S@cCT+MsBLg&e5sk1rTQRahfk3r+lFFzX@ zMQja3wg^#lX>wzc7f5ed2tR47DjKp9*StGeYBS5bE_aeRosn|0`nrpy*w41KDs za&LYh%Nxt+sgqfU1u;9<2X>?qaXSU59N)C-A9-~AWJ(si}GyBLAx|v_)Zk_s@K2WSq8k)>7&x?_zRIeY(Q0EZ5-i>satMe@j?;#U;zZ$x+c8SE;599X<7)^?hcqh_8$H zuB}>r{SxzIc{*cFi}HgPVQgpn(o$}Y&He6p@8u08c6XY|E9 zLS=l65fRG7APc;d)pMta;0-TkQzlf5HR73+6pNj1kE~h~BiF8}pQ+D_0N4KjrUia*-bh+KXJ=>5xgNwvTK2sbR%L9?n0eaoLG69h(v ztUbD-k11)Y+KX#G?&gY|{Gm*6lXqQLoXy4U6w^&g^2dxZaxrAj%Qwssyb7Fs@*7!^ z`I}PjxzAfV><(p6xdTHv4em~kNYs^?VnZq3_CRt3gpc=iRP(4Lu za$AprY(7tPh|6+k!TrI_wt?lP5l&sFCc1$X87g9yJHE-ZHF;M@1e>>h50|_{k^OXK zv??Ja+3xvLEW%uO>z)Xfe_ghmIHRokPWP?0^={yGl+Jb|oymg$j4=pRB(w64Doj;| zWoOyn)r_M^R6}Ff47Ev3b~5|A#`bP{$V5{@H^R-Me|yAJ81LGy-2VPNl1Xrm_%$+M zQAsEyRXoQ@r+@vIZ`x|B=jW$c?&Hg*BONSpYdf1PX%Ar>90}&rz1s62Bm7J=LQQ!J z5Ng?|kyi|v%ty+E@UCOeRh^BNeyl$j3swo6N?g2w2=6BDy0>woQXR3kLlv~xS%iy) zg&dkh(}K5)m4}PTM*7`X?h|!Um5K5j9LEQDtB8DA+8cHEsasUDmzYK8v!^$l9T_%z zcsDGZC4w32juksG62FMj$Z!y{s)&i>hUxbL$XgOJ%7+O^(^i&b59)E7sErX~p zJwIDurc?)3T29eNJczSOX5J6a!H)II*>JgEqh6VFKowJXTml$ za5+{m02@kfRo;i5rD+r}k8$I`J9CN!3eu!DAok0=_b7$>#tX;g{vHL`HMaM@=Tfz; zH}YBe#U*Sl9c^|JaOqF$GD1G}R4x`4;1WFruZ6PAx)7_<3Kc3{8?{$>3=@`uLcmP# zn)VQ#n?AVBIyfpbAPA}{OAaT^bqQ`^AKbgp7*qN8b9U-xJts$^9Ef=0wNM$)071HO@pcX-b2^WYVr47i#OqsX6do6_ zUsaQI(HAQ2X-u*JbR2dH0+?^)^%kjzn{+u-$F7;&bHV@kQb33cl}5cALigY7m>8}| z5ilPi-2HUrR!Ts`Npm{wSM9}0I^$e!@vdtyE6b~Am5Ifrack%W4O2XhF6qNSF@k9~ zjw5-EXM;K_osjK58Sf9LPHl{m3IBu@ta2CGk+GKd)ggvq;3_{ERP#&&wX>^`3S=S^QG{G4dw@0@-U8wD@-3gVc6IK~U zdMpi(YtOqH_wP;+wXJVuI}kO(nj3_XHh#+YHs1BmA>3P{;h!j{WSX}X0 z*vxL}4fnL}K$Yujw%Gyrfd`Km%NTYdms&&__KRolv-7&NNVZ=^h z!J}ql1$z{Gv~IZ2QU?5<)?)B~u40=%hrj*1=2OIjGNXOjJzHS+R`!={uZU(t{oVd$ zSLME?D^IZL$tBqM*p~WaiVs^p(h?tgm){xF$<4ea6EAv%%Hctxi(LX$3rotHc-pKG2l@z_aVc%KsLe$CgeV^MSP@**PqYEC9ISGet5n+NfmUG_w# zz}#l?gSjHw%GgJfZsYv2?Py}sWMtLLJRDDs+(zSQk7MeR&gR&)ry6Uaq%UQvF93F? zpai);xr8drm7|ieUdM)I;z`&G8+1f><<@wll1E-pksGX1V{?qIa+o{+-JurnNg&5| zHImmcHOw5pkZPI;PY)K0d#-RUP26+E+>|G~WDaqI$$iCBG2Z8U!SL7^^70y?zxDm@ zx|kr|dGtodl!7XUCKJ(n;C-;G*iVew^jPDXoFhuZ3Mt}&#{~zJKL3szHVJgyeb#Ep zSYn$8=+x!oVE(*w>kxa5s$f4ZrNYQdbRQBP;jB3wQ{ zEfZdQ?s#u7hW=(yQ%rN?(hCHR#Y1^aetzoH&r-o=9mN3wOdFeNtAYnt;$kd|+>S;6 zhoND2&Pt&IoaFq4QemMMqITx%=20=ua5Rr@%e8FV9M4%|QYKUOXyy2fvc;lj6Sjw| zNRtxzuV9WA+F!U&4_`i_v=cJ>ZEWqOAV1v20pPc9+n#}TbG_mO!;8E9GOvd`8>}1# zp6<+=C)4MaELAOHA-abv9~bZR9p3m>;Ecy5f8Zim?esoZAcpCBn%);#ou6t&u&H?# zJM|0@%$nxUFS8e=Aa*gTOaUo{V`m2Yi{ZQ>N;{g{Yl0p9bsY1^hPreP8Rd%2>eK_J zBT!y%G85HuV=`%A^<0H(6L(0WV{rj$p6D0|N2+g+rFU$}jJSRZ2-TTi@91;AUK;+$ z!$PZoQ}jHt!=VDJ$dR2L9rDd{ZKria5msrG!OG8>LmT6h<+&j~$fmr-lEOmF>CSc^ zRn?qS7{73GBfgus`rQ;5<67vZ9Vmq{2%fsd5&@4HGU;b_GaQ8_*ULaDe}e8?Xq09x z!wnH%-DOFo;}UY1bhX}P2|r)Cq>HLs!bCOQXkzv3Mr>pk5c)hPZDb($@^L3?V(dFf z@aEG?YV#)>g#U^{7&`Q9r^$A2p7*xL6P72_A8IWs?I07DcUDFKIehWpV__g%ezEDa zkU$Q~O2ngrrd@*9G=~o3z?`UMGRLXLDPyPTL}<>>K~`L-D=2x4CN58|8CtR zWvrtqW~*8%-=jCzs&0bB{$)wQ5V8F0=``1{@D>ZtLhAMGM{Q?NsknB8v-!20UKHHo zZ7?fYeX(;E(f3MfNt8FL=}scTt$ACfwbxc!c)+qJ`{^v8&%EwkL`4}EA}&4LnySE; zU?AeL?V2$22&TDc_n>@u8_wbJEJGI4bfVlL9U}K4JIyh{1`7xpp&iW}ZlW>6M_GeL zhX#QF41TC?+2*VbuT+(Y zLu;~xV3z09j))>%{+Y>#i%z{_Hht8~TrG*(*4s@|V^!P9!>>LecLj6Y97F(r8(8}G zExWk#N@_&0!~)mlafZTo+I?$u$%z6vPEpjTz$!H7_;*v(6yiY8siBw~ z`TWk4J2FXIzGN);w#SS2*M>)&?mXV^kKyd5CI0^b<9XZ*>9Q_zNo@70InJIU4#nH) z4>vwe$X{J|n;SJwmzNx#G#B1Z$P@3gyx$&3Wz#_ zvgW!womW@p1gkz-rNY`%VQ7g2Wd?4xZlV!pu3Y3y* z5aWgOA46r$M>b}rqePt=D~b5L!Y$iXn-TbswYfp5Q`@yHP?IV4Ob;pb^@__9r& znY?x1VkgIqx|TTgzC@(IWSLQvvFe*;d;KnR*j?mS;ARBH@&tccAx@VdU|IUC!rHUn z2}7;wTuu@kupCURTaDgMTSStMRJ3vq`?(V$XmWftPpJbg4rIMjYWjOMbYx7z5dP?VdU19#h4jOO}3td6oV%& zMieWR2dqXD8j}mHwG-BMdwf%GFuR5pWNfIH1yPQqA&Tz9zUs=Ak8Cs=FioabRBh|3 z29(JM83}0-7dGoITF3X^SmUK}6?#m^h}fPV*U6t04oNAxd3J5*oAvog%(i)f)~hQx z9EZg8hn=TG{XTVSy*+3f9BH84^9K1>M-eEb`A!@BNAY3G;S-eVZN4{$Z?fJSm2#B!c}?EPv8t!)#opWW1rG zxZ+;FXHP~9yrnaSX!jB@v2)+1nv(3^S+5$7v9?@5xKA!gix1?Sy3JZaoa?z5Ovl1N zra#sP4Ext#Y^UuaT&zTFwwprx7u!}Z5T~O}L6{d| zE2;;5OXuazNl;=PV#Fy^{0fOWJ<6_u8GShF>=ORSBx%b#O+{4d+$1e`52Ru5i$KpdzxCPwP-_mnS6wQncOAU( zn_K1qF^5ztdLeMh+xksM&hHhKV`Q0Ez{RdXN94ZbpP^74rJy$s^!4n)=yJV3qWNP; zG&irp<#Zn`#z3nVa?mQkx4UJh_wJkW^|}wF^id#aGZC1}NPa(j$(sy3%~AbP*XWN7 zf5}^#9cb|1>OG4lq_~W@9G=Lo6Rdp>u8Rl^~&|cA7*}PEgE}I zKe-K5eA-B+BdZj8t|a0;u?uUbdl!Dc{}#zIJH#-klNMeqrQEZip<#(bBF1*&t2X0T z+Cn{^21+b=pL;*$n<_S(c9Ct2y1YN6x6^VR<&K#!L_Wl8ia&Adr^--RLvxHn(9P@*##Mdm zX5vOW{8tt~t#)B!|2CIyJ4wzqGp$^Djxv5TD0HYn{icCZ*9&(8gu0B{?2yx~HJ@E? zF1L(TzBitQEO^tv;G&gU8BHm)nLA%<_9wGJzpnc0R}7I2db4KDD1m}>-9p6(EMv-4 z>((c`x0ao1JlGqdCZZCPW}2bUI!Grpe(NEhA9L>ldF4ahezA1~Tf1Q&2v%)=?_k;a z!lI(~xUsWiPJ7-3**76jT&lQ*t0Le&D~fH7tfUDlDtjzNG`Sd55O?R5#WZ4q9X6I% z(h=^R^MyI?mSw-f74GKIBPQ}CWBa?Bam60E;`aEFor$)R_0m>%vvu8qmog!YoavZK zo9ZO3<<~vj!Vk`dJ=B_(N6OE;j%>Hv=eQ0@m49#@CD)DZ#juG2&F9*zOK6K?uBeReHz<-@DlM&i5b9ppL- z&)Nv+^@@4LP}f21-O0`r=G71PnI_roCdJs#GLG%Qy1Avtz8HGjf43d1tbfLHkFp^_ zGBZzPn8(_=>FKBs-IX=EwJwnmeblh?q^0o4g0E1klbFYpB+Etov?0rO@6+;uAu9!z zF`E{?7>daUnCY4&ty()J%p@baE6eJp$UHsPRN3`$X}3vj>E?nj!fmDGts+yN6;yuxS8tcRJ=lh4?pmaexo#PI zjz2fjzbWuSrN)#Qvixxz+GFBIGAECrT^%0FLUa;#TlIPUBKG~Sak!_mvvi1U-_$P_ z9X>gm9LEYAdv?jF$1YAc^kZtPCt=zD#q0Vn&ok5`b8MqB-siaE%^8(=ByRrv$DSAU zT4d^5NOMGn<$(KtZlC+4sI3XM&AoIjXIeO0sO#@^Eeh2)Xc=4zSwtzlwANVzsm!>v zDwA!ZTIbd5DBB|TJG}BkgRRmlq4s23H8JLC<&jUG{aB%SC$}Y`M1c`k`QQ5jlvc2c zmnXH5%Yh|gx=a2i1l&5*nQ`bmpZR}x@oZ2orGj)@wBG_HA3XZ91S_L1Jy}PS&f4eu z1`XtN@D?oI)@W;q1j!MmKO1{8x)k4+&p}s&WFfl*r#R=a@Lb0Hi3E(c%UfeWd(Jkd zEsI8XqlS(OIq!6vo&VPipE<|3w=67n53VQ;(D9Gmq$#G(%@!TmZ1MjUo)OeVKWn<` z6aOnLRAv!5P?vRPqhvf~`mxY_35jfbtrJ%6CMuoA{5^az&t7V&h451LSF6}^vxqiB zp*I_{-@#yw8nH+{9;G7jZX(6Z>cVJ(K411l+rm&T9EMH5b}U0@_dP!Iq5Gh%2eAge zQxiR)DO*xP(&&7ry-wKA+RZ~O=STADL!6UXIK}dlk29@I`PQ?#vqnfc{D!&>hX7U# zWO?qMCPNRjcBBT}TrYSOS6dU(z-|4wl%$1TtXscj`P{N}bK*^v9N3R%UfS%hPJ}Hi zkv5ZGgJ)jW5o%b^ahYesmyFc}_BfS`7$yDZ{CQlCu8v&T{X+c4<%#HW>)@gY47E7& zZb_?Ed*F}v^ss#2b1ck5^Y!>M=vY4DRKxDGW`sJ%@-LWe!I##GESPYP+c+1sKe^FP zXR9PE4>p|{oKb?Ns2A%+wvdHWxxqqV=^LEBdXffr;{GGmq(NTn8~F6|p=B+<+%yMb z^IMymvD-35@okK-ulrI&vRi+}_vS!BzRrlJ53H_P{XH6ScI@6v6ZTR#vPE}TR&C_G zicCTSg0MKwz&*357|>_TwCqFf;Kn$-vq*MslF437KzMTDzAqeueI|t`tXFxKd=|*I zwevu+qc8e4z_uIQROW=egbUm~^mP5c(+4#$P)tO{^G!-v|Ks%h+r^YKtsJoGOtyb3 zlT0)lYDQx`H)ER8u*sJe(n7@bD*cpA(@N7zPR{{J_!bEb2`&m7B>~fzI3AL5+RKmb zA03zzs;1b_U|8#0P-(^J8EaXs)G>L*4clnaFe%;{bvXR#3bro9w)1=A(sBNYIwy3s z0b(sLRA0Vs_|?NaB#iXotBuc3b|NKVR*cK6-(&1QS(7Y8xGlbWJoAf=iS65SF2h$> zN2cxy%A*(BeKT5MZFE{T$Lc=P%*u7ApKX_v31`km?|w_(`S!3)U-AxhqJM1{s0-SFO-jagBoR~%Pppc&Jy(~WPB@4&_uH!_Nbrep1%a}C%S-ZMaMFQoA@Ki}x% z;>H?AL8QkNY!XR=HADy^Ep6c^IO4ezMvq6+oz4EQ{+Cca-8h~bDVqVGLvPsl#BgD> zj$c$hTO8OClT3F<=hr8=M^GL4O;=3RB`OV!C3hwRVzt0fykPV=LAcdfY4ge@E9{%f zY+lFGrquiv5ia*%Y%H9J%Brod9Gzku#sM}7n}*@28Cpuhor66G&&rURX9p<1rn07T z;%m`>nI;^HurfXx8r-f$%^VpCV-DWs6n1m6bB)e36?LM%{(#uy3KNPKOBW$7& z$$s!2k4}@8ld$R8ZUi{^h|_Rs$9Bn&=;BKgChKj&%SkO>7YNcWYwcGjofO2#dpCjWTAJo=&!Mto{yViEt6R48^%#B98BoE(B%+k-aDV0w47U5N3(RCC!4&{ z{J%;=1mpqAtu7#qzBbDKcGQdozV_j@?9zYAaW4If@1z(cL^y7fT!O2+h4~ov-*2TM z%ij5^`S0SpRrI7d9Ay+;${ONKX~@H`JJBlg!B`vpGptudSu@)V<;nhySAyz%xY*3k zm)03uoQwPjIo$gxttd8)ob1pwEzWVD#kJxp_pvkN65-t329_}RtSGJqiG&Fh7@aPu zj=0WBt2G*!{LA~g|375pmg>|&i)=cbo0i>9wYTFh{}Y{ga`D99^_l+m`5sh_vNL_~ zVU;%H*HUP6iRK8qBxl5|{yDDs)+=PpEWQ;Zb44e@`C3k{32rUE^iq}^6Z1M_9L(^n|wT_w2!+AlbGq}V6~W1PGp%pVfRW_hP;QhJ8NUuag)UAVRM8Z$1m;)?&c zvtaR@6E#M-#_^<+#1-1Hyqb8;B;1wnU-tHDiBf`vx){1E+5P$%funK^2<7k%xu2hq zPlP6#F1DRhxZtVQMUNTvkJ|3|WGOUJCpJSLU-Z^bF@8axGqj?Uj#N>`PI7@mk_`x4R@}Z{Xf5cd^)AwAQuk_!TQ; zf>vG)xVo$-QJ_DR=?$#u_5tTinIB>xflW}SUY<~7DiZ1OYf3O=Dv-HPhf0yyS@}38 z*s$WK6 zUeX37j>Dr9{@(rpaJfs6^eK8OK^s4K>jD0>PHYOn~(&&O=6Hq?a1rz zlG5^yCbpF^9kO8v%t%A@_3Pd8d*HJTX+rKElYA-#(gWM8mq&JKO+CN09eV|hzi{#P zkym;{+xHeGgl>YBM~P#a2SmS!4Uko)3%kGRp`H_I0_r8$v34SW_XyJ+zYOjZbDfqy zx=D)*wC(64Fpzq<$uKv{E4AwqxbxyR+BO3XL;(epaoV|Ohr7>&f~zl44eyDzP6YOJ zGEaMHm{6BP*A`n9q5U&LV2hDR(0niHNlcY0|DK`62C0mV0$uc|d$Uu;5knhoCsQSf zHn(dg`jsvQmOk882@%%ISoYh*<^D%I@42}Zy(yD$UwoUt z`((UV4NSe4s!9T@dz!XHeI$kzUs18@% z_!Nx_+5I72yj0N<1-7}k+81hkYRPBh>Ug4Xl6-G^a+zAz!zvlpJxt_d z5L|fI8MX&77gz}F8MxH@QEFaOR~gzx!BoC0e#J-APb9mBxoY%#dr}NxEgBPH|Mp6R zR{27p(Xt`JsiFN5@zsuXl51@NPIm;_W3k(HZI2{F%F3(i2Ndc7FV=gRJjGJ2brZUI z2{X}(8ekhw`-ECf+$aCxxt=O+rg)n|I|VOc+K`dahW36WT(*2

Zw0WJM1WniUz& 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 literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_5x8.h b/wled00/src/font/old fonts/console_font_5x8.h new file mode 100644 index 0000000000..f5404eca27 --- /dev/null +++ b/wled00/src/font/old fonts/console_font_5x8.h @@ -0,0 +1,300 @@ +// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), +// which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts + +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed/max glyph width: 5 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte + */ + +static const unsigned char console_font_5x8[] PROGMEM = { + 0x57, 0x08, 0x05, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x00, 0x1D, 0x5F, 0xED, 0xC0, // /* code=1, hex=0x01, ascii="^A" */ + // 0x00, 0x1D, 0x5F, 0xFD, 0xC0, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0x15, 0xFF, 0xB8, 0x80, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x08, 0xEF, 0xB8, 0x80, // /* code=4, hex=0x04, ascii="^D" */ + // 0x00, 0x1D, 0x5F, 0x90, 0x80, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x08, 0xEF, 0xD4, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x47, 0x10, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0x07, 0xFF, 0xB8, 0xEF, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x0E, 0x36, 0xD1, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x00, 0x08, 0xA2, 0x38, 0x80, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x08, 0xA4, 0x62, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x0E, 0x95, 0xEA, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x00, 0x00, 0x45, 0x10, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x10, 0xC7, 0x31, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x04, 0x67, 0x18, 0x40, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x00, 0x08, 0xE2, 0x38, 0x80, // /* code=18, hex=0x12, ascii="^R" */ + // 0x00, 0x14, 0xA5, 0x01, 0x40, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x1F, 0xAD, 0x29, 0x4A, // /* code=20, hex=0x14, ascii="^T" */ + // 0x00, 0x06, 0xC9, 0x24, 0xD8, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x7F, 0xE0, // /* code=22, hex=0x16, ascii="^V" */ + // 0x00, 0x08, 0xE2, 0x38, 0x8E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x08, 0xE2, 0x10, 0x80, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x08, 0x42, 0x38, 0x80, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x2F, 0x88, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x8F, 0xA0, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x08, 0x7C, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0xAF, 0xA8, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x02, 0x3B, 0xE0, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x0F, 0xB8, 0x80, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x08, 0x42, 0x00, 0x80, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0x14, 0xA0, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0x15, 0xF5, 0x7D, 0x40, /* code=35, hex=0x23, ascii="#" */ + 0x00, 0x08, 0x64, 0x19, 0x84, /* code=36, hex=0x24, ascii="$" */ + 0x02, 0x2A, 0xA3, 0x36, 0x40, /* code=37, hex=0x25, ascii="%" */ + 0x00, 0x0C, 0x86, 0xC9, 0xA0, /* code=38, hex=0x26, ascii="&" */ + 0x01, 0x08, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x08, 0x84, 0x20, 0x80, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x10, 0x42, 0x11, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x14, 0x47, 0x11, 0x40, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x47, 0x10, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x88, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x01, 0xE0, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x80, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x04, 0x42, 0x21, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x08, 0xC2, 0x10, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x19, 0x22, 0x23, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x38, 0x26, 0x0B, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x04, 0x65, 0x78, 0x40, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0x3D, 0x0E, 0x0B, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x19, 0x0E, 0x49, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0x3C, 0x22, 0x21, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x19, 0x26, 0x49, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x19, 0x27, 0x09, 0x80, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0x02, 0x00, 0x80, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0x02, 0x00, 0x88, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x04, 0x44, 0x10, 0x40, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0xE0, 0x38, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x10, 0x41, 0x11, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x18, 0x26, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x1D, 0x1B, 0x41, 0xC0, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x19, 0x2F, 0x4A, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0x39, 0x2E, 0x4B, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x1D, 0x08, 0x41, 0xC0, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0x39, 0x29, 0x4B, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0x3D, 0x0E, 0x43, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0x3D, 0x0E, 0x42, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x19, 0x28, 0x49, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0x25, 0x2F, 0x4A, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x1C, 0x42, 0x11, 0xC0, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x04, 0x29, 0x49, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0x25, 0x4C, 0x52, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0x21, 0x08, 0x43, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x00, 0x25, 0xE9, 0x4A, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0x25, 0xAB, 0x4A, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x19, 0x29, 0x49, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0x39, 0x2E, 0x42, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x19, 0x29, 0x49, 0x82, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0x39, 0x2E, 0x4A, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x1D, 0x06, 0x0B, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0x3E, 0x42, 0x10, 0x80, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0x25, 0x29, 0x49, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x00, 0x25, 0x29, 0x31, 0x80, /* code=86, hex=0x56, ascii="V" */ + 0x00, 0x23, 0x5A, 0xA9, 0x40, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0x25, 0x26, 0x2A, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0x14, 0xA5, 0x10, 0x80, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0x3C, 0x44, 0x43, 0xC0, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x18, 0x84, 0x21, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0x10, 0x82, 0x10, 0x40, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x18, 0x42, 0x11, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x08, 0xA0, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x1F, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x10, 0x40, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0xC1, 0x39, 0x40, /* code=97, hex=0x61, ascii="a" */ + 0x04, 0x21, 0xC9, 0x4B, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x64, 0x20, 0xC0, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x04, 0xE9, 0x49, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0xCF, 0x41, 0xC0, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x0C, 0x8E, 0x21, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0xE9, 0x38, 0x4C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0x21, 0xC9, 0x4A, 0x40, /* code=104, hex=0x68, ascii="h" */ + 0x01, 0x00, 0xC2, 0x11, 0xC0, /* code=105, hex=0x69, ascii="i" */ + 0x00, 0x80, 0x21, 0x08, 0x4C, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0x21, 0x4C, 0x52, 0x40, /* code=107, hex=0x6B, ascii="k" */ + 0x03, 0x08, 0x42, 0x11, 0xC0, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x01, 0x2F, 0x4A, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x01, 0xC9, 0x4A, 0x40, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0xC9, 0x49, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x01, 0xC9, 0x4B, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0xE9, 0x49, 0xC2, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0xA6, 0x21, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0xEC, 0x1B, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x11, 0xE4, 0x20, 0xC0, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x01, 0x29, 0x49, 0xC0, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x01, 0x29, 0x31, 0x80, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x01, 0x29, 0x7A, 0x40, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x01, 0x26, 0x32, 0x40, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x01, 0x29, 0x38, 0x4C, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x01, 0xE2, 0x23, 0xC0, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x88, 0x84, 0x10, 0x40, /* code=123, hex=0x7B, ascii="{" */ + 0x01, 0x08, 0x42, 0x10, 0x80, /* code=124, hex=0x7C, ascii="|" */ + 0x02, 0x08, 0x21, 0x11, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x00, 0xAA, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x45, 0x47, 0xE0, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x1D, 0x08, 0x41, 0xC4, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x02, 0x81, 0x29, 0x49, 0xC0, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x11, 0x00, 0xCF, 0x41, 0xC0, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x22, 0x81, 0x82, 0x51, 0x40, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x02, 0x81, 0x82, 0x32, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x41, 0x01, 0x82, 0x32, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x01, 0x01, 0x82, 0x32, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x64, 0x20, 0xC4, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x22, 0x80, 0xCF, 0x41, 0xC0, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x02, 0x80, 0xCF, 0x41, 0xC0, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x41, 0x00, 0xCF, 0x41, 0xC0, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x02, 0x80, 0xC2, 0x11, 0xC0, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x22, 0x80, 0xC2, 0x11, 0xC0, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x41, 0x00, 0xC2, 0x11, 0xC0, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xA0, 0x19, 0x2F, 0x4A, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x20, 0x19, 0x2F, 0x4A, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x11, 0x3D, 0x0E, 0x43, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x01, 0xB7, 0xF2, 0xE0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x1D, 0x4F, 0x52, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x22, 0x80, 0xC9, 0x49, 0x80, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x41, 0x00, 0xC9, 0x49, 0x80, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x22, 0x81, 0x29, 0x49, 0xC0, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x41, 0x01, 0x29, 0x49, 0xC0, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x02, 0x81, 0x29, 0x38, 0x4C, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x02, 0x80, 0xC9, 0x49, 0x80, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x50, 0x25, 0x29, 0x49, 0x80, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x08, 0xE8, 0x41, 0xC4, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x01, 0x94, 0x8E, 0x23, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x06, 0xD4, 0xA2, 0x38, 0x80, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x06, 0x29, 0x6F, 0xCA, 0x20, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x01, 0x90, 0x8F, 0x21, 0x10, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x22, 0x01, 0x82, 0x32, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x11, 0x00, 0xC2, 0x11, 0xC0, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x11, 0x00, 0xC9, 0x49, 0x80, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x11, 0x01, 0x29, 0x49, 0xC0, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x55, 0x01, 0xC9, 0x4A, 0x40, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x55, 0x25, 0xAD, 0x5A, 0x40, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x01, 0x14, 0x60, 0x38, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x01, 0x14, 0x40, 0x38, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x01, 0x00, 0x44, 0x49, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x00, 0x7E, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x00, 0x7C, 0x20, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x04, 0x25, 0x45, 0xC4, 0xE0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x04, 0x65, 0x44, 0xCC, 0xE1, // /* code=172, hex=0xAC, ascii="!," */ + // 0x01, 0x00, 0x42, 0x38, 0x80, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0x05, 0x51, 0x40, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x00, 0x0A, 0x2A, 0x80, // /* code=175, hex=0xAF, ascii="!/" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=176, hex=0xB0, ascii="!0" */ + // 0xEA, 0xAE, 0xAE, 0xAA, 0xEA, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xDB, 0xB6, 0xED, 0xBB, 0x6E, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x21, 0x08, 0x42, 0x10, 0x84, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x21, 0x09, 0xC2, 0x10, 0x84, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x21, 0x38, 0x4E, 0x10, 0x84, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x52, 0x95, 0xA5, 0x29, 0x4A, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x01, 0xE5, 0x29, 0x4A, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x38, 0x4E, 0x10, 0x84, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x52, 0xB4, 0x2D, 0x29, 0x4A, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x52, 0x94, 0xA5, 0x29, 0x4A, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x3C, 0x2D, 0x29, 0x4A, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x52, 0xB4, 0x2F, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x52, 0x95, 0xE0, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x21, 0x38, 0x4E, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x01, 0xC2, 0x10, 0x84, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x21, 0x08, 0x70, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x21, 0x09, 0xF0, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x01, 0xF2, 0x10, 0x84, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x21, 0x08, 0x72, 0x10, 0x84, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x01, 0xF0, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x21, 0x09, 0xF2, 0x10, 0x84, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x21, 0x0E, 0x43, 0x90, 0x84, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x52, 0x94, 0xB5, 0x29, 0x4A, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x52, 0x96, 0x87, 0x80, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x1E, 0x85, 0xA9, 0x4A, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x52, 0xB6, 0x0F, 0x80, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x3E, 0x0D, 0xA9, 0x4A, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x52, 0x96, 0x85, 0xA9, 0x4A, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x3E, 0x0F, 0x80, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x52, 0xB6, 0x0D, 0xA9, 0x4A, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x21, 0x3E, 0x0F, 0x80, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x52, 0x95, 0xF0, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x3E, 0x0F, 0x90, 0x84, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x01, 0xF5, 0x29, 0x4A, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x52, 0x94, 0xF0, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x21, 0x0E, 0x43, 0x80, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x0E, 0x43, 0x90, 0x84, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0xF5, 0x29, 0x4A, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x52, 0x95, 0xF5, 0x29, 0x4A, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x21, 0x3E, 0x4F, 0x90, 0x84, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x21, 0x09, 0xC0, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x72, 0x10, 0x84, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x0F, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE7, 0x39, 0xCE, 0x73, 0x9C, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x18, 0xC6, 0x31, 0x8C, 0x63, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xF0, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x00, 0xD9, 0x49, 0xA0, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x03, 0x25, 0xE9, 0x4B, 0x90, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x03, 0x90, 0x84, 0x21, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x1C, 0xA5, 0x29, 0x40, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x07, 0xD2, 0x44, 0x47, 0xE0, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x1F, 0x29, 0x49, 0x80, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x01, 0x29, 0x4B, 0xB0, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x04, 0xD4, 0x42, 0x10, 0x80, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x01, 0x08, 0xE8, 0xB8, 0x84, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x1D, 0x1F, 0xC5, 0xC0, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x1D, 0x18, 0xAB, 0x60, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x64, 0x10, 0xC9, 0x49, 0x80, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0xEA, 0xD5, 0xC0, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x02, 0xEA, 0xA6, 0xC0, // /* code=237, hex=0xED, ascii="!m" */ + // 0x01, 0x90, 0xE4, 0x20, 0xC0, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x03, 0x25, 0x29, 0x4A, 0x40, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0x3C, 0x0F, 0x03, 0xC0, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x09, 0xF2, 0x03, 0xE0, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x02, 0x08, 0x22, 0x23, 0xC0, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x88, 0x82, 0x09, 0xC0, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x06, 0x52, 0x10, 0x84, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x21, 0x08, 0x4A, 0x60, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x18, 0x0F, 0x01, 0x80, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x15, 0x40, 0x2A, 0x80, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x08, 0xA2, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0xC6, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x40, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x06, 0x22, 0x51, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x03, 0x14, 0xA0, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x03, 0x04, 0x47, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x00, 0xE7, 0x38, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ +}; diff --git a/wled00/src/font/old fonts/console_font_5x8.wbf b/wled00/src/font/old fonts/console_font_5x8.wbf new file mode 100644 index 0000000000000000000000000000000000000000..a4542b684476255418ad0631f7b9a24ea1108158 GIT binary patch literal 487 zcmYL_!Ab&A6o&t67B>=^0Rsn<9A&1)g;9%eK;t?IGU}>L(AwT1g5nYquA)Z}qM&+- z$=$4a1&KC7+xGo;Hr>VH+;h(V-|yUWxh_z<#s85JG)i+8wtsIFWu_#e~XRFD}`>6nNwu9Q#W%y zGiPs81379LX2|y~1uWZu)#F2DUjWrgFM)F~R0vxmjjH4|448F`rwKzutNl2EXGV4+ zJ3-zMc;hn#S8~K#vEjWlWN2Z_D1!KoeymkDNOcks*UMzVp+@84l?uP9PT>-%@|7c-3(k?9T^M5EBUE`eB^4$$608V>Pm&fMxGGldG2C>h1Qz7euH=<`YtrBf z11{JFQi6+g^hia#0A7str=nqh(^LdB6^2g)*9yWvVhHFgz8VQ;Q%ecSJ#y0J*WnHL E13zD2n*aa+ literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_5x8_showcase.png b/wled00/src/font/old fonts/console_font_5x8_showcase.png new file mode 100644 index 0000000000000000000000000000000000000000..61da20729ba9442d34a69df6d75d718f1e252f8c GIT binary patch literal 33264 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 ftU&|1a>aK|eLPVTCLUa literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_6x8.h b/wled00/src/font/old fonts/console_font_6x8.h new file mode 100644 index 0000000000..47be78bb5f --- /dev/null +++ b/wled00/src/font/old fonts/console_font_6x8.h @@ -0,0 +1,300 @@ +// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), +// which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts + +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 8 + * [2] Fixed/max glyph width: 6 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte + */ + +static const unsigned char console_font_6x8[] PROGMEM = { + 0x57, 0x08, 0x06, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x39, 0x16, 0xD1, 0x55, 0x13, 0x80, // /* code=1, hex=0x01, ascii="^A" */ + // 0x39, 0xF5, 0x5F, 0x45, 0xF3, 0x80, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xA7, 0xDF, 0x7C, 0xE1, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x43, 0x9F, 0x7C, 0xE1, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x10, 0xE3, 0x84, 0x7D, 0xF1, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x00, 0x43, 0x9F, 0x7C, 0x43, 0x80, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0xF3, 0xCF, 0xFF, 0xFF, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x07, 0x92, 0x49, 0xE0, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xF8, 0x6D, 0xB6, 0x1F, 0xFF, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x00, 0x70, 0xCD, 0x49, 0x23, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x39, 0x14, 0x4E, 0x10, 0xE1, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x10, 0x61, 0x44, 0x31, 0xC6, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x0C, 0xD2, 0xCD, 0x2D, 0xB6, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x01, 0x53, 0x9B, 0x39, 0x50, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x20, 0xC3, 0x8F, 0x38, 0xC2, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x08, 0x63, 0x9E, 0x38, 0x60, 0x80, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x28, 0xA2, 0x8A, 0x28, 0x02, 0x80, // /* code=19, hex=0x13, ascii="^S" */ + // 0x3D, 0x55, 0x4D, 0x14, 0x51, 0x40, // /* code=20, hex=0x14, ascii="^T" */ + // 0x39, 0x13, 0x0A, 0x19, 0x13, 0x80, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x01, 0xE7, 0x80, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0xE7, 0xC4, 0x7C, 0xE1, 0x0E, // /* code=23, hex=0x17, ascii="^W" */ + // 0x10, 0xE7, 0xC4, 0x10, 0x41, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x10, 0x41, 0x04, 0x7C, 0xE1, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x41, 0x9F, 0x18, 0x40, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x43, 0x1F, 0x30, 0x40, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x10, 0x41, 0x07, 0xC0, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0xA2, 0x9F, 0x28, 0xA0, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x10, 0x43, 0x8E, 0x7D, 0xF0, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x7D, 0xF3, 0x8E, 0x10, 0x40, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x10, 0xE3, 0x84, 0x10, 0x01, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x6D, 0xB4, 0x80, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xA7, 0xCA, 0x29, 0xF2, 0x80, /* code=35, hex=0x23, ascii="#" */ + 0x20, 0xE4, 0x0C, 0x09, 0xC1, 0x00, /* code=36, hex=0x24, ascii="$" */ + 0x65, 0x90, 0x84, 0x21, 0x34, 0xC0, /* code=37, hex=0x25, ascii="%" */ + 0x21, 0x45, 0x08, 0x55, 0x23, 0x40, /* code=38, hex=0x26, ascii="&" */ + 0x30, 0xC2, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x10, 0x82, 0x08, 0x20, 0x81, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x20, 0x41, 0x04, 0x10, 0x42, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0xA3, 0x9F, 0x38, 0xA0, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x41, 0x1F, 0x10, 0x40, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x08, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x10, 0x84, 0x21, 0x00, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x39, 0x14, 0xD5, 0x65, 0x13, 0x80, /* code=48, hex=0x30, ascii="0" */ + 0x10, 0xC1, 0x04, 0x10, 0x43, 0x80, /* code=49, hex=0x31, ascii="1" */ + 0x39, 0x10, 0x46, 0x21, 0x07, 0xC0, /* code=50, hex=0x32, ascii="2" */ + 0x39, 0x10, 0x4E, 0x05, 0x13, 0x80, /* code=51, hex=0x33, ascii="3" */ + 0x08, 0x62, 0x92, 0x7C, 0x20, 0x80, /* code=52, hex=0x34, ascii="4" */ + 0x7D, 0x04, 0x1E, 0x05, 0x13, 0x80, /* code=53, hex=0x35, ascii="5" */ + 0x18, 0x84, 0x1E, 0x45, 0x13, 0x80, /* code=54, hex=0x36, ascii="6" */ + 0x7C, 0x10, 0x84, 0x20, 0x82, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x39, 0x14, 0x4E, 0x45, 0x13, 0x80, /* code=56, hex=0x38, ascii="8" */ + 0x39, 0x14, 0x4F, 0x04, 0x23, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x03, 0x0C, 0x00, 0xC3, 0x08, /* code=59, hex=0x3B, ascii=";" */ + 0x08, 0x42, 0x10, 0x20, 0x40, 0x80, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x20, 0x40, 0x81, 0x08, 0x42, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x39, 0x10, 0x46, 0x10, 0x01, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x39, 0x15, 0xD5, 0x5D, 0x03, 0x80, /* code=64, hex=0x40, ascii="@" */ + 0x39, 0x14, 0x51, 0x7D, 0x14, 0x40, /* code=65, hex=0x41, ascii="A" */ + 0x79, 0x14, 0x5E, 0x45, 0x17, 0x80, /* code=66, hex=0x42, ascii="B" */ + 0x39, 0x14, 0x10, 0x41, 0x13, 0x80, /* code=67, hex=0x43, ascii="C" */ + 0x79, 0x14, 0x51, 0x45, 0x17, 0x80, /* code=68, hex=0x44, ascii="D" */ + 0x7D, 0x04, 0x1E, 0x41, 0x07, 0xC0, /* code=69, hex=0x45, ascii="E" */ + 0x7D, 0x04, 0x1E, 0x41, 0x04, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x39, 0x14, 0x17, 0x45, 0x13, 0xC0, /* code=71, hex=0x47, ascii="G" */ + 0x45, 0x14, 0x5F, 0x45, 0x14, 0x40, /* code=72, hex=0x48, ascii="H" */ + 0x38, 0x41, 0x04, 0x10, 0x43, 0x80, /* code=73, hex=0x49, ascii="I" */ + 0x04, 0x10, 0x41, 0x45, 0x13, 0x80, /* code=74, hex=0x4A, ascii="J" */ + 0x45, 0x25, 0x18, 0x51, 0x24, 0x40, /* code=75, hex=0x4B, ascii="K" */ + 0x41, 0x04, 0x10, 0x41, 0x07, 0xC0, /* code=76, hex=0x4C, ascii="L" */ + 0x45, 0xB5, 0x51, 0x45, 0x14, 0x40, /* code=77, hex=0x4D, ascii="M" */ + 0x45, 0x95, 0x53, 0x45, 0x14, 0x40, /* code=78, hex=0x4E, ascii="N" */ + 0x39, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=79, hex=0x4F, ascii="O" */ + 0x79, 0x14, 0x5E, 0x41, 0x04, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x39, 0x14, 0x51, 0x55, 0x23, 0x40, /* code=81, hex=0x51, ascii="Q" */ + 0x79, 0x14, 0x5E, 0x49, 0x14, 0x40, /* code=82, hex=0x52, ascii="R" */ + 0x39, 0x14, 0x0E, 0x05, 0x13, 0x80, /* code=83, hex=0x53, ascii="S" */ + 0x7C, 0x41, 0x04, 0x10, 0x41, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x45, 0x14, 0x51, 0x45, 0x13, 0x80, /* code=85, hex=0x55, ascii="U" */ + 0x45, 0x14, 0x51, 0x44, 0xA1, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x45, 0x15, 0x55, 0x55, 0x52, 0x80, /* code=87, hex=0x57, ascii="W" */ + 0x45, 0x12, 0x84, 0x29, 0x14, 0x40, /* code=88, hex=0x58, ascii="X" */ + 0x45, 0x14, 0x4A, 0x10, 0x41, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x78, 0x21, 0x08, 0x41, 0x07, 0x80, /* code=90, hex=0x5A, ascii="Z" */ + 0x38, 0x82, 0x08, 0x20, 0x83, 0x80, /* code=91, hex=0x5B, ascii="[" */ + 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x38, 0x20, 0x82, 0x08, 0x23, 0x80, /* code=93, hex=0x5D, ascii="]" */ + 0x10, 0xA4, 0x40, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, /* code=95, hex=0x5F, ascii="_" */ + 0x30, 0xC1, 0x00, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x03, 0x81, 0x3D, 0x13, 0xC0, /* code=97, hex=0x61, ascii="a" */ + 0x41, 0x07, 0x91, 0x45, 0x17, 0x80, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x03, 0x91, 0x41, 0x13, 0x80, /* code=99, hex=0x63, ascii="c" */ + 0x04, 0x13, 0xD1, 0x45, 0x13, 0xC0, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x03, 0x91, 0x79, 0x03, 0x80, /* code=101, hex=0x65, ascii="e" */ + 0x18, 0x82, 0x1E, 0x20, 0x82, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x03, 0xD1, 0x44, 0xF0, 0x4E, /* code=103, hex=0x67, ascii="g" */ + 0x41, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=104, hex=0x68, ascii="h" */ + 0x10, 0x01, 0x04, 0x10, 0x41, 0x80, /* code=105, hex=0x69, ascii="i" */ + 0x08, 0x01, 0x82, 0x08, 0x24, 0x8C, /* code=106, hex=0x6A, ascii="j" */ + 0x41, 0x04, 0x94, 0x61, 0x44, 0x80, /* code=107, hex=0x6B, ascii="k" */ + 0x10, 0x41, 0x04, 0x10, 0x41, 0x80, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x06, 0x95, 0x55, 0x14, 0x40, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x07, 0x12, 0x49, 0x24, 0x80, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x03, 0x91, 0x45, 0x13, 0x80, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x07, 0x91, 0x45, 0x17, 0x90, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x03, 0xD1, 0x45, 0x13, 0xC1, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x05, 0x89, 0x20, 0x87, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x03, 0x90, 0x38, 0x13, 0x80, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x87, 0x88, 0x20, 0xA1, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x04, 0x92, 0x49, 0x62, 0x80, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x04, 0x51, 0x44, 0xA1, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x04, 0x51, 0x55, 0xF2, 0x80, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x04, 0x92, 0x31, 0x24, 0x80, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x04, 0x92, 0x48, 0xE1, 0x18, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x07, 0x82, 0x31, 0x07, 0x80, /* code=122, hex=0x7A, ascii="z" */ + 0x18, 0x82, 0x18, 0x20, 0x81, 0x80, /* code=123, hex=0x7B, ascii="{" */ + 0x10, 0x41, 0x00, 0x10, 0x41, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x30, 0x20, 0x83, 0x08, 0x23, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x29, 0x40, 0x00, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x10, 0xE6, 0xD1, 0x45, 0xF0, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x39, 0x14, 0x10, 0x44, 0xE1, 0x0C, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x48, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x38, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x28, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x30, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x38, 0xA3, 0x81, 0x3D, 0x13, 0xC0, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0xE4, 0x50, 0x44, 0xE1, 0x0C, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x38, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x28, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x30, 0x03, 0x91, 0x79, 0x03, 0x80, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x28, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0xA0, 0x04, 0x10, 0x41, 0x80, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x20, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0x28, 0x01, 0x0A, 0x45, 0xF4, 0x40, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0xA3, 0x9B, 0x45, 0xF4, 0x40, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x0C, 0x07, 0xD0, 0x79, 0x07, 0xC0, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x07, 0x85, 0x7D, 0x43, 0xC0, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x3D, 0x45, 0x1F, 0x51, 0x45, 0xC0, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x38, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x28, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x60, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x38, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x60, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x28, 0x04, 0x92, 0x48, 0xE1, 0x18, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x48, 0xC4, 0x92, 0x49, 0x23, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x28, 0x04, 0x92, 0x49, 0x23, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x00, 0x43, 0x90, 0x40, 0xE1, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x18, 0x92, 0x1E, 0x20, 0x95, 0xC0, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x44, 0xA1, 0x1F, 0x11, 0xF1, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0x61, 0x45, 0x1A, 0x5D, 0x24, 0x80, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x08, 0x51, 0x0E, 0x10, 0x45, 0x08, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x18, 0x03, 0x81, 0x3D, 0x13, 0xC0, // /* code=160, hex=0xA0, ascii="! " */ + // 0x18, 0x01, 0x04, 0x10, 0x41, 0x80, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x18, 0x03, 0x12, 0x49, 0x23, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x18, 0x04, 0x92, 0x49, 0x62, 0x80, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x29, 0x40, 0x1C, 0x49, 0x24, 0x80, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x29, 0x40, 0x12, 0x69, 0x64, 0x80, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x13, 0xD1, 0x3C, 0x03, 0xC0, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x31, 0x24, 0x92, 0x30, 0x07, 0x80, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x10, 0x01, 0x0C, 0x41, 0x13, 0x80, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x07, 0xD0, 0x41, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x0F, 0xC1, 0x04, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x41, 0x25, 0x0E, 0x44, 0x21, 0xC0, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x41, 0x25, 0x0B, 0x54, 0x70, 0x40, // /* code=172, hex=0xAC, ascii="!," */ + // 0x10, 0x01, 0x04, 0x38, 0xE1, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x02, 0x52, 0x24, 0x00, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x04, 0x89, 0x48, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x0A, 0x80, 0x54, 0x0A, 0x80, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x56, 0xA5, 0x6A, 0x56, 0xA5, 0x6A, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAB, 0xF5, 0x7F, 0xAB, 0xF5, 0x7F, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x41, 0x3C, 0x10, 0x41, 0x04, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x13, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x51, 0x45, 0x34, 0x51, 0x45, 0x14, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x3C, 0x51, 0x45, 0x14, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x03, 0xC1, 0x3C, 0x10, 0x41, 0x04, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x53, 0x41, 0x34, 0x51, 0x45, 0x14, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x03, 0xC1, 0x34, 0x51, 0x45, 0x14, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x53, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x51, 0x45, 0x3C, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x13, 0xC1, 0x3C, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x3C, 0x10, 0x41, 0x04, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x41, 0x07, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x41, 0x3F, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x3F, 0x10, 0x41, 0x04, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x41, 0x07, 0x10, 0x41, 0x04, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x41, 0x3F, 0x10, 0x41, 0x04, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x51, 0x45, 0x17, 0x51, 0x45, 0x14, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x51, 0x74, 0x1F, 0x00, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x01, 0xF4, 0x17, 0x51, 0x45, 0x14, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x53, 0x70, 0x3F, 0x00, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x03, 0xF0, 0x37, 0x51, 0x45, 0x14, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x51, 0x74, 0x17, 0x51, 0x45, 0x14, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x53, 0x70, 0x37, 0x51, 0x45, 0x14, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x13, 0xF0, 0x3F, 0x00, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x51, 0x45, 0x3F, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x03, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x3F, 0x51, 0x45, 0x14, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x51, 0x45, 0x1F, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x71, 0x07, 0x00, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x71, 0x07, 0x10, 0x41, 0x04, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x1F, 0x51, 0x45, 0x14, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x51, 0x45, 0x37, 0x51, 0x45, 0x14, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x13, 0xF0, 0x3F, 0x10, 0x41, 0x04, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x41, 0x3C, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x07, 0x10, 0x41, 0x04, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x03, 0x52, 0x48, 0xD0, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x01, 0xC4, 0x9C, 0x49, 0x27, 0x10, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x79, 0x24, 0x10, 0x41, 0x04, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x01, 0xF2, 0x8A, 0x28, 0xA2, 0x80, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x79, 0x22, 0x04, 0x21, 0x27, 0x80, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x03, 0xD2, 0x48, 0xC0, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x04, 0x92, 0x49, 0xC4, 0x10, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x02, 0x94, 0x10, 0x41, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x38, 0x43, 0x91, 0x38, 0x43, 0x80, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x31, 0x24, 0x9E, 0x49, 0x23, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0xE4, 0x51, 0x28, 0xA6, 0xC0, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x31, 0x02, 0x04, 0x39, 0x23, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x02, 0x95, 0x54, 0xA0, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x00, 0x43, 0x95, 0x54, 0xE1, 0x00, // /* code=237, hex=0xED, ascii="!m" */ + // 0x00, 0xE4, 0x1E, 0x40, 0xE0, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0xC4, 0x92, 0x49, 0x20, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x43, 0x84, 0x00, 0xE0, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x40, 0xC0, 0x8C, 0x40, 0x07, 0x80, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x08, 0xC4, 0x0C, 0x08, 0x07, 0x80, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x00, 0x21, 0x44, 0x10, 0x41, 0x04, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x10, 0x41, 0x04, 0x11, 0x42, 0x00, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x40, 0x1F, 0x00, 0x40, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0xA5, 0x00, 0x29, 0x40, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x31, 0x24, 0x8C, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x00, 0x71, 0x04, 0x51, 0x42, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x50, 0xA2, 0x8A, 0x00, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x60, 0x42, 0x1C, 0x00, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0x07, 0x9E, 0x79, 0xE0, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^ź" */ +}; diff --git a/wled00/src/font/old fonts/console_font_6x8.wbf b/wled00/src/font/old fonts/console_font_6x8.wbf new file mode 100644 index 0000000000000000000000000000000000000000..6d8806e01d7b0dda4f9a2e355eeb87fda6d97597 GIT binary patch literal 582 zcmYLF!DI=<7yR+hbN_}w*CCC!{nF4TzV(}(0EQNFD**Ph zRx6?QI92!Jph?xV6SCZ29vVIpUGS*x+K>-bZ7S%e;HiEndPM%Z^KmHUNSTZ&XuK;j z*<6kYZpfT&UOx4qFOGCJ)6eV{xXMGG=>i=7dC)i%aNe?EWA$^Zvjq9~Sg0Jk?Cq%N zXDC2vzZK}(v&TSqq6^PWMD%oT8Is11dx;tF8)SvH$O&**gGx?{;FTx9?1)upGRb5<${EP9`G!Hf= zeO4Z}v-B$2f0v8*FUG7~9;UUkQfJg^FpK=;JQtX?;fgwM%?W%K3F;?r%sG)*PWG9E i%MUEC!IwLIhxdO)6jVC_wnt_Tf5IP{W7(rY8~-mY$$|g? literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_6x8_showcase.png b/wled00/src/font/old fonts/console_font_6x8_showcase.png new file mode 100644 index 0000000000000000000000000000000000000000..c30a665f68066497bdf93444b69cba8374f8839f GIT binary patch literal 36868 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�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±}SgbOsXbVArTWbZXyxXieHZ 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 literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_7x9.h b/wled00/src/font/old fonts/console_font_7x9.h new file mode 100644 index 0000000000..e26f1b6b3a --- /dev/null +++ b/wled00/src/font/old fonts/console_font_7x9.h @@ -0,0 +1,300 @@ +// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437), +// which could be used with an UTF-8 to CP437 conversion +// font courtesy of https://github.com/idispatch/raster-fonts + +/* + * WBF (WLED Bitmap Font) Packed Fixed-Width Format + * Header Layout (12 Bytes): + * [0] Magic 'W' (0x57) + * [1] Glyph height: 9 + * [2] Fixed/max glyph width: 7 + * [3] Spacing between chars: 1 + * [4] Flags: 0x00 (0x01 = variable width) + * [5] First Char: 32 + * [6] Last Char: 126 + * [7] reserved: 0x00 + * [8-11] Unicode Offset (32-bit little-endian): 0x00000000 + * If variable width flag is set, header is followed by a width table of (Last Char - First Char + 1) bytes. + * Packing: row-by-row, top first bitstream, MSB-first. + */ + +/* + * PACKING EXAMPLE: 4x6 Character '!' + * ------------------------------------- + * VISUAL GRID (4x6): BINARY ROWS + * [Row 1] . # . . (2) 0010 + * [Row 2] . # . . (2) 0010 + * [Row 3] . # . . (2) 0010 + * [Row 4] . . . . (0) 0000 + * [Row 5] . # . . (2) 0010 + * [Row 6] . . . . (0) 0000 + * ------------------------------------- + * CONCATENATED STREAM: + * Rows: 1 & 2 | 3 & 4 | 5 & 6 + * Bits: 00100010 00100000 00100000 + * [Byte 1] [Byte 2] [Byte 3] + * Final HEX for '!' = 0x22, 0x20, 0x20 + * + * at the end of each glyph bitmap, padding bits are added if necessary to fill the last byte + */ + +static const unsigned char console_font_7x9[] PROGMEM = { + 0x57, 0x09, 0x07, 0x01, 0x00, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // Header: Magic, H, W, Spacing, Flags, First, Last, Reserved, UnicodeOffset + + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=0, hex=0x00, ascii="^@" */ + // 0x38, 0x8A, 0xAD, 0x58, 0x35, 0x65, 0x3C, 0x00, // /* code=1, hex=0x01, ascii="^A" */ + // 0x38, 0xFB, 0x5E, 0xBF, 0xF7, 0x71, 0xBE, 0x00, // /* code=2, hex=0x02, ascii="^B" */ + // 0x00, 0xDB, 0xFF, 0xFF, 0xEF, 0x8E, 0x08, 0x00, // /* code=3, hex=0x03, ascii="^C" */ + // 0x00, 0x20, 0xE3, 0xEF, 0xEF, 0x8E, 0x08, 0x00, // /* code=4, hex=0x04, ascii="^D" */ + // 0x38, 0x70, 0x46, 0xBF, 0xFA, 0xC4, 0x3E, 0x00, // /* code=5, hex=0x05, ascii="^E" */ + // 0x10, 0x71, 0xF7, 0xFF, 0xEA, 0x84, 0x1C, 0x00, // /* code=6, hex=0x06, ascii="^F" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=7, hex=0x07, ascii="^G" */ + // 0xFF, 0xFF, 0x9E, 0x1C, 0x3C, 0xFF, 0xFF, 0xFE, // /* code=8, hex=0x08, ascii="^H" */ + // 0x00, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x00, 0x00, // /* code=9, hex=0x09, ascii="^I" */ + // 0xFF, 0xCF, 0x0C, 0xC9, 0x98, 0x79, 0xFF, 0xFE, // /* code=10, hex=0x0A, ascii="^J" */ + // 0x0E, 0x0C, 0x28, 0xC3, 0xCC, 0xD9, 0x9E, 0x00, // /* code=11, hex=0x0B, ascii="^K" */ + // 0x3C, 0xCD, 0x99, 0xE1, 0x87, 0x86, 0x0C, 0x00, // /* code=12, hex=0x0C, ascii="^L" */ + // 0x00, 0x70, 0xB1, 0x02, 0x04, 0x18, 0x30, 0x00, // /* code=13, hex=0x0D, ascii="^M" */ + // 0x00, 0x78, 0x91, 0xE2, 0x44, 0x9B, 0x36, 0x00, // /* code=14, hex=0x0E, ascii="^N" */ + // 0x92, 0xA8, 0xE1, 0x4E, 0xE7, 0x15, 0x49, 0x00, // /* code=15, hex=0x0F, ascii="^O" */ + // 0x00, 0x40, 0xC1, 0xC3, 0xC7, 0x0C, 0x10, 0x00, // /* code=16, hex=0x10, ascii="^P" */ + // 0x00, 0x08, 0x30, 0xE3, 0xC3, 0x83, 0x02, 0x00, // /* code=17, hex=0x11, ascii="^Q" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x00, // /* code=18, hex=0x12, ascii="^R" */ + // 0x6C, 0xD9, 0xB3, 0x66, 0xC0, 0x1B, 0x36, 0x00, // /* code=19, hex=0x13, ascii="^S" */ + // 0x00, 0x79, 0x52, 0xA3, 0xC2, 0x85, 0x0A, 0x00, // /* code=20, hex=0x14, ascii="^T" */ + // 0x3C, 0xCD, 0x81, 0xE6, 0x6C, 0xCF, 0x03, 0x66, // /* code=21, hex=0x15, ascii="^U" */ + // 0x00, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0x00, 0x00, // /* code=22, hex=0x16, ascii="^V" */ + // 0x10, 0x71, 0xF0, 0x81, 0x0F, 0x8E, 0x08, 0x7C, // /* code=23, hex=0x17, ascii="^W" */ + // 0x00, 0x30, 0xF2, 0xD1, 0x83, 0x06, 0x0C, 0x00, // /* code=24, hex=0x18, ascii="^X" */ + // 0x00, 0x30, 0x60, 0xC1, 0x8B, 0x4F, 0x0C, 0x00, // /* code=25, hex=0x19, ascii="^Y" */ + // 0x00, 0x00, 0x60, 0x67, 0xE1, 0x86, 0x00, 0x00, // /* code=26, hex=0x1A, ascii="^Z" */ + // 0x00, 0x00, 0x61, 0x87, 0xE6, 0x06, 0x00, 0x00, // /* code=27, hex=0x1B, ascii="^[" */ + // 0x00, 0x00, 0x00, 0x06, 0x0C, 0x1F, 0x00, 0x00, // /* code=28, hex=0x1C, ascii="^\" */ + // 0x00, 0x00, 0x93, 0x3F, 0xEC, 0xC9, 0x00, 0x00, // /* code=29, hex=0x1D, ascii="^]" */ + // 0x00, 0x00, 0x00, 0x83, 0x8F, 0xBF, 0x80, 0x00, // /* code=30, hex=0x1E, ascii="^^" */ + // 0x00, 0x00, 0x07, 0xF7, 0xC7, 0x04, 0x00, 0x00, // /* code=31, hex=0x1F, ascii="^_" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* code=32, hex=0x20, ascii=" " */ + 0x00, 0x30, 0x60, 0xC1, 0x80, 0x06, 0x0C, 0x00, /* code=33, hex=0x21, ascii="!" */ + 0x00, 0xD9, 0xB2, 0x20, 0x00, 0x00, 0x00, 0x00, /* code=34, hex=0x22, ascii=""" */ + 0x00, 0xD9, 0xB7, 0xF6, 0xDF, 0xDB, 0x36, 0x00, /* code=35, hex=0x23, ascii="#" */ + 0x08, 0x30, 0xF3, 0x03, 0xC0, 0xDF, 0x0C, 0x10, /* code=36, hex=0x24, ascii="$" */ + 0x70, 0xA5, 0xD8, 0x61, 0x87, 0xDA, 0x87, 0x00, /* code=37, hex=0x25, ascii="%" */ + 0x38, 0xD9, 0xB1, 0xC6, 0xED, 0x9B, 0x1F, 0x00, /* code=38, hex=0x26, ascii="&" */ + 0x00, 0x30, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, /* code=39, hex=0x27, ascii="'" */ + 0x00, 0x18, 0x61, 0x83, 0x06, 0x06, 0x06, 0x00, /* code=40, hex=0x28, ascii="(" */ + 0x00, 0x60, 0x60, 0x60, 0xC1, 0x86, 0x18, 0x00, /* code=41, hex=0x29, ascii=")" */ + 0x00, 0x89, 0xB1, 0xCF, 0xE7, 0x1B, 0x22, 0x00, /* code=42, hex=0x2A, ascii="*" */ + 0x00, 0x00, 0x60, 0xC7, 0xEF, 0xC6, 0x0C, 0x00, /* code=43, hex=0x2B, ascii="+" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x60, /* code=44, hex=0x2C, ascii="," */ + 0x00, 0x00, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x00, /* code=45, hex=0x2D, ascii="-" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x00, /* code=46, hex=0x2E, ascii="." */ + 0x00, 0x18, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x00, /* code=47, hex=0x2F, ascii="/" */ + 0x00, 0x79, 0x9B, 0x77, 0x6C, 0xD9, 0x9E, 0x00, /* code=48, hex=0x30, ascii="0" */ + 0x00, 0x31, 0xE0, 0xC1, 0x83, 0x06, 0x3F, 0x00, /* code=49, hex=0x31, ascii="1" */ + 0x00, 0x79, 0x9A, 0x31, 0xC6, 0x19, 0xBF, 0x00, /* code=50, hex=0x32, ascii="2" */ + 0x00, 0x79, 0x98, 0x31, 0xC0, 0xD9, 0x9E, 0x00, /* code=51, hex=0x33, ascii="3" */ + 0x00, 0x18, 0x71, 0xE6, 0xCF, 0xC3, 0x0F, 0x00, /* code=52, hex=0x34, ascii="4" */ + 0x00, 0xFD, 0x9B, 0x07, 0xC0, 0xD9, 0x9E, 0x00, /* code=53, hex=0x35, ascii="5" */ + 0x00, 0x38, 0xC3, 0x07, 0xCC, 0xD9, 0x9E, 0x00, /* code=54, hex=0x36, ascii="6" */ + 0x00, 0xFD, 0x98, 0x30, 0xC3, 0x06, 0x0C, 0x00, /* code=55, hex=0x37, ascii="7" */ + 0x00, 0x79, 0x9B, 0x33, 0xCC, 0xD9, 0x9E, 0x00, /* code=56, hex=0x38, ascii="8" */ + 0x00, 0x79, 0x9B, 0x33, 0xE0, 0xC3, 0x1C, 0x00, /* code=57, hex=0x39, ascii="9" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x00, /* code=58, hex=0x3A, ascii=":" */ + 0x00, 0x00, 0xC1, 0x80, 0x00, 0x0C, 0x18, 0x60, /* code=59, hex=0x3B, ascii=";" */ + 0x00, 0x00, 0x61, 0x86, 0x06, 0x06, 0x00, 0x00, /* code=60, hex=0x3C, ascii="<" */ + 0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, /* code=61, hex=0x3D, ascii="=" */ + 0x00, 0x00, 0xC0, 0xC0, 0xC3, 0x0C, 0x00, 0x00, /* code=62, hex=0x3E, ascii=">" */ + 0x00, 0x79, 0x98, 0x30, 0xC3, 0x00, 0x0C, 0x00, /* code=63, hex=0x3F, ascii="?" */ + 0x00, 0x79, 0x8B, 0x76, 0xAD, 0x98, 0x9E, 0x00, /* code=64, hex=0x40, ascii="@" */ + 0x00, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, /* code=65, hex=0x41, ascii="A" */ + 0x00, 0xF9, 0x9B, 0x37, 0xCC, 0xD9, 0xBE, 0x00, /* code=66, hex=0x42, ascii="B" */ + 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x00, /* code=67, hex=0x43, ascii="C" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6C, 0xD9, 0xBE, 0x00, /* code=68, hex=0x44, ascii="D" */ + 0x00, 0xFD, 0x9B, 0x07, 0x8C, 0x19, 0xBF, 0x00, /* code=69, hex=0x45, ascii="E" */ + 0x00, 0xFD, 0x9B, 0x07, 0xCC, 0x18, 0x30, 0x00, /* code=70, hex=0x46, ascii="F" */ + 0x00, 0x79, 0x9B, 0x06, 0xEC, 0xD9, 0x9F, 0x00, /* code=71, hex=0x47, ascii="G" */ + 0x00, 0xCD, 0x9B, 0x37, 0xEC, 0xD9, 0xB3, 0x00, /* code=72, hex=0x48, ascii="H" */ + 0x00, 0x78, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=73, hex=0x49, ascii="I" */ + 0x00, 0x3C, 0x30, 0x60, 0xCD, 0x9B, 0x1C, 0x00, /* code=74, hex=0x4A, ascii="J" */ + 0x00, 0xCD, 0xB3, 0x67, 0x8D, 0x9B, 0x33, 0x00, /* code=75, hex=0x4B, ascii="K" */ + 0x00, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xBF, 0x00, /* code=76, hex=0x4C, ascii="L" */ + 0x01, 0x8F, 0x1F, 0x7F, 0xFA, 0xF5, 0xEB, 0x00, /* code=77, hex=0x4D, ascii="M" */ + 0x00, 0xCD, 0xDB, 0xB7, 0xED, 0xD9, 0xB3, 0x00, /* code=78, hex=0x4E, ascii="N" */ + 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=79, hex=0x4F, ascii="O" */ + 0x00, 0xF9, 0x9B, 0x36, 0x6F, 0x98, 0x30, 0x00, /* code=80, hex=0x50, ascii="P" */ + 0x00, 0x79, 0x9B, 0x36, 0x6E, 0xDB, 0x9E, 0x06, /* code=81, hex=0x51, ascii="Q" */ + 0x00, 0xF9, 0x9B, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=82, hex=0x52, ascii="R" */ + 0x00, 0x79, 0x9B, 0x03, 0xC0, 0xD9, 0x9E, 0x00, /* code=83, hex=0x53, ascii="S" */ + 0x00, 0xFD, 0x68, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=84, hex=0x54, ascii="T" */ + 0x00, 0xCD, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, /* code=85, hex=0x55, ascii="U" */ + 0x01, 0x8F, 0x1B, 0x66, 0xC7, 0x0E, 0x08, 0x00, /* code=86, hex=0x56, ascii="V" */ + 0x01, 0x8F, 0x5E, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=87, hex=0x57, ascii="W" */ + 0x00, 0xCD, 0x99, 0xE1, 0x87, 0x99, 0xB3, 0x00, /* code=88, hex=0x58, ascii="X" */ + 0x00, 0xCD, 0x9B, 0x33, 0xC3, 0x06, 0x1E, 0x00, /* code=89, hex=0x59, ascii="Y" */ + 0x00, 0xFD, 0x98, 0x61, 0x86, 0x19, 0xBF, 0x00, /* code=90, hex=0x5A, ascii="Z" */ + 0x00, 0x78, 0xC1, 0x83, 0x06, 0x0C, 0x1E, 0x00, /* code=91, hex=0x5B, ascii="[" */ + 0x00, 0xC1, 0x81, 0x83, 0x03, 0x06, 0x06, 0x00, /* code=92, hex=0x5C, ascii="\" */ + 0x00, 0x78, 0x30, 0x60, 0xC1, 0x83, 0x1E, 0x00, /* code=93, hex=0x5D, ascii="]" */ + 0x00, 0x20, 0xE3, 0x60, 0x00, 0x00, 0x00, 0x00, /* code=94, hex=0x5E, ascii="^" */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, /* code=95, hex=0x5F, ascii="_" */ + 0x00, 0x60, 0xC0, 0xC1, 0x80, 0x00, 0x00, 0x00, /* code=96, hex=0x60, ascii="`" */ + 0x00, 0x00, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, /* code=97, hex=0x61, ascii="a" */ + 0x00, 0xC1, 0x83, 0xE6, 0x6C, 0xD9, 0xAE, 0x00, /* code=98, hex=0x62, ascii="b" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0x19, 0x9E, 0x00, /* code=99, hex=0x63, ascii="c" */ + 0x00, 0x0C, 0x19, 0xF6, 0x6C, 0xD9, 0x9D, 0x00, /* code=100, hex=0x64, ascii="d" */ + 0x00, 0x00, 0x01, 0xE6, 0x6F, 0xD8, 0x1E, 0x00, /* code=101, hex=0x65, ascii="e" */ + 0x00, 0x38, 0xD9, 0x87, 0xC6, 0x0C, 0x3C, 0x00, /* code=102, hex=0x66, ascii="f" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xCF, 0x83, 0x3C, /* code=103, hex=0x67, ascii="g" */ + 0x00, 0xC1, 0x83, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=104, hex=0x68, ascii="h" */ + 0x18, 0x30, 0x00, 0xC3, 0x83, 0x06, 0x1E, 0x00, /* code=105, hex=0x69, ascii="i" */ + 0x0C, 0x18, 0x00, 0x63, 0xC1, 0x93, 0x36, 0x38, /* code=106, hex=0x6A, ascii="j" */ + 0x00, 0xC1, 0x83, 0x36, 0xCF, 0x1B, 0x33, 0x00, /* code=107, hex=0x6B, ascii="k" */ + 0x00, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x1E, 0x00, /* code=108, hex=0x6C, ascii="l" */ + 0x00, 0x00, 0x03, 0x6F, 0xFA, 0xF5, 0xEB, 0x00, /* code=109, hex=0x6D, ascii="m" */ + 0x00, 0x00, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, /* code=110, hex=0x6E, ascii="n" */ + 0x00, 0x00, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, /* code=111, hex=0x6F, ascii="o" */ + 0x00, 0x00, 0x03, 0xE6, 0x6C, 0xDD, 0xB6, 0x60, /* code=112, hex=0x70, ascii="p" */ + 0x00, 0x00, 0x01, 0xD6, 0x6C, 0xDB, 0x9B, 0x06, /* code=113, hex=0x71, ascii="q" */ + 0x00, 0x00, 0x01, 0x37, 0xE6, 0x0C, 0x3C, 0x00, /* code=114, hex=0x72, ascii="r" */ + 0x00, 0x00, 0x01, 0xE6, 0x07, 0x81, 0x9E, 0x00, /* code=115, hex=0x73, ascii="s" */ + 0x00, 0x20, 0xC7, 0xE3, 0x06, 0x0D, 0x8E, 0x00, /* code=116, hex=0x74, ascii="t" */ + 0x00, 0x00, 0x03, 0x36, 0x6C, 0xDB, 0x9B, 0x00, /* code=117, hex=0x75, ascii="u" */ + 0x00, 0x00, 0x06, 0x3C, 0x6D, 0x8E, 0x08, 0x00, /* code=118, hex=0x76, ascii="v" */ + 0x00, 0x00, 0x06, 0xBD, 0x6F, 0x9B, 0x22, 0x00, /* code=119, hex=0x77, ascii="w" */ + 0x00, 0x00, 0x06, 0x36, 0xC7, 0x1B, 0x63, 0x00, /* code=120, hex=0x78, ascii="x" */ + 0x00, 0x00, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, /* code=121, hex=0x79, ascii="y" */ + 0x00, 0x00, 0x03, 0xF0, 0x63, 0x0C, 0x3F, 0x00, /* code=122, hex=0x7A, ascii="z" */ + 0x00, 0x38, 0xC1, 0x86, 0x06, 0x0C, 0x0E, 0x00, /* code=123, hex=0x7B, ascii="{" */ + 0x18, 0x30, 0x60, 0xC0, 0x03, 0x06, 0x0C, 0x00, /* code=124, hex=0x7C, ascii="|" */ + 0x00, 0xE0, 0x60, 0xC0, 0xC3, 0x06, 0x38, 0x00, /* code=125, hex=0x7D, ascii="}" */ + 0x00, 0x20, 0xEB, 0x70, 0x40, 0x00, 0x00, 0x00, /* code=126, hex=0x7E, ascii="~" */ + // 0x00, 0x00, 0x20, 0xE3, 0x6C, 0x5F, 0x80, 0x00, // /* code=127, hex=0x7F, ascii="^?" */ + // 0x00, 0x79, 0x9B, 0x06, 0x0C, 0x19, 0x9E, 0x78, // /* code=128, hex=0x80, ascii="!^@" */ + // 0x66, 0xCC, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=129, hex=0x81, ascii="!^A" */ + // 0x0C, 0x30, 0x01, 0xF6, 0x2F, 0xD8, 0x1F, 0x00, // /* code=130, hex=0x82, ascii="!^B" */ + // 0x1C, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=131, hex=0x83, ascii="!^C" */ + // 0x36, 0x6C, 0x01, 0xE0, 0x67, 0xD9, 0x9F, 0x00, // /* code=132, hex=0x84, ascii="!^D" */ + // 0x18, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=133, hex=0x85, ascii="!^E" */ + // 0x1C, 0x28, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=134, hex=0x86, ascii="!^F" */ + // 0x00, 0x00, 0x00, 0xE3, 0x6C, 0x0D, 0x8E, 0x78, // /* code=135, hex=0x87, ascii="!^G" */ + // 0x08, 0x38, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=136, hex=0x88, ascii="!^H" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=137, hex=0x89, ascii="!^I" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6F, 0xD8, 0x1F, 0x00, // /* code=138, hex=0x8A, ascii="!^J" */ + // 0x66, 0xCC, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=139, hex=0x8B, ascii="!^K" */ + // 0x10, 0x70, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=140, hex=0x8C, ascii="!^L" */ + // 0x30, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=141, hex=0x8D, ascii="!^M" */ + // 0xC6, 0x20, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=142, hex=0x8E, ascii="!^N" */ + // 0x38, 0x50, 0xE1, 0x46, 0xCF, 0xB1, 0xE3, 0x00, // /* code=143, hex=0x8F, ascii="!^O" */ + // 0x1C, 0x61, 0xFB, 0x07, 0xCC, 0x18, 0x3F, 0x00, // /* code=144, hex=0x90, ascii="!^P" */ + // 0x00, 0x00, 0x03, 0xE1, 0xAF, 0xF6, 0x3F, 0x00, // /* code=145, hex=0x91, ascii="!^Q" */ + // 0x00, 0x3C, 0xE2, 0xC5, 0xFF, 0x36, 0x6F, 0x00, // /* code=146, hex=0x92, ascii="!^R" */ + // 0x10, 0x70, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=147, hex=0x93, ascii="!^S" */ + // 0x66, 0xCC, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=148, hex=0x94, ascii="!^T" */ + // 0x18, 0x18, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=149, hex=0x95, ascii="!^U" */ + // 0x08, 0x38, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=150, hex=0x96, ascii="!^V" */ + // 0x18, 0x18, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=151, hex=0x97, ascii="!^W" */ + // 0x66, 0xCC, 0x03, 0x36, 0x66, 0xC7, 0x36, 0x38, // /* code=152, hex=0x98, ascii="!^X" */ + // 0x66, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=153, hex=0x99, ascii="!^Y" */ + // 0x66, 0x01, 0x9B, 0x36, 0x6C, 0xD9, 0x9E, 0x00, // /* code=154, hex=0x9A, ascii="!^Z" */ + // 0x08, 0x10, 0xF3, 0x06, 0x07, 0x84, 0x08, 0x00, // /* code=155, hex=0x9B, ascii="!^[" */ + // 0x1C, 0x6C, 0xC1, 0x87, 0xC6, 0x0F, 0x33, 0x00, // /* code=156, hex=0x9C, ascii="!^\" */ + // 0x66, 0xCC, 0xF0, 0xC7, 0xE3, 0x1F, 0x8C, 0x00, // /* code=157, hex=0x9D, ascii="!^]" */ + // 0xE1, 0xA3, 0x47, 0xAC, 0xDB, 0xF3, 0x03, 0x00, // /* code=158, hex=0x9E, ascii="!^^" */ + // 0x0E, 0x30, 0x60, 0xC7, 0xE3, 0x06, 0x0C, 0x70, // /* code=159, hex=0x9F, ascii="!^_" */ + // 0x06, 0x18, 0x01, 0xE0, 0x67, 0xD9, 0x9D, 0x00, // /* code=160, hex=0xA0, ascii="! " */ + // 0x0C, 0x30, 0x01, 0xC1, 0x83, 0x06, 0x1E, 0x00, // /* code=161, hex=0xA1, ascii="!!" */ + // 0x0C, 0x30, 0x01, 0xE6, 0x6C, 0xD9, 0x9E, 0x00, // /* code=162, hex=0xA2, ascii="!"" */ + // 0x0C, 0x30, 0x03, 0x36, 0x6C, 0xD9, 0x9D, 0x00, // /* code=163, hex=0xA3, ascii="!#" */ + // 0x77, 0xB8, 0x03, 0x67, 0x6C, 0xD9, 0xB3, 0x00, // /* code=164, hex=0xA4, ascii="!$" */ + // 0x77, 0xB8, 0x03, 0x37, 0x6F, 0xDB, 0xB3, 0x00, // /* code=165, hex=0xA5, ascii="!%" */ + // 0x38, 0x18, 0xF3, 0x63, 0x40, 0x1F, 0x00, 0x00, // /* code=166, hex=0xA6, ascii="!&" */ + // 0x3C, 0xCD, 0x99, 0xE0, 0x0F, 0xC0, 0x00, 0x00, // /* code=167, hex=0xA7, ascii="!'" */ + // 0x00, 0x30, 0x00, 0xC3, 0x0C, 0x19, 0x9E, 0x00, // /* code=168, hex=0xA8, ascii="!(" */ + // 0x00, 0x00, 0x01, 0xE3, 0xC6, 0x0C, 0x00, 0x00, // /* code=169, hex=0xA9, ascii="!)" */ + // 0x00, 0x00, 0x03, 0xE7, 0xC1, 0x83, 0x00, 0x00, // /* code=170, hex=0xAA, ascii="!*" */ + // 0x60, 0xC1, 0x83, 0x71, 0xA0, 0x86, 0x0F, 0x00, // /* code=171, hex=0xAB, ascii="!+" */ + // 0x60, 0xC1, 0x83, 0x67, 0xC5, 0x9F, 0x06, 0x00, // /* code=172, hex=0xAC, ascii="!," */ + // 0x00, 0x30, 0x00, 0xC1, 0x87, 0x8F, 0x0C, 0x00, // /* code=173, hex=0xAD, ascii="!-" */ + // 0x00, 0x00, 0xCB, 0x3C, 0xCC, 0xCC, 0x80, 0x00, // /* code=174, hex=0xAE, ascii="!." */ + // 0x00, 0x03, 0x33, 0x33, 0x2C, 0xF3, 0x00, 0x00, // /* code=175, hex=0xAF, ascii="!/" */ + // 0x54, 0x02, 0xA8, 0x05, 0x40, 0x2A, 0x80, 0x54, // /* code=176, hex=0xB0, ascii="!0" */ + // 0x92, 0x90, 0x94, 0x94, 0x84, 0xA4, 0xA4, 0x24, // /* code=177, hex=0xB1, ascii="!1" */ + // 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // /* code=178, hex=0xB2, ascii="!2" */ + // 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, // /* code=179, hex=0xB3, ascii="!3" */ + // 0x10, 0x20, 0x40, 0x8F, 0x02, 0x04, 0x08, 0x10, // /* code=180, hex=0xB4, ascii="!4" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=181, hex=0xB5, ascii="!5" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=182, hex=0xB6, ascii="!6" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=183, hex=0xB7, ascii="!7" */ + // 0x00, 0x00, 0x07, 0x81, 0x1E, 0x04, 0x08, 0x10, // /* code=184, hex=0xB8, ascii="!8" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9D, 0x0A, 0x14, 0x28, // /* code=185, hex=0xB9, ascii="!9" */ + // 0x28, 0x50, 0xA1, 0x42, 0x85, 0x0A, 0x14, 0x28, // /* code=186, hex=0xBA, ascii="!:" */ + // 0x00, 0x00, 0x07, 0xC0, 0x9D, 0x0A, 0x14, 0x28, // /* code=187, hex=0xBB, ascii="!;" */ + // 0x28, 0x50, 0xA7, 0x40, 0x9F, 0x00, 0x00, 0x00, // /* code=188, hex=0xBC, ascii="!<" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=189, hex=0xBD, ascii="!=" */ + // 0x10, 0x20, 0x47, 0x81, 0x1E, 0x00, 0x00, 0x00, // /* code=190, hex=0xBE, ascii="!>" */ + // 0x00, 0x00, 0x00, 0x0F, 0x02, 0x04, 0x08, 0x10, // /* code=191, hex=0xBF, ascii="!?" */ + // 0x10, 0x20, 0x40, 0x81, 0xE0, 0x00, 0x00, 0x00, // /* code=192, hex=0xC0, ascii="!@" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE0, 0x00, 0x00, 0x00, // /* code=193, hex=0xC1, ascii="!A" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x04, 0x08, 0x10, // /* code=194, hex=0xC2, ascii="!B" */ + // 0x10, 0x20, 0x40, 0x81, 0xE2, 0x04, 0x08, 0x10, // /* code=195, hex=0xC3, ascii="!C" */ + // 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, // /* code=196, hex=0xC4, ascii="!D" */ + // 0x10, 0x20, 0x40, 0x8F, 0xE2, 0x04, 0x08, 0x10, // /* code=197, hex=0xC5, ascii="!E" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=198, hex=0xC6, ascii="!F" */ + // 0x28, 0x50, 0xA1, 0x42, 0xE5, 0x0A, 0x14, 0x28, // /* code=199, hex=0xC7, ascii="!G" */ + // 0x28, 0x50, 0xA1, 0x72, 0x07, 0xC0, 0x00, 0x00, // /* code=200, hex=0xC8, ascii="!H" */ + // 0x00, 0x00, 0x01, 0xF2, 0x05, 0xCA, 0x14, 0x28, // /* code=201, hex=0xC9, ascii="!I" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1F, 0xC0, 0x00, 0x00, // /* code=202, hex=0xCA, ascii="!J" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1D, 0xCA, 0x14, 0x28, // /* code=203, hex=0xCB, ascii="!K" */ + // 0x28, 0x50, 0xA1, 0x72, 0x05, 0xCA, 0x14, 0x28, // /* code=204, hex=0xCC, ascii="!L" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=205, hex=0xCD, ascii="!M" */ + // 0x28, 0x50, 0xA7, 0x70, 0x1D, 0xCA, 0x14, 0x28, // /* code=206, hex=0xCE, ascii="!N" */ + // 0x10, 0x20, 0x47, 0xF0, 0x1F, 0xC0, 0x00, 0x00, // /* code=207, hex=0xCF, ascii="!O" */ + // 0x28, 0x50, 0xA1, 0x4F, 0x80, 0x00, 0x00, 0x00, // /* code=208, hex=0xD0, ascii="!P" */ + // 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC4, 0x08, 0x10, // /* code=209, hex=0xD1, ascii="!Q" */ + // 0x00, 0x00, 0x00, 0x0F, 0x85, 0x0A, 0x14, 0x28, // /* code=210, hex=0xD2, ascii="!R" */ + // 0x28, 0x50, 0xA1, 0x43, 0xE0, 0x00, 0x00, 0x00, // /* code=211, hex=0xD3, ascii="!S" */ + // 0x10, 0x20, 0x40, 0xF1, 0x03, 0xC0, 0x00, 0x00, // /* code=212, hex=0xD4, ascii="!T" */ + // 0x00, 0x00, 0x00, 0xF1, 0x03, 0xC4, 0x08, 0x10, // /* code=213, hex=0xD5, ascii="!U" */ + // 0x00, 0x00, 0x00, 0x03, 0xE5, 0x0A, 0x14, 0x28, // /* code=214, hex=0xD6, ascii="!V" */ + // 0x28, 0x50, 0xA1, 0x4E, 0x85, 0x0A, 0x14, 0x28, // /* code=215, hex=0xD7, ascii="!W" */ + // 0x10, 0x20, 0x47, 0xF1, 0x1F, 0xC4, 0x08, 0x10, // /* code=216, hex=0xD8, ascii="!X" */ + // 0x10, 0x20, 0x40, 0x8F, 0x00, 0x00, 0x00, 0x00, // /* code=217, hex=0xD9, ascii="!Y" */ + // 0x00, 0x00, 0x00, 0x01, 0xE2, 0x04, 0x08, 0x10, // /* code=218, hex=0xDA, ascii="!Z" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, // /* code=219, hex=0xDB, ascii="![" */ + // 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, // /* code=220, hex=0xDC, ascii="!\" */ + // 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF0, // /* code=221, hex=0xDD, ascii="!]" */ + // 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, // /* code=222, hex=0xDE, ascii="!^" */ + // 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, // /* code=223, hex=0xDF, ascii="!_" */ + // 0x00, 0x69, 0xA3, 0x46, 0x86, 0x80, 0x00, 0x00, // /* code=224, hex=0xE0, ascii="!`" */ + // 0x7C, 0xCD, 0x9B, 0x66, 0x6C, 0x59, 0xB6, 0x08, // /* code=225, hex=0xE1, ascii="!a" */ + // 0x00, 0xFD, 0x8B, 0x06, 0x0C, 0x18, 0x30, 0x00, // /* code=226, hex=0xE2, ascii="!b" */ + // 0x00, 0x01, 0xB7, 0xFF, 0x6C, 0xDB, 0x36, 0x00, // /* code=227, hex=0xE3, ascii="!c" */ + // 0x01, 0xFF, 0x1B, 0x03, 0x86, 0x19, 0xFF, 0x00, // /* code=228, hex=0xE4, ascii="!d" */ + // 0x00, 0x00, 0x01, 0xF6, 0xCD, 0x9B, 0x1C, 0x00, // /* code=229, hex=0xE5, ascii="!e" */ + // 0x00, 0x00, 0x01, 0xB3, 0x66, 0xCF, 0xB1, 0x40, // /* code=230, hex=0xE6, ascii="!f" */ + // 0x00, 0x01, 0xEB, 0x50, 0xE1, 0x86, 0x0C, 0x00, // /* code=231, hex=0xE7, ascii="!g" */ + // 0x3C, 0x30, 0xF3, 0x36, 0x67, 0x86, 0x1E, 0x00, // /* code=232, hex=0xE8, ascii="!h" */ + // 0x00, 0x79, 0x9B, 0x37, 0xEC, 0xD9, 0x9E, 0x00, // /* code=233, hex=0xE9, ascii="!i" */ + // 0x00, 0x79, 0x9B, 0x36, 0x6C, 0xC9, 0x33, 0x00, // /* code=234, hex=0xEA, ascii="!j" */ + // 0x00, 0x79, 0x81, 0x81, 0x87, 0x99, 0x9E, 0x00, // /* code=235, hex=0xEB, ascii="!k" */ + // 0x00, 0x00, 0x01, 0xA4, 0xA9, 0x52, 0x9A, 0x00, // /* code=236, hex=0xEC, ascii="!l" */ + // 0x04, 0x79, 0x9B, 0x77, 0x6C, 0xCF, 0x08, 0x20, // /* code=237, hex=0xED, ascii="!m" */ + // 0x1E, 0x61, 0x83, 0x07, 0xEC, 0x0C, 0x0F, 0x00, // /* code=238, hex=0xEE, ascii="!n" */ + // 0x00, 0x00, 0xF3, 0x36, 0x6C, 0xD9, 0xB3, 0x00, // /* code=239, hex=0xEF, ascii="!o" */ + // 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, // /* code=240, hex=0xF0, ascii="!p" */ + // 0x00, 0x30, 0x63, 0xF1, 0x83, 0x00, 0x3F, 0x00, // /* code=241, hex=0xF1, ascii="!q" */ + // 0x00, 0x60, 0x60, 0x61, 0x86, 0x00, 0x1E, 0x00, // /* code=242, hex=0xF2, ascii="!r" */ + // 0x00, 0x18, 0x61, 0x81, 0x81, 0x80, 0x1E, 0x00, // /* code=243, hex=0xF3, ascii="!s" */ + // 0x0C, 0x34, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, // /* code=244, hex=0xF4, ascii="!t" */ + // 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x2C, 0x30, // /* code=245, hex=0xF5, ascii="!u" */ + // 0x00, 0x30, 0x60, 0x07, 0xE0, 0x06, 0x0C, 0x00, // /* code=246, hex=0xF6, ascii="!v" */ + // 0x00, 0x00, 0x6B, 0xB0, 0x03, 0x5D, 0x80, 0x00, // /* code=247, hex=0xF7, ascii="!w" */ + // 0x00, 0x79, 0x9B, 0x33, 0xC0, 0x00, 0x00, 0x00, // /* code=248, hex=0xF8, ascii="!x" */ + // 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x00, 0x00, // /* code=249, hex=0xF9, ascii="!y" */ + // 0x00, 0x00, 0x00, 0xC1, 0x80, 0x00, 0x00, 0x00, // /* code=250, hex=0xFA, ascii="!z" */ + // 0x0E, 0x18, 0x30, 0x60, 0xCD, 0x8F, 0x06, 0x00, // /* code=251, hex=0xFB, ascii="!{" */ + // 0x00, 0xF1, 0xB3, 0x66, 0xCD, 0x80, 0x00, 0x00, // /* code=252, hex=0xFC, ascii="!|" */ + // 0x00, 0x71, 0x30, 0xC3, 0x0F, 0x80, 0x00, 0x00, // /* code=253, hex=0xFD, ascii="!}" */ + // 0x00, 0xF9, 0xF3, 0xE7, 0xC0, 0x00, 0x00, 0x00, // /* code=254, hex=0xFE, ascii="!~" */ + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // /* code=255, hex=0xFF, ascii="!^Ÿ" */ +}; diff --git a/wled00/src/font/old fonts/console_font_7x9.wbf b/wled00/src/font/old fonts/console_font_7x9.wbf new file mode 100644 index 0000000000000000000000000000000000000000..90f9c8bf27b1c2b7cf7f3e2afb794bc746589652 GIT binary patch literal 772 zcmY*X!E4iC6n`b~r9#|1rc_+;FGwk*Jrw83f5Dr4rLcO4c3!jr(T+fhsM}$e%n#?u zqe30HlP)39UK(@tIfwFx#%|)7vg%41jYUdOExjC1X0)S_SJD!mwdP&XkSvrIY%hc@8WL38yEeht?Jrj zsf>JgKJ^5?bG&mr+(Eur)Faxz@Y^2g?9*bz;fAZw1N89&yNHcBNB95Y#$(_CJ{U!5 z)=giN-rP>#6V7e&uT{=%sw3_l;(Rk5jxBa*-jU}mj*n`O#{e_+<6 m+L8Bb6Wj~R&yKc=Izx|XOQ?$n3jHTD9z+bUjg$48*!>q581oqb literal 0 HcmV?d00001 diff --git a/wled00/src/font/old fonts/console_font_7x9_showcase.png b/wled00/src/font/old fonts/console_font_7x9_showcase.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbecb19b1b18947118c666f2a5ffbd754fd16f2 GIT binary patch literal 40789 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

DDayu7y0zn$m61 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 literal 0 HcmV?d00001 From da492b1d8e98d268d01e6591631e0e4e1db0bea9 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Tue, 24 Feb 2026 22:00:18 +0100 Subject: [PATCH 17/17] add font file helper, also cache flash fonts (reduces complexity) --- wled00/FX.cpp | 3 +- wled00/FX.h | 68 ++--------- wled00/FX_2Dfcn.cpp | 289 ++++++++++++++++++++++---------------------- 3 files changed, 152 insertions(+), 208 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 33e3f2c482..5bbe1b71fd 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6393,8 +6393,7 @@ void mode_2Dscrollingtext(void) { const bool isRotated = (rotate == 1 || rotate == -1); // +/- 90° rotated, swap width and height for calculations // Load the font - fontManager.loadFont(fontNum, useCustomFont); // TODO: simplify this code, prepare is not really needed as a separate function. - fontManager.prepare(text); + fontManager.loadFont(fontNum, text, useCustomFont); // Get font dimensions uint8_t glyphHeight = fontManager.getFontHeight(); diff --git a/wled00/FX.h b/wled00/FX.h index b73bfc0946..44bd9f30c4 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1088,44 +1088,6 @@ extern const char JSON_palette_names[]; * - Bitmap data: bit-packed glyphs - top left to bottom right, row by row, MSB first, see src/font files for example */ -// Abstract byte reader for unified flash/RAM access -class ByteReader { -public: - virtual uint8_t readByte(size_t offset) const = 0; - inline uint32_t readUInt32LE(size_t offset) const { - return (uint32_t)(readByte(offset)) | - ((uint32_t)(readByte(offset + 1)) << 8) | - ((uint32_t)(readByte(offset + 2)) << 16) | - ((uint32_t)(readByte(offset + 3)) << 24); - } - virtual ~ByteReader() {} -}; - -// PROGMEM reader for flash fonts -class FlashByteReader : public ByteReader { -private: - const uint8_t* _base; -public: - FlashByteReader() : _base(nullptr) {} // default constructor - FlashByteReader(const uint8_t* base) : _base(base) {} - - inline uint8_t readByte(size_t offset) const override { - return _base ? pgm_read_byte_near(_base + offset) : 0; - } -}; - -// RAM reader for cached fonts -class RAMByteReader : public ByteReader { -private: - const uint8_t* _base; -public: - RAMByteReader() : _base(nullptr) {} // default constructor - RAMByteReader(const uint8_t* base) : _base(base) {} - - inline uint8_t readByte(size_t offset) const override { - return _base ? _base[offset] : 0; - } -}; // Glyph entry in RAM cache struct GlyphEntry { @@ -1172,19 +1134,17 @@ class FontManager { _useFlashFont(false), _cacheNumbers(false), _headerValid(false), - _reader(nullptr), _fontBase(nullptr) {} - bool loadFont(uint8_t fontNum, bool useFile); + bool loadFont(uint8_t fontNum, const char* text, bool useFile); void cacheNumbers(bool cache) { _cacheNumbers = cache; } void prepare(const char* text); inline void beginFrame() { if (!_headerValid) { - updateReader(); - if (_reader) { - parseHeader(*_reader, _cachedHeader); - _headerValid = true; + updateFontBase(); + if (_fontBase) { + parseHeader(); } } } @@ -1208,30 +1168,19 @@ class FontManager { // Cached data for performance (non-static, per-instance) bool _headerValid; FontHeader _cachedHeader; - const ByteReader* _reader; const uint8_t* _fontBase; - FlashByteReader _flashReader; - RAMByteReader _ramReader; // Invalidate cached header (call when font changes) inline void invalidateHeader() { _headerValid = false; } - inline void updateReader() { - if (_flashFont) { - _flashReader = FlashByteReader(_flashFont); - _reader = &_flashReader; - _fontBase = _flashFont; - } else if (_segment->data) { + inline void updateFontBase() { + if (_segment->data) { SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; // Font header starts after metadata + registry - const uint8_t* fontData = _segment->data + sizeof(SegmentFontMetadata) + (meta->glyphCount * sizeof(GlyphEntry)); - _ramReader = RAMByteReader(fontData); - _reader = &_ramReader; - _fontBase = fontData; + _fontBase = _segment->data + sizeof(SegmentFontMetadata) + (meta->glyphCount * sizeof(GlyphEntry)); } else { - _reader = nullptr; _fontBase = nullptr; } } @@ -1241,8 +1190,7 @@ class FontManager { return _segment->data ? (SegmentFontMetadata*)_segment->data : nullptr; } - // Unified operations (work identically for flash and RAM) - static bool parseHeader(const ByteReader& reader, FontHeader& hdr); + void parseHeader(); const uint8_t* getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, uint8_t& outHeight); // Glyph index calculation (pure function, inline for speed) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index b45282871b..a270b8b258 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -589,6 +589,12 @@ void Segment::wu_pixel(uint32_t x, uint32_t y, CRGB c) const { //awesome wu #include "src/font/console_font_6x8.h" #include "src/font/console_font_7x9.h" +static void getFontFileName(uint8_t fontNum, char* buffer, size_t bufferSize) { + strcpy_P(buffer, PSTR("/font")); + if (fontNum > 0) snprintf(buffer + 5, bufferSize - 5, "%d", fontNum); + strcat_P(buffer, PSTR(".wbf")); +} + // Pure glyph index calculator (inline for speed) inline int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8_t last, uint32_t firstUnicode) { if (unicode <= LAST_ASCII_CHAR) { @@ -600,18 +606,19 @@ inline int32_t FontManager::getGlyphIndex(uint32_t unicode, uint8_t first, uint8 return -1; } -// Parse header from either flash or RAM (IDENTICAL format) -bool FontManager::parseHeader(const ByteReader& reader, FontHeader& hdr) { - if (reader.readByte(0) != 0x57) return false; // Magic check - hdr.height = reader.readByte(1); - hdr.width = reader.readByte(2); - hdr.spacing = reader.readByte(3); - hdr.flags = reader.readByte(4); - hdr.first = reader.readByte(5); - hdr.last = reader.readByte(6); +void FontManager::parseHeader() { + _cachedHeader.height = _fontBase[1]; + _cachedHeader.width = _fontBase[2]; + _cachedHeader.spacing = _fontBase[3]; + _cachedHeader.flags = _fontBase[4]; + _cachedHeader.first = _fontBase[5]; + _cachedHeader.last = _fontBase[6]; // [7] reserved: 0x00 - hdr.firstUnicode = reader.readUInt32LE(8); - return true; + _cachedHeader.firstUnicode = (uint32_t)(_fontBase[8]) | + ((uint32_t)(_fontBase[9]) << 8) | + ((uint32_t)(_fontBase[10]) << 16) | + ((uint32_t)(_fontBase[11]) << 24); + _headerValid = true; } // Get glyph width @@ -620,15 +627,6 @@ uint8_t FontManager::getGlyphWidth(uint32_t unicode) { int32_t idx = getGlyphIndex(unicode, _cachedHeader.first, _cachedHeader.last, _cachedHeader.firstUnicode); if (idx < 0) return 0; - // For flash fonts, read from width table - if (_useFlashFont) { - if (_cachedHeader.flags & 0x01) { - return _reader->readByte(FONT_HEADER_SIZE + idx); - } else { - return _cachedHeader.width; - } - } - // For cached fonts, look up in registry if (!_segment->data) return 0; SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; @@ -643,50 +641,23 @@ uint8_t FontManager::getGlyphWidth(uint32_t unicode) { return 0; // Not found in cache } -// Get glyph bitmap (uses cached header and reader) +// Get glyph bitmap const uint8_t* FontManager::getGlyphBitmap(uint32_t unicode, uint8_t& outWidth, uint8_t& outHeight) { - if (!_reader || !_fontBase) return nullptr; + if (!_fontBase) return nullptr; int32_t idx = getGlyphIndex(unicode, _cachedHeader.first, _cachedHeader.last, _cachedHeader.firstUnicode); if (idx < 0) return nullptr; - // For flash fonts, calculate offset normally - if (_useFlashFont) { - uint8_t numGlyphs = _cachedHeader.last - _cachedHeader.first + 1; - outHeight = _cachedHeader.height; - size_t offset = FONT_HEADER_SIZE; // Start after header - - if (_cachedHeader.flags & 0x01) { - outWidth = _reader->readByte(FONT_HEADER_SIZE + idx); - offset += numGlyphs; - - for (int32_t i = 0; i < idx; i++) { - uint8_t w = _reader->readByte(FONT_HEADER_SIZE + i); - uint16_t bits = w * _cachedHeader.height; - offset += (bits + 7) / 8; - } - } else { - outWidth = _cachedHeader.width; - uint16_t bitsPerGlyph = _cachedHeader.width * _cachedHeader.height; - uint16_t bytesPerGlyph = (bitsPerGlyph + 7) / 8; - offset += idx * bytesPerGlyph; - } - return _fontBase + offset; - } - - // For cached fonts, use registry lookup if (!_segment->data) return nullptr; SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; GlyphEntry* registry = (GlyphEntry*)(_segment->data + sizeof(SegmentFontMetadata)); - // Find glyph in registry + uint32_t bitmapOffset = 0; for (uint8_t k = 0; k < meta->glyphCount; k++) { if (registry[k].code == idx) { outWidth = registry[k].width; outHeight = registry[k].height; - // Bitmap starts after: metadata + registry + header - const uint8_t* bitmap = _segment->data + sizeof(SegmentFontMetadata) +(meta->glyphCount * sizeof(GlyphEntry)) + FONT_HEADER_SIZE + bitmapOffset; - return bitmap; + return _fontBase + FONT_HEADER_SIZE + bitmapOffset; } // Accumulate offset to next glyph uint16_t bits = registry[k].width * registry[k].height; @@ -701,9 +672,7 @@ void FontManager::scanAvailableFonts() { meta->availableFonts = 0; for (int i = 0; i < MAX_FONTS; i++) { char fileName[FONT_NAME_BUFFER_SIZE]; - strcpy_P(fileName, PSTR("/font")); - if (i > 0) sprintf(fileName + 5, "%d", i); - strcat_P(fileName, PSTR(".wbf")); + getFontFileName(i, fileName, sizeof(fileName)); if (WLED_FS.exists(fileName)) { meta->availableFonts |= (1 << i); } @@ -711,9 +680,8 @@ void FontManager::scanAvailableFonts() { meta->fontsScanned = 1; } -bool FontManager::loadFont(uint8_t fontNum, bool useFile) { +bool FontManager::loadFont(uint8_t fontNum, const char* text, bool useFile) { _fontNum = fontNum; - _useFlashFont = !useFile; switch (_fontNum) { default: case 0: _flashFont = font_TinyPixie2_6px; break; @@ -724,12 +692,7 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { } invalidateHeader(); - if (_useFlashFont) { - updateReader(); - return true; - } - // File font requested - SegmentFontMetadata* meta = getMetadata(); // is null if data is not allocated yet + SegmentFontMetadata* meta = getMetadata(); // Ensure segment data exists if (!meta) { if (!_segment->allocateData(sizeof(SegmentFontMetadata))) { @@ -747,8 +710,9 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { } // Determine which font to actually use (with fallback) uint8_t fontToUse = fontNum; + bool actualUseFlash = !useFile; // Check if requested font is available - if (!(meta->availableFonts & (1 << fontNum))) { + if (useFile && !(meta->availableFonts & (1 << fontNum))) { // Not available - find first available font fontToUse = 0xFF; for (int i = 0; i < MAX_FONTS; i++) { @@ -758,15 +722,17 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { } } if (fontToUse == 0xFF) { - _useFlashFont = true; // no custom fonts available, use flash font - updateReader(); - return true; + fontToUse = fontNum; // no custom fonts available, use flash font + actualUseFlash = true; } } // Store the actual font being used _fontNum = fontToUse; + _useFlashFont = actualUseFlash; + uint8_t cacheID = _fontNum | (_useFlashFont ? 0x80 : 0x00); + // Check if the ACTUAL font to use has changed - if (fontToUse != meta->cachedFontNum) { + if (cacheID != meta->cachedFontNum) { // Font changed - clear cache but preserve scan results uint8_t avail = meta->availableFonts; uint8_t scanned = meta->fontsScanned; @@ -775,10 +741,11 @@ bool FontManager::loadFont(uint8_t fontNum, bool useFile) { } meta = getMetadata(); meta->availableFonts = avail; - meta->cachedFontNum = fontToUse; + meta->cachedFontNum = cacheID; meta->fontsScanned = scanned; meta->glyphCount = 0; } + prepare(text); return true; } @@ -826,9 +793,9 @@ void FontManager::prepare(const char* text) { // Helper to ensure header is valid auto checkHeader = [this]() -> bool { if (!_headerValid) { - updateReader(); - if (_reader && parseHeader(*_reader, _cachedHeader)) { - _headerValid = true; + updateFontBase(); + if (_fontBase) { + parseHeader(); return true; } return false; @@ -836,12 +803,6 @@ void FontManager::prepare(const char* text) { return true; }; - // Flash fonts - just validate header and done - if (_useFlashFont) { - checkHeader(); - return; - } - // Check if cache exists if (!_segment->data) { rebuildCache(text); @@ -849,12 +810,7 @@ void FontManager::prepare(const char* text) { } SegmentFontMetadata* meta = getMetadata(); // If glyphCount is 0, cache is empty - rebuild - if (meta->glyphCount == 0) { - rebuildCache(text); - return; - } - // Validate header from existing cache - if (!checkHeader()) { + if (meta->glyphCount == 0 || !checkHeader()) { rebuildCache(text); return; } @@ -884,7 +840,7 @@ void FontManager::prepare(const char* text) { } void FontManager::rebuildCache(const char* text) { - if (_useFlashFont || !text) return; + if (!text) return; // Preserve metadata SegmentFontMetadata savedMeta = {0, 0xFF, 0, 0}; @@ -892,81 +848,110 @@ void FontManager::rebuildCache(const char* text) { memcpy(&savedMeta, _segment->data, sizeof(SegmentFontMetadata)); } - // Build filename from font number TODO: make file name generation a function - char fileName[FONT_NAME_BUFFER_SIZE]; - strcpy_P(fileName, PSTR("/font")); - if (_fontNum > 0) sprintf(fileName + 5, "%d", _fontNum); - strcat_P(fileName, PSTR(".wbf")); - #ifdef CONFIG_IDF_TARGET_ESP32C3 - while (!BusManager::canAllShow()) yield(); // accessing FS causes glitches due to RMT issue on C3 TODO: remove this when fixed - #endif - File file = WLED_FS.open(fileName, "r"); - - // Fallback logic - try other available fonts - if (!file) { - SegmentFontMetadata* meta = getMetadata(); - if (meta) { - for (int i = 0; i < MAX_FONTS; i++) { - if (i == _fontNum) continue; // Already tried this one - if (meta->availableFonts & (1 << i)) { - strcpy_P(fileName, PSTR("/font")); - if (i > 0) sprintf(fileName + 5, "%d", i); - strcat_P(fileName, PSTR(".wbf")); - file = WLED_FS.open(fileName, "r"); - if (file) { - _fontNum = i; // Update to fallback font - break; + File file; + if (!_useFlashFont) { + // Build filename from font number + char fileName[FONT_NAME_BUFFER_SIZE]; + getFontFileName(_fontNum, fileName, sizeof(fileName)); + + #ifdef CONFIG_IDF_TARGET_ESP32C3 + while (!BusManager::canAllShow()) yield(); // accessing FS causes glitches due to RMT issue on C3 TODO: remove this when fixed + #endif + file = WLED_FS.open(fileName, "r"); + + // Fallback logic - try other available fonts + if (!file) { + SegmentFontMetadata* meta = getMetadata(); + if (meta) { + for (int i = 0; i < MAX_FONTS; i++) { + if (i == _fontNum) continue; // Already tried this one + if (meta->availableFonts & (1 << i)) { + getFontFileName(i, fileName, sizeof(fileName)); + file = WLED_FS.open(fileName, "r"); + if (file) { + _fontNum = i; // Update to fallback font + savedMeta.cachedFontNum = i; + break; + } } } } } + + if (!file) { + _useFlashFont = true; // Fallback straight to flash font + savedMeta.cachedFontNum = _fontNum | 0x80; + } + } + + if (!file && !_flashFont) return; + + // Read header + FontHeader hdr; + if (file) { + if (file.read() != 0x57) { file.close(); return; } + hdr.height = file.read(); + hdr.width = file.read(); + hdr.spacing = file.read(); + hdr.flags = file.read(); + hdr.first = file.read(); + hdr.last = file.read(); + file.read(); // skip byte 7 (reserved) + file.read((uint8_t*)&hdr.firstUnicode, 4); + } else { + if (pgm_read_byte_near(_flashFont) != 0x57) return; + hdr.height = pgm_read_byte_near(_flashFont + 1); + hdr.width = pgm_read_byte_near(_flashFont + 2); + hdr.spacing = pgm_read_byte_near(_flashFont + 3); + hdr.flags = pgm_read_byte_near(_flashFont + 4); + hdr.first = pgm_read_byte_near(_flashFont + 5); + hdr.last = pgm_read_byte_near(_flashFont + 6); + hdr.firstUnicode = (uint32_t)(pgm_read_byte_near(_flashFont + 8)) | + ((uint32_t)(pgm_read_byte_near(_flashFont + 9)) << 8) | + ((uint32_t)(pgm_read_byte_near(_flashFont + 10)) << 16) | + ((uint32_t)(pgm_read_byte_near(_flashFont + 11)) << 24); } - if (!file) return; - - // Read header from file - FontHeader fileHdr; - if (file.read() != 'W') { file.close(); return; } - // TODO: check if this works: file.read((uint8_t*)&fileHdr, 10); // Read remaining 10 bytes of header - fileHdr.height = file.read(); - fileHdr.width = file.read(); - fileHdr.spacing = file.read(); - fileHdr.flags = file.read(); - fileHdr.first = file.read(); - fileHdr.last = file.read(); - file.read(); // skip byte 7 (reserved) - file.read((uint8_t*)&fileHdr.firstUnicode, 4); // Collect needed glyphs uint8_t neededCodes[MAX_CACHED_GLYPHS]; - uint8_t neededCount = collectNeededCodes(text, fileHdr, neededCodes); - if (fileHdr.last < fileHdr.first) { file.close(); return; } // Invalid header - uint8_t numGlyphs = fileHdr.last - fileHdr.first + 1; + uint8_t neededCount = collectNeededCodes(text, hdr, neededCodes); + if (hdr.last < hdr.first) { if (file) file.close(); return; } // Invalid header + uint8_t numGlyphs = hdr.last - hdr.first + 1; uint8_t widthTable[numGlyphs]; // Read width table - if (fileHdr.flags & 0x01) { - if (file.read(widthTable, numGlyphs) != numGlyphs) { file.close(); return; } // width table incomplete + if (hdr.flags & 0x01) { + if (file) { + if (file.read(widthTable, numGlyphs) != numGlyphs) { file.close(); return; } // width table incomplete + } else { + for (uint8_t k = 0; k < numGlyphs; k++) { + widthTable[k] = pgm_read_byte_near(_flashFont + FONT_HEADER_SIZE + k); + } + } } else { for (uint8_t k = 0; k < numGlyphs; k++) { - widthTable[k] = fileHdr.width; + widthTable[k] = hdr.width; } } + // Calculate size: metadata + registry + header + bitmaps - uint32_t fileDataStart = FONT_HEADER_SIZE + ((fileHdr.flags & 0x01) ? numGlyphs : 0); + uint32_t dataStart = FONT_HEADER_SIZE + ((hdr.flags & 0x01) ? numGlyphs : 0); size_t ramFontSize = sizeof(SegmentFontMetadata) + (neededCount * sizeof(GlyphEntry)) + FONT_HEADER_SIZE; // Just the header, no width table needed for (uint8_t k = 0; k < neededCount; k++) { uint8_t code = neededCodes[k]; if (code < numGlyphs) { - uint16_t bits = widthTable[code] * fileHdr.height; + uint16_t bits = widthTable[code] * hdr.height; ramFontSize += (bits + 7) / 8; } } + // Allocate RAM if (!_segment->allocateData(ramFontSize)) { - file.close(); + if (file) file.close(); return; } + // Write metadata SegmentFontMetadata* meta = (SegmentFontMetadata*)_segment->data; meta->availableFonts = savedMeta.availableFonts; @@ -982,39 +967,51 @@ void FontManager::rebuildCache(const char* text) { uint8_t code = neededCodes[k]; registry[k].code = code; registry[k].width = widthTable[code]; - registry[k].height = fileHdr.height; + registry[k].height = hdr.height; } ptr += neededCount * sizeof(GlyphEntry); // Write font header (for compatibility and easy access to spacing/firstUnicode) - file.seek(0); // Go back to start of file - file.read(ptr, FONT_HEADER_SIZE); // could also write it from fileHdr, but this is simpler + if (file) { + file.seek(0); // Go back to start of file + file.read(ptr, FONT_HEADER_SIZE); // could also write it from fileHdr, but this is simpler + } else { + for (int i = 0; i < FONT_HEADER_SIZE; i++) { + ptr[i] = pgm_read_byte_near(_flashFont + i); + } + } ptr += FONT_HEADER_SIZE; // Write bitmap data in registry order (no sorting needed) for (uint8_t k = 0; k < neededCount; k++) { uint8_t code = neededCodes[k]; - uint16_t bits = widthTable[code] * fileHdr.height; + uint16_t bits = widthTable[code] * hdr.height; uint16_t bytes = (bits + 7) / 8; // Calculate file offset - uint32_t offset = fileDataStart; + uint32_t offset = dataStart; for (uint8_t j = 0; j < code; j++) { - uint16_t b = widthTable[j] * fileHdr.height; + uint16_t b = widthTable[j] * hdr.height; offset += (b + 7) / 8; } - // Read from file - file.seek(offset); - file.read(ptr, bytes); + // Read from file or flash + if (file) { + file.seek(offset); + file.read(ptr, bytes); + } else { + for (uint16_t i = 0; i < bytes; i++) { + ptr[i] = pgm_read_byte_near(_flashFont + offset + i); + } + } ptr += bytes; } - file.close(); - memcpy(&_cachedHeader, &fileHdr, sizeof(FontHeader)); - _headerValid = true; // Mark as valid, we just loaded it directly - updateReader(); // Set up reader for cached access + + if (file) file.close(); + invalidateHeader(); // Mark as invalid, so it gets re-parsed from cache next frame + updateFontBase(); // Set up pointer to cached header/bitmaps } void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t color, uint32_t col2, int8_t rotate) { - if (!_reader || !_fontBase) return; + if (!_fontBase) return; uint8_t w, h; const uint8_t* bitmap = getGlyphBitmap(unicode, w, h); if (!bitmap || w == 0) return; @@ -1025,7 +1022,7 @@ void FontManager::drawCharacter(uint32_t unicode, int16_t x, int16_t y, uint32_t for (int col = 0; col < w; col++) { uint16_t bytePos = bitIndex >> 3; uint8_t bitPos = 7 - (bitIndex & 7); - uint8_t byteVal = _reader->readByte((bitmap - _fontBase) + bytePos); // note: could read only if new byte is needed but this is fast enough and simpler + uint8_t byteVal = bitmap[bytePos]; if ((byteVal >> bitPos) & 1) { int x0, y0; switch (rotate) {