From a99eb3add0869d4df9ed69f3911349c24c277da9 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Mon, 29 Sep 2025 02:54:08 +0000 Subject: [PATCH] font git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@44 b9cfdab3-6d41-4d17-bbe4-086880011989 --- GNUmakefile | 2 +- include/Mw/Default.h | 1 + include/Mw/StringDefs.h | 1 + include/Mw/TypeDefs.h | 2 +- src/button.c | 16 ++- src/core.c | 1 + src/default.c | 1 + src/draw.c | 28 ++--- src/font.c | 256 ++++++++++++++++++++-------------------- 9 files changed, 161 insertions(+), 147 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index db4d158..d202bfe 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -9,7 +9,7 @@ LIBS = L_OBJS = src/ds.o src/core.o src/default.o src/draw.o src/lowlevel.o src/font.o L_OBJS += src/window.o src/button.o -L_LIBS = -lfreetype +L_LIBS = ifeq ($(TARGET),NetBSD) CFLAGS += -I/usr/X11R7/include -I/usr/pkg/include diff --git a/include/Mw/Default.h b/include/Mw/Default.h index bdfbb99..6edae32 100644 --- a/include/Mw/Default.h +++ b/include/Mw/Default.h @@ -10,6 +10,7 @@ extern "C" { #endif MWDECL const char* MwDefaultBackground; +MWDECL const char* MwDefaultForeground; #ifdef __cplusplus } diff --git a/include/Mw/StringDefs.h b/include/Mw/StringDefs.h index fc236ba..bd55933 100644 --- a/include/Mw/StringDefs.h +++ b/include/Mw/StringDefs.h @@ -9,6 +9,7 @@ #define MwNtitle "Stitle" #define MwNbackground "Sbackground" +#define MwNforeground "Sforeground" #define MwNactivateHandler "Cactivate" diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index fe8b3cc..0e50ea3 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -79,7 +79,7 @@ struct _MwClass { struct _MwFont { int left; int top; - unsigned char data[14]; + unsigned char data[16]; }; #endif diff --git a/src/button.c b/src/button.c index 19c4732..0d1271b 100644 --- a/src/button.c +++ b/src/button.c @@ -6,16 +6,26 @@ static void create(MwWidget handle) { } static void draw(MwWidget handle) { - MwRect r; + MwRect r; + MwPoint point; + MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + MwLLColor text = MwParseColor(handle, MwGetText(handle, MwNforeground)); r.x = 0; r.y = 0; r.width = MwGetInteger(handle, MwNwidth); r.height = MwGetInteger(handle, MwNheight); - MwDrawFrame(handle, &r, MwParseColor(handle, MwGetText(handle, MwNbackground)), handle->pressed); + MwDrawFrame(handle, &r, base, handle->pressed); + MwDrawRect(handle, &r, base); - // MwDrawRect(handle, &r, MwParseColor(handle, MwGetText(handle, MwNbackground))); + point.x = r.x + r.width / 2; + point.y = r.x + r.height / 2; + + MwDrawText(handle, &point, "test", text); + + MwLLFreeColor(text); + MwLLFreeColor(base); } static void click(MwWidget handle) { diff --git a/src/core.c b/src/core.c index 4ae306f..f08b1b6 100644 --- a/src/core.c +++ b/src/core.c @@ -215,6 +215,7 @@ void MwVaListApply(MwWidget handle, va_list va) { void MwSetDefault(MwWidget handle) { MwSetText(handle, MwNbackground, MwDefaultBackground); + MwSetText(handle, MwNforeground, MwDefaultForeground); } void MwDispatchUserHandler(MwWidget handle, const char* key, void* handler_data) { diff --git a/src/default.c b/src/default.c index ab52a81..f5bfb0f 100644 --- a/src/default.c +++ b/src/default.c @@ -2,3 +2,4 @@ #include const char* MwDefaultBackground = "#ddd"; +const char* MwDefaultForeground = "#000"; diff --git a/src/draw.c b/src/draw.c index 8bc5ae8..b8cb1fc 100644 --- a/src/draw.c +++ b/src/draw.c @@ -110,32 +110,32 @@ void MwDrawFrame(MwWidget handle, MwRect* rect, MwLLColor color, int invert) { MwLLFreeColor(lighter); MwLLFreeColor(darker); - rect->x += border; - rect->y += border; - rect->width -= border * 2; - rect->height -= border * 2; + rect->x += border + (invert ? border : 0); + rect->y += border + (invert ? border : 0); + rect->width -= border * 2 + (invert ? border : 0); + rect->height -= border * 2 + (invert ? border : 0); } void MwDrawText(MwWidget handle, MwPoint* point, const char* text, MwLLColor color) { - int i, x, y, sx, sy; + int i, x, y, sx, sy, sc = 1; MwRect r; - sx = point->x; - sy = point->y; + sx = point->x - strlen(text) * 8 * sc / 2; + sy = point->y - 16 * sc / 2; for(i = 0; text[i] != 0; i++) { - for(y = 0; y < 14; y++) { - for(x = 0; x < 7; x++) { - r.x = sx + x; - r.y = sy + y; - r.width = 1; - r.height = 1; + for(y = 0; y < 16; y++) { + for(x = 0; x < 8; x++) { + r.x = sx + x * sc; + r.y = sy + y * sc; + r.width = sc; + r.height = sc; if(MwFontData[(unsigned char)text[i]].data[y] & (1 << (7 - x))) { MwDrawRect(handle, &r, color); } } } - sx += 7; + sx += 8 * sc; } } diff --git a/src/font.c b/src/font.c index 637be6c..99f544e 100644 --- a/src/font.c +++ b/src/font.c @@ -2,132 +2,132 @@ #include MwFont MwFontData[] = { - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 0 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 1 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 2 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 3 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 4 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 5 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 6 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 7 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 8 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 9 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 10 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 11 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 12 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 13 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 14 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 15 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 16 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 17 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 18 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 19 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 20 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 21 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 22 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 23 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 24 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 25 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 26 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 27 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 28 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 29 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 30 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}}, /* 31 */ - {0, 12, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 32 */ - {0, 12, {0, 0, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 0}}, /* 33 */ - {0, 12, {0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 34 */ - {0, 12, {0, 0, 20, 20, 20, 62, 20, 20, 62, 20, 20, 20, 0, 0}}, /* 35 */ - {0, 12, {0, 0, 8, 60, 74, 74, 40, 28, 10, 74, 74, 60, 8, 0}}, /* 36 */ - {0, 12, {0, 0, 50, 74, 76, 56, 8, 16, 28, 50, 82, 76, 0, 0}}, /* 37 */ - {0, 12, {0, 0, 24, 36, 36, 36, 24, 50, 74, 68, 76, 50, 0, 0}}, /* 38 */ - {0, 12, {0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 39 */ - {0, 12, {0, 2, 4, 8, 8, 16, 16, 16, 16, 16, 8, 8, 4, 2}}, /* 40 */ - {0, 12, {0, 32, 16, 8, 8, 4, 4, 4, 4, 4, 8, 8, 16, 32}}, /* 41 */ - {0, 12, {0, 0, 0, 0, 8, 42, 28, 8, 28, 42, 8, 0, 0, 0}}, /* 42 */ - {0, 12, {0, 0, 0, 0, 8, 8, 8, 62, 8, 8, 8, 0, 0, 0}}, /* 43 */ - {0, 12, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 8, 16}}, /* 44 */ - {0, 12, {0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0}}, /* 45 */ - {0, 12, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 8, 0}}, /* 46 */ - {0, 12, {0, 2, 2, 4, 4, 8, 8, 8, 16, 16, 32, 32, 64, 64}}, /* 47 */ - {0, 12, {0, 0, 24, 36, 66, 66, 66, 66, 66, 66, 36, 24, 0, 0}}, /* 48 */ - {0, 12, {0, 0, 8, 24, 40, 8, 8, 8, 8, 8, 8, 62, 0, 0}}, /* 49 */ - {0, 12, {0, 0, 60, 66, 66, 2, 4, 4, 8, 16, 32, 126, 0, 0}}, /* 50 */ - {0, 12, {0, 0, 126, 2, 4, 8, 28, 2, 2, 66, 66, 60, 0, 0}}, /* 51 */ - {0, 12, {0, 0, 4, 12, 20, 20, 36, 36, 68, 126, 4, 4, 0, 0}}, /* 52 */ - {0, 12, {0, 0, 126, 64, 64, 124, 66, 2, 2, 66, 66, 60, 0, 0}}, /* 53 */ - {0, 12, {0, 0, 28, 32, 64, 64, 92, 98, 66, 66, 66, 60, 0, 0}}, /* 54 */ - {0, 12, {0, 0, 126, 2, 4, 4, 8, 8, 16, 16, 32, 32, 0, 0}}, /* 55 */ - {0, 12, {0, 0, 60, 66, 66, 36, 24, 36, 66, 66, 66, 60, 0, 0}}, /* 56 */ - {0, 12, {0, 0, 60, 66, 66, 66, 70, 58, 2, 66, 68, 56, 0, 0}}, /* 57 */ - {0, 12, {0, 0, 0, 0, 8, 28, 8, 0, 0, 8, 28, 8, 0, 0}}, /* 58 */ - {0, 12, {0, 0, 0, 0, 0, 24, 24, 0, 0, 24, 8, 8, 16, 0}}, /* 59 */ - {0, 12, {0, 0, 0, 2, 4, 8, 16, 32, 16, 8, 4, 2, 0, 0}}, /* 60 */ - {0, 12, {0, 0, 0, 0, 0, 126, 0, 0, 126, 0, 0, 0, 0, 0}}, /* 61 */ - {0, 12, {0, 0, 0, 32, 16, 8, 4, 2, 4, 8, 16, 32, 0, 0}}, /* 62 */ - {0, 12, {0, 0, 60, 66, 66, 4, 8, 8, 8, 0, 8, 8, 0, 0}}, /* 63 */ - {0, 12, {0, 0, 28, 34, 78, 82, 82, 82, 82, 78, 32, 30, 0, 0}}, /* 64 */ - {0, 12, {0, 0, 24, 36, 66, 66, 66, 126, 66, 66, 66, 66, 0, 0}}, /* 65 */ - {0, 12, {0, 0, 120, 68, 66, 68, 120, 68, 66, 66, 68, 120, 0, 0}}, /* 66 */ - {0, 12, {0, 0, 60, 66, 66, 64, 64, 64, 64, 66, 66, 60, 0, 0}}, /* 67 */ - {0, 12, {0, 0, 120, 68, 66, 66, 66, 66, 66, 66, 68, 120, 0, 0}}, /* 68 */ - {0, 12, {0, 0, 126, 64, 64, 64, 120, 64, 64, 64, 64, 126, 0, 0}}, /* 69 */ - {0, 12, {0, 0, 126, 64, 64, 64, 120, 64, 64, 64, 64, 64, 0, 0}}, /* 70 */ - {0, 12, {0, 0, 60, 66, 66, 64, 64, 78, 66, 66, 70, 58, 0, 0}}, /* 71 */ - {0, 12, {0, 0, 66, 66, 66, 66, 126, 66, 66, 66, 66, 66, 0, 0}}, /* 72 */ - {0, 12, {0, 0, 62, 8, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0}}, /* 73 */ - {0, 12, {0, 0, 14, 4, 4, 4, 4, 4, 4, 68, 68, 56, 0, 0}}, /* 74 */ - {0, 12, {0, 0, 66, 68, 72, 80, 96, 80, 72, 68, 66, 66, 0, 0}}, /* 75 */ - {0, 12, {0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 126, 0, 0}}, /* 76 */ - {0, 12, {0, 0, 66, 102, 102, 90, 90, 66, 66, 66, 66, 66, 0, 0}}, /* 77 */ - {0, 12, {0, 0, 66, 66, 98, 98, 82, 74, 70, 70, 66, 66, 0, 0}}, /* 78 */ - {0, 12, {0, 0, 60, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0}}, /* 79 */ - {0, 12, {0, 0, 124, 66, 66, 66, 66, 124, 64, 64, 64, 64, 0, 0}}, /* 80 */ - {0, 12, {0, 0, 60, 66, 66, 66, 66, 66, 114, 74, 70, 60, 4, 2}}, /* 81 */ - {0, 12, {0, 0, 124, 66, 66, 66, 66, 124, 72, 68, 66, 66, 0, 0}}, /* 82 */ - {0, 12, {0, 0, 60, 66, 66, 64, 48, 12, 2, 66, 66, 60, 0, 0}}, /* 83 */ - {0, 12, {0, 0, 127, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0}}, /* 84 */ - {0, 12, {0, 0, 66, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0}}, /* 85 */ - {0, 12, {0, 0, 66, 66, 66, 66, 36, 36, 36, 24, 24, 24, 0, 0}}, /* 86 */ - {0, 12, {0, 0, 34, 34, 34, 34, 34, 34, 42, 42, 42, 20, 0, 0}}, /* 87 */ - {0, 12, {0, 0, 66, 66, 36, 36, 24, 24, 36, 36, 66, 66, 0, 0}}, /* 88 */ - {0, 12, {0, 0, 34, 34, 34, 20, 20, 8, 8, 8, 8, 8, 0, 0}}, /* 89 */ - {0, 12, {0, 0, 126, 2, 4, 8, 8, 16, 32, 32, 64, 126, 0, 0}}, /* 90 */ - {0, 12, {0, 30, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 30}}, /* 91 */ - {0, 12, {0, 64, 64, 32, 32, 16, 16, 16, 8, 8, 4, 4, 2, 2}}, /* 92 */ - {0, 12, {0, 60, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 60}}, /* 93 */ - {0, 12, {0, 24, 36, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 94 */ - {0, 12, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126}}, /* 95 */ - {0, 12, {0, 16, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 96 */ - {0, 12, {0, 0, 0, 0, 0, 60, 66, 2, 62, 66, 66, 62, 0, 0}}, /* 97 */ - {0, 12, {0, 0, 64, 64, 64, 92, 98, 66, 66, 66, 98, 92, 0, 0}}, /* 98 */ - {0, 12, {0, 0, 0, 0, 0, 60, 66, 64, 64, 64, 66, 60, 0, 0}}, /* 99 */ - {0, 12, {0, 0, 2, 2, 2, 58, 70, 66, 66, 66, 70, 58, 0, 0}}, /* 100 */ - {0, 12, {0, 0, 0, 0, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0}}, /* 101 */ - {0, 12, {0, 0, 12, 18, 16, 16, 124, 16, 16, 16, 16, 16, 0, 0}}, /* 102 */ - {0, 12, {0, 0, 0, 0, 0, 58, 68, 68, 68, 56, 32, 92, 66, 60}}, /* 103 */ - {0, 12, {0, 0, 64, 64, 64, 92, 98, 66, 66, 66, 66, 66, 0, 0}}, /* 104 */ - {0, 12, {0, 0, 8, 8, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0}}, /* 105 */ - {0, 12, {0, 0, 2, 2, 0, 6, 2, 2, 2, 2, 2, 34, 34, 28}}, /* 106 */ - {0, 12, {0, 0, 64, 64, 64, 68, 72, 80, 112, 72, 68, 66, 0, 0}}, /* 107 */ - {0, 12, {0, 0, 24, 8, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0}}, /* 108 */ - {0, 12, {0, 0, 0, 0, 0, 52, 42, 42, 42, 42, 42, 34, 0, 0}}, /* 109 */ - {0, 12, {0, 0, 0, 0, 0, 92, 98, 66, 66, 66, 66, 66, 0, 0}}, /* 110 */ - {0, 12, {0, 0, 0, 0, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0}}, /* 111 */ - {0, 12, {0, 0, 0, 0, 0, 92, 98, 66, 66, 66, 98, 92, 64, 64}}, /* 112 */ - {0, 12, {0, 0, 0, 0, 0, 58, 70, 66, 66, 66, 70, 58, 2, 2}}, /* 113 */ - {0, 12, {0, 0, 0, 0, 0, 92, 98, 66, 64, 64, 64, 64, 0, 0}}, /* 114 */ - {0, 12, {0, 0, 0, 0, 0, 60, 66, 32, 24, 4, 66, 60, 0, 0}}, /* 115 */ - {0, 12, {0, 0, 16, 16, 16, 124, 16, 16, 16, 16, 18, 12, 0, 0}}, /* 116 */ - {0, 12, {0, 0, 0, 0, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0}}, /* 117 */ - {0, 12, {0, 0, 0, 0, 0, 34, 34, 34, 20, 20, 8, 8, 0, 0}}, /* 118 */ - {0, 12, {0, 0, 0, 0, 0, 34, 34, 42, 42, 42, 42, 20, 0, 0}}, /* 119 */ - {0, 12, {0, 0, 0, 0, 0, 66, 66, 36, 24, 36, 66, 66, 0, 0}}, /* 120 */ - {0, 12, {0, 0, 0, 0, 0, 66, 66, 66, 66, 70, 58, 2, 66, 60}}, /* 121 */ - {0, 12, {0, 0, 0, 0, 0, 126, 4, 8, 16, 16, 32, 126, 0, 0}}, /* 122 */ - {0, 12, {0, 6, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 6}}, /* 123 */ - {0, 12, {0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}}, /* 124 */ - {0, 12, {0, 48, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 48}}, /* 125 */ - {0, 12, {0, 32, 82, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 126 */ - {0, 12, {0, 90, 66, 0, 66, 66, 0, 66, 66, 0, 66, 90, 0, 0}} /* 127 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 0 */ + {0, 14, {16, 16, 56, 56, 124, 124, 254, 254, 124, 124, 56, 56, 16, 16, 0, 0}}, /* 1 */ + {0, 14, {146, 146, 68, 68, 146, 146, 68, 68, 146, 146, 68, 68, 146, 146, 0, 0}}, /* 2 */ + {0, 14, {0, 136, 136, 136, 248, 136, 136, 136, 0, 62, 8, 8, 8, 8, 8, 8}}, /* 3 */ + {0, 14, {0, 248, 128, 128, 240, 128, 128, 128, 62, 32, 32, 60, 32, 32, 32, 0}}, /* 4 */ + {0, 14, {0, 112, 136, 128, 128, 128, 136, 112, 0, 60, 34, 34, 60, 40, 36, 34}}, /* 5 */ + {0, 14, {0, 128, 128, 128, 128, 128, 128, 248, 0, 62, 32, 32, 60, 32, 32, 32}}, /* 6 */ + {0, 14, {0, 0, 56, 68, 68, 68, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 7 */ + {0, 14, {0, 0, 16, 16, 16, 16, 254, 16, 16, 16, 16, 0, 254, 0, 0, 0}}, /* 8 */ + {0, 14, {0, 132, 196, 164, 164, 148, 148, 140, 132, 32, 32, 32, 32, 32, 32, 62}}, /* 9 */ + {0, 14, {0, 0, 136, 136, 136, 80, 80, 32, 0, 62, 8, 8, 8, 8, 8, 0}}, /* 10 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 240, 0, 0, 0, 0, 0, 0, 0}}, /* 11 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 240, 16, 16, 16, 16, 16, 16, 16}}, /* 12 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 31, 16, 16, 16, 16, 16, 16, 16}}, /* 13 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 31, 0, 0, 0, 0, 0, 0, 0}}, /* 14 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 16, 16, 16, 16, 16}}, /* 15 */ + {0, 14, {0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 16 */ + {0, 14, {0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 17 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0}}, /* 18 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0}}, /* 19 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0}}, /* 20 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16, 16}}, /* 21 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 240, 16, 16, 16, 16, 16, 16, 16}}, /* 22 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 255, 0, 0, 0, 0, 0, 0, 0}}, /* 23 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 255, 16, 16, 16, 16, 16, 16, 16}}, /* 24 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}}, /* 25 */ + {0, 14, {0, 0, 0, 0, 2, 12, 48, 192, 48, 12, 2, 254, 0, 254, 0, 0}}, /* 26 */ + {0, 14, {0, 0, 0, 0, 128, 96, 24, 6, 24, 96, 128, 254, 0, 254, 0, 0}}, /* 27 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 254, 36, 36, 36, 36, 68, 132, 0, 0}}, /* 28 */ + {0, 14, {0, 0, 0, 0, 2, 4, 8, 254, 16, 254, 32, 64, 128, 0, 0, 0}}, /* 29 */ + {0, 14, {0, 0, 0, 0, 12, 18, 16, 16, 16, 124, 16, 16, 60, 82, 32, 0}}, /* 30 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0}}, /* 31 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 32 */ + {0, 14, {0, 56, 56, 56, 56, 56, 56, 16, 16, 16, 16, 0, 0, 16, 56, 16}}, /* 33 */ + {0, 14, {108, 108, 36, 36, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 34 */ + {0, 14, {0, 18, 18, 18, 127, 36, 36, 36, 36, 36, 254, 72, 72, 72, 72, 0}}, /* 35 */ + {0, 14, {16, 56, 84, 146, 150, 144, 80, 56, 20, 18, 210, 146, 148, 120, 16, 16}}, /* 36 */ + {0, 14, {2, 98, 148, 148, 148, 152, 104, 16, 16, 44, 50, 82, 82, 82, 140, 128}}, /* 37 */ + {0, 14, {0, 48, 72, 72, 72, 80, 32, 46, 84, 84, 148, 136, 140, 114, 0, 0}}, /* 38 */ + {0, 14, {224, 224, 32, 32, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 39 */ + {0, 14, {2, 4, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 4, 2}}, /* 40 */ + {0, 14, {128, 64, 32, 32, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 64, 128}}, /* 41 */ + {0, 14, {0, 0, 0, 16, 56, 146, 214, 56, 214, 146, 56, 16, 0, 0, 0, 0}}, /* 42 */ + {0, 14, {0, 0, 0, 16, 16, 16, 16, 254, 16, 16, 16, 16, 0, 0, 0, 0}}, /* 43 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 32, 32, 192}}, /* 44 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 45 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 224, 224, 64, 0}}, /* 46 */ + {0, 14, {2, 2, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 64, 64, 128, 128}}, /* 47 */ + {0, 14, {0, 24, 36, 36, 66, 66, 66, 66, 66, 66, 66, 66, 36, 36, 24, 0}}, /* 48 */ + {0, 14, {0, 16, 112, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 124, 0, 0}}, /* 49 */ + {0, 14, {0, 24, 36, 66, 98, 2, 4, 8, 8, 16, 32, 34, 66, 126, 0, 0}}, /* 50 */ + {0, 14, {0, 56, 68, 130, 130, 2, 4, 56, 4, 2, 130, 130, 68, 56, 0, 0}}, /* 51 */ + {0, 14, {0, 8, 24, 40, 40, 72, 72, 136, 136, 254, 8, 8, 8, 60, 0, 0}}, /* 52 */ + {0, 14, {0, 252, 128, 128, 128, 184, 196, 130, 2, 2, 194, 130, 68, 56, 0, 0}}, /* 53 */ + {0, 14, {0, 60, 66, 70, 128, 128, 184, 196, 130, 130, 130, 130, 68, 56, 0, 0}}, /* 54 */ + {0, 14, {0, 254, 130, 130, 4, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 0}}, /* 55 */ + {0, 14, {0, 56, 68, 130, 130, 130, 68, 56, 68, 130, 130, 130, 68, 56, 0, 0}}, /* 56 */ + {0, 14, {0, 56, 68, 130, 130, 130, 130, 70, 58, 2, 2, 130, 68, 56, 0, 0}}, /* 57 */ + {0, 14, {0, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 0, 56, 56, 0, 0}}, /* 58 */ + {0, 14, {0, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 56, 56, 24, 16, 48}}, /* 59 */ + {0, 14, {2, 4, 4, 8, 8, 16, 16, 32, 32, 16, 16, 8, 8, 4, 4, 2}}, /* 60 */ + {0, 14, {0, 0, 0, 0, 0, 254, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0}}, /* 61 */ + {0, 14, {128, 64, 64, 32, 32, 16, 16, 8, 8, 16, 16, 32, 32, 64, 64, 128}}, /* 62 */ + {0, 14, {0, 56, 68, 130, 194, 2, 4, 4, 8, 16, 16, 0, 0, 16, 56, 16}}, /* 63 */ + {0, 14, {0, 60, 66, 130, 154, 166, 162, 162, 162, 166, 154, 128, 66, 60, 0, 0}}, /* 64 */ + {0, 14, {0, 16, 40, 40, 40, 68, 68, 68, 68, 124, 130, 130, 130, 198, 0, 0}}, /* 65 */ + {0, 14, {0, 248, 68, 66, 66, 66, 68, 120, 68, 66, 66, 66, 66, 252, 0, 0}}, /* 66 */ + {0, 14, {0, 58, 70, 66, 128, 128, 128, 128, 128, 128, 130, 66, 66, 60, 0, 0}}, /* 67 */ + {0, 14, {0, 248, 68, 68, 66, 66, 66, 66, 66, 66, 66, 68, 68, 248, 0, 0}}, /* 68 */ + {0, 14, {0, 254, 66, 66, 64, 72, 72, 120, 72, 72, 66, 66, 66, 254, 0, 0}}, /* 69 */ + {0, 14, {0, 254, 66, 66, 64, 72, 72, 120, 72, 72, 64, 64, 64, 240, 0, 0}}, /* 70 */ + {0, 14, {0, 26, 38, 66, 64, 128, 128, 143, 130, 130, 130, 66, 102, 26, 0, 0}}, /* 71 */ + {0, 14, {0, 231, 66, 66, 66, 66, 126, 66, 66, 66, 66, 66, 66, 231, 0, 0}}, /* 72 */ + {0, 14, {0, 254, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 254, 0, 0}}, /* 73 */ + {0, 14, {0, 31, 2, 2, 2, 2, 2, 2, 2, 130, 130, 130, 68, 56, 0, 0}}, /* 74 */ + {0, 14, {0, 230, 68, 68, 72, 72, 112, 80, 72, 72, 68, 68, 66, 227, 0, 0}}, /* 75 */ + {0, 14, {0, 240, 64, 64, 64, 64, 64, 64, 64, 64, 66, 66, 66, 254, 0, 0}}, /* 76 */ + {0, 14, {0, 130, 198, 170, 170, 170, 146, 146, 146, 130, 130, 130, 130, 198, 0, 0}}, /* 77 */ + {0, 14, {0, 135, 194, 162, 162, 162, 146, 146, 146, 138, 138, 138, 134, 194, 0, 0}}, /* 78 */ + {0, 14, {0, 56, 68, 130, 130, 130, 130, 130, 130, 130, 130, 130, 68, 56, 0, 0}}, /* 79 */ + {0, 14, {0, 248, 68, 66, 66, 66, 66, 68, 120, 64, 64, 64, 64, 240, 0, 0}}, /* 80 */ + {0, 14, {0, 56, 68, 68, 130, 130, 130, 130, 130, 130, 186, 68, 68, 56, 8, 6}}, /* 81 */ + {0, 14, {0, 248, 68, 66, 66, 66, 68, 120, 72, 68, 68, 68, 66, 227, 0, 0}}, /* 82 */ + {0, 14, {0, 52, 76, 132, 128, 128, 96, 24, 4, 130, 130, 130, 196, 184, 0, 0}}, /* 83 */ + {0, 14, {0, 254, 146, 146, 16, 16, 16, 16, 16, 16, 16, 16, 16, 124, 0, 0}}, /* 84 */ + {0, 14, {0, 231, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0}}, /* 85 */ + {0, 14, {0, 198, 130, 130, 130, 130, 68, 68, 68, 68, 40, 40, 16, 16, 0, 0}}, /* 86 */ + {0, 14, {0, 198, 130, 130, 130, 146, 146, 146, 170, 170, 170, 68, 68, 68, 0, 0}}, /* 87 */ + {0, 14, {0, 238, 68, 68, 40, 40, 16, 40, 40, 40, 68, 68, 130, 198, 0, 0}}, /* 88 */ + {0, 14, {0, 198, 130, 68, 68, 68, 40, 40, 16, 16, 16, 16, 16, 124, 0, 0}}, /* 89 */ + {0, 14, {0, 254, 132, 136, 8, 16, 16, 16, 32, 32, 66, 66, 130, 254, 0, 0}}, /* 90 */ + {0, 14, {30, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 30}}, /* 91 */ + {0, 14, {0, 128, 128, 64, 64, 32, 32, 16, 16, 8, 8, 4, 4, 2, 2, 0}}, /* 92 */ + {0, 14, {240, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 240}}, /* 93 */ + {0, 14, {16, 40, 68, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 94 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254}}, /* 95 */ + {0, 14, {48, 48, 32, 32, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 96 */ + {0, 14, {0, 0, 0, 0, 0, 60, 66, 2, 62, 66, 130, 130, 134, 123, 0, 0}}, /* 97 */ + {0, 14, {0, 192, 64, 64, 64, 120, 68, 66, 66, 66, 66, 66, 68, 120, 0, 0}}, /* 98 */ + {0, 14, {0, 0, 0, 0, 0, 58, 70, 130, 128, 128, 128, 130, 66, 60, 0, 0}}, /* 99 */ + {0, 14, {0, 6, 4, 4, 4, 60, 68, 132, 132, 132, 132, 132, 68, 62, 0, 0}}, /* 100 */ + {0, 14, {0, 0, 0, 0, 0, 56, 68, 130, 254, 128, 128, 130, 66, 60, 0, 0}}, /* 101 */ + {0, 14, {0, 14, 17, 16, 16, 254, 16, 16, 16, 16, 16, 16, 16, 124, 0, 0}}, /* 102 */ + {0, 14, {0, 0, 0, 0, 0, 59, 68, 68, 68, 56, 64, 120, 132, 130, 130, 124}}, /* 103 */ + {0, 14, {0, 192, 64, 64, 64, 92, 98, 66, 66, 66, 66, 66, 66, 231, 0, 0}}, /* 104 */ + {0, 14, {24, 24, 0, 0, 0, 120, 8, 8, 8, 8, 8, 8, 8, 255, 0, 0}}, /* 105 */ + {0, 14, {6, 6, 0, 0, 0, 62, 2, 2, 2, 2, 2, 2, 130, 130, 68, 56}}, /* 106 */ + {0, 14, {0, 192, 64, 64, 64, 66, 68, 72, 88, 100, 68, 66, 66, 227, 0, 0}}, /* 107 */ + {0, 14, {0, 120, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 255, 0, 0}}, /* 108 */ + {0, 14, {0, 0, 0, 0, 0, 108, 146, 146, 146, 146, 146, 146, 146, 219, 0, 0}}, /* 109 */ + {0, 14, {0, 0, 0, 0, 0, 220, 98, 66, 66, 66, 66, 66, 66, 231, 0, 0}}, /* 110 */ + {0, 14, {0, 0, 0, 0, 0, 56, 68, 130, 130, 130, 130, 130, 68, 56, 0, 0}}, /* 111 */ + {0, 14, {0, 0, 0, 0, 0, 248, 68, 66, 66, 66, 66, 68, 120, 64, 64, 240}}, /* 112 */ + {0, 14, {0, 0, 0, 0, 0, 62, 68, 132, 132, 132, 132, 68, 60, 4, 4, 30}}, /* 113 */ + {0, 14, {0, 0, 0, 0, 0, 236, 50, 34, 32, 32, 32, 32, 32, 252, 0, 0}}, /* 114 */ + {0, 14, {0, 0, 0, 0, 0, 58, 70, 66, 64, 60, 2, 130, 194, 188, 0, 0}}, /* 115 */ + {0, 14, {0, 0, 32, 32, 32, 252, 32, 32, 32, 32, 32, 34, 34, 28, 0, 0}}, /* 116 */ + {0, 14, {0, 0, 0, 0, 0, 198, 66, 66, 66, 66, 66, 66, 70, 57, 0, 0}}, /* 117 */ + {0, 14, {0, 0, 0, 0, 0, 198, 130, 130, 68, 68, 68, 40, 40, 16, 0, 0}}, /* 118 */ + {0, 14, {0, 0, 0, 0, 0, 146, 146, 146, 146, 170, 170, 68, 68, 68, 0, 0}}, /* 119 */ + {0, 14, {0, 0, 0, 0, 0, 238, 68, 40, 40, 16, 40, 40, 68, 238, 0, 0}}, /* 120 */ + {0, 14, {0, 0, 0, 0, 0, 231, 66, 34, 36, 20, 8, 8, 16, 144, 160, 64}}, /* 121 */ + {0, 14, {0, 0, 0, 0, 0, 126, 68, 8, 8, 16, 16, 34, 66, 254, 0, 0}}, /* 122 */ + {0, 14, {6, 8, 8, 8, 8, 8, 16, 32, 16, 8, 8, 8, 8, 8, 8, 6}}, /* 123 */ + {0, 14, {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}}, /* 124 */ + {0, 14, {192, 32, 32, 32, 32, 32, 16, 8, 16, 32, 32, 32, 32, 32, 32, 192}}, /* 125 */ + {0, 14, {96, 146, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 126 */ + {0, 14, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} /* 127 */ };