Commits

Trammell Hudson committed 173f5cc Draft

Hershey simplex font works

Comments (0)

Files changed (6)

 /** \file
- * Hershey fonts for the numbers 0-9
- * From:
+ * Complete ASCII Hershey Simplex font.
+ *
  * http://paulbourke.net/dataformats/hershey/
  *
- * Point x,y == -1 => pen up
- * Otherwise draw in a continuous path
+ * A few characters are simplified
  */
-
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#include <stdint.h>
 #include "hershey.h"
 
-#define POINT(x,y) { x, y }
-
-const path_t digits[][32] = {
-	[0] = {
-		POINT( 9,21),
-		POINT( 6,20),
-		POINT( 4,17),
-		POINT( 3,12),
-		POINT( 3, 9),
-		POINT( 4, 4),
-		POINT( 6, 1),
-		POINT( 9, 0),
-		POINT(11, 0),
-		POINT(14, 1),
-		POINT(16, 4),
-		POINT(17, 9),
-		POINT(17,12),
-		POINT(16,17),
-		POINT(14,20),
-		POINT(11,21),
-		POINT( 9,21),
+const PROGMEM hershey_char_t hershey_simplex[] = {
+	 { 
+	    0,16, /* Ascii 32 */
 	},
-	[1] = {
-		POINT( 6,17),
-		POINT( 8,18),
-		POINT(11,21),
-		POINT(11, 0),
+    	 {
+		8,10, /* Ascii 33 */
+	    { 5,21, 5, 7,-1,-1, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2, },
 	},
-	[2] = {
-		POINT( 4,16),
-		POINT( 4,17),
-		POINT( 5,19),
-		POINT( 6,20),
-		POINT( 8,21),
-		POINT(12,21),
-		POINT(14,20),
-		POINT(15,19),
-		POINT(16,17),
-		POINT(16,15),
-		POINT(15,13),
-		POINT(13,10),
-		POINT( 3, 0),
-		POINT(17, 0),
+	 {
+	    5,16, /* Ascii 34 */
+	    { 4,21, 4,14, -1,-1, 12,21, 12,14, },
 	},
-	[3] = {
-		POINT( 5,21),
-		POINT(16,21),
-		POINT(10,13),
-		POINT(13,13),
-		POINT(15,12),
-		POINT(16,11),
-		POINT(17, 8),
-		POINT(17, 6),
-		POINT(16, 3),
-		POINT(14, 1),
-		POINT(11, 0),
-		POINT( 8, 0),
-		POINT( 5, 1),
-		POINT( 4, 2),
-		POINT( 3, 4),
+	 {
+	   11,21, /* Ascii 35 */
+	   11,25, 4,-7, -1,-1, 17,25, 10,-7, -1,-1, 4,12, 18,12, -1,-1, 3, 6, 17, 6,
 	},
-	[4] = {
-		POINT(13,21),
-		POINT( 3, 7),
-		POINT(18, 7),
-		POINT(-1,-1),
-		POINT(13,21),
-		POINT(13, 0),
+	 {
+	   26,20, /* Ascii 36 */
+	    8,25, 8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21, 8,21, 5,20, 3,
+	   18, 3,16, 4,14, 5,13, 7,12,13,10,15, 9,16, 8,17, 6,17, 3,15, 1,12, 0,
+	    8, 0, 5, 1, 3, 3,
 	},
-	[5] = {
-		POINT(15,21),
-		POINT( 5,21),
-		POINT( 4,12),
-		POINT( 5,13),
-		POINT( 8,14),
-		POINT(11,14),
-		POINT(14,13),
-		POINT(16,11),
-		POINT(17, 8),
-		POINT(17, 6),
-		POINT(16, 3),
-		POINT(14, 1),
-		POINT(11, 0),
-		POINT( 8, 0),
-		POINT( 5, 1),
-		POINT( 4, 2),
-		POINT( 3, 4),
+   	{
+	   31,24, /* Ascii 37 */
+	   { 21,21, 3, 0,-1,-1, 8,21,10,19,10,17, 9,15, 7,14, 5,14, 3,16, 3,18, 4,
+	   20, 6,21, 8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17, 7,15, 6,14, 4,
+	   14, 2,16, 0,18, 0,20, 1,21, 3,21, 5,19, 7,17, 7, },
 	},
-	[6] = {
-		POINT(16,18),
-		POINT(15,20),
-		POINT(12,21),
-		POINT(10,21),
-		POINT( 7,20),
-		POINT( 5,17),
-		POINT( 4,12),
-		POINT( 4, 7),
-		POINT( 5, 3),
-		POINT( 7, 1),
-		POINT(10, 0),
-		POINT(11, 0),
-		POINT(14, 1),
-		POINT(16, 3),
-		POINT(17, 6),
-		POINT(17, 7),
-		POINT(16,10),
-		POINT(14,12),
-		POINT(11,13),
-		POINT(10,13),
-		POINT( 7,12),
-		POINT( 5,10),
-		POINT( 4, 7),
+	{
+#if 0
+   34,26, /* Ascii 38 */
+   23,12,23,13,22,14,21,14,20,13,19,11,17, 6,15, 3,13, 1,11, 0, 7, 0, 5,
+    1, 4, 2, 3, 4, 3, 6, 4, 8, 5, 9,12,13,13,14,14,16,14,18,13,20,11,21,
+    9,20, 8,18, 8,16, 9,13,11,10,16, 3,18, 1,20, 0,22, 0,23, 1,23, 2,-1,
+#endif
 	},
-	[7] = {
-		POINT(17,21),
-		POINT( 7, 0),
-		POINT(-1,-1),
-		POINT( 3,21),
-		POINT(17,21),
+	{
+    7,10, /* Ascii 39 */
+    { 5,19, 4,20, 5,21, 6,20, 6,18, 5,16, 4,15, },
 	},
-	[8] = {
-		POINT( 8,21),
-		POINT( 5,20),
-		POINT( 4,18),
-		POINT( 4,16),
-		POINT( 5,14),
-		POINT( 7,13),
-		POINT(11,12),
-		POINT(14,11),
-		POINT(16, 9),
-		POINT(17, 7),
-		POINT(17, 4),
-		POINT(16, 2),
-		POINT(15, 1),
-		POINT(12, 0),
-		POINT( 8, 0),
-		POINT( 5, 1),
-		POINT( 4, 2),
-		POINT( 3, 4),
-		POINT( 3, 7),
-		POINT( 4, 9),
-		POINT( 6,11),
-		POINT( 9,12),
-		POINT(13,13),
-		POINT(15,14),
-		POINT(16,16),
-		POINT(16,18),
-		POINT(15,20),
-		POINT(12,21),
-		POINT( 8,21),
+	{
+   10,14, /* Ascii 40 */
+   { 11,25, 9,23, 7,20, 5,16, 4,11, 4, 7, 5, 2, 7,-2, 9,-5,11,-7, },
 	},
-	[9] = {
-		POINT(16,14),
-		POINT(15,11),
-		POINT(13, 9),
-		POINT(10, 8),
-		POINT( 9, 8),
-		POINT( 6, 9),
-		POINT( 4,11),
-		POINT( 3,14),
-		POINT( 3,15),
-		POINT( 4,18),
-		POINT( 6,20),
-		POINT( 9,21),
-		POINT(10,21),
-		POINT(13,20),
-		POINT(15,18),
-		POINT(16,14),
-		POINT(16, 9),
-		POINT(15, 4),
-		POINT(13, 1),
-		POINT(10, 0),
-		POINT( 8, 0),
-		POINT( 5, 1),
-		POINT( 4, 3),
+	{
+   10,14, /* Ascii 41 */
+    3,25, 5,23, 7,20, 9,16,10,11,10, 7, 9, 2, 7,-2, 5,-5, 3,-7,-1,-1,-1,
+	},
+	{
+    8,16, /* Ascii 42 */
+    8,21, 8, 9,-1,-1, 3,18,13,12,-1,-1,13,18, 3,12,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    5,26, /* Ascii 43 */
+   13,18,13, 0,-1,-1, 4, 9,22, 9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    8,10, /* Ascii 44 */
+    6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6,-1, 5,-3, 4,-4,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    2,26, /* Ascii 45 */
+    4, 9,22, 9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    5,10, /* Ascii 46 */
+    5, 2, 4, 1, 5, 0, 6, 1, 5, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    2,22, /* Ascii 47 */
+   20,25, 2,-7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   17,20, /* Ascii 48 */
+    9,21, 6,20, 4,17, 3,12, 3, 9, 4, 4, 6, 1, 9, 0,11, 0,14, 1,16, 4,17,
+    9,17,12,16,17,14,20,11,21, 9,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    4,20, /* Ascii 49 */
+    6,17, 8,18,11,21,11, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   14,20, /* Ascii 50 */
+    4,16, 4,17, 5,19, 6,20, 8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,
+   10, 3, 0,17, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   15,20, /* Ascii 51 */
+    5,21,16,21,10,13,13,13,15,12,16,11,17, 8,17, 6,16, 3,14, 1,11, 0, 8,
+    0, 5, 1, 4, 2, 3, 4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+    6,20, /* Ascii 52 */
+   13,21, 3, 7,18, 7,-1,-1,13,21,13, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   17,20, /* Ascii 53 */
+   15,21, 5,21, 4,12, 5,13, 8,14,11,14,14,13,16,11,17, 8,17, 6,16, 3,14,
+    1,11, 0, 8, 0, 5, 1, 4, 2, 3, 4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   23,20, /* Ascii 54 */
+   16,18,15,20,12,21,10,21, 7,20, 5,17, 4,12, 4, 7, 5, 3, 7, 1,10, 0,11,
+    0,14, 1,16, 3,17, 6,17, 7,16,10,14,12,11,13,10,13, 7,12, 5,10, 4, 7,
+	},
+	{
+    5,20, /* Ascii 55 */
+   17,21, 7, 0,-1,-1, 3,21,17,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+	},
+	{
+   29,20, /* Ascii 56 */
+    8,21, 5,20, 4,18, 4,16, 5,14, 7,13,11,12,14,11,16, 9,17, 7,17, 4,16,
+    2,15, 1,12, 0, 8, 0, 5, 1, 4, 2, 3, 4, 3, 7, 4, 9, 6,11, 9,12,13,13,
+   15,14,16,16,16,18,15,20,12,21, 8,21,
+	},
+	{
+   23,20, /* Ascii 57 */
+   16,14,15,11,13, 9,10, 8, 9, 8, 6, 9, 4,11, 3,14, 3,15, 4,18, 6,20, 9,
+   21,10,21,13,20,15,18,16,14,16, 9,15, 4,13, 1,10, 0, 8, 0, 5, 1, 4, 3,
+	},
+	{
+   11,10, /* Ascii 58 */
+    5,14, 4,13, 5,12, 6,13, 5,14,-1,-1, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2,
+	},
+	{
+   14,10, /* Ascii 59 */
+    5,14, 4,13, 5,12, 6,13, 5,14,-1,-1, 6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6,
+   -1, 5,-3, 4,-4,
+	},
+	{
+    3,24, /* Ascii 60 */
+   20,18, 4, 9,20, 0,
+	},
+	{
+    5,26, /* Ascii 61 */
+    4,12,22,12,-1,-1, 4, 6,22, 6,
+	},
+	{
+    3,24, /* Ascii 62 */
+    4,18,20, 9, 4, 0,
+	},
+	{
+   20,18, /* Ascii 63 */
+    3,16, 3,17, 4,19, 5,20, 7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,
+   12, 9,10, 9, 7,-1,-1, 9, 2, 8, 1, 9, 0,10, 1, 9, 2,
+	},
+	{
+#if 0
+   55,27, /* Ascii 64 */
+   18,13,17,15,15,16,12,16,10,15, 9,14, 8,11, 8, 8, 9, 6,11, 5,14, 5,16,
+    6,17, 8,-1,-1,12,16,10,14, 9,11, 9, 8,10, 6,11, 5,-1,-1,18,16,17, 8,
+   17, 6,19, 5,21, 5,23, 7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,
+   21, 9,20, 7,19, 5,17, 4,15, 3,12, 3, 9, 4, 6, 5, 4, 7, 2, 9, 1,12, 0,
+   15, 0,18, 1,20, 2,21, 3,-1,-1,19,16,18, 8,18, 6,19, 5,
+#endif
+	},
+	{
+    8,18, /* Ascii 65 */
+    9,21, 1, 0,-1,-1, 9,21,17, 0,-1,-1, 4, 7,14, 7,
+	},
+	{
+   23,21, /* Ascii 66 */
+    4,21, 4, 0,-1,-1, 4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,
+   11,-1,-1, 4,11,13,11,16,10,17, 9,18, 7,18, 4,17, 2,16, 1,13, 0, 4, 0,
+	},
+	{
+   18,21, /* Ascii 67 */
+   18,16,17,18,15,20,13,21, 9,21, 7,20, 5,18, 4,16, 3,13, 3, 8, 4, 5, 5,
+    3, 7, 1, 9, 0,13, 0,15, 1,17, 3,18, 5,
+	},
+	{
+   15,21, /* Ascii 68 */
+    4,21, 4, 0,-1,-1, 4,21,11,21,14,20,16,18,17,16,18,13,18, 8,17, 5,16,
+    3,14, 1,11, 0, 4, 0,
+	},
+	{
+   11,19, /* Ascii 69 */
+    4,21, 4, 0,-1,-1, 4,21,17,21,-1,-1, 4,11,12,11,-1,-1, 4, 0,17, 0,
+	},
+	{
+    8,18, /* Ascii 70 */
+    4,21, 4, 0,-1,-1, 4,21,17,21,-1,-1, 4,11,12,11,
+	},
+	{
+   22,21, /* Ascii 71 */
+   18,16,17,18,15,20,13,21, 9,21, 7,20, 5,18, 4,16, 3,13, 3, 8, 4, 5, 5,
+    3, 7, 1, 9, 0,13, 0,15, 1,17, 3,18, 5,18, 8,-1,-1,13, 8,18, 8,
+	},
+	{
+    8,22, /* Ascii 72 */
+    4,21, 4, 0,-1,-1,18,21,18, 0,-1,-1, 4,11,18,11,
+	},
+	{
+    2, 8, /* Ascii 73 */
+    4,21, 4, 0,
+	},
+	{
+   10,16, /* Ascii 74 */
+   12,21,12, 5,11, 2,10, 1, 8, 0, 6, 0, 4, 1, 3, 2, 2, 5, 2, 7,
+	},
+	{
+    8,21, /* Ascii 75 */
+    4,21, 4, 0,-1,-1,18,21, 4, 7,-1,-1, 9,12,18, 0,
+	},
+	{
+    5,17, /* Ascii 76 */
+    4,21, 4, 0,-1,-1, 4, 0,16, 0,
+	},
+	{
+   11,24, /* Ascii 77 */
+    4,21, 4, 0,-1,-1, 4,21,12, 0,-1,-1,20,21,12, 0,-1,-1,20,21,20, 0,
+	},
+	{
+    8,22, /* Ascii 78 */
+    4,21, 4, 0,-1,-1, 4,21,18, 0,-1,-1,18,21,18, 0,
+	},
+	{
+   21,22, /* Ascii 79 */
+    9,21, 7,20, 5,18, 4,16, 3,13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0,13, 0,15,
+    1,17, 3,18, 5,19, 8,19,13,18,16,17,18,15,20,13,21, 9,21,
+	},
+	{
+   13,21, /* Ascii 80 */
+    4,21, 4, 0,-1,-1, 4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,
+   10, 4,10,
+	},
+	{
+   24,22, /* Ascii 81 */
+    9,21, 7,20, 5,18, 4,16, 3,13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0,13, 0,15,
+    1,17, 3,18, 5,19, 8,19,13,18,16,17,18,15,20,13,21, 9,21,-1,-1,12, 4,
+   18,-2,
+	},
+	{
+   16,21, /* Ascii 82 */
+    4,21, 4, 0,-1,-1, 4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,
+   11, 4,11,-1,-1,11,11,18, 0,
+	},
+	{
+   20,20, /* Ascii 83 */
+   17,18,15,20,12,21, 8,21, 5,20, 3,18, 3,16, 4,14, 5,13, 7,12,13,10,15,
+    9,16, 8,17, 6,17, 3,15, 1,12, 0, 8, 0, 5, 1, 3, 3,
+	},
+	{
+    5,16, /* Ascii 84 */
+    8,21, 8, 0,-1,-1, 1,21,15,21,
+	},
+	{
+   10,22, /* Ascii 85 */
+    4,21, 4, 6, 5, 3, 7, 1,10, 0,12, 0,15, 1,17, 3,18, 6,18,21,
+	},
+	{
+    5,18, /* Ascii 86 */
+    1,21, 9, 0,-1,-1,17,21, 9, 0,
+	},
+	{
+   11,24, /* Ascii 87 */
+    2,21, 7, 0,-1,-1,12,21, 7, 0,-1,-1,12,21,17, 0,-1,-1,22,21,17, 0,
+	},
+	{
+    5,20, /* Ascii 88 */
+    3,21,17, 0,-1,-1,17,21, 3, 0,
+	},
+	{
+    6,18, /* Ascii 89 */
+    1,21, 9,11, 9, 0,-1,-1,17,21, 9,11,
+	},
+	{
+    8,20, /* Ascii 90 */
+   17,21, 3, 0,-1,-1, 3,21,17,21,-1,-1, 3, 0,17, 0,
+	},
+	{
+   11,14, /* Ascii 91 */
+    4,25, 4,-7,-1,-1, 5,25, 5,-7,-1,-1, 4,25,11,25,-1,-1, 4,-7,11,-7,
+	},
+	{
+    2,14, /* Ascii 92 */
+    0,21,14,-3,
+	},
+	{
+   11,14, /* Ascii 93 */
+    9,25, 9,-7,-1,-1,10,25,10,-7,-1,-1, 3,25,10,25,-1,-1, 3,-7,10,-7,
+	},
+	{
+   10,16, /* Ascii 94 */
+    6,15, 8,18,10,15,-1,-1, 3,12, 8,17,13,12,-1,-1, 8,17, 8, 0,
+	},
+	{
+    2,16, /* Ascii 95 */
+    0,-2,16,-2,
+	},
+	{
+    7,10, /* Ascii 96 */
+    6,21, 5,20, 4,18, 4,16, 5,15, 6,16, 5,17,
+	},
+	{
+   17,19, /* Ascii 97 */
+   15,14,15, 0,-1,-1,15,11,13,13,11,14, 8,14, 6,13, 4,11, 3, 8, 3, 6, 4,
+    3, 6, 1, 8, 0,11, 0,13, 1,15, 3,
+	},
+	{
+   17,19, /* Ascii 98 */
+    4,21, 4, 0,-1,-1, 4,11, 6,13, 8,14,11,14,13,13,15,11,16, 8,16, 6,15,
+    3,13, 1,11, 0, 8, 0, 6, 1, 4, 3,
+	},
+	{
+   14,18, /* Ascii 99 */
+   15,11,13,13,11,14, 8,14, 6,13, 4,11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0,11,
+    0,13, 1,15, 3,
+	},
+	{
+   17,19, /* Ascii 100 */
+   15,21,15, 0,-1,-1,15,11,13,13,11,14, 8,14, 6,13, 4,11, 3, 8, 3, 6, 4,
+    3, 6, 1, 8, 0,11, 0,13, 1,15, 3,
+	},
+	{
+   17,18, /* Ascii 101 */
+    3, 8,15, 8,15,10,14,12,13,13,11,14, 8,14, 6,13, 4,11, 3, 8, 3, 6, 4,
+    3, 6, 1, 8, 0,11, 0,13, 1,15, 3,
+	},
+	{
+    8,12, /* Ascii 102 */
+   10,21, 8,21, 6,20, 5,17, 5, 0,-1,-1, 2,14, 9,14,
+	},
+	{
+   22,19, /* Ascii 103 */
+   15,14,15,-2,14,-5,13,-6,11,-7, 8,-7, 6,-6,-1,-1,15,11,13,13,11,14, 8,
+   14, 6,13, 4,11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0,11, 0,13, 1,15, 3,
+	},
+	{
+   10,19, /* Ascii 104 */
+    4,21, 4, 0,-1,-1, 4,10, 7,13, 9,14,12,14,14,13,15,10,15, 0,
+	},
+	{
+    8, 8, /* Ascii 105 */
+    3,21, 4,20, 5,21, 4,22, 3,21,-1,-1, 4,14, 4, 0,
+	},
+	{
+   11,10, /* Ascii 106 */
+    5,21, 6,20, 7,21, 6,22, 5,21,-1,-1, 6,14, 6,-3, 5,-6, 3,-7, 1,-7,
+	},
+	{
+    8,17, /* Ascii 107 */
+    4,21, 4, 0,-1,-1,14,14, 4, 4,-1,-1, 8, 8,15, 0,
+	},
+	{
+    2, 8, /* Ascii 108 */
+    4,21, 4, 0,
+	},
+	{
+   18,30, /* Ascii 109 */
+    4,14, 4, 0,-1,-1, 4,10, 7,13, 9,14,12,14,14,13,15,10,15, 0,-1,-1,15,
+   10,18,13,20,14,23,14,25,13,26,10,26, 0,
+	},
+	{
+   10,19, /* Ascii 110 */
+    4,14, 4, 0,-1,-1, 4,10, 7,13, 9,14,12,14,14,13,15,10,15, 0,
+	},
+	{
+   17,19, /* Ascii 111 */
+    8,14, 6,13, 4,11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0,11, 0,13, 1,15, 3,16,
+    6,16, 8,15,11,13,13,11,14, 8,14,
+	},
+	{
+   17,19, /* Ascii 112 */
+    4,14, 4,-7,-1,-1, 4,11, 6,13, 8,14,11,14,13,13,15,11,16, 8,16, 6,15,
+    3,13, 1,11, 0, 8, 0, 6, 1, 4, 3,
+	},
+	{
+   17,19, /* Ascii 113 */
+   15,14,15,-7,-1,-1,15,11,13,13,11,14, 8,14, 6,13, 4,11, 3, 8, 3, 6, 4,
+    3, 6, 1, 8, 0,11, 0,13, 1,15, 3,
+	},
+	{
+    8,13, /* Ascii 114 */
+    4,14, 4, 0,-1,-1, 4, 8, 5,11, 7,13, 9,14,12,14,
+	},
+	{
+   17,17, /* Ascii 115 */
+   14,11,13,13,10,14, 7,14, 4,13, 3,11, 4, 9, 6, 8,11, 7,13, 6,14, 4,14,
+    3,13, 1,10, 0, 7, 0, 4, 1, 3, 3,
+	},
+	{
+    8,12, /* Ascii 116 */
+    5,21, 5, 4, 6, 1, 8, 0,10, 0,-1,-1, 2,14, 9,14,
+	},
+	{
+   10,19, /* Ascii 117 */
+    4,14, 4, 4, 5, 1, 7, 0,10, 0,12, 1,15, 4,-1,-1,15,14,15, 0,
+	},
+	{
+    5,16, /* Ascii 118 */
+    2,14, 8, 0,-1,-1,14,14, 8, 0,
+	},
+	{
+   11,22, /* Ascii 119 */
+    3,14, 7, 0,-1,-1,11,14, 7, 0,-1,-1,11,14,15, 0,-1,-1,19,14,15, 0,
+	},
+	{
+    5,17, /* Ascii 120 */
+    3,14,14, 0,-1,-1,14,14, 3, 0,
+	},
+	{
+    9,16, /* Ascii 121 */
+    2,14, 8, 0,-1,-1,14,14, 8, 0, 6,-4, 4,-6, 2,-7, 1,-7,
+	},
+	{
+    8,17, /* Ascii 122 */
+   14,14, 3, 0,-1,-1, 3,14,14,14,-1,-1, 3, 0,14, 0,
+	},
+	{
+#if 0
+   39,14, /* Ascii 123 */
+    9,25, 7,24, 6,23, 5,21, 5,19, 6,17, 7,16, 8,14, 8,12, 6,10,-1,-1, 7,
+   24, 6,22, 6,20, 7,18, 8,17, 9,15, 9,13, 8,11, 4, 9, 8, 7, 9, 5, 9, 3,
+    8, 1, 7, 0, 6,-2, 6,-4, 7,-6,-1,-1, 6, 8, 8, 6, 8, 4, 7, 2, 6, 1, 5,
+   -1, 5,-3, 6,-5, 7,-6, 9,-7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+#endif
+	},
+	{
+    2, 8, /* Ascii 124 */
+    4,25, 4,-7,
+	},
+	{
+#if 0
+   39,14, /* Ascii 125 */
+    5,25, 7,24, 8,23, 9,21, 9,19, 8,17, 7,16, 6,14, 6,12, 8,10,-1,-1, 7,
+   24, 8,22, 8,20, 7,18, 6,17, 5,15, 5,13, 6,11,10, 9, 6, 7, 5, 5, 5, 3,
+    6, 1, 7, 0, 8,-2, 8,-4, 7,-6,-1,-1, 8, 8, 6, 6, 6, 4, 7, 2, 8, 1, 9,
+   -1, 9,-3, 8,-5, 7,-6, 5,-7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+#endif
+	},
+	{
+   23,24, /* Ascii 126 */
+    3, 6, 3, 8, 4,11, 6,12, 8,12,10,11,14, 8,16, 7,18, 7,20, 8,21,10,-1,
+   -1, 3, 8, 4,10, 6,11, 8,11,10,10,14, 7,16, 6,18, 6,20, 7,21,10,21,12,
 	},
 };
 
 typedef struct
 {
-	int8_t x;
-	int8_t y;
-} __attribute__((__packed__))
-path_t;
+	uint8_t count;
+	uint8_t width;
+	int8_t points[62]; // up to 31 xy points
+} hershey_char_t;
 
-extern const path_t digits[][32];
+
+extern const hershey_char_t hershey_simplex[];
 
 #endif
 	uint8_t s = now_sec;
 	sei();
 
-	draw_digit_big( 0+cx, cy, h / 10);
-	draw_digit_big(16+cx, cy, h % 10);
-	draw_digit_big(40+cx, cy, m / 10);
-	draw_digit_big(56+cx, cy, m % 10);
-	draw_digit_big(80+cx, cy, s / 10);
-	draw_digit_big(96+cx, cy, s % 10);
+	draw_char_big( 0+cx, cy, h / 10 + '0');
+	draw_char_big(16+cx, cy, h % 10 + '0');
+	draw_char_big(40+cx, cy, m / 10 + '0');
+	draw_char_big(56+cx, cy, m % 10 + '0');
+	draw_char_big(80+cx, cy, s / 10 + '0');
+	draw_char_big(96+cx, cy, s % 10 + '0');
+}
+
+
+static void
+draw_str(
+	uint8_t x,
+	uint8_t y,
+	const char * str
+)
+{
+	char c;
+	while ((c = *str++))
+		x += draw_char_med(x, y, c);
 }
 
 
 analog_clock(void)
 {
 	// Draw all the digits around the outside
-	for (uint8_t h = 0 ; h < 24 ; h += 1)
+	for (uint8_t h = 0 ; h < 24 ; h += 6)
 	{
 		uint16_t h2 = h;
 		h2 = (h2 * 682) / 64;
 		uint8_t x = sin_lookup(h2) * 7 / 8 + 128;
 		uint8_t y = cos_lookup(h2) * 7 / 8 + 128;
-		draw_digit(x-8, y-4, h / 10);
-		draw_digit(x+2, y-4, h % 10);
+		draw_char_small(x-8, y-4, h / 10 + '0');
+		draw_char_small(x+2, y-4, h % 10 + '0');
 	}
 
 	// Draw the hour hand
 	uint8_t s = now_sec;
 	sei();
 
-	const uint8_t cx = 72;
+	const uint8_t cx = 55;
 	const uint8_t cy = 64;
 
-	draw_digit_big( 0+cx, cy, h / 10);
-	draw_digit_big(16+cx, cy, h % 10);
-	draw_digit_big(40+cx, cy, m / 10);
-	draw_digit_big(56+cx, cy, m % 10);
-	draw_digit_big(80+cx, cy, s / 10);
-	draw_digit_big(96+cx, cy, s % 10);
+	draw_char_big( 0+cx, cy, h / 10 + '0');
+	draw_char_big(25+cx, cy, h % 10 + '0');
+	draw_char_big(50+cx, cy, m / 10 + '0');
+	draw_char_big(75+cx, cy, m % 10 + '0');
+	draw_char_big(100+cx, cy, s / 10 + '0');
+	draw_char_big(125+cx, cy, s % 10 + '0');
+
+	draw_str(85, 190, "Future");
+	draw_str(120, 160, "Crew!");
+	
 
 	{
 		uint16_t h2 = h;
 		return;
 
 	//line(x, y, x+s->vx*100, y+s->vy*100);
-	draw_digit(x, y, i);
+	draw_char_small(x, y, i + '0');
 
 	//line_horiz(x-5, y, 10);
 	//line_vert(x, y-5, 10);
 }
 
 
-static inline void
-_draw_digit(
-	uint8_t x,
-	uint8_t y,
-	uint8_t val,
+static inline int8_t
+scaling(
+	int8_t d,
+	uint8_t scale
+)
+{
+	if (scale == 0)
+		return d / 2;
+	if (scale == 1)
+		return d;
+	if (scale == 2)
+		return (d * 3) / 2;
+	if (scale == 3)
+		return d * 2;
+	return d;
+}
+
+
+static inline uint8_t
+_draw_char(
+	const uint8_t x,
+	const uint8_t y,
+	const uint8_t c,
 	const uint8_t scale
 )
 {
-	const path_t * p = digits[val];
+	const hershey_char_t * p = &hershey_simplex[c - 0x20];
+	const uint8_t count = pgm_read_byte(&p->count);
 
-	while (1)
+	uint8_t ox = x;
+	uint8_t oy = y;
+	uint8_t pen_down = 0;
+
+	for (uint8_t i = 0 ; i < count ; i++)
 	{
-		uint8_t ox = x + p->x / scale;
-		uint8_t oy = y + p->y / scale;
+		const int8_t px = pgm_read_byte(&p->points[i*2+0]);
+		const int8_t py = pgm_read_byte(&p->points[i*2+1]);
+		if (px == -1 && py == -1)
+		{
+			pen_down = 0;
+			continue;
+		}
 
-		while (1)
-		{
-			p++;
-			int8_t px = p->x;
-			int8_t py = p->y;
+		const uint8_t nx = x + scaling(px, scale);
+		const uint8_t ny = y + scaling(py, scale);
 
-			if (px == 0 && py == 0)
-				return;
+		if (pen_down)
+			line(ox, oy, nx, ny);
 
-			if (px == -1 && py == -1)
-			{
-				p++;
-				break;
-			}
+		pen_down = 1;
+		ox = nx;
+		oy = ny;
+	}
 
-			uint8_t nx = x + px / scale;
-			uint8_t ny = y + py / scale;
-
-			line(ox, oy, nx, ny);
-			ox = nx;
-			oy = ny;
-		}
-	}
+	const uint8_t width = pgm_read_byte(&p->width);
+	return scaling(width, scale);
 }
 
 
-void
-draw_digit_big(
+uint8_t
+draw_char_big(
 	uint8_t x,
 	uint8_t y,
-	uint8_t val
+	uint8_t c
 )
 {
-	_draw_digit(x, y, val, 1);
+	return _draw_char(x, y, c, 2);
 }
 
 
-void
-draw_digit(
+uint8_t
+draw_char_med(
 	uint8_t x,
 	uint8_t y,
-	uint8_t val
+	uint8_t c
 )
 {
-	_draw_digit(x, y, val, 2);
+	return _draw_char(x, y, c, 1);
 }
+
+uint8_t
+draw_char_small(
+	uint8_t x,
+	uint8_t y,
+	uint8_t c
+)
+{
+	return _draw_char(x, y, c, 0);
+}
 );
 
 
-void
-draw_digit_big(
+uint8_t
+draw_char_big(
 	uint8_t x,
 	uint8_t y,
 	uint8_t val
 );
 
-
-void
-draw_digit(
+uint8_t
+draw_char_med(
 	uint8_t x,
 	uint8_t y,
 	uint8_t val
 );
 
+uint8_t
+draw_char_small(
+	uint8_t x,
+	uint8_t y,
+	uint8_t val
+);
+
 
 #endif