PlatformIO package of the Teensy core framework compatible with GCC 10 & C++20
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

475 line
24KB

  1. /**
  2. ** The original 3x5 font is licensed under the 3-clause BSD license:
  3. **
  4. ** Copyright 1999 Brian J. Swetland
  5. ** Copyright 1999 Vassilii Khachaturov
  6. ** Portions (of vt100.c/vt100.h) copyright Dan Marks
  7. **
  8. ** All rights reserved.
  9. **
  10. ** Redistribution and use in source and binary forms, with or without
  11. ** modification, are permitted provided that the following conditions
  12. ** are met:
  13. ** 1. Redistributions of source code must retain the above copyright
  14. ** notice, this list of conditions, and the following disclaimer.
  15. ** 2. Redistributions in binary form must reproduce the above copyright
  16. ** notice, this list of conditions, and the following disclaimer in the
  17. ** documentation and/or other materials provided with the distribution.
  18. ** 3. The name of the authors may not be used to endorse or promote products
  19. ** derived from this software without specific prior written permission.
  20. **
  21. ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  22. ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23. ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24. ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  25. ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26. ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30. ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. **
  32. ** Modifications to Tom Thumb for improved readability are from Robey Pointer,
  33. ** see:
  34. ** http://robey.lag.net/2010/01/23/tiny-monospace-font.html
  35. **
  36. ** The original author does not have any objection to relicensing of Robey
  37. ** Pointer's modifications (in this file) in a more permissive license. See
  38. ** the discussion at the above blog, and also here:
  39. ** http://opengameart.org/forumtopic/how-to-submit-art-using-the-3-clause-bsd-license
  40. **
  41. ** Feb 21, 2016: Conversion from Linux BDF --> Adafruit GFX font,
  42. ** with the help of this Python script:
  43. ** https://gist.github.com/skelliam/322d421f028545f16f6d
  44. ** William Skellenger (williamj@skellenger.net)
  45. ** Twitter: @skelliam
  46. **
  47. */
  48. #define TOMTHUMB_USE_EXTENDED 0
  49. const uint8_t TomThumbBitmaps[] PROGMEM = {
  50. 0x00, /* 0x20 space */
  51. 0x80, 0x80, 0x80, 0x00, 0x80, /* 0x21 exclam */
  52. 0xA0, 0xA0, /* 0x22 quotedbl */
  53. 0xA0, 0xE0, 0xA0, 0xE0, 0xA0, /* 0x23 numbersign */
  54. 0x60, 0xC0, 0x60, 0xC0, 0x40, /* 0x24 dollar */
  55. 0x80, 0x20, 0x40, 0x80, 0x20, /* 0x25 percent */
  56. 0xC0, 0xC0, 0xE0, 0xA0, 0x60, /* 0x26 ampersand */
  57. 0x80, 0x80, /* 0x27 quotesingle */
  58. 0x40, 0x80, 0x80, 0x80, 0x40, /* 0x28 parenleft */
  59. 0x80, 0x40, 0x40, 0x40, 0x80, /* 0x29 parenright */
  60. 0xA0, 0x40, 0xA0, /* 0x2A asterisk */
  61. 0x40, 0xE0, 0x40, /* 0x2B plus */
  62. 0x40, 0x80, /* 0x2C comma */
  63. 0xE0, /* 0x2D hyphen */
  64. 0x80, /* 0x2E period */
  65. 0x20, 0x20, 0x40, 0x80, 0x80, /* 0x2F slash */
  66. 0x60, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x30 zero */
  67. 0x40, 0xC0, 0x40, 0x40, 0x40, /* 0x31 one */
  68. 0xC0, 0x20, 0x40, 0x80, 0xE0, /* 0x32 two */
  69. 0xC0, 0x20, 0x40, 0x20, 0xC0, /* 0x33 three */
  70. 0xA0, 0xA0, 0xE0, 0x20, 0x20, /* 0x34 four */
  71. 0xE0, 0x80, 0xC0, 0x20, 0xC0, /* 0x35 five */
  72. 0x60, 0x80, 0xE0, 0xA0, 0xE0, /* 0x36 six */
  73. 0xE0, 0x20, 0x40, 0x80, 0x80, /* 0x37 seven */
  74. 0xE0, 0xA0, 0xE0, 0xA0, 0xE0, /* 0x38 eight */
  75. 0xE0, 0xA0, 0xE0, 0x20, 0xC0, /* 0x39 nine */
  76. 0x80, 0x00, 0x80, /* 0x3A colon */
  77. 0x40, 0x00, 0x40, 0x80, /* 0x3B semicolon */
  78. 0x20, 0x40, 0x80, 0x40, 0x20, /* 0x3C less */
  79. 0xE0, 0x00, 0xE0, /* 0x3D equal */
  80. 0x80, 0x40, 0x20, 0x40, 0x80, /* 0x3E greater */
  81. 0xE0, 0x20, 0x40, 0x00, 0x40, /* 0x3F question */
  82. 0x40, 0xA0, 0xE0, 0x80, 0x60, /* 0x40 at */
  83. 0x40, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x41 A */
  84. 0xC0, 0xA0, 0xC0, 0xA0, 0xC0, /* 0x42 B */
  85. 0x60, 0x80, 0x80, 0x80, 0x60, /* 0x43 C */
  86. 0xC0, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x44 D */
  87. 0xE0, 0x80, 0xE0, 0x80, 0xE0, /* 0x45 E */
  88. 0xE0, 0x80, 0xE0, 0x80, 0x80, /* 0x46 F */
  89. 0x60, 0x80, 0xE0, 0xA0, 0x60, /* 0x47 G */
  90. 0xA0, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x48 H */
  91. 0xE0, 0x40, 0x40, 0x40, 0xE0, /* 0x49 I */
  92. 0x20, 0x20, 0x20, 0xA0, 0x40, /* 0x4A J */
  93. 0xA0, 0xA0, 0xC0, 0xA0, 0xA0, /* 0x4B K */
  94. 0x80, 0x80, 0x80, 0x80, 0xE0, /* 0x4C L */
  95. 0xA0, 0xE0, 0xE0, 0xA0, 0xA0, /* 0x4D M */
  96. 0xA0, 0xE0, 0xE0, 0xE0, 0xA0, /* 0x4E N */
  97. 0x40, 0xA0, 0xA0, 0xA0, 0x40, /* 0x4F O */
  98. 0xC0, 0xA0, 0xC0, 0x80, 0x80, /* 0x50 P */
  99. 0x40, 0xA0, 0xA0, 0xE0, 0x60, /* 0x51 Q */
  100. 0xC0, 0xA0, 0xE0, 0xC0, 0xA0, /* 0x52 R */
  101. 0x60, 0x80, 0x40, 0x20, 0xC0, /* 0x53 S */
  102. 0xE0, 0x40, 0x40, 0x40, 0x40, /* 0x54 T */
  103. 0xA0, 0xA0, 0xA0, 0xA0, 0x60, /* 0x55 U */
  104. 0xA0, 0xA0, 0xA0, 0x40, 0x40, /* 0x56 V */
  105. 0xA0, 0xA0, 0xE0, 0xE0, 0xA0, /* 0x57 W */
  106. 0xA0, 0xA0, 0x40, 0xA0, 0xA0, /* 0x58 X */
  107. 0xA0, 0xA0, 0x40, 0x40, 0x40, /* 0x59 Y */
  108. 0xE0, 0x20, 0x40, 0x80, 0xE0, /* 0x5A Z */
  109. 0xE0, 0x80, 0x80, 0x80, 0xE0, /* 0x5B bracketleft */
  110. 0x80, 0x40, 0x20, /* 0x5C backslash */
  111. 0xE0, 0x20, 0x20, 0x20, 0xE0, /* 0x5D bracketright */
  112. 0x40, 0xA0, /* 0x5E asciicircum */
  113. 0xE0, /* 0x5F underscore */
  114. 0x80, 0x40, /* 0x60 grave */
  115. 0xC0, 0x60, 0xA0, 0xE0, /* 0x61 a */
  116. 0x80, 0xC0, 0xA0, 0xA0, 0xC0, /* 0x62 b */
  117. 0x60, 0x80, 0x80, 0x60, /* 0x63 c */
  118. 0x20, 0x60, 0xA0, 0xA0, 0x60, /* 0x64 d */
  119. 0x60, 0xA0, 0xC0, 0x60, /* 0x65 e */
  120. 0x20, 0x40, 0xE0, 0x40, 0x40, /* 0x66 f */
  121. 0x60, 0xA0, 0xE0, 0x20, 0x40, /* 0x67 g */
  122. 0x80, 0xC0, 0xA0, 0xA0, 0xA0, /* 0x68 h */
  123. 0x80, 0x00, 0x80, 0x80, 0x80, /* 0x69 i */
  124. 0x20, 0x00, 0x20, 0x20, 0xA0, 0x40, /* 0x6A j */
  125. 0x80, 0xA0, 0xC0, 0xC0, 0xA0, /* 0x6B k */
  126. 0xC0, 0x40, 0x40, 0x40, 0xE0, /* 0x6C l */
  127. 0xE0, 0xE0, 0xE0, 0xA0, /* 0x6D m */
  128. 0xC0, 0xA0, 0xA0, 0xA0, /* 0x6E n */
  129. 0x40, 0xA0, 0xA0, 0x40, /* 0x6F o */
  130. 0xC0, 0xA0, 0xA0, 0xC0, 0x80, /* 0x70 p */
  131. 0x60, 0xA0, 0xA0, 0x60, 0x20, /* 0x71 q */
  132. 0x60, 0x80, 0x80, 0x80, /* 0x72 r */
  133. 0x60, 0xC0, 0x60, 0xC0, /* 0x73 s */
  134. 0x40, 0xE0, 0x40, 0x40, 0x60, /* 0x74 t */
  135. 0xA0, 0xA0, 0xA0, 0x60, /* 0x75 u */
  136. 0xA0, 0xA0, 0xE0, 0x40, /* 0x76 v */
  137. 0xA0, 0xE0, 0xE0, 0xE0, /* 0x77 w */
  138. 0xA0, 0x40, 0x40, 0xA0, /* 0x78 x */
  139. 0xA0, 0xA0, 0x60, 0x20, 0x40, /* 0x79 y */
  140. 0xE0, 0x60, 0xC0, 0xE0, /* 0x7A z */
  141. 0x60, 0x40, 0x80, 0x40, 0x60, /* 0x7B braceleft */
  142. 0x80, 0x80, 0x00, 0x80, 0x80, /* 0x7C bar */
  143. 0xC0, 0x40, 0x20, 0x40, 0xC0, /* 0x7D braceright */
  144. 0x60, 0xC0, /* 0x7E asciitilde */
  145. #if (TOMTHUMB_USE_EXTENDED)
  146. 0x80, 0x00, 0x80, 0x80, 0x80, /* 0xA1 exclamdown */
  147. 0x40, 0xE0, 0x80, 0xE0, 0x40, /* 0xA2 cent */
  148. 0x60, 0x40, 0xE0, 0x40, 0xE0, /* 0xA3 sterling */
  149. 0xA0, 0x40, 0xE0, 0x40, 0xA0, /* 0xA4 currency */
  150. 0xA0, 0xA0, 0x40, 0xE0, 0x40, /* 0xA5 yen */
  151. 0x80, 0x80, 0x00, 0x80, 0x80, /* 0xA6 brokenbar */
  152. 0x60, 0x40, 0xA0, 0x40, 0xC0, /* 0xA7 section */
  153. 0xA0, /* 0xA8 dieresis */
  154. 0x60, 0x80, 0x60, /* 0xA9 copyright */
  155. 0x60, 0xA0, 0xE0, 0x00, 0xE0, /* 0xAA ordfeminine */
  156. 0x40, 0x80, 0x40, /* 0xAB guillemotleft */
  157. 0xE0, 0x20, /* 0xAC logicalnot */
  158. 0xC0, /* 0xAD softhyphen */
  159. 0xC0, 0xC0, 0xA0, /* 0xAE registered */
  160. 0xE0, /* 0xAF macron */
  161. 0x40, 0xA0, 0x40, /* 0xB0 degree */
  162. 0x40, 0xE0, 0x40, 0x00, 0xE0, /* 0xB1 plusminus */
  163. 0xC0, 0x40, 0x60, /* 0xB2 twosuperior */
  164. 0xE0, 0x60, 0xE0, /* 0xB3 threesuperior */
  165. 0x40, 0x80, /* 0xB4 acute */
  166. 0xA0, 0xA0, 0xA0, 0xC0, 0x80, /* 0xB5 mu */
  167. 0x60, 0xA0, 0x60, 0x60, 0x60, /* 0xB6 paragraph */
  168. 0xE0, 0xE0, 0xE0, /* 0xB7 periodcentered */
  169. 0x40, 0x20, 0xC0, /* 0xB8 cedilla */
  170. 0x80, 0x80, 0x80, /* 0xB9 onesuperior */
  171. 0x40, 0xA0, 0x40, 0x00, 0xE0, /* 0xBA ordmasculine */
  172. 0x80, 0x40, 0x80, /* 0xBB guillemotright */
  173. 0x80, 0x80, 0x00, 0x60, 0x20, /* 0xBC onequarter */
  174. 0x80, 0x80, 0x00, 0xC0, 0x60, /* 0xBD onehalf */
  175. 0xC0, 0xC0, 0x00, 0x60, 0x20, /* 0xBE threequarters */
  176. 0x40, 0x00, 0x40, 0x80, 0xE0, /* 0xBF questiondown */
  177. 0x40, 0x20, 0x40, 0xE0, 0xA0, /* 0xC0 Agrave */
  178. 0x40, 0x80, 0x40, 0xE0, 0xA0, /* 0xC1 Aacute */
  179. 0xE0, 0x00, 0x40, 0xE0, 0xA0, /* 0xC2 Acircumflex */
  180. 0x60, 0xC0, 0x40, 0xE0, 0xA0, /* 0xC3 Atilde */
  181. 0xA0, 0x40, 0xA0, 0xE0, 0xA0, /* 0xC4 Adieresis */
  182. 0xC0, 0xC0, 0xA0, 0xE0, 0xA0, /* 0xC5 Aring */
  183. 0x60, 0xC0, 0xE0, 0xC0, 0xE0, /* 0xC6 AE */
  184. 0x60, 0x80, 0x80, 0x60, 0x20, 0x40, /* 0xC7 Ccedilla */
  185. 0x40, 0x20, 0xE0, 0xC0, 0xE0, /* 0xC8 Egrave */
  186. 0x40, 0x80, 0xE0, 0xC0, 0xE0, /* 0xC9 Eacute */
  187. 0xE0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCA Ecircumflex */
  188. 0xA0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCB Edieresis */
  189. 0x40, 0x20, 0xE0, 0x40, 0xE0, /* 0xCC Igrave */
  190. 0x40, 0x80, 0xE0, 0x40, 0xE0, /* 0xCD Iacute */
  191. 0xE0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCE Icircumflex */
  192. 0xA0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCF Idieresis */
  193. 0xC0, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD0 Eth */
  194. 0xC0, 0x60, 0xA0, 0xE0, 0xA0, /* 0xD1 Ntilde */
  195. 0x40, 0x20, 0xE0, 0xA0, 0xE0, /* 0xD2 Ograve */
  196. 0x40, 0x80, 0xE0, 0xA0, 0xE0, /* 0xD3 Oacute */
  197. 0xE0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD4 Ocircumflex */
  198. 0xC0, 0x60, 0xE0, 0xA0, 0xE0, /* 0xD5 Otilde */
  199. 0xA0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD6 Odieresis */
  200. 0xA0, 0x40, 0xA0, /* 0xD7 multiply */
  201. 0x60, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD8 Oslash */
  202. 0x80, 0x40, 0xA0, 0xA0, 0xE0, /* 0xD9 Ugrave */
  203. 0x20, 0x40, 0xA0, 0xA0, 0xE0, /* 0xDA Uacute */
  204. 0xE0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDB Ucircumflex */
  205. 0xA0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDC Udieresis */
  206. 0x20, 0x40, 0xA0, 0xE0, 0x40, /* 0xDD Yacute */
  207. 0x80, 0xE0, 0xA0, 0xE0, 0x80, /* 0xDE Thorn */
  208. 0x60, 0xA0, 0xC0, 0xA0, 0xC0, 0x80, /* 0xDF germandbls */
  209. 0x40, 0x20, 0x60, 0xA0, 0xE0, /* 0xE0 agrave */
  210. 0x40, 0x80, 0x60, 0xA0, 0xE0, /* 0xE1 aacute */
  211. 0xE0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE2 acircumflex */
  212. 0x60, 0xC0, 0x60, 0xA0, 0xE0, /* 0xE3 atilde */
  213. 0xA0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE4 adieresis */
  214. 0x60, 0x60, 0x60, 0xA0, 0xE0, /* 0xE5 aring */
  215. 0x60, 0xE0, 0xE0, 0xC0, /* 0xE6 ae */
  216. 0x60, 0x80, 0x60, 0x20, 0x40, /* 0xE7 ccedilla */
  217. 0x40, 0x20, 0x60, 0xE0, 0x60, /* 0xE8 egrave */
  218. 0x40, 0x80, 0x60, 0xE0, 0x60, /* 0xE9 eacute */
  219. 0xE0, 0x00, 0x60, 0xE0, 0x60, /* 0xEA ecircumflex */
  220. 0xA0, 0x00, 0x60, 0xE0, 0x60, /* 0xEB edieresis */
  221. 0x80, 0x40, 0x80, 0x80, 0x80, /* 0xEC igrave */
  222. 0x40, 0x80, 0x40, 0x40, 0x40, /* 0xED iacute */
  223. 0xE0, 0x00, 0x40, 0x40, 0x40, /* 0xEE icircumflex */
  224. 0xA0, 0x00, 0x40, 0x40, 0x40, /* 0xEF idieresis */
  225. 0x60, 0xC0, 0x60, 0xA0, 0x60, /* 0xF0 eth */
  226. 0xC0, 0x60, 0xC0, 0xA0, 0xA0, /* 0xF1 ntilde */
  227. 0x40, 0x20, 0x40, 0xA0, 0x40, /* 0xF2 ograve */
  228. 0x40, 0x80, 0x40, 0xA0, 0x40, /* 0xF3 oacute */
  229. 0xE0, 0x00, 0x40, 0xA0, 0x40, /* 0xF4 ocircumflex */
  230. 0xC0, 0x60, 0x40, 0xA0, 0x40, /* 0xF5 otilde */
  231. 0xA0, 0x00, 0x40, 0xA0, 0x40, /* 0xF6 odieresis */
  232. 0x40, 0x00, 0xE0, 0x00, 0x40, /* 0xF7 divide */
  233. 0x60, 0xE0, 0xA0, 0xC0, /* 0xF8 oslash */
  234. 0x80, 0x40, 0xA0, 0xA0, 0x60, /* 0xF9 ugrave */
  235. 0x20, 0x40, 0xA0, 0xA0, 0x60, /* 0xFA uacute */
  236. 0xE0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFB ucircumflex */
  237. 0xA0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFC udieresis */
  238. 0x20, 0x40, 0xA0, 0x60, 0x20, 0x40, /* 0xFD yacute */
  239. 0x80, 0xC0, 0xA0, 0xC0, 0x80, /* 0xFE thorn */
  240. 0xA0, 0x00, 0xA0, 0x60, 0x20, 0x40, /* 0xFF ydieresis */
  241. 0x00, /* 0x11D gcircumflex */
  242. 0x60, 0xC0, 0xE0, 0xC0, 0x60, /* 0x152 OE */
  243. 0x60, 0xE0, 0xC0, 0xE0, /* 0x153 oe */
  244. 0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x160 Scaron */
  245. 0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x161 scaron */
  246. 0xA0, 0x00, 0xA0, 0x40, 0x40, /* 0x178 Ydieresis */
  247. 0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17D Zcaron */
  248. 0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17E zcaron */
  249. 0x00, /* 0xEA4 uni0EA4 */
  250. 0x00, /* 0x13A0 uni13A0 */
  251. 0x80, /* 0x2022 bullet */
  252. 0xA0, /* 0x2026 ellipsis */
  253. 0x60, 0xE0, 0xE0, 0xC0, 0x60, /* 0x20AC Euro */
  254. 0xE0, 0xA0, 0xA0, 0xA0, 0xE0, /* 0xFFFD uniFFFD */
  255. #endif /* (TOMTHUMB_USE_EXTENDED) */
  256. };
  257. /* {offset, width, height, advance cursor, x offset, y offset} */
  258. const GFXglyph TomThumbGlyphs[] PROGMEM = {
  259. { 0, 8, 1, 2, 0, -5 }, /* 0x20 space */
  260. { 1, 8, 5, 2, 0, -5 }, /* 0x21 exclam */
  261. { 6, 8, 2, 4, 0, -5 }, /* 0x22 quotedbl */
  262. { 8, 8, 5, 4, 0, -5 }, /* 0x23 numbersign */
  263. { 13, 8, 5, 4, 0, -5 }, /* 0x24 dollar */
  264. { 18, 8, 5, 4, 0, -5 }, /* 0x25 percent */
  265. { 23, 8, 5, 4, 0, -5 }, /* 0x26 ampersand */
  266. { 28, 8, 2, 2, 0, -5 }, /* 0x27 quotesingle */
  267. { 30, 8, 5, 3, 0, -5 }, /* 0x28 parenleft */
  268. { 35, 8, 5, 3, 0, -5 }, /* 0x29 parenright */
  269. { 40, 8, 3, 4, 0, -5 }, /* 0x2A asterisk */
  270. { 43, 8, 3, 4, 0, -4 }, /* 0x2B plus */
  271. { 46, 8, 2, 3, 0, -2 }, /* 0x2C comma */
  272. { 48, 8, 1, 4, 0, -3 }, /* 0x2D hyphen */
  273. { 49, 8, 1, 2, 0, -1 }, /* 0x2E period */
  274. { 50, 8, 5, 4, 0, -5 }, /* 0x2F slash */
  275. { 55, 8, 5, 4, 0, -5 }, /* 0x30 zero */
  276. { 60, 8, 5, 3, 0, -5 }, /* 0x31 one */
  277. { 65, 8, 5, 4, 0, -5 }, /* 0x32 two */
  278. { 70, 8, 5, 4, 0, -5 }, /* 0x33 three */
  279. { 75, 8, 5, 4, 0, -5 }, /* 0x34 four */
  280. { 80, 8, 5, 4, 0, -5 }, /* 0x35 five */
  281. { 85, 8, 5, 4, 0, -5 }, /* 0x36 six */
  282. { 90, 8, 5, 4, 0, -5 }, /* 0x37 seven */
  283. { 95, 8, 5, 4, 0, -5 }, /* 0x38 eight */
  284. { 100, 8, 5, 4, 0, -5 }, /* 0x39 nine */
  285. { 105, 8, 3, 2, 0, -4 }, /* 0x3A colon */
  286. { 108, 8, 4, 3, 0, -4 }, /* 0x3B semicolon */
  287. { 112, 8, 5, 4, 0, -5 }, /* 0x3C less */
  288. { 117, 8, 3, 4, 0, -4 }, /* 0x3D equal */
  289. { 120, 8, 5, 4, 0, -5 }, /* 0x3E greater */
  290. { 125, 8, 5, 4, 0, -5 }, /* 0x3F question */
  291. { 130, 8, 5, 4, 0, -5 }, /* 0x40 at */
  292. { 135, 8, 5, 4, 0, -5 }, /* 0x41 A */
  293. { 140, 8, 5, 4, 0, -5 }, /* 0x42 B */
  294. { 145, 8, 5, 4, 0, -5 }, /* 0x43 C */
  295. { 150, 8, 5, 4, 0, -5 }, /* 0x44 D */
  296. { 155, 8, 5, 4, 0, -5 }, /* 0x45 E */
  297. { 160, 8, 5, 4, 0, -5 }, /* 0x46 F */
  298. { 165, 8, 5, 4, 0, -5 }, /* 0x47 G */
  299. { 170, 8, 5, 4, 0, -5 }, /* 0x48 H */
  300. { 175, 8, 5, 4, 0, -5 }, /* 0x49 I */
  301. { 180, 8, 5, 4, 0, -5 }, /* 0x4A J */
  302. { 185, 8, 5, 4, 0, -5 }, /* 0x4B K */
  303. { 190, 8, 5, 4, 0, -5 }, /* 0x4C L */
  304. { 195, 8, 5, 4, 0, -5 }, /* 0x4D M */
  305. { 200, 8, 5, 4, 0, -5 }, /* 0x4E N */
  306. { 205, 8, 5, 4, 0, -5 }, /* 0x4F O */
  307. { 210, 8, 5, 4, 0, -5 }, /* 0x50 P */
  308. { 215, 8, 5, 4, 0, -5 }, /* 0x51 Q */
  309. { 220, 8, 5, 4, 0, -5 }, /* 0x52 R */
  310. { 225, 8, 5, 4, 0, -5 }, /* 0x53 S */
  311. { 230, 8, 5, 4, 0, -5 }, /* 0x54 T */
  312. { 235, 8, 5, 4, 0, -5 }, /* 0x55 U */
  313. { 240, 8, 5, 4, 0, -5 }, /* 0x56 V */
  314. { 245, 8, 5, 4, 0, -5 }, /* 0x57 W */
  315. { 250, 8, 5, 4, 0, -5 }, /* 0x58 X */
  316. { 255, 8, 5, 4, 0, -5 }, /* 0x59 Y */
  317. { 260, 8, 5, 4, 0, -5 }, /* 0x5A Z */
  318. { 265, 8, 5, 4, 0, -5 }, /* 0x5B bracketleft */
  319. { 270, 8, 3, 4, 0, -4 }, /* 0x5C backslash */
  320. { 273, 8, 5, 4, 0, -5 }, /* 0x5D bracketright */
  321. { 278, 8, 2, 4, 0, -5 }, /* 0x5E asciicircum */
  322. { 280, 8, 1, 4, 0, -1 }, /* 0x5F underscore */
  323. { 281, 8, 2, 3, 0, -5 }, /* 0x60 grave */
  324. { 283, 8, 4, 4, 0, -4 }, /* 0x61 a */
  325. { 287, 8, 5, 4, 0, -5 }, /* 0x62 b */
  326. { 292, 8, 4, 4, 0, -4 }, /* 0x63 c */
  327. { 296, 8, 5, 4, 0, -5 }, /* 0x64 d */
  328. { 301, 8, 4, 4, 0, -4 }, /* 0x65 e */
  329. { 305, 8, 5, 4, 0, -5 }, /* 0x66 f */
  330. { 310, 8, 5, 4, 0, -4 }, /* 0x67 g */
  331. { 315, 8, 5, 4, 0, -5 }, /* 0x68 h */
  332. { 320, 8, 5, 2, 0, -5 }, /* 0x69 i */
  333. { 325, 8, 6, 4, 0, -5 }, /* 0x6A j */
  334. { 331, 8, 5, 4, 0, -5 }, /* 0x6B k */
  335. { 336, 8, 5, 4, 0, -5 }, /* 0x6C l */
  336. { 341, 8, 4, 4, 0, -4 }, /* 0x6D m */
  337. { 345, 8, 4, 4, 0, -4 }, /* 0x6E n */
  338. { 349, 8, 4, 4, 0, -4 }, /* 0x6F o */
  339. { 353, 8, 5, 4, 0, -4 }, /* 0x70 p */
  340. { 358, 8, 5, 4, 0, -4 }, /* 0x71 q */
  341. { 363, 8, 4, 4, 0, -4 }, /* 0x72 r */
  342. { 367, 8, 4, 4, 0, -4 }, /* 0x73 s */
  343. { 371, 8, 5, 4, 0, -5 }, /* 0x74 t */
  344. { 376, 8, 4, 4, 0, -4 }, /* 0x75 u */
  345. { 380, 8, 4, 4, 0, -4 }, /* 0x76 v */
  346. { 384, 8, 4, 4, 0, -4 }, /* 0x77 w */
  347. { 388, 8, 4, 4, 0, -4 }, /* 0x78 x */
  348. { 392, 8, 5, 4, 0, -4 }, /* 0x79 y */
  349. { 397, 8, 4, 4, 0, -4 }, /* 0x7A z */
  350. { 401, 8, 5, 4, 0, -5 }, /* 0x7B braceleft */
  351. { 406, 8, 5, 2, 0, -5 }, /* 0x7C bar */
  352. { 411, 8, 5, 4, 0, -5 }, /* 0x7D braceright */
  353. { 416, 8, 2, 4, 0, -5 }, /* 0x7E asciitilde */
  354. #if (TOMTHUMB_USE_EXTENDED)
  355. { 418, 8, 5, 2, 0, -5 }, /* 0xA1 exclamdown */
  356. { 423, 8, 5, 4, 0, -5 }, /* 0xA2 cent */
  357. { 428, 8, 5, 4, 0, -5 }, /* 0xA3 sterling */
  358. { 433, 8, 5, 4, 0, -5 }, /* 0xA4 currency */
  359. { 438, 8, 5, 4, 0, -5 }, /* 0xA5 yen */
  360. { 443, 8, 5, 2, 0, -5 }, /* 0xA6 brokenbar */
  361. { 448, 8, 5, 4, 0, -5 }, /* 0xA7 section */
  362. { 453, 8, 1, 4, 0, -5 }, /* 0xA8 dieresis */
  363. { 454, 8, 3, 4, 0, -5 }, /* 0xA9 copyright */
  364. { 457, 8, 5, 4, 0, -5 }, /* 0xAA ordfeminine */
  365. { 462, 8, 3, 3, 0, -5 }, /* 0xAB guillemotleft */
  366. { 465, 8, 2, 4, 0, -4 }, /* 0xAC logicalnot */
  367. { 467, 8, 1, 3, 0, -3 }, /* 0xAD softhyphen */
  368. { 468, 8, 3, 4, 0, -5 }, /* 0xAE registered */
  369. { 471, 8, 1, 4, 0, -5 }, /* 0xAF macron */
  370. { 472, 8, 3, 4, 0, -5 }, /* 0xB0 degree */
  371. { 475, 8, 5, 4, 0, -5 }, /* 0xB1 plusminus */
  372. { 480, 8, 3, 4, 0, -5 }, /* 0xB2 twosuperior */
  373. { 483, 8, 3, 4, 0, -5 }, /* 0xB3 threesuperior */
  374. { 486, 8, 2, 3, 0, -5 }, /* 0xB4 acute */
  375. { 488, 8, 5, 4, 0, -5 }, /* 0xB5 mu */
  376. { 493, 8, 5, 4, 0, -5 }, /* 0xB6 paragraph */
  377. { 498, 8, 3, 4, 0, -4 }, /* 0xB7 periodcentered */
  378. { 501, 8, 3, 4, 0, -3 }, /* 0xB8 cedilla */
  379. { 504, 8, 3, 2, 0, -5 }, /* 0xB9 onesuperior */
  380. { 507, 8, 5, 4, 0, -5 }, /* 0xBA ordmasculine */
  381. { 512, 8, 3, 3, 0, -5 }, /* 0xBB guillemotright */
  382. { 515, 8, 5, 4, 0, -5 }, /* 0xBC onequarter */
  383. { 520, 8, 5, 4, 0, -5 }, /* 0xBD onehalf */
  384. { 525, 8, 5, 4, 0, -5 }, /* 0xBE threequarters */
  385. { 530, 8, 5, 4, 0, -5 }, /* 0xBF questiondown */
  386. { 535, 8, 5, 4, 0, -5 }, /* 0xC0 Agrave */
  387. { 540, 8, 5, 4, 0, -5 }, /* 0xC1 Aacute */
  388. { 545, 8, 5, 4, 0, -5 }, /* 0xC2 Acircumflex */
  389. { 550, 8, 5, 4, 0, -5 }, /* 0xC3 Atilde */
  390. { 555, 8, 5, 4, 0, -5 }, /* 0xC4 Adieresis */
  391. { 560, 8, 5, 4, 0, -5 }, /* 0xC5 Aring */
  392. { 565, 8, 5, 4, 0, -5 }, /* 0xC6 AE */
  393. { 570, 8, 6, 4, 0, -5 }, /* 0xC7 Ccedilla */
  394. { 576, 8, 5, 4, 0, -5 }, /* 0xC8 Egrave */
  395. { 581, 8, 5, 4, 0, -5 }, /* 0xC9 Eacute */
  396. { 586, 8, 5, 4, 0, -5 }, /* 0xCA Ecircumflex */
  397. { 591, 8, 5, 4, 0, -5 }, /* 0xCB Edieresis */
  398. { 596, 8, 5, 4, 0, -5 }, /* 0xCC Igrave */
  399. { 601, 8, 5, 4, 0, -5 }, /* 0xCD Iacute */
  400. { 606, 8, 5, 4, 0, -5 }, /* 0xCE Icircumflex */
  401. { 611, 8, 5, 4, 0, -5 }, /* 0xCF Idieresis */
  402. { 616, 8, 5, 4, 0, -5 }, /* 0xD0 Eth */
  403. { 621, 8, 5, 4, 0, -5 }, /* 0xD1 Ntilde */
  404. { 626, 8, 5, 4, 0, -5 }, /* 0xD2 Ograve */
  405. { 631, 8, 5, 4, 0, -5 }, /* 0xD3 Oacute */
  406. { 636, 8, 5, 4, 0, -5 }, /* 0xD4 Ocircumflex */
  407. { 641, 8, 5, 4, 0, -5 }, /* 0xD5 Otilde */
  408. { 646, 8, 5, 4, 0, -5 }, /* 0xD6 Odieresis */
  409. { 651, 8, 3, 4, 0, -4 }, /* 0xD7 multiply */
  410. { 654, 8, 5, 4, 0, -5 }, /* 0xD8 Oslash */
  411. { 659, 8, 5, 4, 0, -5 }, /* 0xD9 Ugrave */
  412. { 664, 8, 5, 4, 0, -5 }, /* 0xDA Uacute */
  413. { 669, 8, 5, 4, 0, -5 }, /* 0xDB Ucircumflex */
  414. { 674, 8, 5, 4, 0, -5 }, /* 0xDC Udieresis */
  415. { 679, 8, 5, 4, 0, -5 }, /* 0xDD Yacute */
  416. { 684, 8, 5, 4, 0, -5 }, /* 0xDE Thorn */
  417. { 689, 8, 6, 4, 0, -5 }, /* 0xDF germandbls */
  418. { 695, 8, 5, 4, 0, -5 }, /* 0xE0 agrave */
  419. { 700, 8, 5, 4, 0, -5 }, /* 0xE1 aacute */
  420. { 705, 8, 5, 4, 0, -5 }, /* 0xE2 acircumflex */
  421. { 710, 8, 5, 4, 0, -5 }, /* 0xE3 atilde */
  422. { 715, 8, 5, 4, 0, -5 }, /* 0xE4 adieresis */
  423. { 720, 8, 5, 4, 0, -5 }, /* 0xE5 aring */
  424. { 725, 8, 4, 4, 0, -4 }, /* 0xE6 ae */
  425. { 729, 8, 5, 4, 0, -4 }, /* 0xE7 ccedilla */
  426. { 734, 8, 5, 4, 0, -5 }, /* 0xE8 egrave */
  427. { 739, 8, 5, 4, 0, -5 }, /* 0xE9 eacute */
  428. { 744, 8, 5, 4, 0, -5 }, /* 0xEA ecircumflex */
  429. { 749, 8, 5, 4, 0, -5 }, /* 0xEB edieresis */
  430. { 754, 8, 5, 3, 0, -5 }, /* 0xEC igrave */
  431. { 759, 8, 5, 3, 0, -5 }, /* 0xED iacute */
  432. { 764, 8, 5, 4, 0, -5 }, /* 0xEE icircumflex */
  433. { 769, 8, 5, 4, 0, -5 }, /* 0xEF idieresis */
  434. { 774, 8, 5, 4, 0, -5 }, /* 0xF0 eth */
  435. { 779, 8, 5, 4, 0, -5 }, /* 0xF1 ntilde */
  436. { 784, 8, 5, 4, 0, -5 }, /* 0xF2 ograve */
  437. { 789, 8, 5, 4, 0, -5 }, /* 0xF3 oacute */
  438. { 794, 8, 5, 4, 0, -5 }, /* 0xF4 ocircumflex */
  439. { 799, 8, 5, 4, 0, -5 }, /* 0xF5 otilde */
  440. { 804, 8, 5, 4, 0, -5 }, /* 0xF6 odieresis */
  441. { 809, 8, 5, 4, 0, -5 }, /* 0xF7 divide */
  442. { 814, 8, 4, 4, 0, -4 }, /* 0xF8 oslash */
  443. { 818, 8, 5, 4, 0, -5 }, /* 0xF9 ugrave */
  444. { 823, 8, 5, 4, 0, -5 }, /* 0xFA uacute */
  445. { 828, 8, 5, 4, 0, -5 }, /* 0xFB ucircumflex */
  446. { 833, 8, 5, 4, 0, -5 }, /* 0xFC udieresis */
  447. { 838, 8, 6, 4, 0, -5 }, /* 0xFD yacute */
  448. { 844, 8, 5, 4, 0, -4 }, /* 0xFE thorn */
  449. { 849, 8, 6, 4, 0, -5 }, /* 0xFF ydieresis */
  450. { 855, 8, 1, 2, 0, -1 }, /* 0x11D gcircumflex */
  451. { 856, 8, 5, 4, 0, -5 }, /* 0x152 OE */
  452. { 861, 8, 4, 4, 0, -4 }, /* 0x153 oe */
  453. { 865, 8, 5, 4, 0, -5 }, /* 0x160 Scaron */
  454. { 870, 8, 5, 4, 0, -5 }, /* 0x161 scaron */
  455. { 875, 8, 5, 4, 0, -5 }, /* 0x178 Ydieresis */
  456. { 880, 8, 5, 4, 0, -5 }, /* 0x17D Zcaron */
  457. { 885, 8, 5, 4, 0, -5 }, /* 0x17E zcaron */
  458. { 890, 8, 1, 2, 0, -1 }, /* 0xEA4 uni0EA4 */
  459. { 891, 8, 1, 2, 0, -1 }, /* 0x13A0 uni13A0 */
  460. { 892, 8, 1, 2, 0, -3 }, /* 0x2022 bullet */
  461. { 893, 8, 1, 4, 0, -1 }, /* 0x2026 ellipsis */
  462. { 894, 8, 5, 4, 0, -5 }, /* 0x20AC Euro */
  463. { 899, 8, 5, 4, 0, -5 }, /* 0xFFFD uniFFFD */
  464. #endif /* (TOMTHUMB_USE_EXTENDED) */
  465. };
  466. const GFXfont TomThumb PROGMEM = {
  467. (uint8_t *)TomThumbBitmaps,
  468. (GFXglyph *)TomThumbGlyphs,
  469. 0x20, 0x7E, 6 };