import source code from monit, reverse x and y in ploot-ff.c - ploot - simple p… | |
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit 62211b846caa7b980b6a43dea1fdf0a0e2f6de34 | |
parent f62864eb417aedad38a233fd05ea7a8b46cd2d8e | |
Author: Josuah Demangeon <[email protected]> | |
Date: Fri, 7 Feb 2020 19:50:50 +0100 | |
import source code from monit, reverse x and y in ploot-ff.c | |
Diffstat: | |
M Makefile | 30 ++++++++---------------------- | |
M arg.h | 31 ++++++++++++-----------------… | |
A def.h | 61 +++++++++++++++++++++++++++++… | |
A drawille.c | 194 ++++++++++++++++++++++++++++++ | |
A font.c | 20 ++++++++++++++++++++ | |
D font.h | 1677 -----------------------------… | |
A font13.c | 1576 +++++++++++++++++++++++++++++… | |
A font7.c | 743 +++++++++++++++++++++++++++++… | |
A font8.c | 743 +++++++++++++++++++++++++++++… | |
A log.h | 45 +++++++++++++++++++++++++++++… | |
M ploot-csv.7 | 43 +++++++++++------------------… | |
M ploot-feed.c | 57 ++++++++++++++++-------------… | |
M ploot-ff.1 | 2 +- | |
M ploot-ff.c | 502 +++++++++++++++--------------… | |
A ploot-plot.c | 201 ++++++++++++++++++++++++++++++ | |
M util.c | 2 +- | |
D util.h | 12 ------------ | |
17 files changed, 3892 insertions(+), 2047 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -1,25 +1,16 @@ | |
-CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic -fPIC \ | |
+CFLAGS = -Wall -Wextra -std=c99 -pedantic -fPIC \ | |
-D_POSIX_C_SOURCE=200809L | |
-LDFLAGS = -static | |
-BIN = ploot-ff ploot-feed | |
-LIB = -lm | |
-MANDIR = $(PREFIX)/share/man | |
+LFLAGS = -static | |
+BIN = ploot-ff ploot-feed | |
+LIB = -lm | |
+MANDIR = $(PREFIX)/share/man | |
-SRC_PLOOT_FF = util.c ploot-ff.c | |
-HDR_PLOOT_FF = arg.h util.h font.h | |
-OBJ_PLOOT_FF = $(SRC_PLOOT_FF:.c=.o) | |
- | |
-SRC_PLOOT_FEED = util.c ploot-feed.c | |
-HDR_PLOOT_FEED = arg.h util.h | |
-OBJ_PLOOT_FEED = $(SRC_PLOOT_FEED:.c=.o) | |
+SRC = util.c drawille.c font.c font7.c font8.c font13.c | |
all: $(BIN) | |
-ploot-ff: $(OBJ_PLOOT_FF) | |
- ${CC} $(LDFLAGS) -o $@ $(OBJ_PLOOT_FF) $(LIB) | |
- | |
-ploot-feed: $(OBJ_PLOOT_FEED) | |
- ${CC} $(LDFLAGS) -o $@ $(OBJ_PLOOT_FEED) $(LIB) | |
+${BIN}: ${SRC:.c=.o} ${BIN:=.o} | |
+ ${CC} $(LFLAGS) -o $@ [email protected] ${SRC:.c=.o} $(LIB) | |
install: $(BIN) | |
mkdir -p ${PREFIX}/bin $(MANDIR)/man1 $(MANDIR)/man7 | |
@@ -29,8 +20,3 @@ install: $(BIN) | |
clean: | |
rm -f *.o | |
- | |
-.PHONY: all install clean | |
- | |
-$(SRC_PLOOT_FF): $(HDR_PLOOT_FF) | |
-$(SRC_PLOOT_FEED): $(HDR_PLOOT_FEED) | |
diff --git a/arg.h b/arg.h | |
@@ -1,27 +1,20 @@ | |
#ifndef ARG_H | |
#define ARG_H | |
-extern char *argv0; | |
+extern char const *arg0; | |
-#define ARGBEGIN \ | |
- for (argv0 = *argv, argv++, argc--; \ | |
- argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0'; \ | |
- argc--, argv++) { \ | |
- char **_argv, *_a; \ | |
- if (argv[0][1] == '-' && argv[0][2] == '\0') { \ | |
- argv++, argc--; \ | |
- break; \ | |
- } \ | |
- for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) { \ | |
- switch (*_a) | |
+#define ARG_SWITCH(argc, argv) \ | |
+ arg0 = *argv; \ | |
+ while (++argv && --argc && **argv == '-' && (*argv)[1]) \ | |
+ if ((*argv)[1] == '-' && (*argv)[2] == '\0') { \ | |
+ ++argv; break; \ | |
+ } else for (int stop = 0; !stop && *++*argv != '\0' ;) \ | |
+ switch (**argv) | |
-#define ARGEND \ | |
- if (_argv != argv) \ | |
- break; \ | |
- } \ | |
- } | |
+#define ARG ((*++*argv != '\0' || *++argv != NULL) \ | |
+ ? ((stop = 1), argc--, *argv) \ | |
+ : (usage(), NULL)) | |
-#define EARGF(x) \ | |
- ((argv[1] == NULL) ? ((x), (char *)0) : (argc--, argv++, argv[0])) | |
+extern char const *arg0; | |
#endif | |
diff --git a/def.h b/def.h | |
@@ -0,0 +1,61 @@ | |
+#include <limits.h> | |
+#include <stdint.h> | |
+#include <stdio.h> | |
+ | |
+#define LEN(x) (sizeof(x) / sizeof(*x)) | |
+#define MAX(x, y) ((x) > (y) ? (x) : (y)) | |
+#define MIN(x, y) ((x) < (y) ? (x) : (y)) | |
+#define ABS(x) ((x) < 0 ? -(x) : (x)) | |
+ | |
+/* | |
+ * Canvas to draw on with braille characters. | |
+ */ | |
+struct drawille { | |
+ int col, row; /* number of dots in total */ | |
+ uint8_t buf[]; /* buffer of size (col * … | |
+}; | |
+ | |
+/* | |
+ * Bitmapped font saved as a '_' and 'X' pattern in a C source file. | |
+ */ | |
+struct font { | |
+ int height; /* The width is variable. */ | |
+ char *glyph[128]; /* 0: end, 1: off, 2: on. */ | |
+}; | |
+ | |
+/* drawille.c */ | |
+ | |
+size_t drawille_fmt_row (struct drawille *, char *, size… | |
+void drawille_dot (struct drawille *, int, int); | |
+struct drawille *drawille_new (int, int); | |
+void drawille_line (struct drawille *, int, int,… | |
+void drawille_line_hist (struct drawille *, int, int, in… | |
+void drawille_dot_hist (struct drawille *, int, int, int… | |
+char * drawille_text (struct drawille *, int, in… | |
+ | |
+/* font.c */ | |
+ | |
+size_t font_width (struct font *, int); | |
+size_t font_strlen (struct font *, char *); | |
+ | |
+/* font13.c */ | |
+ | |
+struct font font13; | |
+ | |
+/* font7.c */ | |
+ | |
+struct font font8; | |
+ | |
+/* font8.c */ | |
+ | |
+struct font font8; | |
+ | |
+/* util.c */ | |
+ | |
+void put3utf (long); | |
+char * strsep (char **, const char *); | |
+void estriplf (char *); | |
+double eatof (char *); | |
+long eatol (char *); | |
+char * esfgets (char *, size_t, FILE *); | |
+int humanize (char *, double); | |
diff --git a/drawille.c b/drawille.c | |
@@ -0,0 +1,194 @@ | |
+#include <stdint.h> | |
+#include <stdio.h> | |
+#include <stdlib.h> | |
+#include <string.h> | |
+ | |
+#include "def.h" | |
+ | |
+/* | |
+ * Terminal-based plotting using drawille character, aka drawille. | |
+ */ | |
+ | |
+/* parameters used to draw a line */ | |
+struct line { | |
+ int x0, y0, x1, y1; /* point of the line */ | |
+ int dx, dy, sx, sy, err; /* parameters for the algorythm */ | |
+}; | |
+ | |
+/* | |
+ * Turn on the bit at position (row, col) of a single cell. The | |
+ * pattern is not linear (1-4-2-5-3-6-7-8), because it matches the | |
+ * drawille pattern. | |
+ */ | |
+static void | |
+drawille_cell_dot(uint8_t *cell, int row, int col) | |
+{ | |
+ uint8_t flags[4][2] = { | |
+ { 0x01, 0x08 }, | |
+ { 0x02, 0x10 }, | |
+ { 0x04, 0x20 }, | |
+ { 0x40, 0x80 }, | |
+ }; | |
+ | |
+ *cell |= flags[row][col]; | |
+} | |
+ | |
+static size_t | |
+drawille_cell_utf(uint8_t cell, char *utf) | |
+{ | |
+ long rune; | |
+ | |
+ rune = 10240 + cell; | |
+ utf[0] = (char)(0xe0 | (0x0f & (rune >> 12))); /* 1110xxxx */ | |
+ utf[1] = (char)(0x80 | (0x3f & (rune >> 6))); /* 10xxxxxx */ | |
+ utf[2] = (char)(0x80 | (0x3f & (rune))); /* 10xxxxxx */ | |
+ return 3; | |
+} | |
+ | |
+static uint8_t | |
+drawille_get(struct drawille *drw, int row, int col) | |
+{ | |
+ return drw->buf[row * drw->col + col]; | |
+} | |
+ | |
+size_t | |
+drawille_fmt_row(struct drawille *drw, char *buf, size_t sz, int row) | |
+{ | |
+ char txt[] = "xxx"; | |
+ size_t n; | |
+ | |
+ n = 0; | |
+ for (int col = 0; col < drw->col; col++) { | |
+ drawille_cell_utf(drawille_get(drw, row, col), txt); | |
+ n += snprintf(buf+n, sz-n, "%s", txt); | |
+ } | |
+ return n; | |
+} | |
+ | |
+/* | |
+ * Coordinates are passed as (x, y), but the canvas stores bits as | |
+ * (row, col). Conversion is made by this function. | |
+ */ | |
+void | |
+drawille_dot(struct drawille *drw, int x, int y) | |
+{ | |
+ if (x < 0 || x / 2 >= drw->col || y < 0 || y / 4 >= drw->row) | |
+ return; | |
+ drawille_cell_dot(drw->buf + (drw->row - y / 4 - 1) * drw->col + (x / … | |
+ 3 - y % 4, | |
+ x % 2); | |
+} | |
+ | |
+struct drawille * | |
+drawille_new(int row, int col) | |
+{ | |
+ struct drawille *drw; | |
+ | |
+ if ((drw = calloc(sizeof(struct drawille) + row * col, 1)) == NULL) | |
+ return NULL; | |
+ drw->row = row; | |
+ drw->col = col; | |
+ return drw; | |
+} | |
+ | |
+static void | |
+drawille_line_init(struct line *l, int x0, int y0, int x1, int y1) | |
+{ | |
+ l->x0 = x0; | |
+ l->y0 = y0; | |
+ l->x1 = x1; | |
+ l->y1 = y1; | |
+ l->sx = x0 < x1 ? 1 : -1; | |
+ l->sy = y0 < y1 ? 1 : -1; | |
+ l->dx = abs(x1 - x0); | |
+ l->dy = abs(y1 - y0); | |
+ l->err = (l->dx > l->dy ? l->dx : -l->dy) / 2; | |
+} | |
+ | |
+static int | |
+drawille_line_next(struct line *l) | |
+{ | |
+ int e; | |
+ | |
+ if (l->x0 == l->x1 && l->y0 == l->y1) | |
+ return 0; | |
+ | |
+ e = l->err; | |
+ if (e > -l->dx) { | |
+ l->x0 += l->sx; | |
+ l->err -= l->dy; | |
+ } | |
+ if (e < l->dy) { | |
+ l->y0 += l->sy; | |
+ l->err += l->dx; | |
+ } | |
+ return 1; | |
+} | |
+ | |
+void | |
+drawille_line(struct drawille *drw, int x0, int y0, int x1, int y1) | |
+{ | |
+ struct line l; | |
+ | |
+ drawille_line_init(&l, x0, y0, x1, y1); | |
+ do { | |
+ drawille_dot(drw, l.x0, l.y0); | |
+ } while (drawille_line_next(&l)); | |
+} | |
+ | |
+void | |
+drawille_line_hist(struct drawille *drw, int x0, int y0, int x1, int y1, int z… | |
+{ | |
+ struct line l; | |
+ int sign; | |
+ | |
+ drawille_line_init(&l, x0, y0, x1, y1); | |
+ do { | |
+ sign = (l.y0 > zero) ? (-1) : (+1); | |
+ for (int y = l.y0; y != zero + sign; y += sign) | |
+ drawille_dot(drw, l.x0, y); | |
+ } while (drawille_line_next(&l)); | |
+} | |
+ | |
+void | |
+drawille_dot_hist(struct drawille *drw, int x, int y, int zero) | |
+{ | |
+ int sign; | |
+ | |
+ sign = (y > zero) ? (-1) : (+1); | |
+ for (; y != zero + sign; y += sign) | |
+ drawille_dot(drw, x, y); | |
+} | |
+ | |
+static int | |
+drawille_text_glyph(struct drawille *drw, int x, int y, struct font *font, cha… | |
+{ | |
+ int width; | |
+ char *glyph; | |
+ | |
+ if ((unsigned)c > 127) | |
+ glyph = font->glyph[0]; | |
+ else | |
+ glyph = font->glyph[(unsigned)c]; | |
+ | |
+ width = strlen(glyph) / font->height; | |
+ | |
+ for (int ix = 0; ix < width; ix++) | |
+ for (int iy = 0; iy < font->height; iy++) { | |
+ if (glyph[ix + (font->height - 1) * width - iy * width] == 3) | |
+ drawille_dot(drw, x + ix, y + iy); | |
+ } | |
+ | |
+ return width; | |
+} | |
+ | |
+char * | |
+drawille_text(struct drawille *drw, int x, int y, struct font *font, char *s) | |
+{ | |
+ if (drw->row*4 < font->height) | |
+ return NULL; | |
+ | |
+ for (; *s != '\0' && x < drw->col/2; s++, x++) | |
+ x += drawille_text_glyph(drw, x, y, font, *s); | |
+ return s; | |
+} | |
diff --git a/font.c b/font.c | |
@@ -0,0 +1,20 @@ | |
+#include <string.h> | |
+ | |
+#include "def.h" | |
+ | |
+size_t | |
+font_width(struct font *ft, int c) | |
+{ | |
+ return strlen(ft->glyph[c]) / ft->height; | |
+} | |
+ | |
+size_t | |
+font_strlen(struct font *ft, char *s) | |
+{ | |
+ size_t len; | |
+ | |
+ len = 0; | |
+ for (; *s != '\0'; s++) | |
+ len += font_width(ft, *s); | |
+ return len; | |
+} | |
diff --git a/font.h b/font.h | |
@@ -1,1677 +0,0 @@ | |
-#define FONT_W 7 | |
-#define FONT_H 14 | |
- | |
-#define C(x) static char glyph_ ## x[FONT_W * FONT_H] | |
-#define _ 0 | |
-#define X 1 | |
- | |
-C(error) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(space) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(bang) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(double) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(hash) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(dollar) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,_,_, | |
- _,X,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,X,_,X,_, | |
- _,_,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(percent) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,_,_,X,_, | |
- _,X,X,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,X,X,_, | |
- _,X,_,_,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(ampersand) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,_,X,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,_,X,_,_, | |
- _,_,X,X,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(single) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(l_round) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(r_round) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(asterisk) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,X,_,X,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,X,_,X,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(plus) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(coma) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(minus) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(dot) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(slash) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(0) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(1) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(2) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(3) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(4) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,X,_, | |
- _,_,_,X,_,X,_, | |
- _,_,X,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(5) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(6) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(7) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(8) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(9) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(column) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(semicolumn) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(l_angle) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(equal) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(r_angle) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(question) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(at) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,X,X,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(A) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(B) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(C) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(D) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(E) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(F) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(G) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(H) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(I) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(J) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,X,_,_,X,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(K) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,X,_,_,_, | |
- _,X,X,_,_,_,_, | |
- _,X,_,X,_,_,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(L) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(M) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,_,X,X,_, | |
- _,X,X,_,X,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(N) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,_,_,X,_, | |
- _,X,X,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,_,X,X,_, | |
- _,X,_,_,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(O) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(P) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(Q) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(R) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,X,_,_,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(S) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(T) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(U) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(V) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(W) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,X,_,X,X,_, | |
- _,X,X,_,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(X) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(Y) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(Z) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(l_square) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(backslash) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(r_square) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(hat) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(underscore) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
-X ,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(backtilt) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(a) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(b) = { | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(c) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(d) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(e) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(f) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,X,X,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(g) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_ | |
-}; | |
- | |
-C(h) = { | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(i) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(j) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,X,_,_,X,_,_, | |
- _,_,X,X,_,_,_ | |
-}; | |
- | |
-C(k) = { | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,X,_,_,_, | |
- _,X,X,_,_,_,_, | |
- _,X,_,X,_,_,_, | |
- _,X,_,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(l) = { | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(m) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(n) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(o) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(p) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_ | |
-}; | |
- | |
-C(q) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X | |
-}; | |
- | |
-C(r) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,X,X,X,X, | |
- _,X,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(s) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,X,X,_, | |
- _,X,_,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,X,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,X,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(t) = { | |
- _,_,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,X,X,X,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(u) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(v) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(w) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(x) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,X,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(y) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,X,_,_,_,X,_, | |
- _,_,X,X,X,_,_ | |
-}; | |
- | |
-C(z) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,X,X,X,X,X,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(l_curly) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,X,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,X,_,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,X,_,_,_,_, | |
- _,_,_,X,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(pipe) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(r_curly) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,_,X,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,_,_,X,_,_, | |
- _,_,X,X,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-C(tilde) = { | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,X,_,_,X,_, | |
- _,X,_,X,_,X,_, | |
- _,X,_,_,X,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_, | |
- _,_,_,_,_,_,_ | |
-}; | |
- | |
-#undef C | |
-#undef _ | |
-#undef X | |
- | |
-char *glyph[128] = { | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_error, glyph_error, glyph_error, glyph_error, | |
- glyph_space, glyph_bang, glyph_double, glyph_hash, | |
- glyph_dollar, glyph_percent, glyph_ampersand, glyph_single, | |
- glyph_l_round, glyph_r_round, glyph_asterisk, glyph_plus, | |
- glyph_coma, glyph_minus, glyph_dot, glyph_slash, | |
- glyph_0, glyph_1, glyph_2, glyph_3, | |
- glyph_4, glyph_5, glyph_6, glyph_7, | |
- glyph_8, glyph_9, glyph_column, glyph_semicolumn, | |
- glyph_l_angle, glyph_equal, glyph_r_angle, glyph_question, | |
- glyph_at, glyph_A, glyph_B, glyph_C, | |
- glyph_D, glyph_E, glyph_F, glyph_G, | |
- glyph_H, glyph_I, glyph_J, glyph_K, | |
- glyph_L, glyph_M, glyph_N, glyph_O, | |
- glyph_P, glyph_Q, glyph_R, glyph_S, | |
- glyph_T, glyph_U, glyph_V, glyph_W, | |
- glyph_X, glyph_Y, glyph_Z, glyph_l_square, | |
- glyph_backslash, glyph_r_square, glyph_hat, glyph_underscore, | |
- glyph_backtilt, glyph_a, glyph_b, glyph_c, | |
- glyph_d, glyph_e, glyph_f, glyph_g, | |
- glyph_h, glyph_i, glyph_j, glyph_k, | |
- glyph_l, glyph_m, glyph_n, glyph_o, | |
- glyph_p, glyph_q, glyph_r, glyph_s, | |
- glyph_t, glyph_u, glyph_v, glyph_w, | |
- glyph_x, glyph_y, glyph_z, glyph_l_curly, | |
- glyph_pipe, glyph_r_curly, glyph_tilde, glyph_error | |
-}; | |
diff --git a/font13.c b/font13.c | |
@@ -0,0 +1,1576 @@ | |
+#include "def.h" | |
+ | |
+#define C(x) static char glyph_##x[] | |
+#define _ 2 | |
+#define X 3 | |
+ | |
+C(error) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(space) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(bang) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(double) = { | |
+ _,_,_,_,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(hash) = { | |
+ _,_,_,_,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ X,X,X,X,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ X,X,X,X,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(dollar) = { | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ X,_,X,_,X, | |
+ X,_,X,_,_, | |
+ X,_,X,_,_, | |
+ _,X,X,X,_, | |
+ _,_,X,_,X, | |
+ _,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,X,X,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(percent) = { | |
+ _,_,_,_,_, | |
+ X,X,_,_,X, | |
+ X,X,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,X,X, | |
+ X,_,_,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(amp) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,X,_,X, | |
+ X,_,_,X,_, | |
+ X,_,_,X,_, | |
+ X,_,_,X,_, | |
+ _,X,X,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(single) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(l_round) = { | |
+ _,_,_,_,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(r_round) = { | |
+ _,_,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(asterisk) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ X,_,X,_,X, | |
+ _,X,X,X,_, | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ X,_,X,_,X, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(plus) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ X,X,X,X,X, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(coma) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(minus) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(dot) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(slash) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(0) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(1) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(2) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(3) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(4) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,X, | |
+ _,_,_,X,X, | |
+ _,_,X,_,X, | |
+ _,X,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(5) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(6) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(7) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(8) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(9) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(column) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(semicolumn) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(l_angle) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(equal) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(r_angle) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(question) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(at) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,X,X,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,X,X, | |
+ X,_,_,_,_, | |
+ _,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(A) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(B) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(C) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(D) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(E) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(F) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(G) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(H) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(I) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(J) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ X,_,_,X,_, | |
+ _,X,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(K) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,X,_, | |
+ X,_,X,_,_, | |
+ X,X,_,_,_, | |
+ X,_,X,_,_, | |
+ X,_,_,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(L) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(M) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,X,_,X,X, | |
+ X,X,_,X,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(N) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,X,_,_,X, | |
+ X,X,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,_,X,X, | |
+ X,_,_,X,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(O) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(P) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(Q) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(R) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ X,_,X,_,_, | |
+ X,_,_,X,_, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(S) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(T) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(U) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(V) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(W) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,X,_,X,X, | |
+ X,X,_,X,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(X) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(Y) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(Z) = { | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(l_square) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(backsl) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(r_square) = { | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(hat) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,X,_,X,_, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(underscore) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+X ,X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(backtilt) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(a) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(b) = { | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(c) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(d) = { | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(e) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(f) = { | |
+ _,_,X,X,X, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,X,X,X,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(g) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,X,X,X,_, | |
+0}; | |
+ | |
+C(h) = { | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(i) = { | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(j) = { | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,X,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ X,_,_,X,_, | |
+ _,X,X,_,_, | |
+0}; | |
+ | |
+C(k) = { | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,X,_, | |
+ X,_,X,_,_, | |
+ X,X,_,_,_, | |
+ X,_,X,_,_, | |
+ X,_,_,X,_, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(l) = { | |
+ _,X,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(m) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(n) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(o) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(p) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,X,X,X,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+0}; | |
+ | |
+C(q) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+0}; | |
+ | |
+C(r) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,X,X,X, | |
+ X,X,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(s) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,X,X,X, | |
+ X,_,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,X,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,X,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(t) = { | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,X,X,X,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(u) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(v) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(w) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(x) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,X,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(y) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,_,X, | |
+ X,X,X,X,_, | |
+0}; | |
+ | |
+C(z) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,X,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ X,X,X,X,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(l_curly) = { | |
+ _,_,_,_,_, | |
+ _,_,X,X,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ X,_,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,X,_,_,_, | |
+ _,_,X,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(pipe) = { | |
+ _,_,_,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(r_curly) = { | |
+ _,_,_,_,_, | |
+ _,X,X,_,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,_,X, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,_,_,X,_, | |
+ _,X,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(tilde) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,X,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+struct font font13 = { 13, { | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_space, glyph_bang, glyph_double, glyph_hash, | |
+ glyph_dollar, glyph_percent, glyph_amp, glyph_sin… | |
+ glyph_l_round, glyph_r_round, glyph_asterisk, gly… | |
+ glyph_coma, glyph_minus, glyph_dot, glyph_slash, | |
+ glyph_0, glyph_1, glyph_2, glyph_3, | |
+ glyph_4, glyph_5, glyph_6, glyph_7, | |
+ glyph_8, glyph_9, glyph_column, glyph_semicolumn, | |
+ glyph_l_angle, glyph_equal, glyph_r_angle, glyph_… | |
+ glyph_at, glyph_A, glyph_B, glyph_C, | |
+ glyph_D, glyph_E, glyph_F, glyph_G, | |
+ glyph_H, glyph_I, glyph_J, glyph_K, | |
+ glyph_L, glyph_M, glyph_N, glyph_O, | |
+ glyph_P, glyph_Q, glyph_R, glyph_S, | |
+ glyph_T, glyph_U, glyph_V, glyph_W, | |
+ glyph_X, glyph_Y, glyph_Z, glyph_l_square, | |
+ glyph_backsl, glyph_r_square, glyph_hat, glyph_un… | |
+ glyph_backtilt, glyph_a, glyph_b, glyph_c, | |
+ glyph_d, glyph_e, glyph_f, glyph_g, | |
+ glyph_h, glyph_i, glyph_j, glyph_k, | |
+ glyph_l, glyph_m, glyph_n, glyph_o, | |
+ glyph_p, glyph_q, glyph_r, glyph_s, | |
+ glyph_t, glyph_u, glyph_v, glyph_w, | |
+ glyph_x, glyph_y, glyph_z, glyph_l_curly, | |
+ glyph_pipe, glyph_r_curly, glyph_tilde, glyph_err… | |
+} }; | |
diff --git a/font7.c b/font7.c | |
@@ -0,0 +1,743 @@ | |
+#include "def.h" | |
+ | |
+#define C(x) static char glyph_##x[] | |
+#define _ 2 | |
+#define X 3 | |
+ | |
+C(err) = { | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+0}; | |
+ | |
+C(A) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(B) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(C) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(D) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(E) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(F) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(G) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,X,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(H) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(I) = { | |
+ _,_,_, | |
+ X,X,X, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(J) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ X,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(K) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,X,_,_, | |
+ X,_,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(L) = { | |
+ _,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(M) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,X,_,X,X, | |
+ X,_,X,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(N) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,X,_,X, | |
+ X,X,X,X, | |
+ X,_,X,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(O) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(P) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Q) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,X,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(R) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(S) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ _,X,X,_, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(T) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(U) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(V) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,_,X,_, | |
+ X,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(W) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(X) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Y) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,X,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Z) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(a) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(b) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(c) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(d) = { | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(e) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(f) = { | |
+ _,X,X, | |
+ X,_,_, | |
+ X,_,_, | |
+ X,X,_, | |
+ X,_,_, | |
+ X,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(g) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+0}; | |
+ | |
+C(h) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(i) = { | |
+ _,X,_, | |
+ _,_,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(j) = { | |
+ _,X,_, | |
+ _,_,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,_,_, | |
+0}; | |
+ | |
+C(k) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(l) = { | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(m) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(n) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(o) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(p) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+0}; | |
+ | |
+C(q) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+0}; | |
+ | |
+C(r) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,X,X, | |
+ X,X,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(s) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,X,_,_, | |
+ _,_,X,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(t) = { | |
+ X,_,_, | |
+ X,_,_, | |
+ X,X,X, | |
+ X,_,_, | |
+ X,_,_, | |
+ _,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(u) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(v) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(w) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(x) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(y) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+0}; | |
+ | |
+C(z) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(0) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,X,X, | |
+ X,X,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(1) = { | |
+ _,X,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(2) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,X, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(3) = { | |
+ X,X,X,_, | |
+ _,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(4) = { | |
+ _,_,X,X, | |
+ _,X,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(5) = { | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(6) = { | |
+ _,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(7) = { | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ _,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(8) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(9) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(space) = { | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+struct font font7 = { 8, { | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_space, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_0, glyph_1, glyph_2, glyph_3, | |
+ glyph_4, glyph_5, glyph_6, glyph_7, | |
+ glyph_8, glyph_9, glyph_err, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_A, glyph_B, glyph_C, | |
+ glyph_D, glyph_E, glyph_F, glyph_G, | |
+ glyph_H, glyph_I, glyph_J, glyph_K, | |
+ glyph_L, glyph_M, glyph_N, glyph_O, | |
+ glyph_P, glyph_Q, glyph_R, glyph_S, | |
+ glyph_T, glyph_U, glyph_V, glyph_W, | |
+ glyph_X, glyph_Y, glyph_Z, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err, | |
+ glyph_err, glyph_a, glyph_b, glyph_c, | |
+ glyph_d, glyph_e, glyph_f, glyph_g, | |
+ glyph_h, glyph_i, glyph_j, glyph_k, | |
+ glyph_l, glyph_m, glyph_n, glyph_o, | |
+ glyph_p, glyph_q, glyph_r, glyph_s, | |
+ glyph_t, glyph_u, glyph_v, glyph_w, | |
+ glyph_x, glyph_y, glyph_z, glyph_err, | |
+ glyph_err, glyph_err, glyph_err, glyph_err | |
+} }; | |
diff --git a/font8.c b/font8.c | |
@@ -0,0 +1,743 @@ | |
+#include "def.h" | |
+ | |
+#define C(x) static char glyph_##x[] | |
+#define _ 2 | |
+#define X 3 | |
+ | |
+C(error) = { | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+0}; | |
+ | |
+C(A) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(B) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(C) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(D) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(E) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(F) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(G) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,X,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(H) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(I) = { | |
+ _,_,_, | |
+ X,X,X, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(J) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ X,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(K) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,X,_,_, | |
+ X,_,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(L) = { | |
+ _,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(M) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,X,_,X,X, | |
+ X,_,X,_,X, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(N) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,X,_,X, | |
+ X,X,X,X, | |
+ X,_,X,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(O) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(P) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Q) = { | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,X,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(R) = { | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(S) = { | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ _,X,X,_, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(T) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(U) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(V) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,_,X,_, | |
+ X,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(W) = { | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(X) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Y) = { | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,X,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(Z) = { | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(a) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(b) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(c) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(d) = { | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(e) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(f) = { | |
+ _,X,X, | |
+ X,_,_, | |
+ X,_,_, | |
+ X,X,_, | |
+ X,_,_, | |
+ X,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(g) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+0}; | |
+ | |
+C(h) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(i) = { | |
+ _,X,_, | |
+ _,_,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(j) = { | |
+ _,X,_, | |
+ _,_,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,_,_, | |
+0}; | |
+ | |
+C(k) = { | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ X,_,_,X, | |
+ X,_,X,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(l) = { | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(m) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,X,X,X,_, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(n) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(o) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(p) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,X,X,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+0}; | |
+ | |
+C(q) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+0}; | |
+ | |
+C(r) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,X,X, | |
+ X,X,_,_, | |
+ X,_,_,_, | |
+ X,_,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(s) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ _,X,X,X, | |
+ X,X,_,_, | |
+ _,_,X,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(t) = { | |
+ X,_,_, | |
+ X,_,_, | |
+ X,X,X, | |
+ X,_,_, | |
+ X,_,_, | |
+ _,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(u) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(v) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,_,_,X, | |
+ _,X,_,X,_, | |
+ _,_,X,_,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(w) = { | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+ X,_,_,_,X, | |
+ X,_,X,_,X, | |
+ X,_,X,_,X, | |
+ _,X,_,X,_, | |
+ _,_,_,_,_, | |
+ _,_,_,_,_, | |
+0}; | |
+ | |
+C(x) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(y) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+0}; | |
+ | |
+C(z) = { | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+ X,X,X,X, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(0) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,X,X, | |
+ X,X,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(1) = { | |
+ _,X,_, | |
+ X,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ _,X,_, | |
+ X,X,X, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+C(2) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,_,_,X, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ X,X,X,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(3) = { | |
+ X,X,X,_, | |
+ _,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(4) = { | |
+ _,_,X,X, | |
+ _,X,_,X, | |
+ X,_,_,X, | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(5) = { | |
+ X,X,X,X, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ _,_,_,X, | |
+ _,_,_,X, | |
+ X,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(6) = { | |
+ _,X,X,_, | |
+ X,_,_,_, | |
+ X,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(7) = { | |
+ X,X,X,X, | |
+ _,_,_,X, | |
+ _,_,X,_, | |
+ _,_,X,_, | |
+ _,X,_,_, | |
+ _,X,_,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(8) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(9) = { | |
+ _,X,X,_, | |
+ X,_,_,X, | |
+ X,_,_,X, | |
+ _,X,X,X, | |
+ _,_,_,X, | |
+ _,X,X,_, | |
+ _,_,_,_, | |
+ _,_,_,_, | |
+0}; | |
+ | |
+C(space) = { | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+ _,_,_, | |
+0}; | |
+ | |
+struct font font8 = { 8, { | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_space, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_0, glyph_1, glyph_2, glyph_3, | |
+ glyph_4, glyph_5, glyph_6, glyph_7, | |
+ glyph_8, glyph_9, glyph_error, glyph_error, | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_A, glyph_B, glyph_C, | |
+ glyph_D, glyph_E, glyph_F, glyph_G, | |
+ glyph_H, glyph_I, glyph_J, glyph_K, | |
+ glyph_L, glyph_M, glyph_N, glyph_O, | |
+ glyph_P, glyph_Q, glyph_R, glyph_S, | |
+ glyph_T, glyph_U, glyph_V, glyph_W, | |
+ glyph_X, glyph_Y, glyph_Z, glyph_error, | |
+ glyph_error, glyph_error, glyph_error, glyph_erro… | |
+ glyph_error, glyph_a, glyph_b, glyph_c, | |
+ glyph_d, glyph_e, glyph_f, glyph_g, | |
+ glyph_h, glyph_i, glyph_j, glyph_k, | |
+ glyph_l, glyph_m, glyph_n, glyph_o, | |
+ glyph_p, glyph_q, glyph_r, glyph_s, | |
+ glyph_t, glyph_u, glyph_v, glyph_w, | |
+ glyph_x, glyph_y, glyph_z, glyph_error, | |
+ glyph_error, glyph_error, glyph_error, glyph_error | |
+} }; | |
diff --git a/log.h b/log.h | |
@@ -0,0 +1,45 @@ | |
+#ifndef LOG_H | |
+#define LOG_H | |
+ | |
+#include <errno.h> | |
+#include <stdarg.h> | |
+#include <stdio.h> | |
+#include <stdlib.h> | |
+#include <string.h> | |
+ | |
+char const *arg0; /* Should be set by the library caller. */ | |
+ | |
+static inline void | |
+vlog(char const *base, char const *fmt, va_list va) | |
+{ | |
+ fprintf(stderr, "%s: ", base); | |
+ vfprintf(stderr, fmt, va); | |
+ if (errno) | |
+ fprintf(stderr, ": %s", strerror(errno)); | |
+ fputc('\n', stderr); | |
+ fflush(stderr); | |
+ errno = 0; /* avoid repeating the error in loop */ | |
+} | |
+ | |
+static inline void | |
+warn(char const *fmt, ...) | |
+{ | |
+ va_list va; | |
+ | |
+ va_start(va, fmt); | |
+ vlog(arg0, fmt, va); | |
+ va_end(va); | |
+} | |
+ | |
+static inline void | |
+err(int e, char const *fmt, ...) | |
+{ | |
+ va_list va; | |
+ | |
+ va_start(va, fmt); | |
+ vlog(arg0, fmt, va); | |
+ va_end(va); | |
+ exit(e); | |
+} | |
+ | |
+#endif | |
diff --git a/ploot-csv.7 b/ploot-csv.7 | |
@@ -1,4 +1,4 @@ | |
-.Dd $Mdocdate: August 08 2018$ | |
+.Dd $Mdocdate: February 01 2020$ | |
.Dt PLOOT-CSV 7 | |
.Os | |
. | |
@@ -11,42 +11,32 @@ | |
. | |
.Sh SYNOPSIS | |
. | |
-.Bd -literal -offset indent | |
+.Bd -literal | |
epoch,column-name-1,column-name-2 | |
timestamp,value1,value2 | |
+timestamp,value1,value2 | |
+… | |
.Ed | |
. | |
. | |
.Sh DESCRIPTION | |
. | |
This is the simple comma-separated format used by the ploot-* programs. | |
-.\" .Sh STANDARDS | |
-.\" .Sh HISTORY | |
. | |
. | |
-.Sh AUTHORS | |
-. | |
-.An Josuah Demangeon | |
-.Aq Mt [email protected] | |
-. | |
-. | |
-.\" .Sh CAVEATS | |
-.\" .Sh BUGS | |
.Sh INPUT FORMAT | |
. | |
-.Nm reads lines and column from standard input. | |
-Each line correspond to one entry with the same timestamp. | |
-Each input column correspond to one output column, one type of data. | |
-. | |
-.Pp | |
+.Nm | |
+has a first header line, then zero or more data lines, both | |
+comma-separated list of values. | |
. | |
. | |
.Ss Header line | |
. | |
-The program must contain a first header line with the label of each column. | |
-The first column is always a timestamp, and the first label must be | |
+The input must contain a first header line with the label of each column in or… | |
+The first column is always | |
.Dq epoch . | |
-The following columns | |
+Then there are the actual column names. | |
. | |
.Bd -literal -offset indent | |
epoch,free_memory,process_count | |
@@ -56,13 +46,10 @@ epoch,free_memory,process_count | |
.Ss Data lines | |
. | |
The following lines are the data. | |
-The first column is an unix timestamp: number of seconds since 00:00:00 | |
-01/01/1970. | |
-The remaining columns are values, that might be decimal | |
-.Po | |
-they will be read as a | |
-.Vt double | |
-.Pc . | |
+The first column is always an unix timestamp as in | |
+.Vt time_t . | |
+The remaining columns are values parsed as floating point numbers by | |
+.Xr strtod 3 : | |
. | |
.Bd -literal -offset indent | |
1533752053,16.3,45 | |
@@ -87,4 +74,4 @@ was defined at | |
.Sh AUTHORS | |
. | |
.An Josuah Demangeon | |
-.Aq Mt [email protected] | |
+.Aq Mt [email protected] | |
diff --git a/ploot-feed.c b/ploot-feed.c | |
@@ -5,16 +5,17 @@ | |
#include <limits.h> | |
#include <string.h> | |
#include <ctype.h> | |
+#include <stdint.h> | |
#include "arg.h" | |
-#include "util.h" | |
+#include "def.h" | |
#define WIDTH_MAX 1024 | |
#define BRAILLE_START 10240 | |
-int wflag = 80; | |
-int width; | |
-char *argv0; | |
+int wflag = 80; | |
+int width = 0; | |
+char const *arg0 = NULL; | |
/* | |
* Turn the bit at position (row, col) on in the . | |
@@ -35,7 +36,7 @@ plot_dot(long *out, int row, int col) | |
static void | |
plot_val(long *out, double val, double max, int row) | |
{ | |
- int col, c; | |
+ int col, c; | |
val = MIN(max, val); | |
col = (int)(val * (double)(width - 1) / max * 2); | |
@@ -50,10 +51,10 @@ plot_val(long *out, double val, double max, int row) | |
static time_t | |
plot_row(long *out, char *line, double *max, int nrow, int ncol) | |
{ | |
- time_t epoch; | |
- double val; | |
- int n; | |
- char *tok; | |
+ time_t epoch; | |
+ double val; | |
+ int n; | |
+ char *tok; | |
if ((tok = strsep(&line, ",")) == NULL) | |
fputs("*** missing epoch value\n", stderr), exit(1); | |
@@ -77,10 +78,10 @@ plot_row(long *out, char *line, double *max, int nrow, int … | |
static time_t | |
plot_line(long *out, double *max, int ncol) | |
{ | |
- time_t epoch; | |
- int n, nrow; | |
- long *o, rune; | |
- char line[LINE_MAX]; | |
+ time_t epoch; | |
+ int n, nrow; | |
+ long *o, rune; | |
+ char line[LINE_MAX]; | |
for (rune = BRAILLE_START, o = out, n = ncol * width; n > 0; o++, n--) | |
memcpy(o, &rune, sizeof(rune)); | |
@@ -101,7 +102,7 @@ plot_line(long *out, double *max, int ncol) | |
static void | |
put_time(time_t epoch, time_t last, int nline) | |
{ | |
- char *out, buf[sizeof("XXxXXxXX ")]; | |
+ char *out, buf[sizeof("XXxXXxXX ")]; | |
switch (nline % 3) { | |
case 0: | |
@@ -131,9 +132,9 @@ put_line(long *out) | |
static void | |
plot(char labels[LINE_MAX], double *max, int ncol) | |
{ | |
- time_t epoch, last_epoch; | |
- long out[WIDTH_MAX + 1]; | |
- int n; | |
+ time_t epoch, last_epoch; | |
+ long out[WIDTH_MAX + 1]; | |
+ int n; | |
last_epoch = epoch = 0; | |
@@ -157,8 +158,8 @@ plot(char labels[LINE_MAX], double *max, int ncol) | |
static int | |
read_labels(char *labv[LINE_MAX]) | |
{ | |
- int ncol; | |
- char *l, line[LINE_MAX], *tok; | |
+ int ncol; | |
+ char *l, line[LINE_MAX], *tok; | |
if ((l = esfgets(line, LINE_MAX, stdin)) == NULL) | |
fputs("missing label line\n", stderr), exit(1); | |
@@ -179,7 +180,7 @@ read_labels(char *labv[LINE_MAX]) | |
static void | |
fmt_labels(char out[LINE_MAX], int ncol, char *labels[LINE_MAX / 2]) | |
{ | |
- int i, n; | |
+ int i, n; | |
for (i = 0; i < ncol; labels++, i++) { | |
n = LINE_MAX - (width + sizeof("│")) * i; | |
@@ -190,22 +191,22 @@ fmt_labels(char out[LINE_MAX], int ncol, char *labels[LIN… | |
static void | |
usage(void) | |
{ | |
- fprintf(stderr, "usage: %s [-w width] maxval... <csv\n", argv0); | |
+ fprintf(stderr, "usage: %s [-w width] maxval... <csv\n", arg0); | |
exit(1); | |
} | |
static int | |
parse_args(int argc, char **argv, double *max) | |
{ | |
- int n; | |
+ int n; | |
- ARGBEGIN { | |
+ ARG_SWITCH(argc, argv) { | |
case 'w': | |
- wflag = atoi(EARGF(usage())); | |
+ wflag = atoi(ARG); | |
break; | |
default: | |
usage(); | |
- } ARGEND; | |
+ } | |
if (argc == 0) | |
usage(); | |
@@ -219,9 +220,9 @@ parse_args(int argc, char **argv, double *max) | |
int | |
main(int argc, char **argv) | |
{ | |
- double max[LINE_MAX / 2]; | |
- int ncol, nmax; | |
- char *labv[LINE_MAX / 2], labels[LINE_MAX]; | |
+ double max[LINE_MAX / 2]; | |
+ int ncol, nmax; | |
+ char *labv[LINE_MAX / 2], labels[LINE_MAX]; | |
setvbuf(stdin, NULL, _IOLBF, 0); | |
nmax = parse_args(argc, argv, max); | |
diff --git a/ploot-ff.1 b/ploot-ff.1 | |
@@ -35,7 +35,7 @@ Set the unit description printed at the top right corner. | |
List of argument that specify the color for each column. | |
If the input csv have 5 columns in addition of the timestamp, there must | |
be 5 maxval arguments. | |
-Colors available are red, orange, yellow, green, cyan and blue. | |
+color_ts available are red, orange, yellow, green, cyan and blue. | |
. | |
.El | |
. | |
diff --git a/ploot-ff.c b/ploot-ff.c | |
@@ -1,96 +1,88 @@ | |
-#include <arpa/inet.h> | |
- | |
-#include <math.h> | |
+#include <assert.h> | |
+#include <ctype.h> | |
+#include <fcntl.h> | |
+#include <limits.h> | |
#include <stdint.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <time.h> | |
-#include <time.h> | |
-#include <stdlib.h> | |
-#include <stdio.h> | |
-#include <fcntl.h> | |
-#include <limits.h> | |
-#include <string.h> | |
-#include <ctype.h> | |
-#include <time.h> | |
-#include <stdint.h> | |
+ | |
+#include <arpa/inet.h> | |
+ | |
+#include <math.h> | |
#include "arg.h" | |
-#include "util.h" | |
-#include "font.h" | |
+#include "log.h" | |
+#include "def.h" | |
-#define MARGIN 4 | |
+#define MARGIN 4 | |
-#define XDENSITY 7 /* nb of values on x axis */ | |
-#define YDENSITY 7 /* nb of values on y axis */ | |
+#define XDENSITX 7 /* nb of values on x axis */ | |
+#define YDENSITX 7 /* nb of values on y axis */ | |
-#define TITLE_X (IMAGE_H - TITLE_H) | |
-#define TITLE_Y (XLABEL_W) | |
-#define TITLE_H (FONT_H * 2) | |
-#define TITLE_W (PLOT_W) | |
+#define IMAGE_H (TITLE_H + PLOT_H + XLABEL_H) | |
+#define IMAGE_W (YLABEL_W + PLOT_W + LEGEND_W) | |
-#define XLABEL_X (PLOT_X) | |
-#define XLABEL_Y (0) | |
-#define XLABEL_H (PLOT_H) | |
-#define XLABEL_W (FONT_W * 9 + MARGIN) | |
+#define TITLE_X (YLABEL_W) | |
+#define TITLE_Y (IMAGE_H - TITLE_H) | |
+#define TITLE_H ((font)->height * 2) | |
+#define TITLE_W (PLOT_W) | |
#define YLABEL_X (0) | |
#define YLABEL_Y (PLOT_Y) | |
-#define YLABEL_H (FONT_H * 2) | |
-#define YLABEL_W (PLOT_W) | |
+#define YLABEL_H (PLOT_H) | |
+#define YLABEL_W (40 + MARGIN) | |
-#define PLOT_X (YLABEL_H) | |
-#define PLOT_Y (XLABEL_W) | |
-#define PLOT_W 700 | |
-#define PLOT_H 160 | |
+#define XLABEL_X (PLOT_X) | |
+#define XLABEL_Y (0) | |
+#define XLABEL_H ((font)->height * 2) | |
+#define XLABEL_W (PLOT_W) | |
-#define LEGEND_X (YLABEL_H) | |
-#define LEGEND_Y (IMAGE_W - LEGEND_W) | |
-#define LEGEND_W (FONT_W + 150 + FONT_W) | |
-#define LEGEND_H (PLOT_H) | |
+#define PLOT_X (YLABEL_W) | |
+#define PLOT_Y (XLABEL_H) | |
+#define PLOT_W (700) | |
+#define PLOT_H (160) | |
-#define IMAGE_H (TITLE_H + PLOT_H + YLABEL_H) | |
-#define IMAGE_W (XLABEL_W + PLOT_W + LEGEND_W) | |
+#define LEGEND_X (IMAGE_W - LEGEND_W) | |
+#define LEGEND_Y (XLABEL_H) | |
+#define LEGEND_W (150) | |
+#define LEGEND_H (PLOT_H) | |
-typedef uint16_t Color[4]; | |
-typedef struct clist Clist; | |
-typedef struct vlist Vlist; | |
-typedef struct canvas Canvas; | |
-typedef struct font Font; | |
+struct color { | |
+ uint16_t red; | |
+ uint16_t green; | |
+ uint16_t blue; | |
+ uint16_t alpha; | |
+}; | |
struct vlist { | |
- Color col; /* color to use to draw the line */ | |
- time_t *t; /* array of timestamps */ | |
- double *v; /* array of values */ | |
- int n; /* number of values */ | |
- char *label; /* for the legend */ | |
+ struct color color; /* color to use to draw the … | |
+ time_t *t; /* array of timestamps */ | |
+ double *v; /* array of values */ | |
+ int n; /* number of values */ | |
+ char *label; /* for the legend */ | |
}; | |
struct canvas { | |
- int w; /* width */ | |
- int h; /* height */ | |
- int x; /* x offset */ | |
- int y; /* x offset */ | |
- Color b[IMAGE_W * IMAGE_H]; | |
-}; | |
- | |
-struct font { | |
- int w; /* width */ | |
- int h; /* height */ | |
- char **b; /* buffer */ | |
+ int w; /* width */ | |
+ int h; /* height */ | |
+ int x; /* x offset */ | |
+ int y; /* y offset */ | |
+ struct color *buf; | |
}; | |
struct clist { | |
- char *name; | |
- Color col; | |
+ char *name; | |
+ struct color color; | |
}; | |
-char *argv0; | |
-char *tflag = ""; | |
-char *uflag = ""; | |
+char const *arg0; | |
+static char *tflag = ""; | |
+static char *uflag = ""; | |
+static struct font *font = &font13; | |
-Clist clist[] = { | |
+struct clist clist[] = { | |
/* name red green blue alpha */ | |
{ "red", { 0xffff, 0x4444, 0x4444, 0xffff } }, | |
{ "orange", { 0xffff, 0x9999, 0x4444, 0xffff } }, | |
@@ -101,29 +93,21 @@ Clist clist[] = { | |
{ NULL, { 0, 0, 0, 0 } } | |
}; | |
-Font font = { FONT_W, FONT_H, glyph }; | |
- | |
-static int | |
-color(Color *col, char *name) | |
+static struct color * | |
+name_to_color(char *name) | |
{ | |
- Clist *c; | |
- | |
- for (c = clist; c->name != NULL; c++) { | |
- if (strcmp(name, c->name) == 0) { | |
- memcpy(col, c->col, sizeof(*col)); | |
- return 0; | |
- } | |
- } | |
- | |
- return -1; | |
+ for (struct clist *c = clist; c->name != NULL; c++) | |
+ if (strcmp(name, c->name) == 0) | |
+ return &c->color; | |
+ return NULL; | |
} | |
static void | |
-scale_minmax(Vlist *v, int n, | |
- double *vmin, double *vmax, | |
- time_t *tmin, time_t *tmax) | |
+scale_minmax(struct vlist *v, int n, | |
+ time_t *tmin, time_t *tmax, | |
+ double *vmin, double *vmax) | |
{ | |
- int i; | |
+ int i; | |
*vmin = *vmax = 0; | |
*tmin = *tmax = *v->t; | |
@@ -149,7 +133,7 @@ scale_tstep(time_t *step, int density, time_t min, time_t m… | |
1, 5, 2, 10, 20, 30, 60, 60*2, 60*5, 60*10, 60*20, 60*30, 3600… | |
3600*2, 3600*5, 3600*10, 3600*18, 3600*24, 3600*24*2, | |
3600*24*5, 3600*24*10, 3600*24*20, 3600*24*30, 3600*24*50, | |
- 3600*24*100, 3600*24*365 | |
+ 3600*24*100, 3600*24*365, 0 | |
}; | |
dt = max - min; | |
@@ -165,8 +149,8 @@ scale_tstep(time_t *step, int density, time_t min, time_t m… | |
static void | |
scale_vstep(double *step, int density, double min, double max) | |
{ | |
- double dv, *s, scale[] = { 1, 2, 3, 5 }; | |
- int i; | |
+ double dv, *s, scale[] = { 1, 2, 3, 5 }; | |
+ int i; | |
dv = max - min; | |
@@ -192,19 +176,19 @@ scale_vstep(double *step, int density, double min, double… | |
} | |
static void | |
-scale(Vlist *v, int n, | |
- double *vmin, double *vmax, double *vstep, | |
- time_t *tmin, time_t *tmax, time_t *tstep) | |
+scale(struct vlist *v, int n, | |
+ time_t *tmin, time_t *tmax, time_t *tstep, | |
+ double *vmin, double *vmax, double *vstep) | |
{ | |
- scale_minmax(v, n, vmin, vmax, tmin, tmax); | |
- scale_tstep(tstep, YDENSITY, *tmin, *tmax); | |
- scale_vstep(vstep, XDENSITY, *vmin, *vmax); | |
+ scale_minmax(v, n, tmin, tmax, vmin, vmax); | |
+ scale_tstep(tstep, XDENSITX, *tmin, *tmax); | |
+ scale_vstep(vstep, YDENSITX, *vmin, *vmax); | |
} | |
/* | |
* Convert (x,y) coordinates to (row,col) for printing into the buffer. | |
* The buffer only contain one number, so the coordinate is a single integer: | |
- * width * x + y. | |
+ * width * y + y. | |
* The coordinates are shifted by offx and offy to permit relative coordinates. | |
* | |
* The convention used: y | |
@@ -212,28 +196,28 @@ scale(Vlist *v, int n, | |
* - (0,1) is above it. +--x | |
*/ | |
static void | |
-ff_pixel(Canvas *can, Color *col, | |
+ff_pixel(struct canvas *can, struct color *col, | |
int x, int y) | |
{ | |
x += can->x; | |
y += can->y; | |
- if (x < 0 || x >= can->h || y < 0 || y >= can->w) | |
+ if (x < 0 || x >= can->w || y < 0 || y >= can->h) | |
return; | |
- memcpy(can->b + can->w * (can->h - 1 - x) + y, col, sizeof(*can->b)); | |
+ memcpy(can->buf + can->w * (can->h - 1 - y) + x, col, sizeof(*can->buf… | |
} | |
static void | |
-ff_rectangle(Canvas *can, Color *col, | |
- int x1, int y1, | |
- int x2, int y2) | |
+ff_rectangle(struct canvas *can, struct color *col, | |
+ int y1, int x1, | |
+ int y2, int x2) | |
{ | |
- int x, y, xmin, ymin, xmax, ymax; | |
+ int x, y, ymin, xmin, ymax, xmax; | |
- xmin = MIN(x1, x2); xmax = MAX(x1, x2); | |
ymin = MIN(y1, y2); ymax = MAX(y1, y2); | |
+ xmin = MIN(x1, x2); xmax = MAX(x1, x2); | |
- for (x = xmin; x <= xmax; x++) | |
- for (y = ymin; y <= ymax; y++) | |
+ for (y = ymin; y <= ymax; y++) | |
+ for (x = xmin; x <= xmax; x++) | |
ff_pixel(can, col, x, y); | |
} | |
@@ -241,94 +225,94 @@ ff_rectangle(Canvas *can, Color *col, | |
* From Bresenham's line algorithm and dcat's tplot. | |
*/ | |
static void | |
-ff_line(Canvas *can, Color *col, | |
+ff_line(struct canvas *can, struct color *col, | |
int x0, int y0, | |
int x1, int y1) | |
{ | |
- int dx, dy, sx, sy, err, e; | |
+ int dy, dx, sy, sx, err, e; | |
sx = x0 < x1 ? 1 : -1; | |
sy = y0 < y1 ? 1 : -1; | |
dx = abs(x1 - x0); | |
dy = abs(y1 - y0); | |
- err = (dx > dy ? dx : -dy) / 2; | |
+ err = (dy > dx ? dy : -dx) / 2; | |
for (;;) { | |
ff_pixel(can, col, x0, y0); | |
- if (x0 == x1 && y0 == y1) | |
+ if (y0 == y1 && x0 == x1) | |
break; | |
e = err; | |
- if (e > -dx) { | |
- x0 += sx; | |
- err -= dy; | |
- } | |
- if (e < dy) { | |
+ if (e > -dy) { | |
y0 += sy; | |
- err += dx; | |
+ err -= dx; | |
+ } | |
+ if (e < dx) { | |
+ x0 += sx; | |
+ err += dy; | |
} | |
} | |
} | |
/* | |
- * Draw a coloured glyph from font f centered on x. | |
+ * Draw a coloured glyph from font f centered on y. | |
*/ | |
-static void | |
-ff_char(Canvas *can, Color *col, char c, Font *f, | |
+static int | |
+ff_char(struct canvas *can, struct color *col, char c, | |
int x, int y) | |
{ | |
- int xf, yf; | |
+ int yf, xf, wf; | |
if (c & 0x80) | |
c = '\0'; | |
- | |
- | |
- x -= f->h / 2; | |
- | |
- for (xf = 0; xf < f->h; xf++) | |
- for (yf = 0; yf < f->w; yf++) | |
- if (f->b[(int)c][f->w * (f->h - xf) + yf] == 1) | |
+ y -= font->height / 2; | |
+ wf = font_width(font, c); | |
+ for (xf = 0; xf < wf; xf++) | |
+ for (yf = 0; yf < font->height; yf++) | |
+ if (font->glyph[(int)c][wf * (font->height - yf) + xf]… | |
ff_pixel(can, col, x + xf, y + yf); | |
+ return wf + 1; | |
} | |
/* | |
* Draw a left aligned string without wrapping it. | |
*/ | |
-static void | |
-ff_str_left(Canvas *can, Color *col, char *s, Font *f, | |
+static size_t | |
+ff_text_left(struct canvas *can, struct color *col, char *s, | |
int x, int y) | |
{ | |
- for (; *s != '\0'; y += f->w, s++) | |
- ff_char(can, col, *s, f, x, y); | |
+ for (; *s != '\0'; s++) | |
+ x += ff_char(can, col, *s, x, y); | |
+ return x; | |
} | |
/* | |
* Draw a center aligned string without wrapping it. | |
*/ | |
-static void | |
-ff_str_center(Canvas *can, Color *col, char *s, Font *f, | |
+static size_t | |
+ff_text_center(struct canvas *can, struct color *col, char *s, | |
int x, int y) | |
{ | |
- y -= f->w * strlen(s) / 2; | |
- ff_str_left(can, col, s, f, x, y); | |
+ x -= font_strlen(font, s) / 2; | |
+ return ff_text_left(can, col, s, x, y); | |
} | |
/* | |
* Draw a right aligned string without wrapping it. | |
*/ | |
-static void | |
-ff_str_right(Canvas *can, Color *col, char *s, Font *f, | |
+static size_t | |
+ff_text_right(struct canvas *can, struct color *col, char *s, | |
int x, int y) | |
{ | |
- y -= f->w * strlen(s); | |
- ff_str_left(can, col, s, f, x, y); | |
+ x -= font_strlen(font, s); | |
+ return ff_text_left(can, col, s, x, y); | |
} | |
static void | |
-ff_print(Canvas *can) | |
+ff_print(struct canvas *can) | |
{ | |
- uint32_t w, h; | |
+ uint32_t w, h; | |
w = htonl(can->w); | |
h = htonl(can->h); | |
@@ -336,169 +320,166 @@ ff_print(Canvas *can) | |
fputs("farbfeld", stdout); | |
fwrite(&w, sizeof(w), 1, stdout); | |
fwrite(&h, sizeof(h), 1, stdout); | |
- fwrite(can->b, can->w * can->h, sizeof(*can->b), stdout); | |
+ fwrite(can->buf, can->w * can->h, sizeof(*can->buf), stdout); | |
} | |
static int | |
-ff_t2y(time_t t, time_t tmin, time_t tmax) | |
+ff_t2x(time_t t, time_t tmin, time_t tmax) | |
{ | |
return (t - tmin) * PLOT_W / (tmax - tmin); | |
} | |
static int | |
-ff_v2x(double v, double vmin, double vmax) | |
+ff_v2y(double v, double vmin, double vmax) | |
{ | |
return (v - vmin) * PLOT_H / (vmax - vmin); | |
} | |
static void | |
-ff_xaxis(Canvas *can, Color *label, Color *grid, | |
- double vmin, double vmax, double vstep) | |
-{ | |
- double v; | |
- int x; | |
- char str[8 + 1]; | |
- | |
- for (v = vmax - fmod(vmax, vstep); v >= vmin; v -= vstep) { | |
- x = ff_v2x(v, vmin, vmax); | |
- | |
- ff_line(can, grid, | |
- x, XLABEL_W, | |
- x, XLABEL_W + PLOT_W); | |
- | |
- humanize(str, v); | |
- ff_str_right(can, label, str, &font, | |
- x, XLABEL_W - MARGIN); | |
- } | |
-} | |
- | |
-static void | |
-ff_yaxis(Canvas *can, Color *label, Color *grid, | |
+ff_xaxis(struct canvas *can, struct color *label, struct color *grid, | |
time_t tmin, time_t tmax, time_t tstep) | |
{ | |
- time_t t; | |
- int y; | |
- char str[sizeof("MM/DD HH/MM")], *fmt; | |
+ time_t t; | |
+ int x; | |
+ char str[sizeof("MM/DD HH/MM")], *fmt; | |
if (tstep < 3600 * 12) | |
fmt = "%H:%M:%S"; | |
else if (tstep < 3600 * 24) | |
fmt = "%m/%d %H:%M"; | |
else | |
- fmt = "%Y/%m/%d"; | |
+ fmt = "%X/%m/%d"; | |
for (t = tmax - tmax % tstep; t >= tmin; t -= tstep) { | |
- y = ff_t2y(t, tmin, tmax); | |
+ x = ff_t2x(t, tmin, tmax); | |
ff_line(can, grid, | |
- YLABEL_H, y, | |
- YLABEL_H + PLOT_H, y); | |
+ x, XLABEL_H, | |
+ x, XLABEL_H + PLOT_H); | |
strftime(str, sizeof(str), fmt, localtime(&t)); | |
- ff_str_center(can, label, str, &font, | |
- YLABEL_H / 2, y); | |
+ ff_text_center(can, label, str, | |
+ x, XLABEL_H / 2); | |
+ } | |
+} | |
+ | |
+static void | |
+ff_yaxis(struct canvas *can, struct color *label, struct color *grid, | |
+ double vmin, double vmax, double vstep) | |
+{ | |
+ double v; | |
+ int y; | |
+ char str[8 + 1]; | |
+ | |
+ for (v = vmax - fmod(vmax, vstep); v >= vmin; v -= vstep) { | |
+ y = ff_v2y(v, vmin, vmax); | |
+ | |
+ ff_line(can, grid, | |
+ YLABEL_W, y, | |
+ YLABEL_W + PLOT_W, y); | |
+ | |
+ humanize(str, v); | |
+ ff_text_right(can, label, str, | |
+ YLABEL_W - MARGIN, y); | |
} | |
} | |
static void | |
-ff_title(Canvas *can, | |
- Color *ct, char *title, | |
- Color *cu, char *unit) | |
+ff_title(struct canvas *can, | |
+ struct color *ct, char *title, | |
+ struct color *cu, char *unit) | |
{ | |
- ff_str_left(can, ct, title, &font, | |
- TITLE_H / 2, 0); | |
- ff_str_right(can, cu, unit, &font, | |
- TITLE_H / 2, TITLE_W); | |
+ ff_text_left(can, ct, title, TITLE_H / 2, 0); | |
+ ff_text_right(can, cu, unit, TITLE_H / 2, TITLE_W); | |
} | |
static void | |
-ff_plot(Canvas *can, Vlist *v, | |
+ff_plot(struct canvas *can, struct vlist *v, | |
double vmin, double vmax, | |
time_t tmin, time_t tmax) | |
{ | |
- time_t *tp; | |
- double *vp; | |
- int x, y, n, xlast, ylast, first; | |
+ time_t *tp; | |
+ double *vp; | |
+ int x, y, n, ylast, xlast, first; | |
first = 1; | |
for (tp = v->t, vp = v->v, n = v->n; n > 0; n--, vp++, tp++) { | |
- x = ff_v2x(*vp, vmin, vmax); | |
- y = ff_t2y(*tp, tmin, tmax); | |
+ y = ff_v2y(*vp, vmin, vmax); | |
+ x = ff_t2x(*tp, tmin, tmax); | |
if (!first) | |
- ff_line(can, &v->col, xlast, ylast, x, y); | |
+ ff_line(can, &v->color, xlast, ylast, x, y); | |
- xlast = x; | |
ylast = y; | |
+ xlast = x; | |
first = 0; | |
} | |
} | |
static void | |
-ff_values(Canvas *can, Vlist *v, int n, | |
- double vmin, double vmax, | |
- time_t tmin, time_t tmax) | |
+ff_values(struct canvas *can, struct vlist *v, int n, | |
+ time_t tmin, time_t tmax, | |
+ double vmin, double vmax) | |
{ | |
for (; n > 0; n--, v++) | |
ff_plot(can, v, vmin, vmax, tmin, tmax); | |
} | |
static void | |
-ff_legend(Canvas *can, Color *label_fg, Vlist *v, int n) | |
+ff_legend(struct canvas *can, struct color *label_fg, struct vlist *v, int n) | |
{ | |
int i, x, y; | |
for (i = 0; i < n; i++, v++) { | |
- x = LEGEND_H - i * (FONT_H + MARGIN) - FONT_H / 2; | |
- | |
- y = MARGIN + FONT_W; | |
- ff_str_left(can, &v->col, "\1", &font, x, y); | |
- | |
- y += FONT_W * 2; | |
- ff_str_left(can, label_fg, v->label, &font, x, y); | |
+ x = MARGIN; | |
+ x = ff_text_left(can, &v->color, "\1", x, y); | |
+ x = ff_text_left(can, label_fg, v->label, x, y); | |
+ y = LEGEND_H - i * (font->height + MARGIN) - font->height / 2; | |
} | |
} | |
/* | |
- * Plot the 'n' values list of the 'v' array with title 'name' and | |
+ * Plot the 'n' values list of the 'v' arrax with title 'name' and | |
* 'units' label. | |
* | |
* Title (units) | |
- * y ^ Legend | |
- * label |- + - + - + - + - .... | |
- * here |- + - + - + - + - .... | |
- * +--+---+---+---+--> | |
+ * x ^ Legend | |
+ * label | - + - + - + - + - .... | |
+ * here | - + - + - + - + - .... | |
+ * +---+---+---+---+--> | |
* x label here | |
*/ | |
static void | |
-ff(Vlist *v, int n, char *name, char *units) | |
+ff(struct vlist *v, int n, char *name, char *units) | |
{ | |
- Canvas can = { IMAGE_W, IMAGE_H, 0, 0, { { 0 }, { 0 } } }; | |
- Color plot_bg = { 0x2222, 0x2222, 0x2222, 0xffff }; | |
- Color grid_bg = { 0x2929, 0x2929, 0x2929, 0xffff }; | |
- Color grid_fg = { 0x3737, 0x3737, 0x3737, 0xffff }; | |
- Color label_fg = { 0x8888, 0x8888, 0x8888, 0xffff }; | |
- Color title_fg = { 0xdddd, 0xdddd, 0xdddd, 0xffff }; | |
- double vmin, vmax, vstep; | |
- time_t tmin, tmax, tstep; | |
+ struct canvas can = { IMAGE_W, IMAGE_H, 0, 0, NULL }; | |
+ struct color plot_bg = { 0x2222, 0x2222, 0x2222, 0xffff }; | |
+ struct color grid_bg = { 0x2929, 0x2929, 0x2929, 0xffff }; | |
+ struct color grid_fg = { 0x3737, 0x3737, 0x3737, 0xffff }; | |
+ struct color label_fg = { 0x8888, 0x8888, 0x8888, 0xffff }; | |
+ struct color title_fg = { 0xdddd, 0xdddd, 0xdddd, 0xffff }; | |
+ double vmin, vmax, vstep; | |
+ time_t tmin, tmax, tstep; | |
- scale(v, n, &vmin, &vmax, &vstep, &tmin, &tmax, &tstep); | |
+ scale(v, n, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep); | |
+ | |
+ assert(can.buf = calloc(IMAGE_H * IMAGE_W, sizeof *can.buf)); | |
- can.x = 0; | |
can.y = 0; | |
+ can.x = 0; | |
ff_rectangle(&can, &plot_bg, 0, 0, IMAGE_H - 1, IMAGE_W - 1); | |
can.x = PLOT_X; | |
can.y = PLOT_Y; | |
ff_rectangle(&can, &grid_bg, 0, 0, PLOT_H, PLOT_W); | |
- can.x = YLABEL_X; | |
- can.y = YLABEL_Y; | |
- ff_yaxis(&can, &label_fg, &grid_fg, tmin, tmax, tstep); | |
- | |
can.x = XLABEL_X; | |
can.y = XLABEL_Y; | |
- ff_xaxis(&can, &label_fg, &grid_fg, vmin, vmax, vstep); | |
+ ff_xaxis(&can, &label_fg, &grid_fg, tmin, tmax, tstep); | |
+ | |
+ can.x = YLABEL_X; | |
+ can.y = YLABEL_Y; | |
+ ff_yaxis(&can, &label_fg, &grid_fg, vmin, vmax, vstep); | |
can.x = TITLE_X; | |
can.y = TITLE_Y; | |
@@ -506,7 +487,7 @@ ff(Vlist *v, int n, char *name, char *units) | |
can.x = PLOT_X; | |
can.y = PLOT_Y; | |
- ff_values(&can, v, n, vmin, vmax, tmin, tmax); | |
+ ff_values(&can, v, n, tmin, tmax, vmin, vmax); | |
can.x = LEGEND_X; | |
can.y = LEGEND_Y; | |
@@ -516,65 +497,68 @@ ff(Vlist *v, int n, char *name, char *units) | |
} | |
static void | |
-csv_labels(Vlist *v, char **argv, char *buf) | |
+csv_labels(struct vlist *v, char **argv, char *buf) | |
{ | |
+ struct color *color; | |
+ | |
if (esfgets(buf, LINE_MAX, stdin) == NULL) | |
- fputs("missing label line\n", stderr), exit(1); | |
+ err(1, "missing label line"); | |
if (strcmp(strsep(&buf, ","), "epoch") != 0) | |
- fputs("first label must be \"epoch\"\n", stderr), exit(1); | |
+ err(1, "first label must be \"epoch\""); | |
for (; *argv != NULL; v++, argv++) { | |
if ((v->label = strsep(&buf, ",")) == NULL) | |
- fputs("more arguments than columns\n", stderr), exit(1… | |
- else if (color(&v->col, *argv) == -1) | |
- fprintf(stderr, "unknown color: %s\n", *argv), exit(1); | |
+ err(1, "more arguments than columns"); | |
+ else if ((color = name_to_color(*argv)) == NULL) | |
+ err(1, "unknown color: %s", *argv); | |
+ v->color = *color; | |
} | |
if (strsep(&buf, ",") != NULL) | |
- fputs("more columns than arguments\n", stderr), exit(1); | |
+ err(1, "more columns than arguments"); | |
} | |
static int | |
-csv_addval(Vlist *v, int bufsize, int nval, double field, time_t epoch) | |
+csv_addval(struct vlist *v, size_t sz, size_t nval, double field, time_t epoch) | |
{ | |
- if (nval >= bufsize) { | |
- bufsize = bufsize * 2 + 1; | |
- if ((v->v = realloc(v->v, bufsize * sizeof(*v->v))) == NULL) | |
- perror("reallocating values buffer"), exit(1); | |
- if ((v->t = realloc(v->t, bufsize * sizeof(*v->t))) == NULL) | |
- perror("reallocating values buffer"), exit(1); | |
+ if (nval >= sz) { | |
+ sz = sz * 2 + 1; | |
+ if ((v->v = realloc(v->v, sz * sizeof(*v->v))) == NULL) | |
+ err(1, "reallocating values buffer"); | |
+ if ((v->t = realloc(v->t, sz * sizeof(*v->t))) == NULL) | |
+ err(1, "reallocating values buffer"); | |
} | |
v->v[nval] = field; | |
v->t[nval] = epoch; | |
v->n = nval + 1; | |
- return bufsize; | |
+ return sz; | |
} | |
/* | |
* Add to each column the value on the current row. | |
*/ | |
static int | |
-csv_addrow(Vlist *v, int bufsize, int ncol, int nval, char *line) | |
+csv_addrow(struct vlist *v, size_t sz, size_t ncol, size_t nval, char *line) | |
{ | |
- time_t epoch; | |
- int bs; | |
- char *field, *dot; | |
+ time_t epoch; | |
+ int bs; | |
+ char *field, *dot; | |
if ((field = strsep(&line, ",")) == NULL) | |
- fprintf(stderr, "%d: missing epoch\n", nval), exit(1); | |
+ err(1, "%d: missing epoch", nval); | |
if ((dot = strchr(field, '.')) != NULL) | |
*dot = '\0'; | |
epoch = eatol(field); | |
for (; (field = strsep(&line, ",")) != NULL; ncol--, v++) { | |
if (ncol <= 0) | |
- fprintf(stderr, "%d: too many fields\n", nval), exit(1… | |
- bs = csv_addval(v, bufsize, nval, eatof(field), epoch); | |
+ err(1, "%d: too many fields", nval); | |
+ bs = csv_addval(v, sz, nval, eatof(field), epoch); | |
} | |
if (ncol > 0) | |
- fprintf(stderr, "%d: too few fields\n", nval), exit(1); | |
+ err(1, "%d: too few fields", ncol); | |
return bs; | |
} | |
@@ -586,26 +570,24 @@ csv_addrow(Vlist *v, int bufsize, int ncol, int nval, cha… | |
* epoch,a3,b3,c3 v | |
*/ | |
static void | |
-csv_values(Vlist *v, int ncol) | |
+csv_values(struct vlist *v, size_t ncol) | |
{ | |
- int nval, bufsize; | |
- char line[LINE_MAX]; | |
+ int nval, sz; | |
+ char line[LINE_MAX]; | |
- bufsize = 0; | |
+ sz = 0; | |
for (nval = 0; esfgets(line, sizeof(line), stdin) != NULL; nval++) | |
- bufsize = csv_addrow(v, bufsize, ncol, nval, line); | |
+ sz = csv_addrow(v, sz, ncol, nval, line); | |
if (nval == 0) | |
- fputs("no value could be read\n", stderr), exit(1); | |
+ err(1, "no value could be read\n"); | |
} | |
static void | |
usage(void) | |
{ | |
- Clist *c; | |
- | |
- fprintf(stderr, "usage: %s [-t title] [-u unit] {", argv0); | |
+ fprintf(stderr, "usage: %s [-t title] [-u unit] {", arg0); | |
fputs(clist->name, stderr); | |
- for (c = clist + 1; c->name != NULL; c++) | |
+ for (struct clist *c = clist + 1; c->name != NULL; c++) | |
fprintf(stderr, ",%s", c->name); | |
fputs("}...\n", stderr); | |
exit(1); | |
@@ -614,22 +596,24 @@ usage(void) | |
int | |
main(int argc, char **argv) | |
{ | |
- Vlist *v; | |
- char labels[LINE_MAX]; | |
+ struct vlist *v; | |
+ char labels[LINE_MAX]; | |
- ARGBEGIN { | |
+ ARG_SWITCH(argc, argv) { | |
case 't': | |
- tflag = EARGF(usage()); | |
+ tflag = ARG; | |
break; | |
case 'u': | |
- uflag = EARGF(usage()); | |
+ uflag = ARG; | |
break; | |
default: | |
usage(); | |
- } ARGEND; | |
+ } | |
+ | |
+ fflush(stdout); | |
if ((v = calloc(argc, sizeof(*v))) == NULL) | |
- perror("calloc value list"), exit(1); | |
+ err(1, "calloc value list"); | |
csv_labels(v, argv, labels); | |
csv_values(v, argc); | |
diff --git a/ploot-plot.c b/ploot-plot.c | |
@@ -0,0 +1,201 @@ | |
+#include <assert.h> | |
+#include <errno.h> | |
+#include <stdint.h> | |
+#include <stdio.h> | |
+#include <stdlib.h> | |
+#include <string.h> | |
+#include <time.h> | |
+#include <math.h> | |
+ | |
+#include "def.h" | |
+ | |
+/* | |
+ * Adjust the vertical scale so that it gets possible to | |
+ */ | |
+static void | |
+plot_scale(double *min, double *max, int row) | |
+{ | |
+ double unit, range, mi; | |
+ | |
+ range = *max - *min; | |
+ unit = 1; | |
+ | |
+ /* Zoom until it fills the canvas. */ | |
+ for (; (row - 1) * unit > range; unit /= 10) | |
+ continue; | |
+ | |
+ /* Dezoom until it fits the canvas. */ | |
+ for (; (row - 1) * unit < range; unit *= 10) | |
+ continue; | |
+ | |
+ /* Fine tune. */ | |
+ if ((row - 1) * unit / 5 > range) | |
+ unit /= 5; | |
+ if ((row - 1) * unit / 4 > range) | |
+ unit /= 4; | |
+ if ((row - 1) * unit / 2 > range) | |
+ unit /= 2; | |
+ | |
+ /* Align the minimum (and the zero). */ | |
+ for (mi = 0; mi > *min - unit; mi -= unit) | |
+ continue; | |
+ | |
+ /* Update the displayed minimal and maximal. */ | |
+ *min = mi; | |
+ *max = mi + unit * row; | |
+} | |
+ | |
+/* | |
+ * Return the step between two values. | |
+ */ | |
+static int | |
+plot_time_interval(time_t step) | |
+{ | |
+ time_t scale[] = { | |
+ 1, 5, 2, 10, 20, 30, 60, 60*2, 60*5, 60*10, 60*20, 60*30, | |
+ 3600, 3600*2, 3600*5, 3600*10, 3600*18, 3600*24, 3600*24*2, | |
+ 3600*24*5, 3600*24*10, 3600*24*20, 3600*24*30, 3600*24*50, | |
+ 3600*24*100, 3600*24*365, 0 | |
+ }; | |
+ | |
+ for (time_t *s = scale; *s != 0; s++) | |
+ if (*s >= 20 * step) | |
+ return *s; | |
+ return 1; | |
+} | |
+ | |
+static size_t | |
+plot_axis_x(char *buf, size_t sz, time_t step, time_t t2, int col) | |
+{ | |
+ int x, prec; | |
+ char tmp[sizeof("MM/DD HH:MM")], *fmt; | |
+ size_t n; | |
+ time_t t, interval; | |
+ | |
+ interval = plot_time_interval(step); | |
+ fmt = (step < 3600 * 12) ? "^%H:%M:%S" : | |
+ (step < 3600 * 24) ? "^%m/%d %H:%M" : | |
+ "^%Y/%m/%d"; | |
+ n = x = 0; | |
+ | |
+ t = t2 - col * 2 * step; | |
+ t += interval - t % interval; | |
+ for (; t < t2; t += interval) { | |
+ strftime(tmp, sizeof tmp, fmt, localtime(&t)); | |
+ x = ((t - t2) / 2 + col * step) / step; | |
+ prec = x - n + strlen(tmp); | |
+ assert((n += snprintf(buf+n, sz-n, "%*s", prec, tmp)) <= sz); | |
+ } | |
+ assert((n += strlcpy(buf+n, "\n", sz-n)) < sz); | |
+ return n; | |
+} | |
+ | |
+/* | |
+ * Plot a single line out of the y axis, at row <r> out of <rows>. | |
+ */ | |
+static size_t | |
+plot_axis_y(char *buf, size_t sz, double min, double max, int r, int rows) | |
+{ | |
+ size_t i; | |
+ char tmp[10] = "", *s; | |
+ double val; | |
+ | |
+ val = (max - min) * (rows - r) / rows + min; | |
+ humanize(tmp, sizeof tmp, val); | |
+ s = (r == 0) ? "┌" : | |
+ (r == rows - 1) ? "└" : | |
+ "├"; | |
+ i = snprintf(buf, sz, "%s%-6s ", s, tmp); | |
+ return (i > sz) ? (sz) : (i); | |
+} | |
+ | |
+static char * | |
+plot_render(struct drawille *drw, double min, double max, time_t step, time_t … | |
+{ | |
+ char *buf; | |
+ size_t sz; | |
+ size_t n; | |
+ | |
+ /* Render the plot line by line. */ | |
+ sz = drw->row * (20 + drw->col * 3 + 1) + 1; | |
+ sz += drw->col + 1 + 100000; | |
+ if ((buf = calloc(sz, 1)) == NULL) | |
+ goto err; | |
+ n = 0; | |
+ for (int row = 0; row < drw->row; row++) { | |
+ n += drawille_fmt_row(drw, buf+n, sz-n, row); | |
+ n += plot_axis_y(buf+n, sz-n, min, max, row, drw->row); | |
+ n += strlcpy(buf+n, "\n", sz-n); | |
+ } | |
+ plot_axis_x(buf+n, sz-n, step, t2, drw->col); | |
+ | |
+ return buf; | |
+err: | |
+ errno = ENOBUFS; | |
+ free(buf); | |
+ return NULL; | |
+} | |
+ | |
+/* | |
+ * Plot the body as an histogram interpolating the gaps and include | |
+ * a vertical and horizontal axis. | |
+ */ | |
+static char * | |
+plot_hist(struct timeserie *ts, time_t t2, struct drawille *drw) | |
+{ | |
+ int x, y, zero, shift; | |
+ double min, max, val; | |
+ time_t t1, t; | |
+ | |
+ /* Adjust the y scale. */ | |
+ shift = min = max = 0; | |
+ timeserie_stats(ts, &min, &max); | |
+ if (drw->row > 1) { | |
+ shift = 2; /* Align values to the middle of the scale: |- */ | |
+ plot_scale(&min, &max, drw->row); | |
+ } | |
+ zero = timeserie_ypos(0, min, max, drw->row*4) - shift; | |
+ | |
+ /* Adjust the x scale. */ | |
+ t2 = t2 + ts->step - t2 % ts->step; | |
+ t1 = t2 - ts->step * ts->len; | |
+ | |
+ /* Plot the data in memory in <drw> starting from the end (t2). */ | |
+ t = t2; | |
+ for (x = drw->col * 2; x > 0; x--) { | |
+ val = timeserie_get(ts, t); | |
+ if (!isnan(val)) { | |
+ y = timeserie_ypos(val, min, max, drw->row*4) - shift; | |
+ drawille_dot_hist(drw, x, y, zero); | |
+ } | |
+ t -= ts->step; | |
+ } | |
+ | |
+ return plot_render(drw, min, max, ts->step, t2); | |
+} | |
+ | |
+static char * | |
+plot(struct timeserie *ts, time_t t2, int row, int col) | |
+{ | |
+ struct drawille *drw; | |
+ size_t len; | |
+ char *buf; | |
+ | |
+ len = 500; | |
+ buf = NULL; | |
+ drw = NULL; | |
+ col -= 8; | |
+ | |
+ if (timeserie_read(ts) == -1) | |
+ goto err; | |
+ | |
+ if ((drw = drawille_new(row, col)) == NULL) | |
+ goto err; | |
+ | |
+ buf = plot_hist(ts, t2, drw); | |
+err: | |
+ if (buf == NULL) | |
+ timedb_close(&ts->db); | |
+ free(drw); | |
+ return buf; | |
+} | |
diff --git a/util.c b/util.c | |
@@ -5,7 +5,7 @@ | |
#include <stdlib.h> | |
#include <ctype.h> | |
-#include "util.h" | |
+#include "def.h" | |
void | |
put3utf(long rune) | |
diff --git a/util.h b/util.h | |
@@ -1,12 +0,0 @@ | |
-#define LEN(x) (sizeof(x) / sizeof(*x)) | |
-#define MAX(x, y) ((x) > (y) ? (x) : (y)) | |
-#define MIN(x, y) ((x) < (y) ? (x) : (y)) | |
-#define ABS(x) ((x) < 0 ? -(x) : (x)) | |
- | |
-void put3utf (long); | |
-char *strsep (char **, const char *); | |
-void estriplf (char *); | |
-double eatof (char *); | |
-long eatol (char *); | |
-char *esfgets (char *, size_t, FILE *); | |
-int humanize (char *, double); |