summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--decomp.c1284
-rw-r--r--refresh.c31
-rw-r--r--uuterm.h1
4 files changed, 1303 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index ba6f5eb..973a44a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# uuterm, Copyright (C) 2006 Rich Felker; licensed under GNU GPL v2 only
-SRCS = main.c term.c comb.c tty.c alloc.c refresh.c ascii.c ucf.c font_load.c fbcon.c dblbuf.c
+SRCS = main.c term.c comb.c decomp.c tty.c alloc.c refresh.c ascii.c ucf.c font_load.c fbcon.c dblbuf.c
OBJS = $(SRCS:.c=.o)
CFLAGS = -O2 -s #-g
diff --git a/decomp.c b/decomp.c
new file mode 100644
index 0000000..99865dc
--- /dev/null
+++ b/decomp.c
@@ -0,0 +1,1284 @@
+/* uuterm, Copyright (C) 2006 Rich Felker; licensed under GNU GPL v2 only */
+
+#include <stddef.h>
+#include <stdint.h>
+
+static const unsigned short decomp[] = {
+ 0xc0,0x41,0x300,
+ 0xc1,0x41,0x301,
+ 0xc2,0x41,0x302,
+ 0xc3,0x41,0x303,
+ 0xc4,0x41,0x308,
+ 0xc5,0x41,0x30a,
+ 0xc7,0x43,0x327,
+ 0xc8,0x45,0x300,
+ 0xc9,0x45,0x301,
+ 0xca,0x45,0x302,
+ 0xcb,0x45,0x308,
+ 0xcc,0x49,0x300,
+ 0xcd,0x49,0x301,
+ 0xce,0x49,0x302,
+ 0xcf,0x49,0x308,
+ 0xd1,0x4e,0x303,
+ 0xd2,0x4f,0x300,
+ 0xd3,0x4f,0x301,
+ 0xd4,0x4f,0x302,
+ 0xd5,0x4f,0x303,
+ 0xd6,0x4f,0x308,
+ 0xd9,0x55,0x300,
+ 0xda,0x55,0x301,
+ 0xdb,0x55,0x302,
+ 0xdc,0x55,0x308,
+ 0xdd,0x59,0x301,
+ 0xe0,0x61,0x300,
+ 0xe1,0x61,0x301,
+ 0xe2,0x61,0x302,
+ 0xe3,0x61,0x303,
+ 0xe4,0x61,0x308,
+ 0xe5,0x61,0x30a,
+ 0xe7,0x63,0x327,
+ 0xe8,0x65,0x300,
+ 0xe9,0x65,0x301,
+ 0xea,0x65,0x302,
+ 0xeb,0x65,0x308,
+ 0xec,0x69,0x300,
+ 0xed,0x69,0x301,
+ 0xee,0x69,0x302,
+ 0xef,0x69,0x308,
+ 0xf1,0x6e,0x303,
+ 0xf2,0x6f,0x300,
+ 0xf3,0x6f,0x301,
+ 0xf4,0x6f,0x302,
+ 0xf5,0x6f,0x303,
+ 0xf6,0x6f,0x308,
+ 0xf9,0x75,0x300,
+ 0xfa,0x75,0x301,
+ 0xfb,0x75,0x302,
+ 0xfc,0x75,0x308,
+ 0xfd,0x79,0x301,
+ 0xff,0x79,0x308,
+ 0x100,0x41,0x304,
+ 0x101,0x61,0x304,
+ 0x102,0x41,0x306,
+ 0x103,0x61,0x306,
+ 0x104,0x41,0x328,
+ 0x105,0x61,0x328,
+ 0x106,0x43,0x301,
+ 0x107,0x63,0x301,
+ 0x108,0x43,0x302,
+ 0x109,0x63,0x302,
+ 0x10a,0x43,0x307,
+ 0x10b,0x63,0x307,
+ 0x10c,0x43,0x30c,
+ 0x10d,0x63,0x30c,
+ 0x10e,0x44,0x30c,
+ 0x10f,0x64,0x30c,
+ 0x112,0x45,0x304,
+ 0x113,0x65,0x304,
+ 0x114,0x45,0x306,
+ 0x115,0x65,0x306,
+ 0x116,0x45,0x307,
+ 0x117,0x65,0x307,
+ 0x118,0x45,0x328,
+ 0x119,0x65,0x328,
+ 0x11a,0x45,0x30c,
+ 0x11b,0x65,0x30c,
+ 0x11c,0x47,0x302,
+ 0x11d,0x67,0x302,
+ 0x11e,0x47,0x306,
+ 0x11f,0x67,0x306,
+ 0x120,0x47,0x307,
+ 0x121,0x67,0x307,
+ 0x122,0x47,0x327,
+ 0x123,0x67,0x327,
+ 0x124,0x48,0x302,
+ 0x125,0x68,0x302,
+ 0x128,0x49,0x303,
+ 0x129,0x69,0x303,
+ 0x12a,0x49,0x304,
+ 0x12b,0x69,0x304,
+ 0x12c,0x49,0x306,
+ 0x12d,0x69,0x306,
+ 0x12e,0x49,0x328,
+ 0x12f,0x69,0x328,
+ 0x130,0x49,0x307,
+ 0x134,0x4a,0x302,
+ 0x135,0x6a,0x302,
+ 0x136,0x4b,0x327,
+ 0x137,0x6b,0x327,
+ 0x139,0x4c,0x301,
+ 0x13a,0x6c,0x301,
+ 0x13b,0x4c,0x327,
+ 0x13c,0x6c,0x327,
+ 0x13d,0x4c,0x30c,
+ 0x13e,0x6c,0x30c,
+ 0x143,0x4e,0x301,
+ 0x144,0x6e,0x301,
+ 0x145,0x4e,0x327,
+ 0x146,0x6e,0x327,
+ 0x147,0x4e,0x30c,
+ 0x148,0x6e,0x30c,
+ 0x14c,0x4f,0x304,
+ 0x14d,0x6f,0x304,
+ 0x14e,0x4f,0x306,
+ 0x14f,0x6f,0x306,
+ 0x150,0x4f,0x30b,
+ 0x151,0x6f,0x30b,
+ 0x154,0x52,0x301,
+ 0x155,0x72,0x301,
+ 0x156,0x52,0x327,
+ 0x157,0x72,0x327,
+ 0x158,0x52,0x30c,
+ 0x159,0x72,0x30c,
+ 0x15a,0x53,0x301,
+ 0x15b,0x73,0x301,
+ 0x15c,0x53,0x302,
+ 0x15d,0x73,0x302,
+ 0x15e,0x53,0x327,
+ 0x15f,0x73,0x327,
+ 0x160,0x53,0x30c,
+ 0x161,0x73,0x30c,
+ 0x162,0x54,0x327,
+ 0x163,0x74,0x327,
+ 0x164,0x54,0x30c,
+ 0x165,0x74,0x30c,
+ 0x168,0x55,0x303,
+ 0x169,0x75,0x303,
+ 0x16a,0x55,0x304,
+ 0x16b,0x75,0x304,
+ 0x16c,0x55,0x306,
+ 0x16d,0x75,0x306,
+ 0x16e,0x55,0x30a,
+ 0x16f,0x75,0x30a,
+ 0x170,0x55,0x30b,
+ 0x171,0x75,0x30b,
+ 0x172,0x55,0x328,
+ 0x173,0x75,0x328,
+ 0x174,0x57,0x302,
+ 0x175,0x77,0x302,
+ 0x176,0x59,0x302,
+ 0x177,0x79,0x302,
+ 0x178,0x59,0x308,
+ 0x179,0x5a,0x301,
+ 0x17a,0x7a,0x301,
+ 0x17b,0x5a,0x307,
+ 0x17c,0x7a,0x307,
+ 0x17d,0x5a,0x30c,
+ 0x17e,0x7a,0x30c,
+ 0x1a0,0x4f,0x31b,
+ 0x1a1,0x6f,0x31b,
+ 0x1af,0x55,0x31b,
+ 0x1b0,0x75,0x31b,
+ 0x1cd,0x41,0x30c,
+ 0x1ce,0x61,0x30c,
+ 0x1cf,0x49,0x30c,
+ 0x1d0,0x69,0x30c,
+ 0x1d1,0x4f,0x30c,
+ 0x1d2,0x6f,0x30c,
+ 0x1d3,0x55,0x30c,
+ 0x1d4,0x75,0x30c,
+ 0x1d5,0xdc,0x304,
+ 0x1d6,0xfc,0x304,
+ 0x1d7,0xdc,0x301,
+ 0x1d8,0xfc,0x301,
+ 0x1d9,0xdc,0x30c,
+ 0x1da,0xfc,0x30c,
+ 0x1db,0xdc,0x300,
+ 0x1dc,0xfc,0x300,
+ 0x1de,0xc4,0x304,
+ 0x1df,0xe4,0x304,
+ 0x1e0,0x226,0x304,
+ 0x1e1,0x227,0x304,
+ 0x1e2,0xc6,0x304,
+ 0x1e3,0xe6,0x304,
+ 0x1e6,0x47,0x30c,
+ 0x1e7,0x67,0x30c,
+ 0x1e8,0x4b,0x30c,
+ 0x1e9,0x6b,0x30c,
+ 0x1ea,0x4f,0x328,
+ 0x1eb,0x6f,0x328,
+ 0x1ec,0x1ea,0x304,
+ 0x1ed,0x1eb,0x304,
+ 0x1ee,0x1b7,0x30c,
+ 0x1ef,0x292,0x30c,
+ 0x1f0,0x6a,0x30c,
+ 0x1f4,0x47,0x301,
+ 0x1f5,0x67,0x301,
+ 0x1f8,0x4e,0x300,
+ 0x1f9,0x6e,0x300,
+ 0x1fa,0xc5,0x301,
+ 0x1fb,0xe5,0x301,
+ 0x1fc,0xc6,0x301,
+ 0x1fd,0xe6,0x301,
+ 0x1fe,0xd8,0x301,
+ 0x1ff,0xf8,0x301,
+ 0x200,0x41,0x30f,
+ 0x201,0x61,0x30f,
+ 0x202,0x41,0x311,
+ 0x203,0x61,0x311,
+ 0x204,0x45,0x30f,
+ 0x205,0x65,0x30f,
+ 0x206,0x45,0x311,
+ 0x207,0x65,0x311,
+ 0x208,0x49,0x30f,
+ 0x209,0x69,0x30f,
+ 0x20a,0x49,0x311,
+ 0x20b,0x69,0x311,
+ 0x20c,0x4f,0x30f,
+ 0x20d,0x6f,0x30f,
+ 0x20e,0x4f,0x311,
+ 0x20f,0x6f,0x311,
+ 0x210,0x52,0x30f,
+ 0x211,0x72,0x30f,
+ 0x212,0x52,0x311,
+ 0x213,0x72,0x311,
+ 0x214,0x55,0x30f,
+ 0x215,0x75,0x30f,
+ 0x216,0x55,0x311,
+ 0x217,0x75,0x311,
+ 0x218,0x53,0x326,
+ 0x219,0x73,0x326,
+ 0x21a,0x54,0x326,
+ 0x21b,0x74,0x326,
+ 0x21e,0x48,0x30c,
+ 0x21f,0x68,0x30c,
+ 0x226,0x41,0x307,
+ 0x227,0x61,0x307,
+ 0x228,0x45,0x327,
+ 0x229,0x65,0x327,
+ 0x22a,0xd6,0x304,
+ 0x22b,0xf6,0x304,
+ 0x22c,0xd5,0x304,
+ 0x22d,0xf5,0x304,
+ 0x22e,0x4f,0x307,
+ 0x22f,0x6f,0x307,
+ 0x230,0x22e,0x304,
+ 0x231,0x22f,0x304,
+ 0x232,0x59,0x304,
+ 0x233,0x79,0x304,
+ 0x344,0x308,0x301,
+ 0x385,0xa8,0x301,
+ 0x386,0x391,0x301,
+ 0x388,0x395,0x301,
+ 0x389,0x397,0x301,
+ 0x38a,0x399,0x301,
+ 0x38c,0x39f,0x301,
+ 0x38e,0x3a5,0x301,
+ 0x38f,0x3a9,0x301,
+ 0x390,0x3ca,0x301,
+ 0x3aa,0x399,0x308,
+ 0x3ab,0x3a5,0x308,
+ 0x3ac,0x3b1,0x301,
+ 0x3ad,0x3b5,0x301,
+ 0x3ae,0x3b7,0x301,
+ 0x3af,0x3b9,0x301,
+ 0x3b0,0x3cb,0x301,
+ 0x3ca,0x3b9,0x308,
+ 0x3cb,0x3c5,0x308,
+ 0x3cc,0x3bf,0x301,
+ 0x3cd,0x3c5,0x301,
+ 0x3ce,0x3c9,0x301,
+ 0x3d3,0x3d2,0x301,
+ 0x3d4,0x3d2,0x308,
+ 0x400,0x415,0x300,
+ 0x401,0x415,0x308,
+ 0x403,0x413,0x301,
+ 0x407,0x406,0x308,
+ 0x40c,0x41a,0x301,
+ 0x40d,0x418,0x300,
+ 0x40e,0x423,0x306,
+ 0x419,0x418,0x306,
+ 0x439,0x438,0x306,
+ 0x450,0x435,0x300,
+ 0x451,0x435,0x308,
+ 0x453,0x433,0x301,
+ 0x457,0x456,0x308,
+ 0x45c,0x43a,0x301,
+ 0x45d,0x438,0x300,
+ 0x45e,0x443,0x306,
+ 0x476,0x474,0x30f,
+ 0x477,0x475,0x30f,
+ 0x4c1,0x416,0x306,
+ 0x4c2,0x436,0x306,
+ 0x4d0,0x410,0x306,
+ 0x4d1,0x430,0x306,
+ 0x4d2,0x410,0x308,
+ 0x4d3,0x430,0x308,
+ 0x4d6,0x415,0x306,
+ 0x4d7,0x435,0x306,
+ 0x4da,0x4d8,0x308,
+ 0x4db,0x4d9,0x308,
+ 0x4dc,0x416,0x308,
+ 0x4dd,0x436,0x308,
+ 0x4de,0x417,0x308,
+ 0x4df,0x437,0x308,
+ 0x4e2,0x418,0x304,
+ 0x4e3,0x438,0x304,
+ 0x4e4,0x418,0x308,
+ 0x4e5,0x438,0x308,
+ 0x4e6,0x41e,0x308,
+ 0x4e7,0x43e,0x308,
+ 0x4ea,0x4e8,0x308,
+ 0x4eb,0x4e9,0x308,
+ 0x4ec,0x42d,0x308,
+ 0x4ed,0x44d,0x308,
+ 0x4ee,0x423,0x304,
+ 0x4ef,0x443,0x304,
+ 0x4f0,0x423,0x308,
+ 0x4f1,0x443,0x308,
+ 0x4f2,0x423,0x30b,
+ 0x4f3,0x443,0x30b,
+ 0x4f4,0x427,0x308,
+ 0x4f5,0x447,0x308,
+ 0x4f8,0x42b,0x308,
+ 0x4f9,0x44b,0x308,
+ 0x622,0x627,0x653,
+ 0x623,0x627,0x654,
+ 0x624,0x648,0x654,
+ 0x625,0x627,0x655,
+ 0x626,0x64a,0x654,
+ 0x6c0,0x6d5,0x654,
+ 0x6c2,0x6c1,0x654,
+ 0x6d3,0x6d2,0x654,
+ 0x929,0x928,0x93c,
+ 0x931,0x930,0x93c,
+ 0x934,0x933,0x93c,
+ 0x958,0x915,0x93c,
+ 0x959,0x916,0x93c,
+ 0x95a,0x917,0x93c,
+ 0x95b,0x91c,0x93c,
+ 0x95c,0x921,0x93c,
+ 0x95d,0x922,0x93c,
+ 0x95e,0x92b,0x93c,
+ 0x95f,0x92f,0x93c,
+ 0x9cb,0x9c7,0x9be,
+ 0x9cc,0x9c7,0x9d7,
+ 0x9dc,0x9a1,0x9bc,
+ 0x9dd,0x9a2,0x9bc,
+ 0x9df,0x9af,0x9bc,
+ 0xa33,0xa32,0xa3c,
+ 0xa36,0xa38,0xa3c,
+ 0xa59,0xa16,0xa3c,
+ 0xa5a,0xa17,0xa3c,
+ 0xa5b,0xa1c,0xa3c,
+ 0xa5e,0xa2b,0xa3c,
+ 0xb48,0xb47,0xb56,
+ 0xb4b,0xb47,0xb3e,
+ 0xb4c,0xb47,0xb57,
+ 0xb5c,0xb21,0xb3c,
+ 0xb5d,0xb22,0xb3c,
+ 0xb94,0xb92,0xbd7,
+ 0xbca,0xbc6,0xbbe,
+ 0xbcb,0xbc7,0xbbe,
+ 0xbcc,0xbc6,0xbd7,
+ 0xc48,0xc46,0xc56,
+ 0xcc0,0xcbf,0xcd5,
+ 0xcc7,0xcc6,0xcd5,
+ 0xcc8,0xcc6,0xcd6,
+ 0xcca,0xcc6,0xcc2,
+ 0xccb,0xcca,0xcd5,
+ 0xd4a,0xd46,0xd3e,
+ 0xd4b,0xd47,0xd3e,
+ 0xd4c,0xd46,0xd57,
+ 0xdda,0xdd9,0xdca,
+ 0xddc,0xdd9,0xdcf,
+ 0xddd,0xddc,0xdca,
+ 0xdde,0xdd9,0xddf,
+ 0xf43,0xf42,0xfb7,
+ 0xf4d,0xf4c,0xfb7,
+ 0xf52,0xf51,0xfb7,
+ 0xf57,0xf56,0xfb7,
+ 0xf5c,0xf5b,0xfb7,
+ 0xf69,0xf40,0xfb5,
+ 0xf73,0xf71,0xf72,
+ 0xf75,0xf71,0xf74,
+ 0xf76,0xfb2,0xf80,
+ 0xf78,0xfb3,0xf80,
+ 0xf81,0xf71,0xf80,
+ 0xf93,0xf92,0xfb7,
+ 0xf9d,0xf9c,0xfb7,
+ 0xfa2,0xfa1,0xfb7,
+ 0xfa7,0xfa6,0xfb7,
+ 0xfac,0xfab,0xfb7,
+ 0xfb9,0xf90,0xfb5,
+ 0x1026,0x1025,0x102e,
+ 0x1e00,0x41,0x325,
+ 0x1e01,0x61,0x325,
+ 0x1e02,0x42,0x307,
+ 0x1e03,0x62,0x307,
+ 0x1e04,0x42,0x323,
+ 0x1e05,0x62,0x323,
+ 0x1e06,0x42,0x331,
+ 0x1e07,0x62,0x331,
+ 0x1e08,0xc7,0x301,
+ 0x1e09,0xe7,0x301,
+ 0x1e0a,0x44,0x307,
+ 0x1e0b,0x64,0x307,
+ 0x1e0c,0x44,0x323,
+ 0x1e0d,0x64,0x323,
+ 0x1e0e,0x44,0x331,
+ 0x1e0f,0x64,0x331,
+ 0x1e10,0x44,0x327,
+ 0x1e11,0x64,0x327,
+ 0x1e12,0x44,0x32d,
+ 0x1e13,0x64,0x32d,
+ 0x1e14,0x112,0x300,
+ 0x1e15,0x113,0x300,
+ 0x1e16,0x112,0x301,
+ 0x1e17,0x113,0x301,
+ 0x1e18,0x45,0x32d,
+ 0x1e19,0x65,0x32d,
+ 0x1e1a,0x45,0x330,
+ 0x1e1b,0x65,0x330,
+ 0x1e1c,0x228,0x306,
+ 0x1e1d,0x229,0x306,
+ 0x1e1e,0x46,0x307,
+ 0x1e1f,0x66,0x307,
+ 0x1e20,0x47,0x304,
+ 0x1e21,0x67,0x304,
+ 0x1e22,0x48,0x307,
+ 0x1e23,0x68,0x307,
+ 0x1e24,0x48,0x323,
+ 0x1e25,0x68,0x323,
+ 0x1e26,0x48,0x308,
+ 0x1e27,0x68,0x308,
+ 0x1e28,0x48,0x327,
+ 0x1e29,0x68,0x327,
+ 0x1e2a,0x48,0x32e,
+ 0x1e2b,0x68,0x32e,
+ 0x1e2c,0x49,0x330,
+ 0x1e2d,0x69,0x330,
+ 0x1e2e,0xcf,0x301,
+ 0x1e2f,0xef,0x301,
+ 0x1e30,0x4b,0x301,
+ 0x1e31,0x6b,0x301,
+ 0x1e32,0x4b,0x323,
+ 0x1e33,0x6b,0x323,
+ 0x1e34,0x4b,0x331,
+ 0x1e35,0x6b,0x331,
+ 0x1e36,0x4c,0x323,
+ 0x1e37,0x6c,0x323,
+ 0x1e38,0x1e36,0x304,
+ 0x1e39,0x1e37,0x304,
+ 0x1e3a,0x4c,0x331,
+ 0x1e3b,0x6c,0x331,
+ 0x1e3c,0x4c,0x32d,
+ 0x1e3d,0x6c,0x32d,
+ 0x1e3e,0x4d,0x301,
+ 0x1e3f,0x6d,0x301,
+ 0x1e40,0x4d,0x307,
+ 0x1e41,0x6d,0x307,
+ 0x1e42,0x4d,0x323,
+ 0x1e43,0x6d,0x323,
+ 0x1e44,0x4e,0x307,
+ 0x1e45,0x6e,0x307,
+ 0x1e46,0x4e,0x323,
+ 0x1e47,0x6e,0x323,
+ 0x1e48,0x4e,0x331,
+ 0x1e49,0x6e,0x331,
+ 0x1e4a,0x4e,0x32d,
+ 0x1e4b,0x6e,0x32d,
+ 0x1e4c,0xd5,0x301,
+ 0x1e4d,0xf5,0x301,
+ 0x1e4e,0xd5,0x308,
+ 0x1e4f,0xf5,0x308,
+ 0x1e50,0x14c,0x300,
+ 0x1e51,0x14d,0x300,
+ 0x1e52,0x14c,0x301,
+ 0x1e53,0x14d,0x301,
+ 0x1e54,0x50,0x301,
+ 0x1e55,0x70,0x301,
+ 0x1e56,0x50,0x307,
+ 0x1e57,0x70,0x307,
+ 0x1e58,0x52,0x307,
+ 0x1e59,0x72,0x307,
+ 0x1e5a,0x52,0x323,
+ 0x1e5b,0x72,0x323,
+ 0x1e5c,0x1e5a,0x304,
+ 0x1e5d,0x1e5b,0x304,
+ 0x1e5e,0x52,0x331,
+ 0x1e5f,0x72,0x331,
+ 0x1e60,0x53,0x307,
+ 0x1e61,0x73,0x307,
+ 0x1e62,0x53,0x323,
+ 0x1e63,0x73,0x323,
+ 0x1e64,0x15a,0x307,
+ 0x1e65,0x15b,0x307,
+ 0x1e66,0x160,0x307,
+ 0x1e67,0x161,0x307,
+ 0x1e68,0x1e62,0x307,
+ 0x1e69,0x1e63,0x307,
+ 0x1e6a,0x54,0x307,
+ 0x1e6b,0x74,0x307,
+ 0x1e6c,0x54,0x323,
+ 0x1e6d,0x74,0x323,
+ 0x1e6e,0x54,0x331,
+ 0x1e6f,0x74,0x331,
+ 0x1e70,0x54,0x32d,
+ 0x1e71,0x74,0x32d,
+ 0x1e72,0x55,0x324,
+ 0x1e73,0x75,0x324,
+ 0x1e74,0x55,0x330,
+ 0x1e75,0x75,0x330,
+ 0x1e76,0x55,0x32d,
+ 0x1e77,0x75,0x32d,
+ 0x1e78,0x168,0x301,
+ 0x1e79,0x169,0x301,
+ 0x1e7a,0x16a,0x308,
+ 0x1e7b,0x16b,0x308,
+ 0x1e7c,0x56,0x303,
+ 0x1e7d,0x76,0x303,
+ 0x1e7e,0x56,0x323,
+ 0x1e7f,0x76,0x323,
+ 0x1e80,0x57,0x300,
+ 0x1e81,0x77,0x300,
+ 0x1e82,0x57,0x301,
+ 0x1e83,0x77,0x301,
+ 0x1e84,0x57,0x308,
+ 0x1e85,0x77,0x308,
+ 0x1e86,0x57,0x307,
+ 0x1e87,0x77,0x307,
+ 0x1e88,0x57,0x323,
+ 0x1e89,0x77,0x323,
+ 0x1e8a,0x58,0x307,
+ 0x1e8b,0x78,0x307,
+ 0x1e8c,0x58,0x308,
+ 0x1e8d,0x78,0x308,
+ 0x1e8e,0x59,0x307,
+ 0x1e8f,0x79,0x307,
+ 0x1e90,0x5a,0x302,
+ 0x1e91,0x7a,0x302,
+ 0x1e92,0x5a,0x323,
+ 0x1e93,0x7a,0x323,
+ 0x1e94,0x5a,0x331,
+ 0x1e95,0x7a,0x331,
+ 0x1e96,0x68,0x331,
+ 0x1e97,0x74,0x308,
+ 0x1e98,0x77,0x30a,
+ 0x1e99,0x79,0x30a,
+ 0x1e9b,0x17f,0x307,
+ 0x1ea0,0x41,0x323,
+ 0x1ea1,0x61,0x323,
+ 0x1ea2,0x41,0x309,
+ 0x1ea3,0x61,0x309,
+ 0x1ea4,0xc2,0x301,
+ 0x1ea5,0xe2,0x301,
+ 0x1ea6,0xc2,0x300,
+ 0x1ea7,0xe2,0x300,
+ 0x1ea8,0xc2,0x309,
+ 0x1ea9,0xe2,0x309,
+ 0x1eaa,0xc2,0x303,
+ 0x1eab,0xe2,0x303,
+ 0x1eac,0x1ea0,0x302,
+ 0x1ead,0x1ea1,0x302,
+ 0x1eae,0x102,0x301,
+ 0x1eaf,0x103,0x301,
+ 0x1eb0,0x102,0x300,
+ 0x1eb1,0x103,0x300,
+ 0x1eb2,0x102,0x309,
+ 0x1eb3,0x103,0x309,
+ 0x1eb4,0x102,0x303,
+ 0x1eb5,0x103,0x303,
+ 0x1eb6,0x1ea0,0x306,
+ 0x1eb7,0x1ea1,0x306,
+ 0x1eb8,0x45,0x323,
+ 0x1eb9,0x65,0x323,
+ 0x1eba,0x45,0x309,
+ 0x1ebb,0x65,0x309,
+ 0x1ebc,0x45,0x303,
+ 0x1ebd,0x65,0x303,
+ 0x1ebe,0xca,0x301,
+ 0x1ebf,0xea,0x301,
+ 0x1ec0,0xca,0x300,
+ 0x1ec1,0xea,0x300,
+ 0x1ec2,0xca,0x309,
+ 0x1ec3,0xea,0x309,
+ 0x1ec4,0xca,0x303,
+ 0x1ec5,0xea,0x303,
+ 0x1ec6,0x1eb8,0x302,
+ 0x1ec7,0x1eb9,0x302,
+ 0x1ec8,0x49,0x309,
+ 0x1ec9,0x69,0x309,
+ 0x1eca,0x49,0x323,
+ 0x1ecb,0x69,0x323,
+ 0x1ecc,0x4f,0x323,
+ 0x1ecd,0x6f,0x323,
+ 0x1ece,0x4f,0x309,
+ 0x1ecf,0x6f,0x309,
+ 0x1ed0,0xd4,0x301,
+ 0x1ed1,0xf4,0x301,
+ 0x1ed2,0xd4,0x300,
+ 0x1ed3,0xf4,0x300,
+ 0x1ed4,0xd4,0x309,
+ 0x1ed5,0xf4,0x309,
+ 0x1ed6,0xd4,0x303,
+ 0x1ed7,0xf4,0x303,
+ 0x1ed8,0x1ecc,0x302,
+ 0x1ed9,0x1ecd,0x302,
+ 0x1eda,0x1a0,0x301,
+ 0x1edb,0x1a1,0x301,
+ 0x1edc,0x1a0,0x300,
+ 0x1edd,0x1a1,0x300,
+ 0x1ede,0x1a0,0x309,
+ 0x1edf,0x1a1,0x309,
+ 0x1ee0,0x1a0,0x303,
+ 0x1ee1,0x1a1,0x303,
+ 0x1ee2,0x1a0,0x323,
+ 0x1ee3,0x1a1,0x323,
+ 0x1ee4,0x55,0x323,
+ 0x1ee5,0x75,0x323,
+ 0x1ee6,0x55,0x309,
+ 0x1ee7,0x75,0x309,
+ 0x1ee8,0x1af,0x301,
+ 0x1ee9,0x1b0,0x301,
+ 0x1eea,0x1af,0x300,
+ 0x1eeb,0x1b0,0x300,
+ 0x1eec,0x1af,0x309,
+ 0x1eed,0x1b0,0x309,
+ 0x1eee,0x1af,0x303,
+ 0x1eef,0x1b0,0x303,
+ 0x1ef0,0x1af,0x323,
+ 0x1ef1,0x1b0,0x323,
+ 0x1ef2,0x59,0x300,
+ 0x1ef3,0x79,0x300,
+ 0x1ef4,0x59,0x323,
+ 0x1ef5,0x79,0x323,
+ 0x1ef6,0x59,0x309,
+ 0x1ef7,0x79,0x309,
+ 0x1ef8,0x59,0x303,
+ 0x1ef9,0x79,0x303,
+ 0x1f00,0x3b1,0x313,
+ 0x1f01,0x3b1,0x314,
+ 0x1f02,0x1f00,0x300,
+ 0x1f03,0x1f01,0x300,
+ 0x1f04,0x1f00,0x301,
+ 0x1f05,0x1f01,0x301,
+ 0x1f06,0x1f00,0x342,
+ 0x1f07,0x1f01,0x342,
+ 0x1f08,0x391,0x313,
+ 0x1f09,0x391,0x314,
+ 0x1f0a,0x1f08,0x300,
+ 0x1f0b,0x1f09,0x300,
+ 0x1f0c,0x1f08,0x301,
+ 0x1f0d,0x1f09,0x301,
+ 0x1f0e,0x1f08,0x342,
+ 0x1f0f,0x1f09,0x342,
+ 0x1f10,0x3b5,0x313,
+ 0x1f11,0x3b5,0x314,
+ 0x1f12,0x1f10,0x300,
+ 0x1f13,0x1f11,0x300,
+ 0x1f14,0x1f10,0x301,
+ 0x1f15,0x1f11,0x301,
+ 0x1f18,0x395,0x313,
+ 0x1f19,0x395,0x314,
+ 0x1f1a,0x1f18,0x300,
+ 0x1f1b,0x1f19,0x300,
+ 0x1f1c,0x1f18,0x301,
+ 0x1f1d,0x1f19,0x301,
+ 0x1f20,0x3b7,0x313,
+ 0x1f21,0x3b7,0x314,
+ 0x1f22,0x1f20,0x300,
+ 0x1f23,0x1f21,0x300,
+ 0x1f24,0x1f20,0x301,
+ 0x1f25,0x1f21,0x301,
+ 0x1f26,0x1f20,0x342,
+ 0x1f27,0x1f21,0x342,
+ 0x1f28,0x397,0x313,
+ 0x1f29,0x397,0x314,
+ 0x1f2a,0x1f28,0x300,
+ 0x1f2b,0x1f29,0x300,
+ 0x1f2c,0x1f28,0x301,
+ 0x1f2d,0x1f29,0x301,
+ 0x1f2e,0x1f28,0x342,
+ 0x1f2f,0x1f29,0x342,
+ 0x1f30,0x3b9,0x313,
+ 0x1f31,0x3b9,0x314,
+ 0x1f32,0x1f30,0x300,
+ 0x1f33,0x1f31,0x300,
+ 0x1f34,0x1f30,0x301,
+ 0x1f35,0x1f31,0x301,
+ 0x1f36,0x1f30,0x342,
+ 0x1f37,0x1f31,0x342,
+ 0x1f38,0x399,0x313,
+ 0x1f39,0x399,0x314,
+ 0x1f3a,0x1f38,0x300,
+ 0x1f3b,0x1f39,0x300,
+ 0x1f3c,0x1f38,0x301,
+ 0x1f3d,0x1f39,0x301,
+ 0x1f3e,0x1f38,0x342,
+ 0x1f3f,0x1f39,0x342,
+ 0x1f40,0x3bf,0x313,
+ 0x1f41,0x3bf,0x314,
+ 0x1f42,0x1f40,0x300,
+ 0x1f43,0x1f41,0x300,
+ 0x1f44,0x1f40,0x301,
+ 0x1f45,0x1f41,0x301,
+ 0x1f48,0x39f,0x313,
+ 0x1f49,0x39f,0x314,
+ 0x1f4a,0x1f48,0x300,
+ 0x1f4b,0x1f49,0x300,
+ 0x1f4c,0x1f48,0x301,
+ 0x1f4d,0x1f49,0x301,
+ 0x1f50,0x3c5,0x313,
+ 0x1f51,0x3c5,0x314,
+ 0x1f52,0x1f50,0x300,
+ 0x1f53,0x1f51,0x300,
+ 0x1f54,0x1f50,0x301,
+ 0x1f55,0x1f51,0x301,
+ 0x1f56,0x1f50,0x342,
+ 0x1f57,0x1f51,0x342,
+ 0x1f59,0x3a5,0x314,
+ 0x1f5b,0x1f59,0x300,
+ 0x1f5d,0x1f59,0x301,
+ 0x1f5f,0x1f59,0x342,
+ 0x1f60,0x3c9,0x313,
+ 0x1f61,0x3c9,0x314,
+ 0x1f62,0x1f60,0x300,
+ 0x1f63,0x1f61,0x300,
+ 0x1f64,0x1f60,0x301,
+ 0x1f65,0x1f61,0x301,
+ 0x1f66,0x1f60,0x342,
+ 0x1f67,0x1f61,0x342,
+ 0x1f68,0x3a9,0x313,
+ 0x1f69,0x3a9,0x314,
+ 0x1f6a,0x1f68,0x300,
+ 0x1f6b,0x1f69,0x300,
+ 0x1f6c,0x1f68,0x301,
+ 0x1f6d,0x1f69,0x301,
+ 0x1f6e,0x1f68,0x342,
+ 0x1f6f,0x1f69,0x342,
+ 0x1f70,0x3b1,0x300,
+ 0x1f72,0x3b5,0x300,
+ 0x1f74,0x3b7,0x300,
+ 0x1f76,0x3b9,0x300,
+ 0x1f78,0x3bf,0x300,
+ 0x1f7a,0x3c5,0x300,
+ 0x1f7c,0x3c9,0x300,
+ 0x1f80,0x1f00,0x345,
+ 0x1f81,0x1f01,0x345,
+ 0x1f82,0x1f02,0x345,
+ 0x1f83,0x1f03,0x345,
+ 0x1f84,0x1f04,0x345,
+ 0x1f85,0x1f05,0x345,
+ 0x1f86,0x1f06,0x345,
+ 0x1f87,0x1f07,0x345,
+ 0x1f88,0x1f08,0x345,
+ 0x1f89,0x1f09,0x345,
+ 0x1f8a,0x1f0a,0x345,
+ 0x1f8b,0x1f0b,0x345,
+ 0x1f8c,0x1f0c,0x345,
+ 0x1f8d,0x1f0d,0x345,
+ 0x1f8e,0x1f0e,0x345,
+ 0x1f8f,0x1f0f,0x345,
+ 0x1f90,0x1f20,0x345,
+ 0x1f91,0x1f21,0x345,
+ 0x1f92,0x1f22,0x345,
+ 0x1f93,0x1f23,0x345,
+ 0x1f94,0x1f24,0x345,
+ 0x1f95,0x1f25,0x345,
+ 0x1f96,0x1f26,0x345,
+ 0x1f97,0x1f27,0x345,
+ 0x1f98,0x1f28,0x345,
+ 0x1f99,0x1f29,0x345,
+ 0x1f9a,0x1f2a,0x345,
+ 0x1f9b,0x1f2b,0x345,
+ 0x1f9c,0x1f2c,0x345,
+ 0x1f9d,0x1f2d,0x345,
+ 0x1f9e,0x1f2e,0x345,
+ 0x1f9f,0x1f2f,0x345,
+ 0x1fa0,0x1f60,0x345,
+ 0x1fa1,0x1f61,0x345,
+ 0x1fa2,0x1f62,0x345,
+ 0x1fa3,0x1f63,0x345,
+ 0x1fa4,0x1f64,0x345,
+ 0x1fa5,0x1f65,0x345,
+ 0x1fa6,0x1f66,0x345,
+ 0x1fa7,0x1f67,0x345,
+ 0x1fa8,0x1f68,0x345,
+ 0x1fa9,0x1f69,0x345,
+ 0x1faa,0x1f6a,0x345,
+ 0x1fab,0x1f6b,0x345,
+ 0x1fac,0x1f6c,0x345,
+ 0x1fad,0x1f6d,0x345,
+ 0x1fae,0x1f6e,0x345,
+ 0x1faf,0x1f6f,0x345,
+ 0x1fb0,0x3b1,0x306,
+ 0x1fb1,0x3b1,0x304,
+ 0x1fb2,0x1f70,0x345,
+ 0x1fb3,0x3b1,0x345,
+ 0x1fb4,0x3ac,0x345,
+ 0x1fb6,0x3b1,0x342,
+ 0x1fb7,0x1fb6,0x345,
+ 0x1fb8,0x391,0x306,
+ 0x1fb9,0x391,0x304,
+ 0x1fba,0x391,0x300,
+ 0x1fbc,0x391,0x345,
+ 0x1fc1,0xa8,0x342,
+ 0x1fc2,0x1f74,0x345,
+ 0x1fc3,0x3b7,0x345,
+ 0x1fc4,0x3ae,0x345,
+ 0x1fc6,0x3b7,0x342,
+ 0x1fc7,0x1fc6,0x345,
+ 0x1fc8,0x395,0x300,
+ 0x1fca,0x397,0x300,
+ 0x1fcc,0x397,0x345,
+ 0x1fcd,0x1fbf,0x300,
+ 0x1fce,0x1fbf,0x301,
+ 0x1fcf,0x1fbf,0x342,
+ 0x1fd0,0x3b9,0x306,
+ 0x1fd1,0x3b9,0x304,
+ 0x1fd2,0x3ca,0x300,
+ 0x1fd6,0x3b9,0x342,
+ 0x1fd7,0x3ca,0x342,
+ 0x1fd8,0x399,0x306,
+ 0x1fd9,0x399,0x304,
+ 0x1fda,0x399,0x300,
+ 0x1fdd,0x1ffe,0x300,
+ 0x1fde,0x1ffe,0x301,
+ 0x1fdf,0x1ffe,0x342,
+ 0x1fe0,0x3c5,0x306,
+ 0x1fe1,0x3c5,0x304,
+ 0x1fe2,0x3cb,0x300,
+ 0x1fe4,0x3c1,0x313,
+ 0x1fe5,0x3c1,0x314,
+ 0x1fe6,0x3c5,0x342,
+ 0x1fe7,0x3cb,0x342,
+ 0x1fe8,0x3a5,0x306,
+ 0x1fe9,0x3a5,0x304,
+ 0x1fea,0x3a5,0x300,
+ 0x1fec,0x3a1,0x314,
+ 0x1fed,0xa8,0x300,
+ 0x1ff2,0x1f7c,0x345,
+ 0x1ff3,0x3c9,0x345,
+ 0x1ff4,0x3ce,0x345,
+ 0x1ff6,0x3c9,0x342,
+ 0x1ff7,0x1ff6,0x345,
+ 0x1ff8,0x39f,0x300,
+ 0x1ffa,0x3a9,0x300,
+ 0x1ffc,0x3a9,0x345,
+ 0x219a,0x2190,0x338,
+ 0x219b,0x2192,0x338,
+ 0x21ae,0x2194,0x338,
+ 0x21cd,0x21d0,0x338,
+ 0x21ce,0x21d4,0x338,
+ 0x21cf,0x21d2,0x338,
+ 0x2204,0x2203,0x338,
+ 0x2209,0x2208,0x338,
+ 0x220c,0x220b,0x338,
+ 0x2224,0x2223,0x338,
+ 0x2226,0x2225,0x338,
+ 0x2241,0x223c,0x338,
+ 0x2244,0x2243,0x338,
+ 0x2247,0x2245,0x338,
+ 0x2249,0x2248,0x338,
+ 0x2260,0x3d,0x338,
+ 0x2262,0x2261,0x338,
+ 0x226d,0x224d,0x338,
+ 0x226e,0x3c,0x338,
+ 0x226f,0x3e,0x338,
+ 0x2270,0x2264,0x338,
+ 0x2271,0x2265,0x338,
+ 0x2274,0x2272,0x338,
+ 0x2275,0x2273,0x338,
+ 0x2278,0x2276,0x338,
+ 0x2279,0x2277,0x338,
+ 0x2280,0x227a,0x338,
+ 0x2281,0x227b,0x338,
+ 0x2284,0x2282,0x338,
+ 0x2285,0x2283,0x338,
+ 0x2288,0x2286,0x338,
+ 0x2289,0x2287,0x338,
+ 0x22ac,0x22a2,0x338,
+ 0x22ad,0x22a8,0x338,
+ 0x22ae,0x22a9,0x338,
+ 0x22af,0x22ab,0x338,
+ 0x22e0,0x227c,0x338,
+ 0x22e1,0x227d,0x338,
+ 0x22e2,0x2291,0x338,
+ 0x22e3,0x2292,0x338,
+ 0x22ea,0x22b2,0x338,
+ 0x22eb,0x22b3,0x338,
+ 0x22ec,0x22b4,0x338,
+ 0x22ed,0x22b5,0x338,
+ 0x2adc,0x2add,0x338,
+ 0x304c,0x304b,0x3099,
+ 0x304e,0x304d,0x3099,
+ 0x3050,0x304f,0x3099,
+ 0x3052,0x3051,0x3099,
+ 0x3054,0x3053,0x3099,
+ 0x3056,0x3055,0x3099,
+ 0x3058,0x3057,0x3099,
+ 0x305a,0x3059,0x3099,
+ 0x305c,0x305b,0x3099,
+ 0x305e,0x305d,0x3099,
+ 0x3060,0x305f,0x3099,
+ 0x3062,0x3061,0x3099,
+ 0x3065,0x3064,0x3099,
+ 0x3067,0x3066,0x3099,
+ 0x3069,0x3068,0x3099,
+ 0x3070,0x306f,0x3099,
+ 0x3071,0x306f,0x309a,
+ 0x3073,0x3072,0x3099,
+ 0x3074,0x3072,0x309a,
+ 0x3076,0x3075,0x3099,
+ 0x3077,0x3075,0x309a,
+ 0x3079,0x3078,0x3099,
+ 0x307a,0x3078,0x309a,
+ 0x307c,0x307b,0x3099,
+ 0x307d,0x307b,0x309a,
+ 0x3094,0x3046,0x3099,
+ 0x309e,0x309d,0x3099,
+ 0x30ac,0x30ab,0x3099,
+ 0x30ae,0x30ad,0x3099,
+ 0x30b0,0x30af,0x3099,
+ 0x30b2,0x30b1,0x3099,
+ 0x30b4,0x30b3,0x3099,
+ 0x30b6,0x30b5,0x3099,
+ 0x30b8,0x30b7,0x3099,
+ 0x30ba,0x30b9,0x3099,
+ 0x30bc,0x30bb,0x3099,
+ 0x30be,0x30bd,0x3099,
+ 0x30c0,0x30bf,0x3099,
+ 0x30c2,0x30c1,0x3099,
+ 0x30c5,0x30c4,0x3099,
+ 0x30c7,0x30c6,0x3099,
+ 0x30c9,0x30c8,0x3099,
+ 0x30d0,0x30cf,0x3099,
+ 0x30d1,0x30cf,0x309a,
+ 0x30d3,0x30d2,0x3099,
+ 0x30d4,0x30d2,0x309a,
+ 0x30d6,0x30d5,0x3099,
+ 0x30d7,0x30d5,0x309a,
+ 0x30d9,0x30d8,0x3099,
+ 0x30da,0x30d8,0x309a,
+ 0x30dc,0x30db,0x3099,
+ 0x30dd,0x30db,0x309a,
+ 0x30f4,0x30a6,0x3099,
+ 0x30f7,0x30ef,0x3099,
+ 0x30f8,0x30f0,0x3099,
+ 0x30f9,0x30f1,0x3099,
+ 0x30fa,0x30f2,0x3099,
+ 0x30fe,0x30fd,0x3099,
+ 0xfb1d,0x5d9,0x5b4,
+ 0xfb1f,0x5f2,0x5b7,
+ 0xfb2a,0x5e9,0x5c1,
+ 0xfb2b,0x5e9,0x5c2,
+ 0xfb2c,0xfb49,0x5c1,
+ 0xfb2d,0xfb49,0x5c2,
+ 0xfb2e,0x5d0,0x5b7,
+ 0xfb2f,0x5d0,0x5b8,
+ 0xfb30,0x5d0,0x5bc,
+ 0xfb31,0x5d1,0x5bc,
+ 0xfb32,0x5d2,0x5bc,
+ 0xfb33,0x5d3,0x5bc,
+ 0xfb34,0x5d4,0x5bc,
+ 0xfb35,0x5d5,0x5bc,
+ 0xfb36,0x5d6,0x5bc,
+ 0xfb38,0x5d8,0x5bc,
+ 0xfb39,0x5d9,0x5bc,
+ 0xfb3a,0x5da,0x5bc,
+ 0xfb3b,0x5db,0x5bc,
+ 0xfb3c,0x5dc,0x5bc,
+ 0xfb3e,0x5de,0x5bc,
+ 0xfb40,0x5e0,0x5bc,
+ 0xfb41,0x5e1,0x5bc,
+ 0xfb43,0x5e3,0x5bc,
+ 0xfb44,0x5e4,0x5bc,
+ 0xfb46,0x5e6,0x5bc,
+ 0xfb47,0x5e7,0x5bc,
+ 0xfb48,0x5e8,0x5bc,
+ 0xfb49,0x5e9,0x5bc,
+ 0xfb4a,0x5ea,0x5bc,
+ 0xfb4b,0x5d5,0x5b9,
+ 0xfb4c,0x5d1,0x5bf,
+ 0xfb4d,0x5db,0x5bf,
+ 0xfb4e,0x5e4,0x5bf,
+ 0
+};
+static const uint32_t page_000[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0x3e7effbf,
+ 0xbe7effbf,
+};
+static const uint32_t page_001[] = {
+ 0xfffcffff,
+ 0x7ef1ff3f,
+ 0xfff3f1f8,
+ 0x7fffff3f,
+ 0,
+ 0x18003,
+ 0xdfffe000,
+ 0xff31ffcf,
+};
+static const uint32_t page_002[] = {
+ 0xcfffffff,
+ 0xfffc0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+};
+static const uint32_t page_003[] = {
+ 0,
+ 0,
+ 0x10,
+ 0,
+ 0x1d760,
+ 0x1fc00,
+ 0x187c00,
+ 0,
+};
+static const uint32_t page_004[] = {
+ 0x200708b,
+ 0x2000000,
+ 0x708b0000,
+ 0xc00000,
+ 0,
+ 0,
+ 0xfccf0006,
+ 0x33ffcfc,
+};
+static const uint32_t page_006[] = {
+ 0,
+ 0x7c,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0x80005,
+ 0,
+};
+static const uint32_t page_009[] = {
+ 0,
+ 0x120200,
+ 0xff000000,
+ 0,
+ 0,
+ 0,
+ 0xb0001800,
+ 0,
+};
+static const uint32_t page_00a[] = {
+ 0,
+ 0x480000,
+ 0x4e000000,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+};
+static const uint32_t page_00b[] = {
+ 0,
+ 0,
+ 0x30001900,
+ 0,
+ 0x100000,
+ 0,
+ 0x1c00,
+ 0,
+};
+static const uint32_t page_00c[] = {
+ 0,
+ 0,
+ 0x100,
+ 0,
+ 0,
+ 0,
+ 0xd81,
+ 0,
+};
+static const uint32_t page_00d[] = {
+ 0,
+ 0,
+ 0x1c00,
+ 0,
+ 0,
+ 0,
+ 0x74000000,
+ 0,
+};
+static const uint32_t page_00f[] = {
+ 0,
+ 0,
+ 0x10842008,
+ 0x1680200,
+ 0x20080002,
+ 0x2001084,
+ 0,
+ 0,
+};
+static const uint32_t page_010[] = {
+ 0,
+ 0x40,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+};
+static const uint32_t page_01e[] = {
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xbffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0x3ffffff,
+};
+static const uint32_t page_01f[] = {
+ 0x3f3fffff,
+ 0xffffffff,
+ 0xaaff3f3f,
+ 0x1555ffff,
+ 0xffffffff,
+ 0x17dfffff,
+ 0xe7c7f5de,
+ 0x15dc37f7,
+};
+static const uint32_t page_021[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 0xc000000,
+ 0x4000,
+ 0xe000,
+ 0,
+};
+static const uint32_t page_022[] = {
+ 0x1210,
+ 0x50,
+ 0x292,
+ 0x333e005,
+ 0x333,
+ 0xf000,
+ 0,
+ 0x3c0f,
+};
+static const uint32_t page_02a[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0x10000000,
+ 0,
+};
+static const uint32_t page_030[] = {
+ 0,
+ 0,
+ 0x55555000,
+ 0x36db02a5,
+ 0x40100000,
+ 0x55555000,
+ 0x36db02a5,
+ 0x47900000,
+};
+static const uint32_t page_0fb[] = {
+ 0xa0000000,
+ 0x5f7ffc00,
+ 0x7fdb,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+};
+static const uint32_t *pages[] = {
+ page_000,
+ page_001,
+ page_002,
+ page_003,
+ page_004,
+ NULL,
+ page_006,
+ NULL,
+ NULL,
+ page_009,
+ page_00a,
+ page_00b,
+ page_00c,
+ page_00d,
+ NULL,
+ page_00f,
+ page_010,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ page_01e,
+ page_01f,
+ NULL,
+ page_021,
+ page_022,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ page_02a,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ page_030,
+};
+
+
+int uu_decompose_char(unsigned c, unsigned *d, unsigned max)
+{
+ unsigned p;
+ const uint32_t *page;
+
+ if (!max) return 0;
+
+ if (c-0xac00 <= 0xd7a3-0xac00) { /* hangul */
+ int i = 1;
+ c -= 0xac00;
+ d[0] = 0x1100 + c/588;
+ if (--max) d[i++] = 0x1161 + (c%588)/28;
+ if (c % 28 && --max) d[i++] = 0x11a7 + (c%28);
+ return i;
+ }
+
+ p = c>>8;
+ if (p == 0xfb) page = page_0fb;
+ else if (p <= 0x30) page = pages[p];
+ else page = NULL;
+
+ if (page && (page[c>>5 & 7] & 1<<(c&31))) {
+ /* fixme: do binary search instead of linear.. */
+ const unsigned short *tab;
+ for (tab=decomp; *tab && *tab != c; tab+=3);
+ if (*tab++) {
+ int len = uu_decompose_char(*tab++, d, max);
+ d += len; max -= len;
+ return len + uu_decompose_char(*tab, d, max);
+ }
+ }
+ *d = c;
+ return 1;
+}
diff --git a/refresh.c b/refresh.c
index ef9aa7f..7410866 100644
--- a/refresh.c
+++ b/refresh.c
@@ -3,19 +3,21 @@
#include "uuterm.h"
#include "ucf.h"
-static void extract_cell(unsigned *ch, struct uucell *cell)
+static void extract_cell(unsigned *ch, size_t max, struct uucell *cell)
{
- int i;
+ int i, l;
unsigned b;
for (b=i=0; i<3; i++) b |= cell->c[i] << 8*i;
- ch[0] = b;
- ch -= 2;
- for (; i<sizeof(cell->c)+1 && cell->c[i]; i++)
- ch[i] = uu_combine_involution(b, cell->c[i]);
- if (cell->a & UU_ATTR_UL)
- ch[i++] = '_'; //0x0332;
- for (; i<sizeof(cell->c)+1; i++)
- ch[i] = 0;
+ l = uu_decompose_char(b, ch, max);
+ ch += l; max -= l;
+ for (; i<sizeof(cell->c) && cell->c[i]; i++) {
+ l = uu_decompose_char(uu_combine_involution(b, cell->c[i]), ch, max);
+ ch += l; max -= l;
+ }
+ if ((cell->a & UU_ATTR_UL) && max)
+ max--, *ch++ = '_'; //0x0332;
+ for (; max; max--) *ch++ = 0;
+ ch[-1] = 0;
}
const void *ascii_get_glyph(unsigned);
@@ -30,18 +32,19 @@ static const void *lookup_glyph(struct ucf *f, int i, unsigned *this, unsigned *
return 0;
}
+#define CH_LEN 16
void uuterm_refresh_row(struct uudisp *d, struct uurow *row, int x1, int x2)
{
- unsigned ch[4][sizeof(row->cells[0].c)+1], *chp;
+ unsigned ch[4][CH_LEN], *chp;
int x, i;
int width, part;
- if (x1) extract_cell(ch[(x1-1)&3], &row->cells[x1-1]);
+ if (x1) extract_cell(ch[(x1-1)&3], CH_LEN, &row->cells[x1-1]);
else memset(ch[3], 0, sizeof(ch[3]));
- extract_cell(ch[x1&3], &row->cells[x1]);
+ extract_cell(ch[x1&3], CH_LEN, &row->cells[x1]);
for (x=x1; x<=x2; x++) {
- extract_cell(ch[(x+1)&3], &row->cells[x+1]);
+ extract_cell(ch[(x+1)&3], CH_LEN, &row->cells[x+1]);
if (ch[x&3][0] == UU_FULLWIDTH) {
width = 2; part = 0; chp = ch[(x+1)&3];
} else if (ch[(x+3)&3][0] == UU_FULLWIDTH) {
diff --git a/uuterm.h b/uuterm.h
index 81c4baf..6bda258 100644
--- a/uuterm.h
+++ b/uuterm.h
@@ -85,6 +85,7 @@ void uuterm_stuff_byte(struct uuterm *, unsigned char);
void uuterm_refresh_row(struct uudisp *, struct uurow *, int, int);
int uu_combine_involution(unsigned, unsigned);
+int uu_decompose_char(unsigned, unsigned *, unsigned);
int uudisp_open(struct uudisp *);
int uudisp_fd_set(struct uudisp *, int, void *);