diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index fe5d952..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "src/Basalt"]
- path = src/Basalt
- url = https://github.com/Pyroxenium/Basalt
diff --git a/data/font/Times9k.bdf b/data/font/Times9k.bdf
new file mode 100644
index 0000000..f1a67cd
--- /dev/null
+++ b/data/font/Times9k.bdf
@@ -0,0 +1,3240 @@
+STARTFONT 2.1
+COMMENT
+COMMENT Copyright (c) 2022, Sammy L. Koch (sammykoch2004@gmail.com),
+COMMENT with Reserved Font Name: "Times9k". Version 1.1.
+COMMENT
+COMMENT This Font Software is licensed under the SIL Open Font License, Version 1.1.
+FONT Times9k
+SIZE 7 72 72
+FONTBOUNDINGBOX 5 9 0 -2
+STARTPROPERTIES 11
+FOUNDRY "Fine"
+FAMILY_NAME "Times9k"
+WEIGHT_NAME "Book"
+SLANT "R"
+SETWIDTH_NAME "Book"
+SPACING "c"
+CHARSET_REGISTRY "ISO-8859"
+CHARSET_ENCODING "1"
+COPYRIGHT "Copyright (c) 2022, Sammy L. Koch"
+FONT_ASCENT 7
+FONT_DESCENT 2
+ENDPROPERTIES
+CHARS 256
+STARTCHAR C000
+ENCODING 0
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C001
+ENCODING 1
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 1 0
+BITMAP
+a0
+a0
+00
+e0
+40
+ENDCHAR
+STARTCHAR C002
+ENCODING 2
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+a8
+a8
+f8
+88
+d8
+f8
+f8
+ENDCHAR
+STARTCHAR C003
+ENCODING 3
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 1 0
+BITMAP
+a0
+e0
+e0
+e0
+40
+ENDCHAR
+STARTCHAR C004
+ENCODING 4
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 1
+BITMAP
+60
+f0
+f0
+60
+ENDCHAR
+STARTCHAR C005
+ENCODING 5
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+f0
+60
+f0
+f0
+60
+f0
+ENDCHAR
+STARTCHAR C006
+ENCODING 6
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+60
+f0
+f0
+60
+f0
+ENDCHAR
+STARTCHAR C007
+ENCODING 7
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 2 1 2
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR C010
+ENCODING 8
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+f8
+98
+98
+f8
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C011
+ENCODING 9
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C012
+ENCODING 10
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C013
+ENCODING 11
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+30
+20
+60
+90
+60
+ENDCHAR
+STARTCHAR C014
+ENCODING 12
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+60
+20
+70
+20
+ENDCHAR
+STARTCHAR C015
+ENCODING 13
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C016
+ENCODING 14
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+50
+70
+40
+c0
+c0
+ENDCHAR
+STARTCHAR C017
+ENCODING 15
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+50
+70
+50
+d0
+d0
+ENDCHAR
+STARTCHAR C020
+ENCODING 16
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+80
+c0
+e0
+f0
+e0
+c0
+80
+ENDCHAR
+STARTCHAR C021
+ENCODING 17
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+10
+30
+70
+f0
+70
+30
+10
+ENDCHAR
+STARTCHAR C022
+ENCODING 18
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 0 1
+BITMAP
+40
+e0
+40
+e0
+40
+ENDCHAR
+STARTCHAR C023
+ENCODING 19
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+a0
+a0
+a0
+a0
+00
+a0
+ENDCHAR
+STARTCHAR C024
+ENCODING 20
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 -1
+BITMAP
+f0
+d0
+d0
+d0
+50
+50
+50
+ENDCHAR
+STARTCHAR C025
+ENCODING 21
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+c0
+a0
+50
+30
+e0
+ENDCHAR
+STARTCHAR C026
+ENCODING 22
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 2 0 0
+BITMAP
+f0
+f0
+ENDCHAR
+STARTCHAR C027
+ENCODING 23
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+40
+e0
+40
+e0
+40
+e0
+ENDCHAR
+STARTCHAR C030
+ENCODING 24
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 1 1
+BITMAP
+40
+e0
+40
+40
+40
+ENDCHAR
+STARTCHAR C031
+ENCODING 25
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 1 1
+BITMAP
+40
+40
+40
+e0
+40
+ENDCHAR
+STARTCHAR C032
+ENCODING 26
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+20
+f0
+20
+ENDCHAR
+STARTCHAR C033
+ENCODING 27
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+40
+f0
+40
+ENDCHAR
+STARTCHAR C034
+ENCODING 28
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 2 0 0
+BITMAP
+80
+f0
+ENDCHAR
+STARTCHAR C035
+ENCODING 29
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+50
+f0
+50
+ENDCHAR
+STARTCHAR C036
+ENCODING 30
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+60
+60
+f0
+f0
+f0
+ENDCHAR
+STARTCHAR C037
+ENCODING 31
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+f0
+f0
+60
+60
+60
+ENDCHAR
+STARTCHAR C040
+ENCODING 32
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C041
+ENCODING 33
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 1 0
+BITMAP
+c0
+c0
+c0
+c0
+00
+c0
+ENDCHAR
+STARTCHAR C042
+ENCODING 34
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 3
+BITMAP
+50
+50
+a0
+ENDCHAR
+STARTCHAR C043
+ENCODING 35
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+50
+f0
+50
+50
+f0
+50
+ENDCHAR
+STARTCHAR C044
+ENCODING 36
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 8 0 -1
+BITMAP
+20
+70
+a0
+60
+20
+30
+e0
+20
+ENDCHAR
+STARTCHAR C045
+ENCODING 37
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+90
+30
+60
+c0
+90
+ENDCHAR
+STARTCHAR C046
+ENCODING 38
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+50
+20
+60
+b0
+90
+60
+ENDCHAR
+STARTCHAR C047
+ENCODING 39
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 1 3
+BITMAP
+40
+40
+80
+ENDCHAR
+STARTCHAR C050
+ENCODING 40
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 2 0
+BITMAP
+40
+80
+80
+80
+80
+40
+ENDCHAR
+STARTCHAR C051
+ENCODING 41
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 0 0
+BITMAP
+80
+40
+40
+40
+40
+80
+ENDCHAR
+STARTCHAR C052
+ENCODING 42
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 3 1 3
+BITMAP
+a0
+40
+a0
+ENDCHAR
+STARTCHAR C053
+ENCODING 43
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 3 1 2
+BITMAP
+40
+e0
+40
+ENDCHAR
+STARTCHAR C054
+ENCODING 44
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 1 -1
+BITMAP
+c0
+c0
+80
+ENDCHAR
+STARTCHAR C055
+ENCODING 45
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 1 1 3
+BITMAP
+e0
+ENDCHAR
+STARTCHAR C056
+ENCODING 46
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 2 1 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR C057
+ENCODING 47
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+10
+10
+20
+40
+80
+80
+ENDCHAR
+STARTCHAR C060
+ENCODING 48
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+b0
+d0
+90
+60
+ENDCHAR
+STARTCHAR C061
+ENCODING 49
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+40
+c0
+40
+40
+40
+e0
+ENDCHAR
+STARTCHAR C062
+ENCODING 50
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+20
+40
+80
+f0
+ENDCHAR
+STARTCHAR C063
+ENCODING 51
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+20
+10
+90
+60
+ENDCHAR
+STARTCHAR C064
+ENCODING 52
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+60
+a0
+a0
+f0
+20
+ENDCHAR
+STARTCHAR C065
+ENCODING 53
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+80
+e0
+10
+90
+60
+ENDCHAR
+STARTCHAR C066
+ENCODING 54
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+80
+e0
+90
+90
+60
+ENDCHAR
+STARTCHAR C067
+ENCODING 55
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+10
+20
+40
+40
+40
+ENDCHAR
+STARTCHAR C070
+ENCODING 56
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C071
+ENCODING 57
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+90
+70
+10
+60
+ENDCHAR
+STARTCHAR C072
+ENCODING 58
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 5 1 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR C073
+ENCODING 59
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 0 -1
+BITMAP
+60
+00
+60
+60
+c0
+ENDCHAR
+STARTCHAR C074
+ENCODING 60
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+30
+60
+c0
+60
+30
+ENDCHAR
+STARTCHAR C075
+ENCODING 61
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+f0
+00
+f0
+ENDCHAR
+STARTCHAR C076
+ENCODING 62
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+c0
+60
+30
+60
+c0
+ENDCHAR
+STARTCHAR C077
+ENCODING 63
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+10
+60
+00
+40
+ENDCHAR
+STARTCHAR C100
+ENCODING 64
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+b0
+b0
+80
+60
+ENDCHAR
+STARTCHAR C101
+ENCODING 65
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+f0
+90
+90
+90
+ENDCHAR
+STARTCHAR C102
+ENCODING 66
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+e0
+90
+e0
+90
+90
+e0
+ENDCHAR
+STARTCHAR C103
+ENCODING 67
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+80
+80
+90
+60
+ENDCHAR
+STARTCHAR C104
+ENCODING 68
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+e0
+90
+90
+90
+90
+e0
+ENDCHAR
+STARTCHAR C105
+ENCODING 69
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+80
+e0
+80
+80
+f0
+ENDCHAR
+STARTCHAR C106
+ENCODING 70
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+80
+e0
+80
+80
+80
+ENDCHAR
+STARTCHAR C107
+ENCODING 71
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+80
+b0
+90
+90
+60
+ENDCHAR
+STARTCHAR C110
+ENCODING 72
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+f0
+90
+90
+90
+ENDCHAR
+STARTCHAR C111
+ENCODING 73
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+e0
+40
+40
+40
+40
+e0
+ENDCHAR
+STARTCHAR C112
+ENCODING 74
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+30
+10
+10
+10
+90
+60
+ENDCHAR
+STARTCHAR C113
+ENCODING 75
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+e0
+90
+90
+90
+ENDCHAR
+STARTCHAR C114
+ENCODING 76
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+80
+80
+80
+80
+f0
+ENDCHAR
+STARTCHAR C115
+ENCODING 77
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+f0
+f0
+90
+90
+90
+ENDCHAR
+STARTCHAR C116
+ENCODING 78
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+d0
+f0
+f0
+b0
+90
+ENDCHAR
+STARTCHAR C117
+ENCODING 79
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C120
+ENCODING 80
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+e0
+90
+e0
+80
+80
+80
+ENDCHAR
+STARTCHAR C121
+ENCODING 81
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 -1
+BITMAP
+60
+90
+90
+90
+b0
+60
+10
+ENDCHAR
+STARTCHAR C122
+ENCODING 82
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+e0
+90
+e0
+90
+90
+90
+ENDCHAR
+STARTCHAR C123
+ENCODING 83
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+40
+20
+90
+60
+ENDCHAR
+STARTCHAR C124
+ENCODING 84
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+e0
+40
+40
+40
+40
+40
+ENDCHAR
+STARTCHAR C125
+ENCODING 85
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C126
+ENCODING 86
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+90
+f0
+60
+60
+ENDCHAR
+STARTCHAR C127
+ENCODING 87
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+90
+f0
+f0
+90
+ENDCHAR
+STARTCHAR C130
+ENCODING 88
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+60
+60
+90
+90
+ENDCHAR
+STARTCHAR C131
+ENCODING 89
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+90
+70
+10
+90
+60
+ENDCHAR
+STARTCHAR C132
+ENCODING 90
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+f0
+10
+20
+40
+80
+f0
+ENDCHAR
+STARTCHAR C133
+ENCODING 91
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 2 0
+BITMAP
+c0
+80
+80
+80
+80
+c0
+ENDCHAR
+STARTCHAR C134
+ENCODING 92
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+80
+40
+20
+10
+10
+ENDCHAR
+STARTCHAR C135
+ENCODING 93
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 0 0
+BITMAP
+c0
+40
+40
+40
+40
+c0
+ENDCHAR
+STARTCHAR C136
+ENCODING 94
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 2 1 4
+BITMAP
+40
+a0
+ENDCHAR
+STARTCHAR C137
+ENCODING 95
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 1 0 -1
+BITMAP
+f0
+ENDCHAR
+STARTCHAR C140
+ENCODING 96
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 1 3
+BITMAP
+80
+80
+40
+ENDCHAR
+STARTCHAR C141
+ENCODING 97
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C142
+ENCODING 98
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+80
+e0
+90
+90
+e0
+ENDCHAR
+STARTCHAR C143
+ENCODING 99
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 4 0 0
+BITMAP
+60
+80
+80
+60
+ENDCHAR
+STARTCHAR C144
+ENCODING 100
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+10
+10
+70
+90
+90
+70
+ENDCHAR
+STARTCHAR C145
+ENCODING 101
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+f0
+80
+60
+ENDCHAR
+STARTCHAR C146
+ENCODING 102
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+30
+40
+e0
+40
+40
+40
+ENDCHAR
+STARTCHAR C147
+ENCODING 103
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 -2
+BITMAP
+60
+90
+90
+70
+10
+e0
+ENDCHAR
+STARTCHAR C150
+ENCODING 104
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+80
+e0
+90
+90
+90
+ENDCHAR
+STARTCHAR C151
+ENCODING 105
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+40
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C152
+ENCODING 106
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 0 0
+BITMAP
+20
+00
+60
+20
+a0
+40
+ENDCHAR
+STARTCHAR C153
+ENCODING 107
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+80
+90
+e0
+a0
+90
+ENDCHAR
+STARTCHAR C154
+ENCODING 108
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+80
+80
+80
+80
+a0
+40
+ENDCHAR
+STARTCHAR C155
+ENCODING 109
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+f0
+f0
+90
+ENDCHAR
+STARTCHAR C156
+ENCODING 110
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+90
+90
+90
+ENDCHAR
+STARTCHAR C157
+ENCODING 111
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C160
+ENCODING 112
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 -2
+BITMAP
+60
+90
+90
+e0
+80
+80
+ENDCHAR
+STARTCHAR C161
+ENCODING 113
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 -2
+BITMAP
+60
+90
+90
+70
+10
+10
+ENDCHAR
+STARTCHAR C162
+ENCODING 114
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+b0
+c0
+80
+80
+ENDCHAR
+STARTCHAR C163
+ENCODING 115
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+70
+c0
+30
+e0
+ENDCHAR
+STARTCHAR C164
+ENCODING 116
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+40
+40
+e0
+40
+40
+20
+ENDCHAR
+STARTCHAR C165
+ENCODING 117
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C166
+ENCODING 118
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+90
+90
+60
+60
+ENDCHAR
+STARTCHAR C167
+ENCODING 119
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+90
+90
+f0
+f0
+ENDCHAR
+STARTCHAR C170
+ENCODING 120
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+90
+60
+60
+90
+ENDCHAR
+STARTCHAR C171
+ENCODING 121
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 -2
+BITMAP
+90
+90
+90
+70
+10
+e0
+ENDCHAR
+STARTCHAR C172
+ENCODING 122
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+f0
+30
+c0
+f0
+ENDCHAR
+STARTCHAR C173
+ENCODING 123
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+20
+40
+40
+80
+40
+40
+20
+ENDCHAR
+STARTCHAR C174
+ENCODING 124
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 1 7 2 0
+BITMAP
+80
+80
+80
+00
+80
+80
+80
+ENDCHAR
+STARTCHAR C175
+ENCODING 125
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+80
+40
+40
+20
+40
+40
+80
+ENDCHAR
+STARTCHAR C176
+ENCODING 126
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 2 0 3
+BITMAP
+50
+a0
+ENDCHAR
+STARTCHAR C177
+ENCODING 127
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+60
+88
+10
+60
+88
+10
+60
+88
+10
+ENDCHAR
+STARTCHAR C200
+ENCODING 128
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C201
+ENCODING 129
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 0 4
+BITMAP
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C202
+ENCODING 130
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 3 2 4
+BITMAP
+e0
+e0
+e0
+ENDCHAR
+STARTCHAR C203
+ENCODING 131
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 3 0 4
+BITMAP
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C204
+ENCODING 132
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 0 1
+BITMAP
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C205
+ENCODING 133
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 0 1
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C206
+ENCODING 134
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+38
+38
+38
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C207
+ENCODING 135
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+f8
+f8
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C210
+ENCODING 136
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 3 2 1
+BITMAP
+e0
+e0
+e0
+ENDCHAR
+STARTCHAR C211
+ENCODING 137
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+c0
+c0
+c0
+38
+38
+38
+ENDCHAR
+STARTCHAR C212
+ENCODING 138
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 2 1
+BITMAP
+e0
+e0
+e0
+e0
+e0
+e0
+ENDCHAR
+STARTCHAR C213
+ENCODING 139
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+f8
+f8
+f8
+38
+38
+38
+ENDCHAR
+STARTCHAR C214
+ENCODING 140
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 3 0 1
+BITMAP
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C215
+ENCODING 141
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+c0
+c0
+c0
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C216
+ENCODING 142
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+38
+38
+38
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C217
+ENCODING 143
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 1
+BITMAP
+f8
+f8
+f8
+f8
+f8
+f8
+ENDCHAR
+STARTCHAR C220
+ENCODING 144
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 0 -2
+BITMAP
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C221
+ENCODING 145
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 9 0 -2
+BITMAP
+c0
+c0
+c0
+00
+00
+00
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C222
+ENCODING 146
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+38
+38
+38
+00
+00
+00
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C223
+ENCODING 147
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+f8
+00
+00
+00
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C224
+ENCODING 148
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 6 0 -2
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C225
+ENCODING 149
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 9 0 -2
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C226
+ENCODING 150
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+38
+38
+38
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C227
+ENCODING 151
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C230
+ENCODING 152
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 -2
+BITMAP
+38
+38
+38
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C231
+ENCODING 153
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+c0
+c0
+c0
+38
+38
+38
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C232
+ENCODING 154
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+38
+38
+38
+38
+38
+38
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C233
+ENCODING 155
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+f8
+38
+38
+38
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C234
+ENCODING 156
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 6 0 -2
+BITMAP
+f8
+f8
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C235
+ENCODING 157
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+c0
+c0
+c0
+f8
+f8
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C236
+ENCODING 158
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+38
+38
+38
+f8
+f8
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C237
+ENCODING 159
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 5 9 0 -2
+BITMAP
+f8
+f8
+f8
+f8
+f8
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR C240
+ENCODING 160
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 0 0 0 0
+BITMAP
+ENDCHAR
+STARTCHAR C241
+ENCODING 161
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+40
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C242
+ENCODING 162
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+20
+70
+80
+80
+70
+20
+ENDCHAR
+STARTCHAR C243
+ENCODING 163
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+20
+50
+40
+e0
+40
+f0
+ENDCHAR
+STARTCHAR C244
+ENCODING 164
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 9 0 -2
+BITMAP
+90
+90
+60
+90
+90
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C245
+ENCODING 165
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+a0
+a0
+40
+e0
+40
+e0
+40
+ENDCHAR
+STARTCHAR C246
+ENCODING 166
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 1 5 1 0
+BITMAP
+80
+80
+00
+80
+80
+ENDCHAR
+STARTCHAR C247
+ENCODING 167
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+c0
+a0
+50
+30
+e0
+ENDCHAR
+STARTCHAR C250
+ENCODING 168
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 1 0 5
+BITMAP
+a0
+ENDCHAR
+STARTCHAR C251
+ENCODING 169
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+60
+d0
+b0
+d0
+60
+ENDCHAR
+STARTCHAR C252
+ENCODING 170
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 1
+BITMAP
+60
+10
+70
+90
+90
+70
+ENDCHAR
+STARTCHAR C253
+ENCODING 171
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+50
+a0
+50
+ENDCHAR
+STARTCHAR C254
+ENCODING 172
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 2 0 1
+BITMAP
+f0
+10
+ENDCHAR
+STARTCHAR C255
+ENCODING 173
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 1 0 2
+BITMAP
+f0
+ENDCHAR
+STARTCHAR C256
+ENCODING 174
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+60
+d0
+b0
+b0
+60
+ENDCHAR
+STARTCHAR C257
+ENCODING 175
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 1 0 5
+BITMAP
+f0
+ENDCHAR
+STARTCHAR C260
+ENCODING 176
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 3 1 3
+BITMAP
+40
+a0
+40
+ENDCHAR
+STARTCHAR C261
+ENCODING 177
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 5 1 0
+BITMAP
+40
+e0
+40
+00
+e0
+ENDCHAR
+STARTCHAR C262
+ENCODING 178
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 4 1 3
+BITMAP
+80
+40
+80
+c0
+ENDCHAR
+STARTCHAR C263
+ENCODING 179
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 5 1 2
+BITMAP
+80
+40
+80
+40
+80
+ENDCHAR
+STARTCHAR C264
+ENCODING 180
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 1 3
+BITMAP
+40
+80
+80
+ENDCHAR
+STARTCHAR C265
+ENCODING 181
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 -2
+BITMAP
+90
+90
+90
+e0
+80
+80
+ENDCHAR
+STARTCHAR C266
+ENCODING 182
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 -1
+BITMAP
+f0
+d0
+d0
+d0
+50
+50
+50
+ENDCHAR
+STARTCHAR C267
+ENCODING 183
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 2 1 2
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR C270
+ENCODING 184
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 3 1 -1
+BITMAP
+c0
+40
+80
+ENDCHAR
+STARTCHAR C271
+ENCODING 185
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 2 4 1 3
+BITMAP
+40
+c0
+40
+40
+ENDCHAR
+STARTCHAR C272
+ENCODING 186
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 1
+BITMAP
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C273
+ENCODING 187
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 3 0 1
+BITMAP
+a0
+50
+a0
+ENDCHAR
+STARTCHAR C274
+ENCODING 188
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+90
+30
+60
+c0
+90
+ENDCHAR
+STARTCHAR C275
+ENCODING 189
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+90
+30
+60
+c0
+90
+ENDCHAR
+STARTCHAR C276
+ENCODING 190
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 0
+BITMAP
+90
+30
+60
+c0
+90
+ENDCHAR
+STARTCHAR C277
+ENCODING 191
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+40
+00
+60
+10
+90
+60
+ENDCHAR
+STARTCHAR C300
+ENCODING 192
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+c0
+00
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C301
+ENCODING 193
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+30
+00
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C302
+ENCODING 194
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+90
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C303
+ENCODING 195
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C304
+ENCODING 196
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+90
+00
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C305
+ENCODING 197
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+00
+60
+90
+f0
+90
+90
+ENDCHAR
+STARTCHAR C306
+ENCODING 198
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+70
+a0
+f0
+a0
+a0
+b0
+ENDCHAR
+STARTCHAR C307
+ENCODING 199
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 8 0 -2
+BITMAP
+60
+90
+80
+80
+90
+60
+20
+40
+ENDCHAR
+STARTCHAR C310
+ENCODING 200
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+c0
+00
+f0
+80
+e0
+80
+f0
+ENDCHAR
+STARTCHAR C311
+ENCODING 201
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+30
+00
+f0
+80
+e0
+80
+f0
+ENDCHAR
+STARTCHAR C312
+ENCODING 202
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+f0
+80
+e0
+80
+f0
+ENDCHAR
+STARTCHAR C313
+ENCODING 203
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+90
+00
+f0
+80
+e0
+80
+f0
+ENDCHAR
+STARTCHAR C314
+ENCODING 204
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+80
+40
+00
+e0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C315
+ENCODING 205
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+20
+40
+00
+e0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C316
+ENCODING 206
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+40
+a0
+00
+e0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C317
+ENCODING 207
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+a0
+00
+e0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C320
+ENCODING 208
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+e0
+90
+d0
+90
+90
+e0
+ENDCHAR
+STARTCHAR C321
+ENCODING 209
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+90
+d0
+f0
+b0
+90
+ENDCHAR
+STARTCHAR C322
+ENCODING 210
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+60
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C323
+ENCODING 211
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+40
+60
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C324
+ENCODING 212
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+90
+60
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C325
+ENCODING 213
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+60
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C326
+ENCODING 214
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+90
+00
+60
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C327
+ENCODING 215
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 1
+BITMAP
+90
+60
+60
+90
+ENDCHAR
+STARTCHAR C330
+ENCODING 216
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+60
+90
+a0
+50
+90
+60
+ENDCHAR
+STARTCHAR C331
+ENCODING 217
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+80
+40
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C332
+ENCODING 218
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+10
+20
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C333
+ENCODING 219
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+00
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C334
+ENCODING 220
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+90
+00
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C335
+ENCODING 221
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+10
+20
+90
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C336
+ENCODING 222
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+e0
+90
+e0
+80
+80
+ENDCHAR
+STARTCHAR C337
+ENCODING 223
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 -1
+BITMAP
+60
+90
+a0
+90
+90
+a0
+80
+ENDCHAR
+STARTCHAR C340
+ENCODING 224
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+00
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C341
+ENCODING 225
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+40
+00
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C342
+ENCODING 226
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+50
+00
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C343
+ENCODING 227
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+00
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C344
+ENCODING 228
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+50
+00
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C345
+ENCODING 229
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+50
+20
+60
+10
+f0
+70
+ENDCHAR
+STARTCHAR C346
+ENCODING 230
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+70
+b0
+a0
+70
+ENDCHAR
+STARTCHAR C347
+ENCODING 231
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 0 -2
+BITMAP
+60
+80
+80
+60
+40
+80
+ENDCHAR
+STARTCHAR C350
+ENCODING 232
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+00
+60
+f0
+80
+60
+ENDCHAR
+STARTCHAR C351
+ENCODING 233
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+40
+00
+60
+f0
+80
+60
+ENDCHAR
+STARTCHAR C352
+ENCODING 234
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+50
+00
+60
+f0
+80
+60
+ENDCHAR
+STARTCHAR C353
+ENCODING 235
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+50
+00
+60
+f0
+80
+60
+ENDCHAR
+STARTCHAR C354
+ENCODING 236
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+80
+40
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C355
+ENCODING 237
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+20
+40
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C356
+ENCODING 238
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 7 1 0
+BITMAP
+40
+a0
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C357
+ENCODING 239
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 3 6 1 0
+BITMAP
+a0
+00
+c0
+40
+40
+e0
+ENDCHAR
+STARTCHAR C360
+ENCODING 240
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+10
+70
+90
+90
+60
+ENDCHAR
+STARTCHAR C361
+ENCODING 241
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+00
+60
+90
+90
+90
+ENDCHAR
+STARTCHAR C362
+ENCODING 242
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+00
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C363
+ENCODING 243
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+40
+00
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C364
+ENCODING 244
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+90
+00
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C365
+ENCODING 245
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+50
+a0
+00
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C366
+ENCODING 246
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+00
+60
+90
+90
+60
+ENDCHAR
+STARTCHAR C367
+ENCODING 247
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 5 0 1
+BITMAP
+40
+00
+f0
+00
+20
+ENDCHAR
+STARTCHAR C370
+ENCODING 248
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 4 0 0
+BITMAP
+60
+b0
+d0
+60
+ENDCHAR
+STARTCHAR C371
+ENCODING 249
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+40
+20
+00
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C372
+ENCODING 250
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+20
+40
+00
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C373
+ENCODING 251
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 7 0 0
+BITMAP
+60
+90
+00
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C374
+ENCODING 252
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+90
+00
+90
+90
+90
+60
+ENDCHAR
+STARTCHAR C375
+ENCODING 253
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 9 0 -2
+BITMAP
+20
+40
+00
+90
+90
+90
+70
+10
+e0
+ENDCHAR
+STARTCHAR C376
+ENCODING 254
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 6 0 0
+BITMAP
+80
+e0
+90
+90
+e0
+80
+ENDCHAR
+STARTCHAR C377
+ENCODING 255
+SWIDTH 714 0
+DWIDTH 5 0
+BBX 4 8 0 -2
+BITMAP
+90
+00
+90
+90
+90
+70
+10
+e0
+ENDCHAR
+ENDFONT
diff --git a/data/index.xml b/data/index.xml
deleted file mode 100644
index 2a7e1ce..0000000
--- a/data/index.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- - Home
- - Items
-
-
- >
-
\ No newline at end of file
diff --git a/data/pages/home.xml b/data/pages/home.xml
index 18f81fb..69d7c79 100644
--- a/data/pages/home.xml
+++ b/data/pages/home.xml
@@ -1,5 +1,5 @@
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/data/pages/index.xml b/data/pages/index.xml
new file mode 100644
index 0000000..dfd177e
--- /dev/null
+++ b/data/pages/index.xml
@@ -0,0 +1,7 @@
+
+
+ - Home
+ - Products
+
+ >
+
\ No newline at end of file
diff --git a/data/pages/items.xml b/data/pages/items.xml
deleted file mode 100644
index d8d6875..0000000
--- a/data/pages/items.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/data/pages/products.xml b/data/pages/products.xml
new file mode 100644
index 0000000..9397551
--- /dev/null
+++ b/data/pages/products.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/data/pages/theme.lua b/data/pages/theme.lua
new file mode 100644
index 0000000..116981d
--- /dev/null
+++ b/data/pages/theme.lua
@@ -0,0 +1,14 @@
+return {
+ FrameBG = colors.black,
+ MenubarBG = colors.cyan,
+ MenubarText = colors.white,
+ SelectionText = colors.white,
+ SelectionBG = colors.black,
+ ListBG = colors.gray,
+ ListText = colors.black,
+ LabelBG = colors.black,
+ LabelText = colors.white,
+ ScrollbarText = colors.black,
+ ScrollbarBG = colors.gray,
+ ScrollbarSymbolColor = colors.lightGray
+}
\ No newline at end of file
diff --git a/data/products.lua b/data/products.lua
index b0d94b8..8981142 100644
--- a/data/products.lua
+++ b/data/products.lua
@@ -1,4 +1,4 @@
-local products = {
+return {
{
displayName = "Dirt",
categorys={"Items"},
@@ -28,5 +28,4 @@
link = "https://devbin.dev/8f3wy"
}
}
-};
-return products;
+}
\ No newline at end of file
diff --git a/data/services.lua b/data/services.lua
index 0b4a26b..c207692 100644
--- a/data/services.lua
+++ b/data/services.lua
@@ -1,4 +1,4 @@
-local services = {
+return {
item = {
chests = {
{
@@ -11,5 +11,4 @@
}
}
}
-};
-return services;
+}
\ No newline at end of file
diff --git a/src/init.lua b/src/init.lua
index 18c2119..495cbdb 100644
--- a/src/init.lua
+++ b/src/init.lua
@@ -1,112 +1,158 @@
-- make a copy of package.path
-local old_path = package.path
local sSrc = fs.getDir(shell.getRunningProgram())
local sRoot = fs.combine(sSrc,"..")
local sData = fs.combine(sRoot,"data")
+local sFont = fs.combine(sData,"font")
+local sPage = fs.combine(sData,"pages")
+
local basalt = require("basalt")
+local bdf = require("basalt/libraries/miniBDF")
local ctx
-package.path = string.format(
- "/%s/?.lua;/rom/modules/main/?.lua", sSrc
-)
local function init(...)
- ctx = {gui={},pages={},current=1,scroll=0,redraw=true}
+ -- [Context]
+ ctx = {gui={},theme={},config={},pages={},current=1,scroll=0,redraw=true}
- -- load pages
- local pages = fs.list(fs.combine(sData,"pages"))
+ -- [Fonts]
+ fontBDF = {}
+ if fs.exists(sFont) and fs.isDir(sFont) then
+ local fonts = fs.list(sFont)
+ for i=1,#fonts do
+ local tmp = bdf.loadBDF(fs.combine(sFont,fonts[i]))
+ local count,msg = bdf.checkFont(tmp)
+ if count > 0 then
+ printError("Could not load font \'"..fonts[i].."\'!")
+ for j=1,#msg do
+ printError(" * "..msg[j])
+ end
+ sleep(1)
+ else
+ fontBDF[tmp.name] = tmp
+ end
+ end
+ end
+
+ -- [Pages]
+ local pages = fs.list(sPage)
for i=1,#pages do
- local f = fs.open(fs.combine(sData,"pages",pages[i]), 'r')
+ local f = fs.open(fs.combine(sPage,pages[i]), 'r')
ctx.pages[pages[i]] = f.readAll()
f.close()
end
- -- load products
+ -- [Data] (config,theme,products, etc.)
+ local function loadLuaFile(path, env)
+ if fs.exists(path) and not fs.isDir(path) then
+
+ local success,result = pcall( loadfile(path, "t", env) )
+ if success and type(result) == "table" then
+ return result
+ else
+ printError("Could not load \'"..fs.getName(path).."\' properly!\n"..tostring(theme))
+ sleep(1)
+ end
+ end
+ return false
+ end
+ -- theme
+ local col = {white=0x1,orange=0x2,magenta=0x4,lightBlue=0x8,yellow=0x10,lime=0x20,pink=0x40,grey=0x80,lightGrey=0x100,cyan=0x200,purple=0x400,blue=0x800,brown=0x1000,green=0x2000,red=0x4000,black=0x8000}
+ local inferiorcol=col; inferiorcol.gray=col.grey; inferiorcol.lightGray=col.lightGrey
+ local result = loadLuaFile(fs.combine(sPage,"theme.lua"), {colours=col,colors=inferiorcol})
+ if not result then return end
+ ctx.theme = result
+ -- config
+ local result = loadLuaFile(fs.combine(sData,"config.lua"))
+ if not result then return end
+ ctx.config = result
return ctx
end
+local function main(ctx)
+ local base = basalt.createFrame()
+ :setTheme(ctx.theme)
+ :addLayout(fs.combine(sPage,"index.xml"))
+
+ ---Saves the current proucts states into the file
+ ---and loads them into the interface.
+ local function updateProducts()
+
+ end
+
+ local sCurPage = ""
+ parallel.waitForAny(
+ basalt.autoUpdate,
+ function()
+ local menubar = base:getDeepObject("main-menubar")
+ local displayPage = base:getDeepObject("main-content")
+
+ if not (menubar or displayPage) then
+ return printError("Content is missing in index.xml!\nMake sure the following things are there:\n * Menubar | id=\"main-menubar\"\n * Frame | id=\"main-content\"")
+ end
+
+ while true do
+ -- Change pages
+ local tmpPage = menubar:getItem(menubar:getItemIndex()).text
+ if tmpPage ~= sCurPage then
+ sCurPage = tmpPage
+ local oldLayout = displayPage:getLastLayout()
+ for _,v in pairs(oldLayout) do
+ displayPage:removeObject(v)
+ end
+
+ displayPage:addLayoutFromString(ctx.pages[sCurPage:lower()..".xml"])
+ -- Go through layout and replace stuff with our content
+ local function repalceContent(layout)
+ for _,object in pairs(layout) do
+ -- Is frame?
+ if object.addLayout then
+ local subLayout = object:getLastLayout()
+ repalceContent(subLayout)
+ -- Is something we are looking for?
+ elseif object.setText then
+ local id = object:getName()
+ local txt = object:getValue()
+ if id:find("subtitle") then
+ object:setText(string.format(txt,ctx.config.details.description))
+ elseif id:find("title") then
+ object:setText(string.format(txt,ctx.config.details.title))
+ end
+ end
+ end
+ end
+
+ local layout = displayPage:getLastLayout()
+ repalceContent(layout)
+ end
+
+ -- Update products
+ if updateContent then
+
+ updateContent = false
+ end
+ sleep()
+ end
+ end
+ )
+end
+
+
-- INIT
+local noErrors = true
local args = table.pack(...)
xpcall(function()
init(table.unpack(args,1,args.n))
end,function(err)
printError(err)
+ noErrors=false
end)
--- Create basalt index page
-local base = basalt.createFrame()
- :setTheme({
- FrameBG = colors.black,
- MenubarBG = colors.cyan,
- MenubarText = colors.white,
- SelectionText = colors.white,
- SelectionBG = colors.black,
- ListBG = colors.gray,
- ListText = colors.black,
- LabelBG = colors.black,
- LabelText = colors.white,
- ScrollbarText = colors.black,
- ScrollbarBG = colors.gray,
- ScrollbarSymbolColor = colors.lightGray
- })
- :addLayout(fs.combine(sData,"index.xml"))
-
----Saves the current proucts states into the file
----and loads them into the interface.
-local function updateProducts()
-
-end
-
-local sCurPage = ""
--- MAIN LOOP
-parallel.waitForAny(
- basalt.autoUpdate,
- function()
- local scrollbar = base:getDeepObject("main-scroll")
- local menubar = base:getDeepObject("main-menubar")
- local displayPage = base:getDeepObject("main-content")
-
- -- Background
- local bg = ""
- local updateContent = true
- local w,h = term.getSize()
- for y=1,h do
- bg = bg..('\127'):rep(w-1)..' '
- end
- bg = displayPage:addLabel()
- :setBackground(colors.black)
- :setForeground(colors.gray)
- :setText(bg)
- :setSize(w-1,h-1)
- :setPosition(1,1)
-
- while true do
- -- Change pages
- local tmpPage = menubar:getItem(menubar:getItemIndex()).text
- if tmpPage ~= sCurPage then
- sCurPage = tmpPage
- local oldLayout = displayPage:getLastLayout()
- for _,v in pairs(oldLayout) do
- displayPage:removeObject(v)
- end
- displayPage:addLayoutFromString(ctx.pages[sCurPage:lower()..".xml"])
- end
-
- -- Update products
- if updateContent then
-
- updateContent = false
- end
-
- -- Scrolling
- bg:setPosition(1, scrollbar:getIndex()-1)
- displayPage:setOffset(0, scrollbar:getIndex()-1)
- sleep()
- end
- end
-)
-
-
--- restores package path to original
-package.path = old_path
\ No newline at end of file
+-- MAIN
+if noErrors then
+ xpcall(function()
+ main(ctx)
+ end,function(err)
+ printError(err)
+ end)
+end
\ No newline at end of file
diff --git a/src/miniBDF.lua b/src/miniBDF.lua
deleted file mode 100644
index 8e51463..0000000
--- a/src/miniBDF.lua
+++ /dev/null
@@ -1,154 +0,0 @@
-local data = {
- FONT = function(font,line)
- font.name = line
- end,
- FONTBOUNDINGBOX = function(font,line)
- local type={"width","height"}--,"offx","offy"}
- local i=1
- for word in string.gmatch(line, '([^ ]+)') do
- if i > #type then return end
- font[type[i]] = tonumber(word) or 0
- i=i+1
- end
- print(font.width,font.height)
- end,
- CHARSET_REGISTRY = function(font,line)
- if line:find("ISO") and line:find("8859") then
- font.validCharReg = font.validCharReg+1
- end
- end,
- CHARSET_ENCODING = function(font,line)
- if line:find("\"1\"") then
- font.validCharReg = font.validCharReg+1
- end
- end,
- CHARS = function(font,line)
- local num = tonumber(line) or 0
- if num == 256 then
- font.validCharReg = font.validCharReg+1
- end
- end,
- STARTCHAR = function(font,line)
- font._CUR_CHAR = {name=line}
- end,
- ENCODING = function(font,line)
- if not font._CUR_CHAR then return end
- font._CUR_CHAR.byte = tonumber(line) or 0
- end,
- BBX = function(font, line)
- local i=1
- local b = {"width","height","offx","offy"}
- font._CUR_CHAR.bound = {}
- for word in string.gmatch(line, '([^ ]+)') do
- if i > #b then return end
- font._CUR_CHAR.bound[b[i]] = tonumber(word) or 0
- i=i+1
- end
- end,
- BITMAP = function(font,_)
- font.isBitmap = true
- end
-}
-
----Parses a .BDF font file into a in lua readable table.
----@param path string The path to the .BDF file
----@return table font The result
-local function loadBDF(path)
- if not (fs.exists(path) and not fs.isDir(path)) then
- return printError("Could not load: \'"..path.."\'!")
- end
-
- local f = fs.open(path, 'r')
- local font = {bitmap={},validCharReg=0,isBitmap=false}
-
- local line = f.readLine()
- repeat
- if font.isBitmap then
- if line:find("ENDCHAR") then
- -- Finishing
- font.isBitmap = false
- local byte = font._CUR_CHAR.byte
- font._CUR_CHAR.byte = nil
- font.bitmap[byte] = {}
- for k,v in pairs(font._CUR_CHAR) do
- font.bitmap[byte][k] = v
- end
- font._CUR_CHAR = nil
- else
- local num = tonumber("0x"..line)
- if not num then return end
-
- local function ffs(value)
- if value == 0 then return 0 end
- local pos = 0;
- while bit32.band(value, 1) == 0 do
- value = bit32.rshift(value, 1);
- pos = pos + 1
- end
- return pos
- end
-
- local l = ""
- local w = math.ceil(math.floor(math.log(num) / math.log(2)) / 8) * 8
- for i = ffs(num) or 0, w do
- l = l..bit32.band(bit32.rshift(num, i-1), 1)
- end
- l = l:reverse()
- local w = font._CUR_CHAR.bound.width
- if #l > w then
- l = l:sub(1,w)
- elseif #l < w then
- l = l..('0'):rep(w-#l)
- end
-
- font._CUR_CHAR[#font._CUR_CHAR+1] = l
- end
- else
- local label = line:match('([^ ]+)')
- if data[label] then
- data[label](font, line:sub(#label+2))
- end
- end
- line = f.readLine()
- until line == nil
-
- f.close()
- font.isBitmap = nil
- font.validCharReg = (font.validCharReg == 3)
-
- return font
-end
-
----Checks for errors a font may have. Should return 0.
----The bigger the results number, the more errors it has.
----@param font table The font that will be checked.
----@return number errors The amount of errors the font has.
-local function checkFont(font)
- local msg = {}
- local errorCounter = 0
- if type(font.name) ~= "string" then
- errorCounter = errorCounter+1
- table.insert(msg,"Font has no name.")
- elseif type(font.width) ~= "number" then
- errorCounter = errorCounter+1
- table.insert(msg,"Font has no global width.")
- elseif type(font.height) ~= "number" then
- errorCounter = errorCounter+1
- table.insert(msg,"Font has no global height.")
- elseif not font.validCharReg then
- errorCounter = errorCounter+1
- table.insert(msg,"Font uses not supported format.")
- elseif type(font.bitmap) ~= "table" then
- errorCounter = errorCounter+1
- table.insert(msg,"Font has no bitmaps (nothing to render)")
- elseif #font.bitmap ~= 255 then
- errorCounter = errorCounter+1
- table.insert(msg,"Font may have missing chars.")
- end
- return errorCounter,msg
-end
-
-return {
- loadBDF = loadBDF,
- checkFont = checkFont
-}
\ No newline at end of file