- Introduce new font loader and more characters, with unicode glyph lookup.
authorMatthew Mondor <mmondor@pulsar-zone.net>
Wed, 13 Apr 2022 08:29:53 +0000 (08:29 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Wed, 13 Apr 2022 08:29:53 +0000 (08:29 +0000)
- Use UCS-32 internally for the text video memory (uint8_t -> uint32_t).
- Those are not yet handled properly because of the xscreensaver legacy utf-8
  decoder.

23 files changed:
MATT/TODO.txt
hacks/analogterm-main.c
hacks/analogterm.c
hacks/analogterm.h
hacks/images/analogterm/PR_Font_FreeLicense.txt [new file with mode: 0755]
hacks/images/analogterm/README [new file with mode: 0644]
hacks/images/analogterm/analogterm_ascii.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_ascii.xbm [moved from hacks/images/analogtermfont.xbm with 96% similarity]
hacks/images/analogterm/analogterm_dec_graphics.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_dec_graphics.xbm [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics1.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics1.xbm [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics2.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics2.xbm [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics3.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_graphics3.xbm [new file with mode: 0644]
hacks/images/analogterm/analogterm_latin.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_latin.xbm [new file with mode: 0644]
hacks/images/analogterm/analogterm_unknown.png [new file with mode: 0644]
hacks/images/analogterm/analogterm_unknown.xbm [new file with mode: 0644]
hacks/images/analogtermfont.png [deleted file]
hacks/images/analogtermgfxfont.png [deleted file]
hacks/images/analogtermgfxfont.xbm [deleted file]

index 9fdc5c3..3f5cea0 100644 (file)
@@ -9,6 +9,30 @@ BUILD
 TODO
 ====
 
+- On a friend's Ubuntu machine, analogterm runs and backspace runs fine in
+  general but not in top(1)'s line editor, despite ^H being set for ERASE.
+  Moreover, strangely, when switching to the English US keyboard layout (his
+  default are French Canadian), space no longer works.  Space works in his
+  default layout.  I should enable some X11 input debugging log and see what
+  gets issued for space, if any.  Currently, the only space-related special
+  processing may be in utils/textclient.c and is to map the keypad space to
+  space.  Apparently some users had similar issues with space not working
+  correctly when using extra input method tools like ibus-ui-gtk3.  This was
+  running and I killed it but the issue persisted.  Space works in xterm
+  despite that, so there must be something different going on with analogterm.
+  I should also check if xterm on Ubuntu uses the same stty settings like for
+  ERASE.  No such problem with RPI2 and ArchLinux.
+- Apparently eol2 can be used for Flush and Linux would not support it.  On
+  NetBSD I see it applied by xterm, so have included in tcsetattr(3).  This
+  may be wrong on Linux.  Moreover, running xterm remotely from an Ubuntu
+  system showed ERASE mapped by default to ^? rather than ^H, indicating that
+  BS/SWAP should be enabled.  When I run analogterm remotely, it shows that
+  eol2 is not mapped and seems to not be supported.  ERASE was mapped to ^H as
+  expected and delete/backspace were working, but not in top(1)'s line editor.
+  It worked in cat(1), though.  Terminfo seems rather messy on that system and
+  I may need to use the ncurses source or to decompile a terminfo entry to
+  look at it.  Moreover, it's unclear what xterm variant is used for "xterm",
+  there are many yet none named exactly that way.  What a mess.
 - Maybe cleanup code checking boundaries, using max or other similar
   macros or inline functions.
 - When blinking and double-underline, the line doesn't blink.
@@ -33,6 +57,14 @@ TODO
 - When under tmux/screen, dialog(1) attempts to use higher characters
   rather than DEC Special Graphics.  May perhaps be configurable...
   Some programs also use those extended characters like wordgrinder.
+  When under tmux(1), interestingly, (0 is used rather than )0 to switch the
+  character set and unicode characters are substituted for the display of
+  DEC Special Graphics.  This does not happen if LANG=C when starting tmux.
+- Currently special characters and unicode typically result in
+  suboptimally chosen glyphs like #.  This affects applications
+  that use extended line graphics characters for boxes rather than
+  vt100 DEC Special Graphics charset.  When in UTF8, tmux remaps DEC
+  characters to unicode ones, also resulting in the same #.
 - It would still be interesting to carefully look at the entry to determine
   what affects the behavior of applications, like determining if colors are
   available or not.  The "colors" terminfo entry depends on the terminfo entry
@@ -67,19 +99,18 @@ TODO
 - Determine why # is the fallback character for high glyphs.
   Perhaps replace it by something better looking.
   Ideally increase character support.
+  Internally now UCS-32.  However, accents and special chars still result in
+  #, likely because of the xscreensaver's original UTF-8 handling.
 - Interesting is that the terminal doesn't support UTF-8 glyphs
   yet but that it gracefully degrades to ASCII when French UTF-8 text
   is displayed, at least for accents.  More complete support would
   be nice.  Could use UCS-16 or UCS-32 internally.
+  Update: now uses UCS-32, but UTF-8 decoding should be improved.
 - [>0c   Secondary DA request     (distinguishes VT240 from VT220)
   Seems to not be supported by the current state system for >
   https://www.real-world-systems.com/docs/ANSIcode.html
   May not be necessary
   https://stackoverflow.com/questions/29939026/what-is-the-ansi-escape-code-sequence-escc
-- Currently special characters and unicode typically result in
-  suboptimally chosen glypths like #.  This affects applications
-  that use extended line graphics characters for boxes rather than
-  vt100 DEC Special Graphics charset.
 - Some query features are not supported like cursor position,
   terminal type, and "Query window/icon labels using hexadecimal",
   "Send Device Attributes", "Device Status Report".
index eefbc06..16bb5b9 100644 (file)
@@ -23,7 +23,8 @@
  *   wordgrinder, etc.), vifm, sc, more/less, tmux/screen, irssi, top,
  *   systat, lynx, links, hack, angband, matanza, ninvaders, cmatrix...
  *   For vim :set t_Co=0 is recommended for bold/underline/reverse modes
- *   instead of colors, more suitable for monochrome.
+ *   instead of colors, even better is a monochrome color scheme, since unless
+ *   t_Co is >= 8, some non-color highlighting doesn't work, like paren match.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -172,7 +173,7 @@ unsupported(struct terminal_controller_data *state, int statei, char statec,
 }
 
 static void
-at_ascii_printc (analogterm_state_t *st, unsigned char c, uint16_t m,
+at_ascii_printc (analogterm_state_t *st, uint32_t c, uint16_t m,
                 Bool scroll_p)
 {
 
@@ -419,10 +420,8 @@ at_vt100_printc (analogterm_sim_t *sim, struct terminal_controller_data *state,
              We can just ignore this and always process UTF-8, I think?
              We must still catch the last byte, though.
            */
-        case '(':
-/*      case ')': XXX Links uses )0 without apparent exit */
-          /* I don't support different fonts either - see above
-             for SO and SI */
+        case '(': /* FALLTHROUGH */
+       case ')': /* FALLTHROUGH */ /* XXX Links uses )0 without exit */
           state->escstate = 3;
           break;
         default:
@@ -505,7 +504,7 @@ at_vt100_printc (analogterm_sim_t *sim, struct terminal_controller_data *state,
          many = state->csiparam[0];
          if (many == 0)
              many = 1;
-         if (st->lastchar != -1 && isprint(st->lastchar)) {
+         if (st->lastchar != (uint32_t)-1 && isprint((int)st->lastchar)) {
              for (i = 0; i < many; i++)
                  at_printc(st, st->lastchar, state->mode);
              /* XXX Silly double state requires this */
@@ -872,6 +871,7 @@ at_vt100_printc (analogterm_sim_t *sim, struct terminal_controller_data *state,
           state->escstate = 0;
          break;
        case 'T': /* Scroll down (rin) */
+       case '^': /* FALLTHROUGH */
                  /*
           * Scroll <n> lines down. No argument is like 1, 0 is no action.
           * Takes the scrolling range in consideration.
index d84419f..c7b9b7d 100644 (file)
@@ -10,7 +10,9 @@
  *
  * Apple ][ CRT simulator, by Trevor Blackwell <tlb@tlb.org>
  * with additional work by Jamie Zawinski <jwz@jwz.org>
- * 2022 Adapted to analogterm and more complete xterm emulation by Matthew Mondor.
+ *
+ * 2022 Adapted to analogterm and more complete xterm emulation by
+ * Matthew Mondor.
  */
 
 #include <math.h>
@@ -67,7 +69,7 @@ at_move(analogterm_state_t *st, int dx, int dy, int sx, int sy, int len)
 {
 
        (void)memmove(&st->textlines_char[dy][dx],
-           &st->textlines_char[sy][sx], len);
+           &st->textlines_char[sy][sx], len * sizeof(uint32_t));
        (void)memmove(&st->textlines_mode[dy][dx],
            &st->textlines_mode[sy][sx], len * sizeof(uint16_t));
 }
@@ -75,22 +77,26 @@ at_move(analogterm_state_t *st, int dx, int dy, int sx, int sy, int len)
 void
 at_clear(analogterm_state_t *st, int x, int y, int len)
 {
-       uint16_t *mptr, *tptr;
-
-       (void)memset(&st->textlines_char[y][x], ' ', len);
-       for (mptr = &st->textlines_mode[y][x], tptr = &mptr[len];
-            mptr < tptr; mptr++)
+       uint32_t *cptr, *ctptr;
+       uint16_t *mptr, *mtptr;
+
+       for (cptr = &st->textlines_char[y][x], ctptr = &cptr[len];
+            cptr < ctptr; cptr++)
+               *cptr = ' ';
+       for (mptr = &st->textlines_mode[y][x], mtptr = &mptr[len];
+            mptr < mtptr; mptr++)
                *mptr = st->mode & TMODE_BGCOLOR;
 }
 
 /*
  * Insert space for <many> characters at cursor, scrolling text rightwards.
+ * XXX Could use abstracted functions instead of custom loops.
  */
 void
 at_insert(analogterm_state_t *st, int many)
 {
-       unsigned char *cptr;
-       uint16_t *mptr, *tptr;
+       uint32_t *cptr, *ctptr;
+       uint16_t *mptr, *mtptr;
        int s;
 
        if (many < 1)
@@ -101,12 +107,13 @@ at_insert(analogterm_state_t *st, int many)
        s = 80 - st->cursx - many;
 
        cptr = &st->textlines_char[st->cursy][st->cursx];
-       (void)memmove(&cptr[many], cptr, s);
-       (void)memset(cptr, ' ', many);
+       (void)memmove(&cptr[many], cptr, s * sizeof(uint32_t));
+       for (ctptr = &cptr[many]; cptr < ctptr; cptr++)
+               *cptr = ' ';
 
        mptr = &st->textlines_mode[st->cursy][st->cursx];
        (void)memmove(&mptr[many], mptr, s * sizeof(uint16_t));
-       for (tptr = &mptr[many]; mptr < tptr; mptr++)
+       for (mtptr = &mptr[many]; mptr < mtptr; mptr++)
                *mptr = st->mode & TMODE_BGCOLOR;
 }
 
@@ -258,7 +265,7 @@ at_scroll(analogterm_state_t *st)
 
 /* XXX Mode could use a state structure */
 static void
-at_printc_1(analogterm_state_t *st, char c, uint16_t m, int scroll_p)
+at_printc_1(analogterm_state_t *st, uint32_t c, uint16_t m, int scroll_p)
 {
 
   at_resetcursor();
@@ -314,20 +321,19 @@ at_printc_1(analogterm_state_t *st, char c, uint16_t m, int scroll_p)
 }
 
 void
-at_printc(analogterm_state_t *st, char c, uint16_t m)
+at_printc(analogterm_state_t *st, uint32_t c, uint16_t m)
 {
   at_printc_1(st, c, m, 1);
 }
 
 void
-at_printc_noscroll(analogterm_state_t *st, char c, uint16_t m)
+at_printc_noscroll(analogterm_state_t *st, uint32_t c, uint16_t m)
 {
   at_printc_1(st, c, m, 0);
 }
 
-
 void
-at_prints(analogterm_state_t *st, char *s, uint16_t m)
+at_prints(analogterm_state_t *st, uint32_t *s, uint16_t m)
 {
   while (*s) at_printc(st, *s++, m);
 }
@@ -347,54 +353,70 @@ at_goto(analogterm_state_t *st, int r, int c)
 /* XXX
  * Why can't a single memset(3) be used?  The video memory may be improperly
  * allocated.
+ * XXX Could use at_clear().
  */
 void
 at_cls(analogterm_state_t *st)
 {
   int y;
-  uint16_t *mptr, *tptr;
+  uint32_t *cptr, *ctptr;
+  uint16_t *mptr, *mtptr;
 
   for (y = 0; y < 25; y++) {
-    memset(st->textlines_char[y], ' ', 80);
-    for (mptr = st->textlines_mode[y], tptr = &mptr[80];
-        mptr < tptr; mptr++)
+    for (cptr = st->textlines_char[y], ctptr = &cptr[80];
+        cptr < ctptr; cptr++)
+           *cptr = ' ';
+    for (mptr = st->textlines_mode[y], mtptr = &mptr[80];
+        mptr < mtptr; mptr++)
            *mptr = st->mode & TMODE_BGCOLOR;
   }
 }
 
-/* jwz: since MacOS doesn't have "6x10", I dumped this font to an XBM... */
 
-#include "images/analogtermfont.xbm"
-#include "images/analogtermgfxfont.xbm"
+/* AnalogTerm font */
 
+#include "images/analogterm/analogterm_unknown.xbm"
+#include "images/analogterm/analogterm_dec_graphics.xbm"
+#include "images/analogterm/analogterm_ascii.xbm"
+#include "images/analogterm/analogterm_latin.xbm"
+#include "images/analogterm/analogterm_graphics1.xbm"
+#include "images/analogterm/analogterm_graphics2.xbm"
+#include "images/analogterm/analogterm_graphics3.xbm"
 
 /*
  * XXX So many contortions just to get at the bits, that we could probably
  * directly use from the bits ourselves...  In any case, this does the
  * preconversion at initialization for now.
  */
-static void
-at_make_font(analogterm_sim_t *sim, int fi, char *bits, unsigned int width,
-    unsigned int height)
+static font_t *
+at_make_font(analogterm_sim_t *sim, uint32_t index, char *bits,
+    unsigned int width, unsigned int height)
 {
        Pixmap pm;
        XImage *xi;
-       uint8_t (*f)[8][7];
-       int c, r, b;
+       font_t *font;
+       int c, r, b, nglyphs;
+
+       assert(width % 7 == 0 && height == 8);
+       nglyphs = width / 7;
 
-       assert(width == 96 * 7 && height == 8);
+       if (((font = malloc(sizeof(font_t))) == NULL) ||
+           ((font->glyphs = malloc(nglyphs * (8 * 7))) == NULL))
+               abort();
+       font->next = NULL;
+       font->start = index;
+       font->end = index + nglyphs;
 
        pm = XCreatePixmapFromBitmapData(sim->dpy, sim->window, bits, width,
            height, 1, 0, 1);
        xi = XGetImage(sim->dpy, pm, 0, 0, width, height, ~0L, ZPixmap);
        (void)XFreePixmap(sim->dpy, pm);
 
-       /* Fill structure element with font data */
-       f = sim->text_font[fi];
-       for (c = 0; c < 96; c++) {
+       /* Fill font data */
+       for (c = 0; c < nglyphs; c++) {
                for (r = 0; r < 8; r++) {
                        for (b = 0; b < 7; b++)
-                               f[c][r][b] = (uint8_t)XGetPixel(xi,
+                               font->glyphs[c][r][b] = (uint8_t)XGetPixel(xi,
                                    (c * 7) + b, r % 8);
                }
        }
@@ -403,6 +425,49 @@ at_make_font(analogterm_sim_t *sim, int fi, char *bits, unsigned int width,
        free(xi->data);
        xi->data = NULL;
        XDestroyImage(xi);
+
+       return font;
+}
+
+static void
+at_free_font(font_t *font)
+{
+
+       free(font->glyphs);
+       free(font);
+}
+
+/* Get glyph for UCS-32 char, points at "unknown" glyph if unsupported */
+/*
+ * XXX A bit ridiculous but today we may want to consider that information
+ * about what's in the video memory may be discovered using CPU,
+ * electromagnetism or heat analysis, since this fonction is not time-stable.
+ * But this is simple and avoids using a huge memory array considering the
+ * large sparse unicode space.  In theory, subtrees could be used for
+ * fixed-time resolution.
+ * XXX I somehow never could quiet incompatible types warnings without using
+ * void *.  Not working: uint8_t (*)[7], uint8_t **, uint8_t *[],
+ * uint8_t *[7], ...
+ */
+static void *
+at_glyph(analogterm_sim_t *sim, uint32_t c, bool decgfx)
+{
+       uint8_t (*glyph)[7] = sim->font_unknown->glyphs[0]; /* Default */
+       font_t *font;
+
+       /* DEC Special Graphics */
+       if (decgfx && c > 94 && c < 127)
+               return sim->font_decgfx->glyphs[c - 96];
+
+       /* Any other supported */
+       for (font = sim->font; font != NULL; font = font->next) {
+               if (c < font->end && c >= font->start) {
+                       glyph = font->glyphs[c - font->start];
+                       break;
+               }
+       }
+
+       return glyph;
 }
 
 analogterm_sim_t *
@@ -441,14 +506,27 @@ analogterm_start(Display *dpy, Window window, int delay,
   sim->st->scroll_top = 0;
   sim->st->scroll_bottom = 24;         /* XXX Use definition/macro */
 
-  at_make_font(sim, 0, analogterm_font_bits, analogterm_font_width,
-              analogterm_font_height);
-  at_make_font(sim, 1, analogtermgfx_font_bits, analogtermgfx_font_width,
-              analogtermgfx_font_height);
+  /* Create font */
+  sim->font_unknown = at_make_font(sim, 0, analogterm_unknown_bits,
+      analogterm_unknown_width, analogterm_unknown_height);
+  sim->font_decgfx = at_make_font(sim, 95, analogterm_dec_graphics_bits,
+      analogterm_dec_graphics_width, analogterm_dec_graphics_height);
+  sim->font = at_make_font(sim, 32, analogterm_ascii_bits,
+      analogterm_ascii_width, analogterm_ascii_height);
+  sim->font->next = at_make_font(sim, 161, analogterm_latin_bits,
+      analogterm_latin_width, analogterm_latin_height);
+  sim->font->next->next = at_make_font(sim, 9472, analogterm_graphics1_bits,
+      analogterm_graphics1_width, analogterm_graphics1_height);
+  sim->font->next->next->next = at_make_font(sim, 129896,
+      analogterm_graphics2_bits, analogterm_graphics2_width,
+      analogterm_graphics2_height);
+  sim->font->next->next->next->next = at_make_font(sim, 990192,
+      analogterm_graphics3_bits, analogterm_graphics3_width,
+      analogterm_graphics3_height);
 
   sim->stepno=0;
   at_goto(sim->st,24,0);
-  sim->st->lastchar = -1;
+  sim->st->lastchar = (uint32_t)-1;
 
   sim->next_actiontime=0.0;
 
@@ -529,6 +607,7 @@ analogterm_one_frame (analogterm_sim_t *sim)
     if (sim->curtime >= sim->delay)
       sim->stepno = A2CONTROLLER_DONE;
 
+    /* XXX Likely unused code for analogterm */
     if (sim->printing) {
       int nlcnt=0;
       while (*sim->printing) {
@@ -592,6 +671,13 @@ analogterm_one_frame (analogterm_sim_t *sim)
 
           /* Free sim and else */
           analogtv_release(sim->dec);
+
+         at_free_font(sim->font->next->next->next->next);
+         at_free_font(sim->font->next->next->next);
+         at_free_font(sim->font->next->next);
+         at_free_font(sim->font->next);
+         at_free_font(sim->font);
+
           free(st);
           free(sim->inp);
           free(sim);
@@ -632,9 +718,8 @@ analogterm_one_frame (analogterm_sim_t *sim)
        pp=&sim->inp->signal[row + ANALOGTV_TOP + 3][ANALOGTV_PIC_START + 100];
        for (col = 0; col < 80; col++) {
             int rev, level, olevel, iblink;
-            int c = st->textlines_char[textrow][col];
+            uint32_t c = st->textlines_char[textrow][col];
            uint16_t m = st->textlines_mode[textrow][col];
-           uint8_t (*f)[8][7] = sim->text_font[(m & TMODE_GFX) != 0 ? 1 : 0];
            uint8_t (*cf)[7];
 
            rev = ((m & (TMODE_INVERSE | TMODE_BGCOLOR)) != 0);
@@ -653,15 +738,10 @@ analogterm_one_frame (analogterm_sim_t *sim)
            else
                    iblink = 0;
 
-           /* XXX Restricts to ASCII/DEC Special Graphics */
-           if (c < 32 || c > 126)
-                   c = /* XXX originally space 32 */95;
-           else
-                   c -= 32;
-           cf = f[c];
+           cf = at_glyph(sim, c, (m & TMODE_GFX) != 0);
 
            /*
-            * Font is 96 7x8 glyphs including embedded spacing.
+            * Font glyphs are 7x8.
             * Virtual resolution is 280x192 but at 80 columns it gives a less
             * visibly-precise 560 pixels width.
             * A better font would be one with double-width verticals that
index db4d530..b22ba0a 100644 (file)
@@ -43,7 +43,7 @@
 
 typedef struct analogterm_state {
   unsigned char hireslines[192][80];
-  unsigned char textlines_char[25][80]; /* XXX Use definition/macro */
+  uint32_t textlines_char[25][80]; /* XXX Use definition/macro */
   uint16_t textlines_mode[25][80];
   int gr_text;
   enum {
@@ -56,9 +56,15 @@ typedef struct analogterm_state {
   uint16_t mode;
   int blink; /* XXX Still needed? */
   int scroll_top, scroll_bottom;
-  int lastchar;
+  uint32_t lastchar;
 } analogterm_state_t;
 
+typedef struct font_s font_t;
+struct font_s {
+       font_t *next;
+       uint32_t start, end;            /* nglyphs == end - start */
+       uint8_t (*glyphs)[8][7];
+};
 
 typedef struct analogterm_sim_s analogterm_sim_t;
 struct analogterm_sim_s {
@@ -83,7 +89,10 @@ struct analogterm_sim_s {
   Display *dpy;
   Window window;
   XWindowAttributes xgwa;
-  uint8_t text_font[CHARSETS][96][8][7];
+
+  font_t *font;
+  font_t *font_decgfx;
+  font_t *font_unknown;
 
   struct timeval basetime_tv;
   double curtime;
@@ -94,7 +103,6 @@ struct analogterm_sim_s {
   void (*controller)(analogterm_sim_t *sim,
                      int *stepno,
                      double *next_actiontime);
-
 };
 
 
@@ -135,9 +143,9 @@ void at_add_disk_item(analogterm_state_t *st, char *name, unsigned char *data,
                       int len, char type);
 void at_scroll_range(analogterm_state_t *st, int offset);
 void at_scroll(analogterm_state_t *st);
-void at_printc(analogterm_state_t *st, char c, uint16_t m);
-void at_printc_noscroll(analogterm_state_t *st, char c, uint16_t m);
-void at_prints(analogterm_state_t *st, char *s, uint16_t m);
+void at_printc(analogterm_state_t *st, uint32_t c, uint16_t m);
+void at_printc_noscroll(analogterm_state_t *st, uint32_t c, uint16_t m);
+void at_prints(analogterm_state_t *st, uint32_t *s, uint16_t m);
 void at_goto(analogterm_state_t *st, int r, int c);
 void at_cls(analogterm_state_t *st);
 void at_clear_hgr(analogterm_state_t *st);
diff --git a/hacks/images/analogterm/PR_Font_FreeLicense.txt b/hacks/images/analogterm/PR_Font_FreeLicense.txt
new file mode 100755 (executable)
index 0000000..e48a09b
--- /dev/null
@@ -0,0 +1,20 @@
+KREATIVE SOFTWARE RELAY FONTS FREE USE LICENSE\r
+version 1.2f\r
+\r
+Permission is hereby granted, free of charge, to any person or entity (the "User") obtaining a copy of the included font files (the "Software") produced by Kreative Software, to utilize, display, embed, or redistribute the Software, subject to the following conditions:\r
+\r
+1. The User may not sell copies of the Software for a fee.\r
+\r
+1a. The User may give away copies of the Software free of charge provided this license and any documentation is included verbatim and credit is given to Kreative Korporation or Kreative Software.\r
+\r
+2. The User may not modify, reverse-engineer, or create any derivative works of the Software.\r
+\r
+3. Any Software carrying the following font names or variations thereof is not covered by this license and may not be used under the terms of this license: Jewel Hill, Miss Diode n Friends, This is Beckie's font!\r
+\r
+3a. Any Software carrying a font name ending with the string "Pro CE" is not covered by this license and may not be used under the terms of this license.\r
+\r
+4. This license becomes null and void if any of the above conditions are not met.\r
+\r
+5. Kreative Software reserves the right to change this license at any time without notice.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE SOFTWARE OR FROM OTHER DEALINGS IN THE SOFTWARE.\r
diff --git a/hacks/images/analogterm/README b/hacks/images/analogterm/README
new file mode 100644 (file)
index 0000000..13579dd
--- /dev/null
@@ -0,0 +1,8 @@
+The ASCII font is derived from the xscreensaver one, originally
+inspired by the Apple ][ font.  It was altered in 2022 by Matthew
+Mondor to be non-serif, along with other personal taste changes.
+
+The DEC Special Graphics font was drawn from scratch by Matthew
+Mondor in 2022.  The Unknown glyph as well.
+
+The other glyphs, Latin 1 and Graphics, were imported from the PR font.
diff --git a/hacks/images/analogterm/analogterm_ascii.png b/hacks/images/analogterm/analogterm_ascii.png
new file mode 100644 (file)
index 0000000..74aa413
Binary files /dev/null and b/hacks/images/analogterm/analogterm_ascii.png differ
similarity index 96%
rename from hacks/images/analogtermfont.xbm
rename to hacks/images/analogterm/analogterm_ascii.xbm
index deaff75..bb24043 100644 (file)
@@ -1,6 +1,6 @@
-#define analogterm_font_width 672
-#define analogterm_font_height 8
-static char analogterm_font_bits[] = {
+#define analogterm_ascii_width 665
+#define analogterm_ascii_height 8
+static char analogterm_ascii_bits[] = {
   0x00, 0x04, 0x85, 0x82, 0x30, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 
   0x00, 0x80, 0x1C, 0x04, 0xC7, 0x07, 0xF1, 0x61, 0x7C, 0x1C, 0x0E, 0x00, 
   0x00, 0x01, 0x10, 0x38, 0x1C, 0x84, 0x87, 0xE3, 0xF1, 0xF9, 0x78, 0x22, 
@@ -14,35 +14,35 @@ static char analogterm_font_bits[] = {
   0x04, 0x48, 0x22, 0xB0, 0x89, 0x44, 0x22, 0x91, 0x48, 0x84, 0x10, 0x89, 
   0x44, 0x22, 0x11, 0x88, 0x20, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 
   0x02, 0x90, 0x00, 0x02, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0xC0, 0x68, 0x54
+  0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0xC0, 0x68, 0x00
   0x00, 0x04, 0xC5, 0xA7, 0x80, 0x28, 0x10, 0x02, 0x10, 0x07, 0x01, 0x00, 
   0x00, 0x20, 0x2A, 0x04, 0x08, 0x42, 0xF1, 0x08, 0x20, 0x22, 0x11, 0x02, 
   0x41, 0xF0, 0x41, 0x20, 0x2A, 0x91, 0x48, 0x20, 0x12, 0x08, 0x04, 0x22, 
   0x04, 0x48, 0x21, 0x50, 0x99, 0x44, 0x22, 0x91, 0x48, 0x80, 0x10, 0x89, 
   0x44, 0x14, 0x0A, 0x84, 0x40, 0x80, 0x20, 0x00, 0x10, 0x8E, 0x87, 0xC7, 
   0xE3, 0x10, 0x38, 0x1E, 0x04, 0x46, 0x84, 0xB0, 0x79, 0x38, 0x1E, 0x1E, 
-  0x8F, 0xE7, 0x13, 0x89, 0x44, 0x22, 0x91, 0x8F, 0x81, 0xC0, 0x00, 0x28
+  0x8F, 0xE7, 0x13, 0x89, 0x44, 0x22, 0x91, 0x8F, 0x81, 0xC0, 0x00, 0x00
   0x00, 0x04, 0x80, 0xC2, 0x41, 0x10, 0x00, 0x02, 0xD0, 0xDF, 0x07, 0xF0, 
   0x01, 0x10, 0x2A, 0x04, 0x06, 0x23, 0x01, 0x79, 0x10, 0x1C, 0x1E, 0x00, 
   0x20, 0x00, 0x80, 0x10, 0x3A, 0x91, 0x47, 0x20, 0xF2, 0x78, 0x64, 0x3E, 
   0x04, 0xC8, 0x20, 0x50, 0xA9, 0x44, 0x1E, 0x91, 0x87, 0x83, 0x10, 0x89, 
   0x54, 0x08, 0x04, 0x82, 0x80, 0x80, 0x50, 0x00, 0x00, 0x90, 0x48, 0x20, 
   0x12, 0x79, 0x44, 0x22, 0x04, 0x44, 0x82, 0x50, 0x89, 0x44, 0x22, 0x91, 
-  0x40, 0x80, 0x10, 0x89, 0x44, 0x14, 0x11, 0xC4, 0x80, 0x80, 0x01, 0x54
+  0x40, 0x80, 0x10, 0x89, 0x44, 0x14, 0x11, 0xC4, 0x80, 0x80, 0x01, 0x00
   0x00, 0x04, 0xC0, 0x87, 0x22, 0xA8, 0x00, 0x02, 0x10, 0x07, 0x01, 0x00, 
   0x00, 0x08, 0x2A, 0x04, 0x01, 0xE4, 0x03, 0x89, 0x08, 0x22, 0x10, 0x00, 
   0x40, 0xF0, 0x41, 0x10, 0x1A, 0x9F, 0x48, 0x20, 0x12, 0x08, 0x44, 0x22, 
   0x04, 0x48, 0x21, 0x10, 0xC9, 0x44, 0x02, 0x95, 0x02, 0x84, 0x10, 0x89, 
   0x54, 0x14, 0x04, 0x81, 0x00, 0x81, 0x88, 0x00, 0x00, 0x9E, 0x48, 0x20, 
   0xF2, 0x11, 0x44, 0x22, 0x04, 0xC4, 0x81, 0x50, 0x89, 0x44, 0x22, 0x91, 
-  0x80, 0x83, 0x10, 0x89, 0x54, 0x08, 0x11, 0x82, 0x81, 0xC0, 0x00, 0x28
+  0x80, 0x83, 0x10, 0x89, 0x54, 0x08, 0x11, 0x82, 0x81, 0xC0, 0x00, 0x00
   0x00, 0x00, 0x80, 0xE2, 0x91, 0x49, 0x00, 0x04, 0x88, 0x0A, 0x81, 0x00, 
   0x00, 0x04, 0x22, 0x84, 0x40, 0x04, 0x11, 0x89, 0x08, 0x22, 0x08, 0x02, 
   0x81, 0x00, 0x20, 0x00, 0x02, 0x91, 0x48, 0x24, 0x12, 0x08, 0x44, 0x22, 
   0x84, 0x48, 0x22, 0x10, 0x89, 0x44, 0x02, 0x89, 0x44, 0x84, 0x10, 0x51, 
   0x6C, 0x22, 0x84, 0x80, 0x00, 0x82, 0x00, 0x00, 0x00, 0x91, 0x48, 0x20, 
   0x12, 0x10, 0x78, 0x22, 0x04, 0x44, 0x82, 0x50, 0x89, 0x44, 0x1E, 0x9E, 
-  0x00, 0x84, 0x10, 0x51, 0x54, 0x14, 0x1E, 0x81, 0x81, 0xC0, 0x00, 0x54
+  0x00, 0x84, 0x10, 0x51, 0x54, 0x14, 0x1E, 0x81, 0x81, 0xC0, 0x00, 0x00
   0x00, 0x04, 0x80, 0x82, 0x80, 0xB1, 0x00, 0x08, 0x04, 0x00, 0x40, 0x00, 
   0x20, 0x02, 0x1C, 0x84, 0x8F, 0x03, 0xE1, 0x70, 0x08, 0x1C, 0x06, 0x80, 
   0x00, 0x01, 0x10, 0x10, 0x3C, 0x91, 0x87, 0xE3, 0xF1, 0x09, 0x78, 0x22, 
diff --git a/hacks/images/analogterm/analogterm_dec_graphics.png b/hacks/images/analogterm/analogterm_dec_graphics.png
new file mode 100644 (file)
index 0000000..8724a73
Binary files /dev/null and b/hacks/images/analogterm/analogterm_dec_graphics.png differ
diff --git a/hacks/images/analogterm/analogterm_dec_graphics.xbm b/hacks/images/analogterm/analogterm_dec_graphics.xbm
new file mode 100644 (file)
index 0000000..35839fa
--- /dev/null
@@ -0,0 +1,22 @@
+#define analogterm_dec_graphics_width 217
+#define analogterm_dec_graphics_height 8
+static char analogterm_dec_graphics_bits[] = {
+  0x00, 0x55, 0xE1, 0x60, 0x08, 0x00, 0x00, 0x85, 0x02, 0x02, 0x00, 0x40, 
+  0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x00, 0x08, 0x18, 0x01, 
+  0x00, 0xC1, 0x01, 0x00, 0x88, 0x6A, 0x21, 0x10, 0x08, 0x20, 0x10, 0x85, 
+  0x02, 0x02, 0x00, 0x40, 0x20, 0xFE, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 
+  0x00, 0x08, 0x06, 0x06, 0x00, 0x21, 0x02, 0x00, 0x1C, 0xD5, 0x61, 0x10, 
+  0x08, 0x50, 0x10, 0x87, 0x02, 0x02, 0x00, 0x40, 0x20, 0x00, 0x7F, 0x00, 
+  0x00, 0x80, 0x40, 0x20, 0x00, 0x08, 0x01, 0xC8, 0xE7, 0x23, 0x00, 0x00, 
+  0xBE, 0x6A, 0x3D, 0x1E, 0x8F, 0x23, 0x7C, 0x15, 0xF9, 0xE3, 0x81, 0xC7, 
+  0xFF, 0x01, 0x80, 0x3F, 0x00, 0x80, 0x7F, 0xFC, 0xFF, 0x08, 0x06, 0xA6, 
+  0x82, 0x70, 0x00, 0x00, 0x1C, 0x55, 0x29, 0x62, 0xBD, 0x00, 0x10, 0x15, 
+  0x11, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0xC0, 0x1F, 0x80, 0x40, 0x00, 
+  0x10, 0x08, 0x98, 0x81, 0xE2, 0x23, 0x20, 0x00, 0x88, 0x2A, 0x08, 0x06, 
+  0x83, 0x01, 0x10, 0x10, 0x10, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0x00, 
+  0xE0, 0x8F, 0x40, 0x00, 0x10, 0x08, 0x00, 0x80, 0x42, 0x20, 0x00, 0x00, 
+  0x00, 0x15, 0x08, 0x02, 0x85, 0x00, 0x7C, 0x10, 0x10, 0x00, 0x81, 0x00, 
+  0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x10, 0x08, 0x9F, 0x4F, 
+  0x44, 0xD0, 0x03, 0x00, 0x80, 0x2A, 0x08, 0x02, 0x85, 0x00, 0x00, 0x70, 
+  0x10, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 
+  0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
diff --git a/hacks/images/analogterm/analogterm_graphics1.png b/hacks/images/analogterm/analogterm_graphics1.png
new file mode 100644 (file)
index 0000000..ba5a71a
Binary files /dev/null and b/hacks/images/analogterm/analogterm_graphics1.png differ
diff --git a/hacks/images/analogterm/analogterm_graphics1.xbm b/hacks/images/analogterm/analogterm_graphics1.xbm
new file mode 100644 (file)
index 0000000..401a9a7
--- /dev/null
@@ -0,0 +1,92 @@
+#define analogterm_graphics1_width 1050
+#define analogterm_graphics1_height 8
+static char analogterm_graphics1_bits[] = {
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x20, 0x30, 0x00, 0x00, 0x02, 0x03, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0x30, 0x08, 0x04, 0x06, 
+  0x83, 0x40, 0x60, 0x10, 0x18, 0x0C, 0x02, 0x83, 0x40, 0x60, 0x10, 0x18, 
+  0x0C, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 
+  0x10, 0x18, 0x0C, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x04, 0x06, 0x83, 
+  0x41, 0x20, 0x30, 0x08, 0x0C, 0x06, 0x03, 0x00, 0x20, 0x30, 0x00, 0x0A, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x05, 0x41, 0xA1, 0x20, 0x28, 
+  0x14, 0x04, 0x85, 0x02, 0x00, 0x00, 0x10, 0x14, 0x0A, 0x82, 0x42, 0x01, 
+  0x00, 0x10, 0x08, 0x60, 0x20, 0x08, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 
+  0x00, 0x40, 0x00, 0x30, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0xF8, 0xAA, 0xEA, 0xFE, 0x07, 0x02, 
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0x30, 0x08, 0x04, 0x06, 
+  0x83, 0x40, 0x60, 0x10, 0x18, 0x0C, 0x02, 0x83, 0x40, 0x60, 0x10, 0x18, 
+  0x0C, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 
+  0x10, 0x18, 0x0C, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x04, 0x06, 0x83, 
+  0x41, 0x20, 0x30, 0x08, 0x0C, 0x06, 0x03, 0x00, 0x20, 0x30, 0x00, 0x0A, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x05, 0x41, 0xA1, 0x20, 0x28, 
+  0x14, 0x04, 0x85, 0x02, 0x00, 0x00, 0x10, 0x14, 0x0A, 0x82, 0x42, 0x01, 
+  0x00, 0x10, 0x08, 0x90, 0x40, 0x04, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 
+  0x00, 0x40, 0x00, 0x30, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x40, 0xB5, 0x0B, 0x00, 0x02, 
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0x30, 0x08, 0x04, 0x06, 
+  0x83, 0x40, 0x60, 0x10, 0x18, 0x0C, 0x02, 0x83, 0x40, 0x60, 0x10, 0x18, 
+  0x0C, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 
+  0x10, 0x18, 0x0C, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x04, 0x06, 0x83, 
+  0x41, 0x20, 0x30, 0x08, 0x0C, 0x06, 0x03, 0x00, 0x20, 0x30, 0x7F, 0x0A, 
+  0x1E, 0xC0, 0x7F, 0x00, 0x3E, 0x78, 0x0A, 0xFD, 0x41, 0xB9, 0xE0, 0x29, 
+  0xF4, 0x07, 0xE5, 0xF2, 0x07, 0xFC, 0xFF, 0x94, 0xFB, 0x9F, 0x72, 0x07, 
+  0x00, 0x08, 0x10, 0x08, 0x81, 0x02, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 
+  0x00, 0x40, 0x00, 0x30, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x95, 0xEA, 0x0E, 0x00, 0x02, 
+  0xFF, 0x3F, 0x02, 0xB3, 0x5A, 0x21, 0x30, 0xD5, 0x2A, 0x00, 0x80, 0xC7, 
+  0xE3, 0xF1, 0x8F, 0xC7, 0xE7, 0x83, 0xC7, 0xE3, 0xF1, 0x8F, 0xC7, 0xE7, 
+  0x83, 0xC7, 0xE3, 0xF1, 0x78, 0x3C, 0x1E, 0xFF, 0x78, 0x7C, 0x3E, 0x9F, 
+  0xCF, 0xE7, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xBB, 0x01, 0x00, 0x00, 0x0A, 
+  0x82, 0x4F, 0x40, 0x7C, 0x20, 0x08, 0x3E, 0x01, 0xF1, 0x81, 0x20, 0xE8, 
+  0x04, 0xC4, 0x05, 0x02, 0xF8, 0x03, 0x00, 0x7F, 0x00, 0xE2, 0x0F, 0x00, 
+  0x0F, 0x06, 0x60, 0x04, 0x02, 0xF1, 0x40, 0xE0, 0x11, 0x1F, 0x0C, 0x1E, 
+  0xF3, 0xC7, 0xFC, 0x31, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x40, 0xB5, 0x0B, 0x00, 0x02, 
+  0x80, 0x3F, 0x02, 0x03, 0x58, 0x21, 0x30, 0x80, 0x2A, 0x02, 0x83, 0xC0, 
+  0x63, 0xF0, 0x88, 0x07, 0xE6, 0x03, 0xC0, 0x03, 0xF0, 0x80, 0x07, 0xE0, 
+  0x83, 0xC0, 0x23, 0x30, 0x18, 0x3C, 0x1E, 0x8F, 0x78, 0x20, 0x30, 0x98, 
+  0xCF, 0xE7, 0x83, 0x78, 0xE0, 0xFF, 0x98, 0x0F, 0xFE, 0x0F, 0x78, 0xE0, 
+  0xFF, 0x80, 0x0F, 0xFE, 0x8F, 0x78, 0xE0, 0xFF, 0x08, 0x0C, 0xE6, 0x83, 
+  0xFF, 0xE0, 0xFF, 0xFF, 0x0F, 0xFE, 0x0F, 0xB8, 0x21, 0x30, 0x7F, 0x0A, 
+  0x9E, 0x42, 0x7F, 0x50, 0x2E, 0x78, 0x00, 0xFF, 0x01, 0xF8, 0xE0, 0x29, 
+  0xF4, 0x07, 0xE5, 0xF2, 0xA7, 0xDC, 0xFF, 0x80, 0xFF, 0x9F, 0x72, 0x87, 
+  0x10, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x10, 0x1F, 0x0C, 0x1E, 
+  0x83, 0xC7, 0x7C, 0x30, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0xF8, 0xAA, 0xEA, 0x0E, 0x00, 0x02, 
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 
+  0x60, 0x30, 0x08, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x80, 0x40, 0x20, 0x30, 0x18, 0x04, 0x06, 0x83, 0x40, 0x20, 0x30, 0x18, 
+  0x04, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x0C, 0x06, 0x81, 
+  0xC0, 0x60, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x20, 0x30, 0x00, 0x0A, 
+  0x82, 0x42, 0x41, 0x50, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 
+  0x14, 0x04, 0x85, 0x82, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x82, 0x42, 0x41, 
+  0x20, 0x00, 0x00, 0x02, 0x84, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 
+  0x03, 0xC0, 0x00, 0x10, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x40, 0xB5, 0x0B, 0x00, 0x02, 
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x20, 0x30, 0x00, 0x00, 0x02, 0x83, 0x40, 
+  0x60, 0x30, 0x08, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x80, 0x40, 0x20, 0x30, 0x18, 0x04, 0x06, 0x83, 0x40, 0x20, 0x30, 0x18, 
+  0x04, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x0C, 0x06, 0x81, 
+  0xC0, 0x60, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x20, 0x30, 0x00, 0x0A, 
+  0x82, 0x42, 0x41, 0x50, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 
+  0x14, 0x04, 0x85, 0x82, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x82, 0x42, 0x41, 
+  0x20, 0x00, 0x00, 0x01, 0x48, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 
+  0x03, 0xC0, 0x00, 0x10, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x95, 0xEA, 0x0E, 0x00, 0x02, 
+  0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 
+  0x60, 0x30, 0x08, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x80, 0x40, 0x20, 0x30, 0x18, 0x04, 0x06, 0x83, 0x40, 0x20, 0x30, 0x18, 
+  0x04, 0x06, 0x83, 0x40, 0x20, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x0C, 0x06, 0x81, 
+  0xC0, 0x60, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 
+  0x82, 0x42, 0x41, 0x50, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 
+  0x14, 0x04, 0x85, 0x82, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x82, 0x42, 0x41, 
+  0x20, 0x00, 0x80, 0x00, 0x30, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 
+  0x03, 0xC0, 0x00, 0x10, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+  0xDF, 0xE7, 0xF1, 0x38, 0x0C, 0x02, 0x78, 0x40, 0xB5, 0x0B, 0x00, 0x02, 
+  };
diff --git a/hacks/images/analogterm/analogterm_graphics2.png b/hacks/images/analogterm/analogterm_graphics2.png
new file mode 100644 (file)
index 0000000..f59ef30
Binary files /dev/null and b/hacks/images/analogterm/analogterm_graphics2.png differ
diff --git a/hacks/images/analogterm/analogterm_graphics2.xbm b/hacks/images/analogterm/analogterm_graphics2.xbm
new file mode 100644 (file)
index 0000000..6d607c5
--- /dev/null
@@ -0,0 +1,62 @@
+#define analogterm_graphics2_width 693
+#define analogterm_graphics2_height 8
+static char analogterm_graphics2_bits[] = {
+  0x7E, 0xC0, 0xEF, 0x1F, 0xF8, 0x03, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF8, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 
+  0xFF, 0xFF, 0xFF, 0xC1, 0x70, 0x3C, 0xDF, 0xAF, 0x40, 0xA9, 0x00, 0xD5, 
+  0x7F, 0xF5, 0xDB, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xA8, 0x52, 0x01, 
+  0x00, 0x08, 0x04, 0x00, 0x80, 0x40, 0x00, 0x10, 0x08, 0x04, 0x02, 0x81, 
+  0x40, 0x20, 0x00, 0x80, 0x3F, 0x1C, 0xF0, 0x9B, 0x90, 0x81, 0x40, 0x00, 
+  0x80, 0xF2, 0xF7, 0xFD, 0xEF, 0xB6, 0xFE, 0xFF, 0xF3, 0x47, 0x20, 0x10, 
+  0x08, 0x04, 0x02, 0xFC, 0xE0, 0xE7, 0x3F, 0xF0, 0x81, 0x01, 0x02, 0x02, 
+  0x02, 0x01, 0x01, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x81, 
+  0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0x70, 0x3C, 0xDF, 0x5F, 0x80, 
+  0x56, 0x01, 0xAA, 0xBF, 0xEA, 0xA5, 0x07, 0x00, 0x00, 0x00, 0x80, 0x6F, 
+  0x5C, 0xA1, 0x02, 0x03, 0x04, 0x08, 0x00, 0x40, 0x80, 0x00, 0x28, 0x04, 
+  0x08, 0x84, 0x40, 0xA1, 0x50, 0x00, 0x80, 0x1F, 0x18, 0xF3, 0xC3, 0x30, 
+  0x90, 0x48, 0x1F, 0x80, 0x02, 0xEC, 0xFE, 0xD7, 0xC9, 0x01, 0x04, 0x34, 
+  0xA6, 0x50, 0x28, 0x14, 0x0A, 0x05, 0xF8, 0xF1, 0xE3, 0x7F, 0xE0, 0xC0, 
+  0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x10, 
+  0x08, 0x00, 0x81, 0x80, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF, 0xC1, 0x70, 0x3C, 
+  0xDF, 0xAF, 0x40, 0xA9, 0x00, 0xD5, 0x7F, 0xF5, 0xDB, 0x07, 0x00, 0xFE, 
+  0x00, 0x00, 0xE7, 0xAE, 0x40, 0x81, 0x04, 0x02, 0x10, 0x00, 0x20, 0x00, 
+  0x01, 0x44, 0x02, 0x10, 0x48, 0x20, 0x12, 0x89, 0x10, 0x82, 0xAF, 0xFF, 
+  0xF0, 0xE3, 0x70, 0x10, 0x9C, 0xE0, 0xEF, 0x0E, 0x5C, 0xFF, 0xBB, 0xC1, 
+  0x31, 0xF8, 0xD3, 0x45, 0xA8, 0x50, 0x0A, 0x84, 0x08, 0xF0, 0xFB, 0xE1, 
+  0xFF, 0x40, 0xE0, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x7F, 
+  0x00, 0x00, 0x10, 0x08, 0x00, 0x81, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 
+  0xC1, 0x70, 0x3C, 0xDF, 0x5F, 0x80, 0x56, 0x01, 0xAA, 0xBF, 0xEA, 0xA5, 
+  0x07, 0x00, 0xFE, 0x00, 0x00, 0xE2, 0x5F, 0x80, 0x42, 0x0B, 0x01, 0x20, 
+  0x00, 0x10, 0x00, 0x02, 0x82, 0x01, 0x20, 0x30, 0x10, 0x0C, 0x06, 0xFF, 
+  0x06, 0x76, 0x0C, 0xB0, 0xF3, 0xFF, 0xFE, 0xBE, 0x00, 0x10, 0xC0, 0xBC, 
+  0xFF, 0x7C, 0xA2, 0xD1, 0x07, 0x70, 0xE6, 0x70, 0x38, 0x1C, 0x8E, 0x08, 
+  0xF0, 0xFF, 0xE1, 0xFE, 0x00, 0xE0, 0x11, 0x02, 0x02, 0x02, 0x01, 0x01, 
+  0x01, 0x00, 0x80, 0x3F, 0x00, 0x10, 0x08, 0x00, 0x81, 0x80, 0x3F, 0x00, 
+  0xF0, 0xFF, 0xFF, 0xC1, 0x70, 0x3C, 0xDF, 0xAF, 0x40, 0x01, 0x54, 0xD5, 
+  0xEA, 0xFF, 0xDB, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xAF, 0x40, 0xA1, 
+  0x14, 0x00, 0x40, 0x00, 0x18, 0x00, 0x06, 0x01, 0xC0, 0x40, 0x30, 0x08, 
+  0x0C, 0x04, 0x11, 0x8E, 0x7A, 0xFE, 0x90, 0xE3, 0x70, 0x7C, 0xFF, 0x00, 
+  0xF0, 0xCE, 0x5C, 0x7F, 0xBB, 0xC1, 0x09, 0x08, 0xF0, 0x57, 0x21, 0x14, 
+  0x28, 0x95, 0x08, 0xF8, 0xFF, 0x63, 0x7C, 0x00, 0xC0, 0x39, 0x02, 0x02, 
+  0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0xC0, 0x1F, 0x10, 0x08, 0x00, 0x81, 
+  0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xC1, 0x70, 0x3C, 0xDF, 0x5F, 0x80, 
+  0x02, 0xAA, 0x2A, 0xD5, 0xFF, 0xA5, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE7, 
+  0x5E, 0x80, 0x52, 0x2B, 0x00, 0x80, 0x00, 0x24, 0x00, 0x89, 0x00, 0x20, 
+  0x81, 0x48, 0x04, 0x12, 0x88, 0x00, 0x9E, 0x3D, 0x8C, 0x01, 0xC0, 0x30, 
+  0x38, 0x88, 0x00, 0x90, 0x02, 0xEC, 0xBE, 0xD7, 0xC9, 0xF7, 0x07, 0x70, 
+  0x47, 0x20, 0x10, 0x08, 0x8A, 0x0A, 0xFC, 0xFF, 0x27, 0x38, 0x00, 0x80, 
+  0x7D, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x1F, 
+  0x08, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC1, 0x70, 0x3C, 
+  0xDF, 0xAF, 0x40, 0x01, 0x54, 0xD5, 0xEA, 0xFF, 0xDB, 0x07, 0x00, 0xFE, 
+  0x00, 0x80, 0x6F, 0x2C, 0x00, 0xA9, 0x54, 0x00, 0x00, 0x01, 0x42, 0x80, 
+  0x50, 0x00, 0x10, 0x02, 0x85, 0x02, 0x21, 0x50, 0x00, 0xB6, 0xFD, 0x0F, 
+  0x91, 0x87, 0x10, 0x90, 0xC8, 0xFF, 0x9F, 0x02, 0xF4, 0xDD, 0xEF, 0xB6, 
+  0x01, 0x04, 0xF0, 0xA7, 0x50, 0x28, 0x14, 0x9F, 0x0D, 0xFE, 0xFF, 0x0F, 
+  0x10, 0x00, 0x00, 0xFF, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 
+  0x00, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 
+  0xC0, 0x70, 0x3C, 0xDF, 0x5F, 0x80, 0x02, 0xAA, 0x2A, 0xD5, 0xFF, 0xA5, 
+  0x07, 0x00, 0xFE, 0x00, 0xC0, 0x3F, 0x18, 0x00, 0x56, 0xAB, 0x00, 0x00, 
+  0x02, 0x81, 0x40, 0x20, 0x00, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x00, 
+  0xC2, 0xBF, 0x00, 0xBE, 0x7F, 0xEF, 0x81, 0x40, 0x00, 0x00, 0xF0, 0x07, 
+  0x00, 0x00, 0x80, 0xFE, 0x03, 0x00, 0x10, 0x89, 0x48, 0x12, 0x8A, 0x08, 
+  };
diff --git a/hacks/images/analogterm/analogterm_graphics3.png b/hacks/images/analogterm/analogterm_graphics3.png
new file mode 100644 (file)
index 0000000..634cdfb
Binary files /dev/null and b/hacks/images/analogterm/analogterm_graphics3.png differ
diff --git a/hacks/images/analogterm/analogterm_graphics3.xbm b/hacks/images/analogterm/analogterm_graphics3.xbm
new file mode 100644 (file)
index 0000000..703ee29
--- /dev/null
@@ -0,0 +1,10 @@
+#define analogterm_graphics3_width 70
+#define analogterm_graphics3_height 8
+static char analogterm_graphics3_bits[] = {
+  0x1C, 0x00, 0x87, 0x03, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x22, 0x10, 0x08, 
+  0x24, 0x12, 0x08, 0x44, 0x22, 0x11, 0x22, 0x10, 0x08, 0x24, 0x12, 0x08, 
+  0x44, 0x22, 0x11, 0x00, 0x00, 0x87, 0xC3, 0xE1, 0x70, 0x00, 0x1C, 0x0E, 
+  0x22, 0x90, 0x00, 0x04, 0x02, 0x89, 0x40, 0x22, 0x10, 0x22, 0x90, 0x00, 
+  0x04, 0x02, 0x89, 0x40, 0x22, 0x10, 0x1C, 0x00, 0x87, 0x03, 0xE0, 0x70, 
+  0x00, 0x1C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  };
diff --git a/hacks/images/analogterm/analogterm_latin.png b/hacks/images/analogterm/analogterm_latin.png
new file mode 100644 (file)
index 0000000..6e682d1
Binary files /dev/null and b/hacks/images/analogterm/analogterm_latin.png differ
diff --git a/hacks/images/analogterm/analogterm_latin.xbm b/hacks/images/analogterm/analogterm_latin.xbm
new file mode 100644 (file)
index 0000000..e877954
--- /dev/null
@@ -0,0 +1,60 @@
+#define analogterm_latin_width 665
+#define analogterm_latin_height 8
+static char analogterm_latin_bits[] = {
+  0x08, 0x04, 0x0E, 0x20, 0x42, 0xF0, 0x44, 0x1C, 0x06, 0x12, 0x00, 0xE0, 
+  0xF8, 0x10, 0x08, 0x06, 0x07, 0x02, 0xE0, 0x01, 0x00, 0x08, 0x44, 0x42, 
+  0x20, 0x30, 0x20, 0x10, 0x08, 0x04, 0x4B, 0xC4, 0xE1, 0x71, 0x20, 0x20, 
+  0x88, 0x88, 0x00, 0x41, 0x88, 0x38, 0x2C, 0x04, 0x08, 0xC2, 0x12, 0x01, 
+  0x40, 0x04, 0x08, 0x42, 0x04, 0x11, 0x78, 0x20, 0x20, 0x08, 0x0B, 0x80, 
+  0x00, 0x00, 0x20, 0x20, 0x08, 0x80, 0x00, 0x41, 0x00, 0x28, 0x2C, 0x00, 
+  0x00, 0xC0, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x11, 0x00, 0x00, 
+  0x00, 0x1E, 0x51, 0x24, 0x42, 0x08, 0x00, 0x22, 0x0C, 0x09, 0x00, 0x10, 
+  0x01, 0x28, 0x08, 0x08, 0x02, 0x01, 0x50, 0x01, 0x00, 0x0C, 0x8A, 0x44, 
+  0x24, 0x22, 0x01, 0x20, 0x04, 0x8A, 0x06, 0x20, 0x52, 0x88, 0x40, 0x10, 
+  0x14, 0x00, 0x81, 0xA0, 0x00, 0x48, 0x1A, 0x08, 0x04, 0xA5, 0xE1, 0x88, 
+  0x38, 0x08, 0x04, 0x05, 0x80, 0x10, 0x88, 0x40, 0x10, 0x94, 0x46, 0x44, 
+  0x01, 0x00, 0x40, 0x10, 0x94, 0x08, 0x81, 0xA0, 0x88, 0x10, 0x1A, 0x04, 
+  0x08, 0xA2, 0x11, 0x21, 0x40, 0x08, 0x04, 0x45, 0x84, 0x10, 0x88, 0x00, 
+  0x08, 0x05, 0x81, 0x43, 0x41, 0x70, 0x00, 0x59, 0x8A, 0xC4, 0x07, 0xE8, 
+  0x02, 0x10, 0x3E, 0x04, 0x84, 0x20, 0x52, 0x01, 0x00, 0x08, 0x0A, 0x49, 
+  0x22, 0xB1, 0x20, 0x10, 0x08, 0x04, 0x02, 0xC1, 0x51, 0x08, 0x7C, 0x3E, 
+  0x9F, 0x8F, 0xC3, 0xE1, 0x70, 0x48, 0x00, 0x0E, 0x87, 0xC3, 0x11, 0x51, 
+  0x64, 0x22, 0x91, 0x48, 0x24, 0xF2, 0x88, 0x38, 0x1C, 0x0E, 0x87, 0xC3, 
+  0xB1, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x28, 0x00, 0x08, 
+  0x04, 0x05, 0xE0, 0x00, 0x38, 0x22, 0x91, 0x08, 0x20, 0xF2, 0x00, 0x00, 
+  0x08, 0x85, 0x83, 0x82, 0x00, 0x88, 0x00, 0x45, 0x4C, 0x02, 0xE4, 0x6B, 
+  0x02, 0x00, 0x08, 0x0E, 0x03, 0x20, 0xE2, 0x21, 0x00, 0x1C, 0x04, 0x12, 
+  0x81, 0x40, 0x20, 0x28, 0x14, 0x0A, 0x85, 0x22, 0xF2, 0x09, 0x04, 0x02, 
+  0x81, 0x00, 0x81, 0x40, 0x20, 0x5C, 0x26, 0x91, 0x48, 0x24, 0x12, 0x21, 
+  0x54, 0x22, 0x91, 0x48, 0x24, 0x12, 0x79, 0x40, 0x20, 0x10, 0x08, 0x04, 
+  0x42, 0x09, 0x44, 0x22, 0x91, 0x08, 0x81, 0x40, 0x20, 0x38, 0x1E, 0x0E, 
+  0x87, 0xC3, 0x11, 0xF9, 0x64, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x00, 
+  0x08, 0x05, 0x81, 0xE3, 0x03, 0x70, 0x00, 0x59, 0x80, 0x04, 0x04, 0xA8, 
+  0x02, 0x00, 0x08, 0x00, 0x00, 0x20, 0x42, 0x01, 0x00, 0x00, 0x00, 0x89, 
+  0x42, 0xA3, 0x10, 0x44, 0x22, 0x91, 0x48, 0xE4, 0x53, 0x88, 0x3C, 0x1E, 
+  0x8F, 0x07, 0x81, 0x40, 0x20, 0x48, 0x2A, 0x91, 0x48, 0x24, 0x12, 0x51, 
+  0x54, 0x22, 0x91, 0x48, 0x44, 0xF1, 0x88, 0x78, 0x3C, 0x1E, 0x8F, 0xC7, 
+  0xE3, 0x09, 0x7C, 0x3E, 0x9F, 0x0F, 0x81, 0x40, 0x20, 0x44, 0x22, 0x91, 
+  0x48, 0x24, 0x12, 0x01, 0x54, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x00, 
+  0x08, 0x1E, 0x41, 0x84, 0x40, 0x80, 0x00, 0x22, 0x0E, 0x09, 0x00, 0x10, 
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x43, 0x01, 0x00, 0x00, 0x8E, 0x44, 
+  0x26, 0x91, 0x89, 0x7C, 0x3E, 0x9F, 0xCF, 0x27, 0x52, 0x70, 0x04, 0x02, 
+  0x81, 0x00, 0x81, 0x40, 0x20, 0x48, 0x32, 0x91, 0x48, 0x24, 0x12, 0x89, 
+  0x4C, 0x22, 0x91, 0x48, 0x84, 0x10, 0x88, 0x44, 0x22, 0x91, 0x48, 0x24, 
+  0x52, 0xF0, 0x04, 0x02, 0x81, 0x00, 0x81, 0x40, 0x20, 0x44, 0x22, 0x91, 
+  0x48, 0x24, 0x12, 0x21, 0x4C, 0x22, 0x91, 0x48, 0xC4, 0xF3, 0xF0, 0x00, 
+  0x08, 0x84, 0x1E, 0x80, 0x40, 0x78, 0x00, 0x1C, 0x00, 0x12, 0x00, 0xE0, 
+  0x00, 0x00, 0x3E, 0x00, 0x00, 0xA0, 0x42, 0x01, 0x20, 0x00, 0x40, 0x02, 
+  0x04, 0x03, 0x71, 0x44, 0x22, 0x91, 0x48, 0x24, 0xD2, 0x41, 0x7C, 0x3E, 
+  0x9F, 0x8F, 0xC3, 0xE1, 0x70, 0x38, 0x22, 0x0E, 0x87, 0xC3, 0xE1, 0x00, 
+  0x38, 0x1C, 0x0E, 0x87, 0x83, 0x10, 0x68, 0x78, 0x3C, 0x1E, 0x8F, 0xC7, 
+  0xE3, 0x41, 0x78, 0x3C, 0x1E, 0x0F, 0x81, 0x40, 0x20, 0x38, 0x22, 0x0E, 
+  0x87, 0xC3, 0xE1, 0x00, 0x38, 0x3C, 0x1E, 0x8F, 0x07, 0x12, 0x80, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xC0, 0x11, 0x70, 0x00, 
+  };
diff --git a/hacks/images/analogterm/analogterm_unknown.png b/hacks/images/analogterm/analogterm_unknown.png
new file mode 100644 (file)
index 0000000..1033903
Binary files /dev/null and b/hacks/images/analogterm/analogterm_unknown.png differ
diff --git a/hacks/images/analogterm/analogterm_unknown.xbm b/hacks/images/analogterm/analogterm_unknown.xbm
new file mode 100644 (file)
index 0000000..029ac93
--- /dev/null
@@ -0,0 +1,4 @@
+#define analogterm_unknown_width 7
+#define analogterm_unknown_height 8
+static char analogterm_unknown_bits[] = {
+  0x00, 0x3E, 0x22, 0x22, 0x22, 0x22, 0x3E, 0x00, };
diff --git a/hacks/images/analogtermfont.png b/hacks/images/analogtermfont.png
deleted file mode 100644 (file)
index e5ce900..0000000
Binary files a/hacks/images/analogtermfont.png and /dev/null differ
diff --git a/hacks/images/analogtermgfxfont.png b/hacks/images/analogtermgfxfont.png
deleted file mode 100644 (file)
index 19d000f..0000000
Binary files a/hacks/images/analogtermgfxfont.png and /dev/null differ
diff --git a/hacks/images/analogtermgfxfont.xbm b/hacks/images/analogtermgfxfont.xbm
deleted file mode 100644 (file)
index f36dec1..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#define analogtermgfx_font_width 672
-#define analogtermgfx_font_height 8
-static char analogtermgfx_font_bits[] = {
-  0x00, 0x04, 0x85, 0x82, 0x30, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 
-  0x00, 0x80, 0x1C, 0x04, 0xC7, 0x07, 0xF1, 0x61, 0x7C, 0x1C, 0x0E, 0x00, 
-  0x00, 0x01, 0x10, 0x38, 0x1C, 0x84, 0x87, 0xE3, 0xF1, 0xF9, 0x78, 0x22, 
-  0x0E, 0x48, 0x24, 0x10, 0x89, 0x38, 0x1E, 0x8E, 0x87, 0xE3, 0x13, 0x89, 
-  0x44, 0x22, 0x91, 0x8F, 0x17, 0xF0, 0x00, 0x00, 0x00, 0x55, 0xE1, 0x60, 
-  0x08, 0x00, 0x00, 0x85, 0x02, 0x02, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 
-  0x00, 0x80, 0x40, 0x20, 0x00, 0x08, 0x18, 0x01, 0x00, 0xC1, 0x01, 0x00, 
-  0x00, 0x04, 0x85, 0xC2, 0x33, 0x29, 0x10, 0x04, 0x88, 0x0A, 0x01, 0x00, 
-  0x00, 0x40, 0x22, 0x86, 0x08, 0x84, 0x11, 0x10, 0x40, 0x22, 0x11, 0x00, 
-  0x80, 0x00, 0x20, 0x44, 0x22, 0x8A, 0x48, 0x24, 0x12, 0x08, 0x04, 0x22, 
-  0x04, 0x48, 0x22, 0xB0, 0x89, 0x44, 0x22, 0x91, 0x48, 0x84, 0x10, 0x89, 
-  0x44, 0x22, 0x11, 0x88, 0x20, 0x80, 0x00, 0x00, 0x88, 0x6A, 0x21, 0x10, 
-  0x08, 0x20, 0x10, 0x85, 0x02, 0x02, 0x00, 0x40, 0x20, 0xFE, 0x00, 0x00, 
-  0x00, 0x80, 0x40, 0x20, 0x00, 0x08, 0x06, 0x06, 0x00, 0x21, 0x02, 0x54, 
-  0x00, 0x04, 0xC5, 0xA7, 0x80, 0x28, 0x10, 0x02, 0x10, 0x07, 0x01, 0x00, 
-  0x00, 0x20, 0x2A, 0x04, 0x08, 0x42, 0xF1, 0x08, 0x20, 0x22, 0x11, 0x02, 
-  0x41, 0xF0, 0x41, 0x20, 0x2A, 0x91, 0x48, 0x20, 0x12, 0x08, 0x04, 0x22, 
-  0x04, 0x48, 0x21, 0x50, 0x99, 0x44, 0x22, 0x91, 0x48, 0x80, 0x10, 0x89, 
-  0x44, 0x14, 0x0A, 0x84, 0x40, 0x80, 0x20, 0x00, 0x1C, 0xD5, 0x61, 0x10, 
-  0x08, 0x50, 0x10, 0x87, 0x02, 0x02, 0x00, 0x40, 0x20, 0x00, 0x7F, 0x00, 
-  0x00, 0x80, 0x40, 0x20, 0x00, 0x08, 0x01, 0xC8, 0xE7, 0x23, 0x00, 0x28, 
-  0x00, 0x04, 0x80, 0xC2, 0x41, 0x10, 0x00, 0x02, 0xD0, 0xDF, 0x07, 0xF0, 
-  0x01, 0x10, 0x2A, 0x04, 0x06, 0x23, 0x01, 0x79, 0x10, 0x1C, 0x1E, 0x00, 
-  0x20, 0x00, 0x80, 0x10, 0x3A, 0x91, 0x47, 0x20, 0xF2, 0x78, 0x64, 0x3E, 
-  0x04, 0xC8, 0x20, 0x50, 0xA9, 0x44, 0x1E, 0x91, 0x87, 0x83, 0x10, 0x89, 
-  0x54, 0x08, 0x04, 0x82, 0x80, 0x80, 0x50, 0x00, 0xBE, 0x6A, 0x3D, 0x1E, 
-  0x8F, 0x23, 0x7C, 0x15, 0xF9, 0xE3, 0x81, 0xC7, 0xFF, 0x01, 0x80, 0x3F, 
-  0x00, 0x80, 0x7F, 0xFC, 0xFF, 0x08, 0x06, 0xA6, 0x82, 0x70, 0x00, 0x54, 
-  0x00, 0x04, 0xC0, 0x87, 0x22, 0xA8, 0x00, 0x02, 0x10, 0x07, 0x01, 0x00, 
-  0x00, 0x08, 0x2A, 0x04, 0x01, 0xE4, 0x03, 0x89, 0x08, 0x22, 0x10, 0x00, 
-  0x40, 0xF0, 0x41, 0x10, 0x1A, 0x9F, 0x48, 0x20, 0x12, 0x08, 0x44, 0x22, 
-  0x04, 0x48, 0x21, 0x10, 0xC9, 0x44, 0x02, 0x95, 0x02, 0x84, 0x10, 0x89, 
-  0x54, 0x14, 0x04, 0x81, 0x00, 0x81, 0x88, 0x00, 0x1C, 0x55, 0x29, 0x62, 
-  0xBD, 0x00, 0x10, 0x15, 0x11, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0xC0, 
-  0x1F, 0x80, 0x40, 0x00, 0x10, 0x08, 0x98, 0x81, 0xE2, 0x23, 0x20, 0x28, 
-  0x00, 0x00, 0x80, 0xE2, 0x91, 0x49, 0x00, 0x04, 0x88, 0x0A, 0x81, 0x00, 
-  0x00, 0x04, 0x22, 0x84, 0x40, 0x04, 0x11, 0x89, 0x08, 0x22, 0x08, 0x02, 
-  0x81, 0x00, 0x20, 0x00, 0x02, 0x91, 0x48, 0x24, 0x12, 0x08, 0x44, 0x22, 
-  0x84, 0x48, 0x22, 0x10, 0x89, 0x44, 0x02, 0x89, 0x44, 0x84, 0x10, 0x51, 
-  0x6C, 0x22, 0x84, 0x80, 0x00, 0x82, 0x00, 0x00, 0x88, 0x2A, 0x08, 0x06, 
-  0x83, 0x01, 0x10, 0x10, 0x10, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0x00, 
-  0xE0, 0x8F, 0x40, 0x00, 0x10, 0x08, 0x00, 0x80, 0x42, 0x20, 0x00, 0x54, 
-  0x00, 0x04, 0x80, 0x82, 0x80, 0xB1, 0x00, 0x08, 0x04, 0x00, 0x40, 0x00, 
-  0x20, 0x02, 0x1C, 0x84, 0x8F, 0x03, 0xE1, 0x70, 0x08, 0x1C, 0x06, 0x80, 
-  0x00, 0x01, 0x10, 0x10, 0x3C, 0x91, 0x87, 0xE3, 0xF1, 0x09, 0x78, 0x22, 
-  0x0E, 0x47, 0xE4, 0x13, 0x89, 0x38, 0x02, 0x96, 0x88, 0x83, 0xE0, 0x20, 
-  0x44, 0x22, 0x84, 0x8F, 0x07, 0xF4, 0x00, 0x00, 0x00, 0x15, 0x08, 0x02, 
-  0x85, 0x00, 0x7C, 0x10, 0x10, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0x00, 
-  0x00, 0x80, 0x40, 0x00, 0x10, 0x08, 0x9F, 0x4F, 0x44, 0xD0, 0x03, 0x00, 
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x80, 0x2A, 0x08, 0x02, 
-  0x85, 0x00, 0x00, 0x70, 0x10, 0x00, 0x81, 0x00, 0x20, 0x00, 0x00, 0x00, 
-  0x00, 0x80, 0x40, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-  };