diff --git a/font.c b/font.c index ac551cf..c52c73f 100644 --- a/font.c +++ b/font.c @@ -5,23 +5,27 @@ #define FONT_EXTRAS_START (0x7e - 0x20 + 1) -struct utf_glyph5x { - union { +union utf_lookup { const char symbol[4]; /// symbol as uint, but not decoded - just for matching! const uint32_t uint; - }; +}; + +struct utf_glyph5x { + union utf_lookup utf; font5x_bitmap_t graphic; }; struct utf_glyph4x { - union { - const char symbol[4]; - const uint32_t uint; - }; + union utf_lookup utf; font4x_bitmap_t graphic; }; +struct utf_glyph3x { + union utf_lookup utf; + font3x_bitmap_t graphic; +}; + #define F57_NUM_ASCII 95 #define F57_ASCII_START 0x20 #define F57_ASCII_END 0x7e diff --git a/font.h b/font.h index 5457c52..2631414 100644 --- a/font.h +++ b/font.h @@ -19,6 +19,10 @@ typedef struct { uint8_t data[4]; } font4x_bitmap_t; +typedef struct { + uint8_t data[3]; +} font3x_bitmap_t; + /// Get font graphic for a character. /// /// The returned pointer is PROGMEM! @@ -26,4 +30,6 @@ const font5x_bitmap_t *font57_getsym(const struct Utf8Char *ch); const font4x_bitmap_t *font45_getsym(const struct Utf8Char *ch); +const font3x_bitmap_t *font35_getsym(const struct Utf8Char *ch); + #endif //GFX_FONT_H diff --git a/fontedit.c b/fontedit.c new file mode 100644 index 0000000..c8f80b8 --- /dev/null +++ b/fontedit.c @@ -0,0 +1,14 @@ +#include +#include +#include + +void main() { + printf("const char* symbols[] = {\n"); + for(int c = 32; c < 127; c++) { + printf(" // %d \"%c\"\n", c, c); + for(int j=0;j<5;j++){ + printf(" \" \",\n"); + } + } + printf("};\n"); +} diff --git a/fontedit_35.c b/fontedit_35.c new file mode 100644 index 0000000..7e12700 --- /dev/null +++ b/fontedit_35.c @@ -0,0 +1,587 @@ +const char* symbols[] = { + // 32 " " + " ", + " ", + " ", + " ", + " ", + // 33 "!" + " X ", + " X ", + " X ", + " ", + " X ", + // 34 """ + "X X", + "X X", + " ", + " ", + " ", + // 35 "#" + " X ", + "XXX", + " X ", + "XXX", + " X ", + // 36 "$" + " X ", + "XXX", + "XX ", + " XX", + "XXX", + // 37 "%" + "X X", + " X", + " X ", + "X ", + "X x", + // 38 "&" + "xxx", + " x ", + "xx ", + "x x", + "xxx", + // 39 "'" + " x ", + " x ", + " ", + " ", + " ", + // 40 "(" + " x ", + "x ", + "x ", + "x ", + " x ", + // 41 ")" + "x ", + " x ", + " x ", + " x ", + "x ", + // 42 "*" + "x x", + " x ", + "x x", + " ", + " ", + // 43 "+" + " ", + " x ", + "xxx", + " x ", + " ", + // 44 "," + " ", + " ", + " ", + " x ", + "x ", + // 45 "-" + " ", + " ", + "xxx", + " ", + " ", + // 46 "." + " ", + " ", + " ", + "xx ", + "xx ", + // 47 "/" + " x", + " x", + " x ", + "x ", + "x ", + // 48 "0" + "xxx", + "x x", + "x x", + "x x", + "xxx", + // 49 "1" + " x ", + "xx ", + " x ", + " x ", + "xxx", + // 50 "2" + "xxx", + " x", + "xxx", + "x ", + "xxx", + // 51 "3" + "xxx", + " x", + " xx", + " x", + "xxx", + // 52 "4" + "x x", + "x x", + "xxx", + " x", + " x", + // 53 "5" + "xxx", + "x ", + "xxx", + " x", + "xxx", + // 54 "6" + "xxx", + "x ", + "xxx", + "x x", + "xxx", + // 55 "7" + "xxx", + "x x", + " x", + " x", + " x", + // 56 "8" + "xxx", + "x x", + "xxx", + "x x", + "xxx", + // 57 "9" + "xxx", + "x x", + "xxx", + " x", + "xxx", + // 58 ":" + " ", + " x ", + " ", + " x ", + " ", + // 59 ";" + " ", + " x ", + " ", + " x ", + "x ", + // 60 "<" + " x", + " x ", + "x ", + " x ", + " x", + // 61 "=" + " ", + "xxx", + " ", + "xxx", + " ", + // 62 ">" + "x ", + " x ", + " x", + " x ", + "x ", + // 63 "?" + "xxx", + " x", + " xx", + " ", + " x ", + // 64 "@" + "xxx", + "x x", + "x x", + "x ", + " xx", + // 65 "A" + "xxx", + "x x", + "xxx", + "x x", + "x x", + // 66 "B" + "xx ", + "x x", + "xxx", + "x x", + "xxx", + // 67 "C" + "xxx", + "x ", + "x ", + "x ", + "xxx", + // 68 "D" + "xx ", + "x x", + "x x", + "x x", + "xx ", + // 69 "E" + "xxx", + "x ", + "xx ", + "x ", + "xxx", + // 70 "F" + "xxx", + "x ", + "xx ", + "x ", + "x ", + // 71 "G" + "xxx", + "x ", + "x x", + "x x", + "xxx", + // 72 "H" + "x x", + "x x", + "xxx", + "x x", + "x x", + // 73 "I" + "xxx", + " x ", + " x ", + " x ", + "xxx", + // 74 "J" + "xxx", + " x", + " x", + "x x", + "xxx", + // 75 "K" + "x x", + "x x", + "xx ", + "x x", + "x x", + // 76 "L" + "x ", + "x ", + "x ", + "x ", + "xxx", + // 77 "M" + "xxx", + "xxx", + "x x", + "x x", + "x x", + // 78 "N" + "xx ", + "x x", + "x x", + "x x", + "x x", + // 79 "O" + "xxx", + "x x", + "x x", + "x x", + "xxx", + // 80 "P" + "xxx", + "x x", + "xxx", + "x ", + "x ", + // 81 "Q" + "xxx", + "x x", + "x x", + "xxx", + " x", + // 82 "R" + "xxx", + "x x", + "xxx", + "xx ", + "x x", + // 83 "S" + "xxx", + "x ", + "xxx", + " x", + "xxx", + // 84 "T" + "xxx", + " x ", + " x ", + " x ", + " x ", + // 85 "U" + "x x", + "x x", + "x x", + "x x", + "xxx", + // 86 "V" + "x x", + "x x", + "x x", + "x x", + " x ", + // 87 "W" + "x x", + "x x", + "x x", + "xxx", + "xxx", + // 88 "X" + "x x", + "x x", + " x ", + "x x", + "x x", + // 89 "Y" + "x x", + "x x", + "xxx", + " x ", + " x ", + // 90 "Z" + "xxx", + " x", + " x ", + "x ", + "xxx", + // 91 "[" + " xx", + " x ", + " x ", + " x ", + " xx", + // 92 "\" + "x ", + "x ", + " x ", + " x", + " x", + // 93 "]" + "xx ", + " x ", + " x ", + " x ", + "xx ", + // 94 "^" + " x ", + "x x", + " ", + " ", + " ", + // 95 "_" + " ", + " ", + " ", + " ", + "xxx", + // 96 "`" + "x ", + " x ", + " ", + " ", + " ", + // 97 "a" + "xx ", + " x", + "xxx", + "x x", + "xxx", + // 98 "b" + "x ", + "x ", + "xxx", + "x x", + "xxx", + // 99 "c" + " ", + " ", + "xxx", + "x ", + "xxx", + // 100 "d" + " x", + " x", + "xxx", + "x x", + "xxx", + // 101 "e" + "xxx", + "x x", + "xxx", + "x ", + " xx", + // 102 "f" + " xx", + " x ", + "xxx", + " x ", + " x ", + // 103 "g" + "xxx", + "x x", + "xxx", + " x", + "xx ", + // 104 "h" + "x ", + "x ", + "xxx", + "x x", + "x x", + // 105 "i" + " x ", + " ", + "xx ", + " x ", + "xxx", + // 106 "j" + " x", + " ", + " x", + "x x", + "xxx", + // 107 "k" + "x ", + "x ", + "x x", + "xx ", + "x x", + // 108 "l" + "xx ", + " x ", + " x ", + " x ", + "xxx", + // 109 "m" + " ", + " ", + "xxx", + "xxx", + "x x", + // 110 "n" + " ", + " ", + "xx ", + "x x", + "x x", + // 111 "o" + " ", + " ", + "xxx", + "x x", + "xxx", + // 112 "p" + " ", + "xxx", + "x x", + "xxx", + "x ", + // 113 "q" + " ", + "xxx", + "x x", + "xxx", + " x", + // 114 "r" + " ", + " ", + "xxx", + "x ", + "x ", + // 115 "s" + " ", + "xxx", + "xx ", + " x", + "xxx", + // 116 "t" + " x ", + "xxx", + " x ", + " x ", + " xx", + // 117 "u" + " ", + "x z", + "x x", + "x x", + "xxx", + // 118 "v" + " ", + "x x", + "x x", + "x x", + " x ", + // 119 "w" + " ", + " ", + "x x", + "xxx", + "xxx", + // 120 "x" + " ", + " ", + "x x", + " x ", + "x x", + // 121 "y" + " ", + "x x", + "xxx", + " x", + "xxx", + // 122 "z" + " ", + "xxx", + " xx", + "x ", + "xxx", + // 123 "{" + " x", + " x ", + "xx ", + " x ", + " x", + // 124 "|" + " x ", + " x ", + " x ", + " x ", + " x ", + // 125 "}" + "x ", + " x ", + " xx", + " x ", + "x ", + // 126 "~" + " ", + " xx", + "x x", + " ", + " ", + + // Extras + // Extra 0 "°" + "xxx", + "xxx", + "xxx", + "xxx", + "xxx", + // Extra 1 "°" + "xxx", + "x x", + "xxx", + " ", + " ", +}; + diff --git a/fontedit_45.c b/fontedit_45.c new file mode 100644 index 0000000..ef034bd --- /dev/null +++ b/fontedit_45.c @@ -0,0 +1,588 @@ +const char *symbols[] = { + // 32 " " + " ", + " ", + " ", + " ", + " ", + // 33 "!" + " xx ", + " xx ", + " xx ", + " ", + " xx ", + // 34 """ + "x x ", + "x x ", + " ", + " ", + " ", + // 35 "#" + " x x", + "xxxx", + " x x", + "xxxx", + " x x", + // 36 "$" + " xxx", + "x x ", + " xx ", + " x x", + "xxx ", + // 37 "%" + " ", + "x x", + " x ", + " x ", + "x x", + // 38 "&" + "xxx ", + "x x ", + "xxxx", + "x x ", + "xxxx", + // 39 "'" + " x ", + " x ", + " ", + " ", + " ", + // 40 "(" + " x ", + " x ", + " x ", + " x ", + " x ", + // 41 ")" + " x ", + " x ", + " x ", + " x ", + " x ", + // 42 "*" + "x x", + " xx ", + "x x", + " ", + " ", + // 43 "+" + " ", + " x ", + "xxx ", + " x ", + " ", + // 44 "," + " ", + " ", + " ", + " x ", + " x ", + // 45 "-" + " ", + " ", + " ###", + " ", + " ", + // 46 "." + " ", + " ", + " ", + " ## ", + " ## ", + // 47 "/" + " ", + " x", + " x ", + " x ", + "x ", + // 48 "0" + " ## ", + "# #", + "# #", + "# #", + " ## ", + // 49 "1" + " # ", + " ## ", + "# # ", + " # ", + " ###", + // 50 "2" + " ## ", + "# #", + " # ", + " # ", + "####", + // 51 "3" + " ## ", + "# #", + " # ", + "# #", + " ## ", + // 52 "4" + "# ", + "# # ", + "####", + " # ", + " # ", + // 53 "5" + "####", + "# ", + "### ", + " #", + "### ", + // 54 "6" + " ###", + "# ", + "### ", + "# #", + " ## ", + // 55 "7" + "####", + " #", + " # ", + " # ", + "# ", + // 56 "8" + " ## ", + "# #", + " ## ", + "# #", + " ## ", + // 57 "9" + " ## ", + "# #", + " ## ", + " #", + "### ", + // 58 ":" + " ", + " x ", + " ", + " x ", + " ", + // 59 ";" + " ", + " x ", + " ", + " x ", + " x ", + // 60 "<" + " x ", + " x ", + "x ", + " x ", + " x ", + // 61 "=" + " ", + "xxx ", + " ", + "xxx ", + " ", + // 62 ">" + "x ", + " x ", + " x ", + " x ", + "x ", + // 63 "?" + "xxx ", + " x", + " x ", + " ", + " x ", + // 64 "@" + "xxx ", + "x xx", + "x xx", + "x ", + "xxxx", + // 65 "A" + " xx ", + "x x", + "xxxx", + "x x", + "x x", + // 66 "B" + "xxx ", + "x x", + "xxx ", + "x x", + "xxx ", + // 67 "C" + " ## ", + "# #", + "# ", + "# #", + " ## ", + // 68 "D" + "xxx ", + "x x", + "x x", + "x x", + "xxx ", + // 69 "E" + "xxxx", + "x ", + "xxx ", + "x ", + "xxxx", + // 70 "F" + "xxxx", + "x ", + "xxx ", + "x ", + "x ", + // 71 "G" + " xxx", + "x ", + "x xx", + "x x", + " xx ", + // 72 "H" + "x x", + "x x", + "xxxx", + "x x", + "x x", + // 73 "I" + " xxx", + " x ", + " x ", + " x ", + " xxx", + // 74 "J" + "xxxx", + " x", + " x", + "x x", + " xx ", + // 75 "K" + "x x", + "x x ", + "xx ", + "x x ", + "x x", + // 76 "L" + "x ", + "x ", + "x ", + "x ", + "xxxx", + // 77 "M" + "## #", + "# ##", + "# #", + "# #", + "# #", + // 78 "N" + "x x", + "xx x", + "x xx", + "x x", + "x x", + // 79 "O" + " xx ", + "x x", + "x x", + "x x", + " xx ", + // 80 "P" + "### ", + "# #", + "### ", + "# ", + "# ", + // 81 "Q" + " xx ", + "x x", + "x x", + "x xx", + " xxx", + // 82 "R" + "xxx ", + "x x", + "xxx ", + "X x ", + "X x", + // 83 "S" + " xxx", + "x ", + " xx ", + " x", + "xxx ", + // 84 "T" + "xxx ", + " x ", + " x ", + " x ", + " x ", + // 85 "U" + "x x", + "x x", + "x x", + "x x", + " xx ", + // 86 "V" + "x x", + "x x", + "x x", + " x x", + " xx", + // 87 "W" + "x x", + "x x", + "xxxx", + "xxxx", + "x xx", + // 88 "X" + "x x", + "x x", + " xx ", + "x x ", + "x x", + // 89 "Y" + "x x", + "x x", + " xx ", + " x ", + " x ", + // 90 "Z" + "xxxx", + " x", + " xx ", + "x ", + "xxxx", + // 91 "[" + " xx ", + " x ", + " x ", + " x ", + " xx ", + // 92 "\" + " ", + "x ", + " x ", + " x ", + " x", + // 93 "]" + " xx ", + " x ", + " x ", + " x ", + " xx ", + // 94 "^" + " x ", + "x x ", + " ", + " ", + " ", + // 95 "_" + " ", + " ", + " ", + " ", + "xxxx", + // 96 "`" + " x ", + " x ", + " ", + " ", + " ", + // 97 "a" + "xxx ", + " x", + " xxx", + "x x", + "xxxx", + // 98 "b" + "x ", + "x ", + "xxx ", + "x x", + "xxx ", + // 99 "c" + " ", + " xxx", + "x ", + "x ", + " xxx", + // 100 "d" + " x", + " x", + " xxx", + "x x", + " xxx", + // 101 "e" + " xx ", + "x x", + "xxxx", + "x ", + " xxx", + // 102 "f" + " xx", + " x ", + "xxx ", + " x ", + " x ", + // 103 "g" + "xxxx", + "x x", + " xxx", + " x", + "xxx ", + // 104 "h" + "x ", + "x ", + "xxx ", + "x x", + "x x", + // 105 "i" + " x ", + " ", + " xx ", + " x ", + " xxx", + // 106 "j" + " x ", + " ", + " x ", + "x x ", + "xxx ", + // 107 "k" + "x ", + "x x", + "x x ", + "xx ", + "x xx", + // 108 "l" + "xx ", + " x ", + " x ", + " x ", + "xxx ", + // 109 "m" + " ", + "xxxx", + "xxxx", + "x x", + "x x", + // 110 "n" + " ", + "xxx ", + "x x", + "x x", + "x x", + // 111 "o" + " ", + " xx ", + "x x", + "x x", + " xx ", + // 112 "p" + "xxx ", + "x x", + "xxx ", + "x ", + "x ", + // 113 "q" + " xxx", + "x x", + " xxx", + " x", + " x", + // 114 "r" + " ", + "x xx", + "xx x", + "x ", + "x ", + // 115 "s" + " ", + " xxx", + " x ", + " x ", + "xxx ", + // 116 "t" + " x ", + "xxx ", + " x ", + " x ", + " xx", + // 117 "u" + " ", + "x x", + "x x", + "x x", + " xxx", + // 118 "v" + " ", + "x x", + "x x", + " x x", + " x ", + // 119 "w" + " ", + "x x", + "x x", + "xxxx", + "xxxx", + // 120 "x" + " ", + "x x", + " xx ", + " xx ", + "x x", + // 121 "y" + "x x", + "x x", + "xxxx", + " x", + "xxx ", + // 122 "z" + " ", + "xxxx", + " x ", + " x ", + "xxxx", + // 123 "{" + " xx", + " x ", + " xx ", + " x ", + " xx", + // 124 "|" + " x ", + " x ", + " x ", + " x ", + " x ", + // 125 "}" + " xx ", + " x ", + " xx", + " x ", + " xx ", + // 126 "~" + " ", + "x x ", + " x x", + " ", + " ", + + // Extras + + // Extra 0 - unknown symbol + "####", + "# #", + "# #", + "# #", + "####", + // Extra 1 "°" + "xxx ", + "# # ", + "xxx ", + " ", + " ", + +}; diff --git a/fontedit_57.c b/fontedit_57.c new file mode 100644 index 0000000..1b9e7b3 --- /dev/null +++ b/fontedit_57.c @@ -0,0 +1,943 @@ +const char *symbols[] = { + // 32 " " + " ", + " ", + " ", + " ", + " ", + " ", + " ", + // 33 "!" + " # ", + " # ", + " # ", + " # ", + " # ", + " ", + " # ", + // 34 """ + " # # ", + " # # ", + " # # ", + " ", + " ", + " ", + " ", + // 35 "#" + " # # ", + " # # ", + "#####", + " # # ", + "#####", + " # # ", + " # # ", + // 36 "$" + " # ", + " ####", + "# # ", + " ### ", + " # #", + "#### ", + " # ", + // 37 "%" + "## ", + "## #", + " # ", + " # ", + " # ", + "# ##", + " ##", + // 38 "&" + " ## ", + "# # ", + "# # ", + " # ", + "# # #", + "# # ", + " ## #", + // 39 "'" + " ## ", + " # ", + " # ", + " ", + " ", + " ", + " ", + // 40 "(" + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 41 ")" + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 42 "*" + " ", + " # ", + "# # #", + " ### ", + "# # #", + " # ", + " ", + // 43 "+" + " ", + " # ", + " # ", + "#####", + " # ", + " # ", + " ", + // 44 "," + " ", + " ", + " ", + " ", + " ## ", + " # ", + " # ", + // 45 "-" + " ", + " ", + " ", + "#####", + " ", + " ", + " ", + // 46 "." + " ", + " ", + " ", + " ", + " ", + " ## ", + " ## ", + // 47 "/" + " ", + " #", + " # ", + " # ", + " # ", + "# ", + " ", + // 48 "0" + " ### ", + "# #", + "# ##", + "# # #", + "## #", + "# #", + " ### ", + // 49 "1" + " # ", + " ## ", + " # ", + " # ", + " # ", + " # ", + " ### ", + // 50 "2" + " ### ", + "# #", + " #", + " # ", + " # ", + " # ", + "#####", + // 51 "3" + "#####", + " # ", + " # ", + " # ", + " #", + "# #", + " ### ", + // 52 "4" + " # ", + " ## ", + " # # ", + "# # ", + "#####", + " # ", + " # ", + // 53 "5" + "#####", + "# ", + "#### ", + " #", + " #", + "# #", + " ### ", + // 54 "6" + " ## ", + " # ", + "# ", + "#### ", + "# #", + "# #", + " ### ", + // 55 "7" + "#####", + " #", + " # ", + " # ", + " # ", + " # ", + " # ", + // 56 "8" + " ### ", + "# #", + "# #", + " ### ", + "# #", + "# #", + " ### ", + // 57 "9" + " ### ", + "# #", + "# #", + " ####", + " #", + " # ", + " ## ", + // 58 ":" + " ", + " ## ", + " ## ", + " ", + " ## ", + " ## ", + " ", + // 59 ";" + " ", + " ## ", + " ## ", + " ", + " ## ", + " # ", + " # ", + // 60 "<" + " # ", + " # ", + " # ", + "# ", + " # ", + " # ", + " # ", + // 61 "=" + " ", + " ", + "#####", + " ", + "#####", + " ", + " ", + // 62 ">" + " # ", + " # ", + " # ", + " #", + " # ", + " # ", + " # ", + // 63 "?" + " ### ", + "# #", + " #", + " # ", + " # ", + " ", + " # ", + // 64 "@" + " ### ", + "# #", + " #", + " ## #", + "# # #", + "# # #", + " ### ", + // 65 "A" + " ### ", + "# #", + "# #", + "# #", + "#####", + "# #", + "# #", + // 66 "B" + "#### ", + "# #", + "# #", + "#### ", + "# #", + "# #", + "#### ", + // 67 "C" + " ### ", + "# #", + "# ", + "# ", + "# ", + "# #", + " ### ", + // 68 "D" + "### ", + "# # ", + "# #", + "# #", + "# #", + "# # ", + "### ", + // 69 "E" + "#####", + "# ", + "# ", + "#### ", + "# ", + "# ", + "#####", + // 70 "F" + "#####", + "# ", + "# ", + "#### ", + "# ", + "# ", + "# ", + // 71 "G" + " ### ", + "# #", + "# ", + "# ###", + "# #", + "# #", + " ####", + // 72 "H" + "# #", + "# #", + "# #", + "#####", + "# #", + "# #", + "# #", + // 73 "I" + " ### ", + " # ", + " # ", + " # ", + " # ", + " # ", + " ### ", + // 74 "J" + " ###", + " # ", + " # ", + " # ", + " # ", + "# # ", + " ## ", + // 75 "K" + "# #", + "# # ", + "# # ", + "## ", + "# # ", + "# # ", + "# #", + // 76 "L" + "# ", + "# ", + "# ", + "# ", + "# ", + "# ", + "#####", + // 77 "M" + "# #", + "## ##", + "# # #", + "# # #", + "# #", + "# #", + "# #", + // 78 "N" + "# #", + "# #", + "## #", + "# # #", + "# ##", + "# #", + "# #", + // 79 "O" + " ### ", + "# #", + "# #", + "# #", + "# #", + "# #", + " ### ", + // 80 "P" + "#### ", + "# #", + "# #", + "#### ", + "# ", + "# ", + "# ", + // 81 "Q" + " ### ", + "# #", + "# #", + "# #", + "# # #", + "# # ", + " ## #", + // 82 "R" + "#### ", + "# #", + "# #", + "#### ", + "# # ", + "# # ", + "# #", + // 83 "S" + " ####", + "# ", + "# ", + " ### ", + " #", + " #", + "#### ", + // 84 "T" + "#####", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 85 "U" + "# #", + "# #", + "# #", + "# #", + "# #", + "# #", + " ### ", + // 86 "V" + "# #", + "# #", + "# #", + "# #", + "# #", + " # # ", + " # ", + // 87 "W" + "# #", + "# #", + "# #", + "# # #", + "# # #", + "# # #", + " # # ", + // 88 "X" + "# #", + "# #", + " # # ", + " # ", + " # # ", + "# #", + "# #", + // 89 "Y" + "# #", + "# #", + "# #", + " # # ", + " # ", + " # ", + " # ", + // 90 "Z" + "#####", + " #", + " # ", + " # ", + " # ", + "# ", + "#####", + // 91 "[" + " ### ", + " # ", + " # ", + " # ", + " # ", + " # ", + " ### ", + // 92 "\" + " ", + "# ", + " # ", + " # ", + " # ", + " #", + " ", + // 93 "]" + " ### ", + " # ", + " # ", + " # ", + " # ", + " # ", + " ### ", + // 94 "^" + " # ", + " # # ", + "# #", + " ", + " ", + " ", + " ", + // 95 "_" + " ", + " ", + " ", + " ", + " ", + " ", + "#####", + // 96 "`" + " # ", + " # ", + " # ", + " ", + " ", + " ", + " ", + // 97 "a" + " ", + " ", + " ### ", + " #", + " ####", + "# #", + " ####", + // 98 "b" + "# ", + "# ", + "# ## ", + "## #", + "# #", + "# #", + "#### ", + // 99 "c" + " ", + " ", + " ### ", + "# ", + "# ", + "# #", + " ### ", + // 100 "d" + " #", + " #", + " ## #", + "# ##", + "# #", + "# #", + " ####", + // 101 "e" + " ", + " ", + " ### ", + "# #", + "#####", + "# ", + " ### ", + // 102 "f" + " ## ", + " # #", + " # ", + "### ", + " # ", + " # ", + " # ", + // 103 "g" + " ", + " ####", + "# #", + "# #", + " ####", + " #", + " ### ", + // 104 "h" + "# ", + "# ", + "# ## ", + "## #", + "# #", + "# #", + "# #", + // 105 "i" + " # ", + " ", + " ## ", + " # ", + " # ", + " # ", + " ### ", + // 106 "j" + " # ", + " ", + " ## ", + " # ", + " # ", + "# # ", + " ## ", + // 107 "k" + "# ", + "# ", + "# # ", + "# # ", + "## ", + "# # ", + "# # ", + // 108 "l" + " ## ", + " # ", + " # ", + " # ", + " # ", + " # ", + " ### ", + // 109 "m" + " ", + " ", + "## # ", + "# # #", + "# # #", + "# #", + "# #", + // 110 "n" + " ", + " ", + "# ## ", + "## #", + "# #", + "# #", + "# #", + // 111 "o" + " ", + " ", + " ### ", + "# #", + "# #", + "# #", + " ### ", + // 112 "p" + " ", + " ", + "#### ", + "# #", + "#### ", + "# ", + "# ", + // 113 "q" + " ", + " ", + " ## #", + "# ##", + " ####", + " #", + " #", + // 114 "r" + " ", + " ", + "# ## ", + "## #", + "# ", + "# ", + "# ", + // 115 "s" + " ", + " ", + " ### ", + "# ", + " ### ", + " #", + "#### ", + // 116 "t" + " # ", + " # ", + "### ", + " # ", + " # ", + " # #", + " ## ", + // 117 "u" + " ", + " ", + "# #", + "# #", + "# #", + "# ##", + " ## #", + // 118 "v" + " ", + " ", + "# #", + "# #", + "# #", + " # # ", + " # ", + // 119 "w" + " ", + " ", + "# #", + "# #", + "# # #", + "# # #", + " # # ", + // 120 "x" + " ", + " ", + "# #", + " # # ", + " # ", + " # # ", + "# #", + // 121 "y" + " ", + " ", + "# #", + "# #", + " ####", + " #", + " ### ", + // 122 "z" + " ", + " ", + "#####", + " # ", + " # ", + " # ", + "#####", + // 123 "{" + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 124 "|" + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 125 "}" + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + " # ", + // 126 "~" + " ", + " ", + " ", + " ## #", + "# # ", + " ", + " ", + + // Extras + + // Extra 0 + "#####", + "# #", + "# #", + "# #", + "# #", + "# #", + "#####", + // Extra 1 + " ", + "# #", + " # # ", + " # ", + " # # ", + "# #", + " ", + // Extra 2 + " ", + " # ", + " ### ", + "# # #", + " # ", + " # ", + " ", + // Extra 3 + " ", + " # ", + " # ", + "# # #", + " ### ", + " # ", + " ", + // Extra 4 + " ", + " # ", + " # ", + "#####", + " # ", + " # ", + " ", + // Extra 5 + " ", + " # ", + " # ", + "#####", + " # ", + " # ", + " ", + // Extra 6 + " ", + " ### ", + "# # #", + "# ###", + "# #", + " ### ", + " ", + // Extra 7 + "#####", + "# #", + " ### ", + " # ", + " # # ", + "# #", + "#####", + // Extra 8 + " ", + " ### ", + "# #", + "# # #", + "# #", + " ### ", + " ", + // Extra 9 + " ", + " #", + " # #", + " # #", + "#####", + " # ", + " # ", + // Extra 10 + " # ", + " # ##", + " # # ", + " ####", + " ### ", + "#####", + " ### ", + // Extra 11 + " ### ", + " # # ", + " ### ", + " ", + " ", + " ", + " ", + // Extra 12 + " ", + " ", + "# #", + "# #", + "# ##", + "### #", + "# ", + // Extra 13 + " # ", + " # ", + "#### ", + " # #", + " # #", + " #", + " ### ", + // Extra 14 + "# ", + "## ", + "### ", + "#### ", + "### ", + "## ", + "# ", + // Extra 15 + " #", + " ##", + " ###", + " ####", + " ###", + " ##", + " #", +}; + +const char* extra_utf[] = { + "�", + "×", + "↑", + "↓", + "←", + "→", + "⏰", + "⌛", + "☸", + "⏎", + "🌡", + "°", + "μ", + "🔙", + "▶", + "◀", +}; + +#include +#include +#include + +void main() { + printf("static const font5x_bitmap_t PROGMEM font57[] = {\n"); + + const int fw = 5; + const int fh = 7; + for (int i = 32; i < 127; i++) { + uint8_t line[8] = {}; + for(int j = 0; j < fh; j++) { + const char *row = symbols[(i - 32)*fh + j]; + for(int k = 0; k < fw; k++) { + line[k] |= (row[k] != 32) << j; + } + } + + printf(" {{"); + for(int k = 0; k < fw; k++) { + if (k > 0) printf(", "); + printf("0x%02x", line[k]); + } + printf("}},\n"); + } + + printf("};\n"); + + // TODO specials +} diff --git a/fontedit_gen45.c b/fontedit_gen45.c new file mode 100644 index 0000000..9f005de --- /dev/null +++ b/fontedit_gen45.c @@ -0,0 +1,40 @@ +#include +#include +#include + +struct X { + uint8_t data[4]; +}; + +const struct X font[] = { + {{0x0e, 0x11, 0x11, 0x0e}}, // 0 + {{0x04, 0x12, 0x1f, 0x10}}, // 1 + {{0x12, 0x19, 0x15, 0x12}}, // 2 + {{0x0a, 0x11, 0x15, 0x0a}}, // 3 + {{0x07, 0x04, 0x1e, 0x04}}, // 4 + {{0x17, 0x15, 0x15, 0x09}}, // 5 + {{0x0e, 0x15, 0x15, 0x09}}, // 6 + {{0x11, 0x09, 0x05, 0x03}}, // 7 + {{0x0a, 0x15, 0x15, 0x0a}}, // 8 + {{0x12, 0x15, 0x15, 0x0a}}, // 9 + {{0x00, 0x00, 0x00, 0x00}}, // ' ' +}; + +void main() { + printf("const char* symbols[] = {\n"); + for(int c = 0; c < 11; c++) { + printf(" // %d \"%c\"\n", c+'0', c+'0'); + for(int j=0;j<5;j++){ + printf(" \""); + for(int k=0;k<4;k++){ + if (font[c].data[k]& (1< +#include +#include + +struct X { + uint8_t data[4]; +}; + +const struct X font[] = { + {{0x1f, 0x11, 0x11, 0x1f}}, + {{0x02, 0x05, 0x02, 0x00}}, + {{0x00, 0x04, 0x04, 0x04}}, + {{0x0e, 0x11, 0x11, 0x0a}}, + {{0x1f, 0x05, 0x05, 0x02}}, + {{0x1f, 0x01, 0x02, 0x1f}}, + {{0x00, 0x18, 0x18, 0x00}}, +}; + +void main() { + printf("const char* symbols[] = {\n"); + for(int c = 0; c < 7; c++) { + printf(" // %d \"%c\"\n", c+'0', c+'0'); + for(int j=0;j<5;j++){ + printf(" \""); + for(int k=0;k<4;k++){ + if (font[c].data[k]& (1< +#include +#include + +struct X { + uint8_t data[5]; +}; + +const struct X font[] = { + {{0x00, 0x00, 0x00, 0x00, 0x00}}, // 0x20 + {{0x00, 0x00, 0x5f, 0x00, 0x00}}, // ! 0x21 + {{0x00, 0x07, 0x00, 0x07, 0x00}}, // \" 0x22 + {{0x14, 0x7f, 0x14, 0x7f, 0x14}}, // # 0x23 + {{0x24, 0x2a, 0x7f, 0x2a, 0x12}}, // $ 0x24 + {{0x23, 0x13, 0x08, 0x64, 0x62}}, // % 0x25 + {{0x36, 0x49, 0x55, 0x22, 0x50}}, // & 0x26 + {{0x00, 0x05, 0x03, 0x00, 0x00}}, // ' 0x27 + {{0x00, 0x1c, 0x22, 0x41, 0x00}}, // ( 0x28 + {{0x00, 0x41, 0x22, 0x1c, 0x00}}, // ) 0x29 + {{0x14, 0x08, 0x3e, 0x08, 0x14}}, // * 0x2a + {{0x08, 0x08, 0x3e, 0x08, 0x08}}, // + 0x2b + {{0x00, 0x50, 0x30, 0x00, 0x00}}, // , 0x2c + {{0x08, 0x08, 0x08, 0x08, 0x08}}, // - 0x2d + {{0x00, 0x60, 0x60, 0x00, 0x00}}, // . 0x2e + {{0x20, 0x10, 0x08, 0x04, 0x02}}, // / 0x2f + {{0x3e, 0x51, 0x49, 0x45, 0x3e}}, // 0 0x30 + {{0x00, 0x42, 0x7f, 0x40, 0x00}}, // 1 0x31 + {{0x42, 0x61, 0x51, 0x49, 0x46}}, // 2 0x32 + {{0x21, 0x41, 0x45, 0x4b, 0x31}}, // 3 0x33 + {{0x18, 0x14, 0x12, 0x7f, 0x10}}, // 4 0x34 + {{0x27, 0x45, 0x45, 0x45, 0x39}}, // 5 0x35 + {{0x3c, 0x4a, 0x49, 0x49, 0x30}}, // 6 0x36 + {{0x01, 0x71, 0x09, 0x05, 0x03}}, // 7 0x37 + {{0x36, 0x49, 0x49, 0x49, 0x36}}, // 8 0x38 + {{0x06, 0x49, 0x49, 0x29, 0x1e}}, // 9 0x39 + {{0x00, 0x36, 0x36, 0x00, 0x00}}, // : 0x3a + {{0x00, 0x56, 0x36, 0x00, 0x00}}, // ; 0x3b + {{0x08, 0x14, 0x22, 0x41, 0x00}}, // < 0x3c + {{0x14, 0x14, 0x14, 0x14, 0x14}}, // = 0x3d + {{0x00, 0x41, 0x22, 0x14, 0x08}}, // > 0x3e + {{0x02, 0x01, 0x51, 0x09, 0x06}}, // ? 0x3f + {{0x32, 0x49, 0x79, 0x41, 0x3e}}, // @ 0x40 + {{0x7e, 0x11, 0x11, 0x11, 0x7e}}, // A 0x41 + {{0x7f, 0x49, 0x49, 0x49, 0x36}}, // B 0x42 + {{0x3e, 0x41, 0x41, 0x41, 0x22}}, // C 0x43 + {{0x7f, 0x41, 0x41, 0x22, 0x1c}}, // D 0x44 + {{0x7f, 0x49, 0x49, 0x49, 0x41}}, // E 0x45 + {{0x7f, 0x09, 0x09, 0x09, 0x01}}, // F 0x46 + {{0x3e, 0x41, 0x49, 0x49, 0x7a}}, // G 0x47 + {{0x7f, 0x08, 0x08, 0x08, 0x7f}}, // H 0x48 + {{0x00, 0x41, 0x7f, 0x41, 0x00}}, // I 0x49 + {{0x20, 0x40, 0x41, 0x3f, 0x01}}, // J 0x4a + {{0x7f, 0x08, 0x14, 0x22, 0x41}}, // K 0x4b + {{0x7f, 0x40, 0x40, 0x40, 0x40}}, // L 0x4c + {{0x7f, 0x02, 0x0c, 0x02, 0x7f}}, // M 0x4d + {{0x7f, 0x04, 0x08, 0x10, 0x7f}}, // N 0x4e + {{0x3e, 0x41, 0x41, 0x41, 0x3e}}, // O 0x4f + {{0x7f, 0x09, 0x09, 0x09, 0x06}}, // P 0x50 + {{0x3e, 0x41, 0x51, 0x21, 0x5e}}, // Q 0x51 + {{0x7f, 0x09, 0x19, 0x29, 0x46}}, // R 0x52 + {{0x46, 0x49, 0x49, 0x49, 0x31}}, // S 0x53 + {{0x01, 0x01, 0x7f, 0x01, 0x01}}, // T 0x54 + {{0x3f, 0x40, 0x40, 0x40, 0x3f}}, // U 0x55 + {{0x1f, 0x20, 0x40, 0x20, 0x1f}}, // V 0x56 + {{0x3f, 0x40, 0x38, 0x40, 0x3f}}, // W 0x57 + {{0x63, 0x14, 0x08, 0x14, 0x63}}, // X 0x58 + {{0x07, 0x08, 0x70, 0x08, 0x07}}, // Y 0x59 + {{0x61, 0x51, 0x49, 0x45, 0x43}}, // Z 0x5a + {{0x00, 0x7f, 0x41, 0x41, 0x00}}, // [ 0x5b + {{0x02, 0x04, 0x08, 0x10, 0x20}}, // \\ 0x5c + {{0x00, 0x41, 0x41, 0x7f, 0x00}}, // ] 0x5d + {{0x04, 0x02, 0x01, 0x02, 0x04}}, // ^ 0x5e + {{0x40, 0x40, 0x40, 0x40, 0x40}}, // _ 0x5f + {{0x00, 0x01, 0x02, 0x04, 0x00}}, // ` 0x60 + {{0x20, 0x54, 0x54, 0x54, 0x78}}, // a 0x61 + {{0x7f, 0x48, 0x44, 0x44, 0x38}}, // b 0x62 + {{0x38, 0x44, 0x44, 0x44, 0x20}}, // c 0x63 + {{0x38, 0x44, 0x44, 0x48, 0x7f}}, // d 0x64 + {{0x38, 0x54, 0x54, 0x54, 0x18}}, // e 0x65 + {{0x08, 0x7e, 0x09, 0x01, 0x02}}, // f 0x66 + {{0x0c, 0x52, 0x52, 0x52, 0x3e}}, // g 0x67 + {{0x7f, 0x08, 0x04, 0x04, 0x78}}, // h 0x68 + {{0x00, 0x44, 0x7d, 0x40, 0x00}}, // i 0x69 + {{0x20, 0x40, 0x44, 0x3d, 0x00}}, // j 0x6a + {{0x7f, 0x10, 0x28, 0x44, 0x00}}, // k 0x6b + {{0x00, 0x41, 0x7f, 0x40, 0x00}}, // l 0x6c + {{0x7c, 0x04, 0x18, 0x04, 0x78}}, // m 0x6d + {{0x7c, 0x08, 0x04, 0x04, 0x78}}, // n 0x6e + {{0x38, 0x44, 0x44, 0x44, 0x38}}, // o 0x6f + {{0x7c, 0x14, 0x14, 0x14, 0x08}}, // p 0x70 + {{0x08, 0x14, 0x14, 0x18, 0x7c}}, // q 0x71 + {{0x7c, 0x08, 0x04, 0x04, 0x08}}, // r 0x72 + {{0x48, 0x54, 0x54, 0x54, 0x20}}, // s 0x73 + {{0x04, 0x3f, 0x44, 0x40, 0x20}}, // t 0x74 + {{0x3c, 0x40, 0x40, 0x20, 0x7c}}, // u 0x75 + {{0x1c, 0x20, 0x40, 0x20, 0x1c}}, // v 0x76 + {{0x3c, 0x40, 0x30, 0x40, 0x3c}}, // w 0x77 + {{0x44, 0x28, 0x10, 0x28, 0x44}}, // x 0x78 + {{0x0c, 0x50, 0x50, 0x50, 0x3c}}, // y 0x79 + {{0x44, 0x64, 0x54, 0x4c, 0x44}}, // z 0x7a + {{0x00, 0x08, 0x36, 0x41, 0x00}}, // { 0x7b + {{0x00, 0x00, 0x7f, 0x00, 0x00}}, // | 0x7c + {{0x00, 0x41, 0x36, 0x08, 0x00}}, // } 0x7d + {{0x10, 0x08, 0x08, 0x10, 0x08}}, // ~ 0x7e +}; + +void main() { + printf("const char* symbols[] = {\n"); + for(int c = 32; c < 127; c++) { + printf(" // %d \"%c\"\n", c, c); + for(int j=0;j<7;j++){ + printf(" \""); + for(int k=0;k<5;k++){ + if (font[c - ' '].data[k]& (1< +#include +#include + +struct X { + uint8_t data[5]; +}; + +const struct X font[] = { + {{0xFE, 0x82, 0x82, 0x82, 0xFE}}, + {{0x22, 0x14, 0x08, 0x14, 0x22}}, + {{0x08, 0x04, 0x3e, 0x04, 0x08}}, + {{0x08, 0x10, 0x3e, 0x10, 0x08}}, + {{0x08, 0x1c, 0x2a, 0x08, 0x08}}, + {{0x08, 0x08, 0x2a, 0x1c, 0x08}}, + {{0x1c, 0x22, 0x2e, 0x2a, 0x1c}}, + {{0x63, 0x55, 0x4d, 0x55, 0x63}}, + {{0x1c, 0x22, 0x2a, 0x22, 0x1c}}, + {{0x10, 0x38, 0x54, 0x10, 0x1e}}, + {{0x60, 0x9e, 0x81, 0x9e, 0x6a}}, + {{0x00, 0x07, 0x05, 0x07, 0x00}}, + {{0x7C, 0x20, 0x20, 0x10, 0x3C}}, + {{0x04, 0x4e, 0x55, 0x44, 0x38}}, + {{0x7f, 0x3e, 0x1c, 0x08, 0x00}}, + {{0x00, 0x08, 0x1c, 0x3e, 0x7f}}, +}; + +void main() { + printf("const char* symbols[] = {\n"); + for(int c = 0; c < sizeof(font)/sizeof(font[0]); c++) { + printf(" // Extra %d\n", c, c); + for(int j=0;j<7;j++){ + printf(" \""); + for(int k=0;k<5;k++){ + if (font[c].data[k]& (1<