aboutsummaryrefslogtreecommitdiffstats
path: root/source/bit-font2.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/bit-font2.c')
-rw-r--r--source/bit-font2.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/source/bit-font2.c b/source/bit-font2.c
new file mode 100644
index 0000000..91c001b
--- /dev/null
+++ b/source/bit-font2.c
@@ -0,0 +1,141 @@
+/*
+ Copyright 2022 Bga <bga.email@gmail.com>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Modified by tcsullivan:
+ - compacted code to only what is required
+ - changed ordering of font bitmap data for easier rendering
+ - added functional interface
+*/
+
+#include <stdint.h>
+
+#define MAKE_GLYPH(hi, lo) (((hi * 3) << 8) | lo * 3)
+
+const uint8_t halfGlyphData[] = {
+ 0x00, 0x00, 0x00,
+ 0x0C, 0x03, 0x00,
+ 0x0C, 0xC3, 0x30,
+ 0xF3, 0x3C, 0xCF,
+ 0xFF, 0x3C, 0xCF,
+ 0xF3, 0x3C, 0xFF,
+ 0xFF, 0x3C, 0xFF,
+ 0x3F, 0x0C, 0xFF,
+ 0xFF, 0x30, 0xFC,
+ 0xCF, 0x30, 0xFC,
+ 0xC3, 0x30, 0xFC,
+ 0x3F, 0x0C, 0xC3,
+ 0xFF, 0x30, 0x0C,
+ 0x0C, 0xC3, 0xFC,
+ 0xFF, 0x3F, 0x87,
+ 0xE1, 0xFC, 0xFF,
+ 0xF3, 0xEC, 0x31,
+ 0xCC, 0x3F, 0xCF,
+ 0xF3, 0x6C, 0xF3,
+ 0xBC, 0x3D, 0xCF,
+ 0x37, 0x0C, 0xFF,
+ 0xFE, 0x3C, 0xFB,
+ 0x30, 0x0C, 0xC3,
+ 0x30, 0x3C, 0xFF,
+};
+
+const uint16_t glyphData[] = {
+ /* d0 */ MAKE_GLYPH(5, 4),
+ /* d1 */ MAKE_GLYPH(2, 2),
+ /* d2 */ MAKE_GLYPH(8, 11),
+ /* d3 */ MAKE_GLYPH(9, 12),
+ /* d4 */ MAKE_GLYPH(4, 10),
+ /* d5 */ MAKE_GLYPH(7, 8),
+ /* d6 */ MAKE_GLYPH(7, 4),
+ /* d7 */ MAKE_GLYPH(9, 2),
+ /* d8 */ MAKE_GLYPH(6, 4),
+ /* d9 */ MAKE_GLYPH(6, 12),
+ /* space */ MAKE_GLYPH(0, 0),
+ /* dot */ MAKE_GLYPH(0, 1),
+ /* comma */ MAKE_GLYPH(0, 2),
+ /* colon */ MAKE_GLYPH(1, 1),
+ /* asterick */ MAKE_GLYPH(2, 1),
+ /* questionMark */ MAKE_GLYPH(9, 1),
+ /* quote */ MAKE_GLYPH(2, 0),
+ /* doubleQuote */ MAKE_GLYPH(3, 0),
+ /* lowTriangle */ MAKE_GLYPH(1, 4),
+ /* A */ MAKE_GLYPH(6, 3),
+ /* B */ MAKE_GLYPH(21, 21),
+ /* C */ MAKE_GLYPH(23, 4),
+ /* D */ MAKE_GLYPH(18, 19),
+ /* E */ MAKE_GLYPH(7, 7),
+ /* F */ MAKE_GLYPH(7, 22),
+ /* G */ MAKE_GLYPH(20, 4),
+ /* H */ MAKE_GLYPH(4, 3),
+ /* I */ MAKE_GLYPH(2, 2),
+ /* J */ MAKE_GLYPH(10, 4),
+ /* K */ MAKE_GLYPH(19, 18),
+ /* L */ MAKE_GLYPH(22, 11),
+ /* M */ MAKE_GLYPH(14, 3),
+ /* N */ MAKE_GLYPH(18, 3),
+ /* O */ MAKE_GLYPH(5, 4),
+ /* P */ MAKE_GLYPH(6, 22),
+ /* Q */ MAKE_GLYPH(5, 17),
+ /* R */ MAKE_GLYPH(6, 18),
+ /* S */ MAKE_GLYPH(7, 8),
+ /* T */ MAKE_GLYPH(13, 2),
+ /* U */ MAKE_GLYPH(3, 4),
+ /* V */ MAKE_GLYPH(3, 19),
+ /* W */ MAKE_GLYPH(3, 15),
+ /* X */ MAKE_GLYPH(17, 16),
+ /* Y */ MAKE_GLYPH(4, 2),
+ /* Z */ MAKE_GLYPH(9, 11),
+ /* caret */ MAKE_GLYPH(16, 0),
+ /* squareBracketOpen */ MAKE_GLYPH(23, 17),
+ /* squareBracketClose */ MAKE_GLYPH(10, 12)
+};
+
+const char glyphKeys[47] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ ' ',
+ '.',
+ ',',
+ ':',
+ '!',
+ '?',
+ '\'',
+ '"',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ '^',
+ '[',
+ ']'
+};
+
+const uint8_t *bitfontGetBitmapLo(unsigned int gindex)
+{
+ if (gindex < sizeof(glyphKeys))
+ return halfGlyphData + (glyphData[gindex] & 0x00FF);
+ else
+ return 0;
+}
+
+const uint8_t *bitfontGetBitmapHi(unsigned int gindex)
+{
+ if (gindex < sizeof(glyphKeys))
+ return halfGlyphData + ((glyphData[gindex] >> 8) & 0xFF);
+ else
+ return 0;
+}
+
+unsigned int bitfontGetGlyph(char c)
+{
+ for (unsigned int i = 0; i < sizeof(glyphKeys); ++i) {
+ if (glyphKeys[i] == c)
+ return i;
+ }
+
+ return 15; // Glyph for '?'
+}