From: Ben Harris Date: Sun, 20 Oct 2024 17:10:52 +0000 (+0100) Subject: Make line-drawing characters join up X-Git-Tag: bedstead-3.246~5^2~4 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~bjharris/git?a=commitdiff_plain;h=013500fc79314429d235eca1d73f3def58de76b5;p=bedstead.git Make line-drawing characters join up This is done my duplicating the top row of pixels upwards and the left column leftwards. This is analogous to what MDA and other IBMish adaptors do to expand eight-pixel wide characters to nine pixels on screen. --- diff --git a/bedstead.c b/bedstead.c index f30bac9..8ab8dcc 100644 --- a/bedstead.c +++ b/bedstead.c @@ -211,6 +211,7 @@ static struct glyph { #define SEP6 (SEP | MOS6) #define SEP4 (SEP | MOS4) #define IS_ALIAS 0x08 +#define LINE 0x10 } glyphs[] = { /* * The first batch of glyphs comes from the code tables at the end of @@ -1901,129 +1902,129 @@ static struct glyph { {"\16\21\10\04\04\00\04\00\00", U(2426) }, /* pictorial SUB */ /* Box drawing */ - {"\00\00\00\00\37\00\00\00\00", 0x2500, "SF100000" }, - {"\00\00\00\37\37\37\00\00\00", U(2501) }, - {"\04\04\04\04\04\04\04\04\04", 0x2502, "SF110000" }, - {"\16\16\16\16\16\16\16\16\16", U(2503) }, + {"\00\00\00\00\37\00\00\00\00", 0x2500, "SF100000", LINE }, + {"\00\00\00\37\37\37\00\00\00", U(2501), LINE }, + {"\04\04\04\04\04\04\04\04\04", 0x2502, "SF110000", LINE }, + {"\16\16\16\16\16\16\16\16\16", U(2503), LINE }, {"\00\00\00\00\25\00\00\00\00", U(2504) }, {"\00\00\00\25\25\25\00\00\00", U(2505) }, {"\04\04\00\04\04\04\00\04\04", U(2506) }, {"\16\16\00\16\16\16\00\16\16", U(2507) }, {"\04\00\04\04\00\04\00\04\04", U(250A) }, {"\16\00\16\16\00\16\00\16\16", U(250B) }, - {"\00\00\00\00\07\04\04\04\04", 0x250c, "SF010000" }, - {"\00\00\00\07\07\07\04\04\04", U(250D) }, - {"\00\00\00\00\17\16\16\16\16", U(250E) }, - {"\00\00\00\17\17\17\16\16\16", U(250F) }, - {"\00\00\00\00\34\04\04\04\04", 0x2510, "SF030000" }, - {"\00\00\00\34\34\34\04\04\04", U(2511) }, - {"\00\00\00\00\36\16\16\16\16", U(2512) }, - {"\00\00\00\36\36\36\16\16\16", U(2513) }, - {"\04\04\04\04\07\00\00\00\00", 0x2514, "SF020000" }, - {"\04\04\04\07\07\07\00\00\00", U(2515) }, - {"\16\16\16\16\17\00\00\00\00", U(2516) }, - {"\16\16\16\17\17\17\00\00\00", U(2517) }, - {"\04\04\04\04\34\00\00\00\00", 0x2518, "SF040000" }, - {"\04\04\04\34\34\34\00\00\00", U(2519) }, - {"\16\16\16\16\36\00\00\00\00", U(251A) }, - {"\16\16\16\36\36\36\00\00\00", U(251B) }, - {"\04\04\04\04\07\04\04\04\04", 0x251c, "SF080000" }, - {"\04\04\04\07\07\07\04\04\04", U(251D) }, - {"\16\16\16\16\17\04\04\04\04", U(251E) }, - {"\04\04\04\04\17\16\16\16\16", U(251F) }, - {"\16\16\16\16\17\16\16\16\16", U(2520) }, - {"\16\16\16\17\17\17\04\04\04", U(2521) }, - {"\04\04\04\17\17\17\16\16\16", U(2522) }, - {"\16\16\16\17\17\17\16\16\16", U(2523) }, - {"\04\04\04\04\34\04\04\04\04", 0x2524, "SF090000" }, - {"\04\04\04\34\34\34\04\04\04", U(2525) }, - {"\16\16\16\16\36\04\04\04\04", U(2526) }, - {"\04\04\04\04\36\16\16\16\16", U(2527) }, - {"\16\16\16\16\36\16\16\16\16", U(2528) }, - {"\16\16\16\36\36\36\04\04\04", U(2529) }, - {"\04\04\04\36\36\36\16\16\16", U(252A) }, - {"\16\16\16\36\36\36\16\16\16", U(252B) }, - {"\00\00\00\00\37\04\04\04\04", 0x252c, "SF060000" }, - {"\00\00\00\34\37\34\04\04\04", U(252D) }, - {"\00\00\00\07\37\07\04\04\04", U(252E) }, - {"\00\00\00\37\37\37\04\04\04", U(252F) }, - {"\00\00\00\00\37\16\16\16\16", U(2530) }, - {"\00\00\00\36\37\36\16\16\16", U(2531) }, - {"\00\00\00\17\37\17\16\16\16", U(2532) }, - {"\00\00\00\37\37\37\16\16\16", U(2533) }, - {"\04\04\04\04\37\00\00\00\00", 0x2534, "SF070000" }, - {"\04\04\04\34\37\34\00\00\00", U(2535) }, - {"\04\04\04\07\37\07\00\00\00", U(2536) }, - {"\04\04\04\37\37\37\00\00\00", U(2537) }, - {"\16\16\16\16\37\00\00\00\00", U(2538) }, - {"\16\16\16\36\37\36\00\00\00", U(2539) }, - {"\16\16\16\17\37\17\00\00\00", U(253A) }, - {"\16\16\16\37\37\37\00\00\00", U(253B) }, - {"\04\04\04\04\37\04\04\04\04", 0x253c, "SF050000" }, - {"\04\04\04\34\37\34\04\04\04", U(253D) }, - {"\04\04\04\07\37\07\04\04\04", U(253E) }, - {"\04\04\04\37\37\37\04\04\04", U(253F) }, - {"\16\16\16\16\37\04\04\04\04", U(2540) }, - {"\04\04\04\04\37\16\16\16\16", U(2541) }, - {"\16\16\16\16\37\16\16\16\16", U(2542) }, - {"\16\16\16\36\37\36\04\04\04", U(2543) }, - {"\16\16\16\17\37\17\04\04\04", U(2544) }, - {"\04\04\04\36\37\36\16\16\16", U(2545) }, - {"\04\04\04\17\37\17\16\16\16", U(2546) }, - {"\16\16\16\37\37\37\04\04\04", U(2547) }, - {"\04\04\04\37\37\37\16\16\16", U(2548) }, - {"\16\16\16\36\37\36\16\16\16", U(2549) }, - {"\16\16\16\17\37\17\16\16\16", U(254A) }, - {"\16\16\16\37\37\37\16\16\16", U(254B) }, + {"\00\00\00\00\07\04\04\04\04", 0x250c, "SF010000", LINE }, + {"\00\00\00\07\07\07\04\04\04", U(250D), LINE }, + {"\00\00\00\00\17\16\16\16\16", U(250E), LINE }, + {"\00\00\00\17\17\17\16\16\16", U(250F), LINE }, + {"\00\00\00\00\34\04\04\04\04", 0x2510, "SF030000", LINE }, + {"\00\00\00\34\34\34\04\04\04", U(2511), LINE }, + {"\00\00\00\00\36\16\16\16\16", U(2512), LINE }, + {"\00\00\00\36\36\36\16\16\16", U(2513), LINE }, + {"\04\04\04\04\07\00\00\00\00", 0x2514, "SF020000", LINE }, + {"\04\04\04\07\07\07\00\00\00", U(2515), LINE }, + {"\16\16\16\16\17\00\00\00\00", U(2516), LINE }, + {"\16\16\16\17\17\17\00\00\00", U(2517), LINE }, + {"\04\04\04\04\34\00\00\00\00", 0x2518, "SF040000", LINE }, + {"\04\04\04\34\34\34\00\00\00", U(2519), LINE }, + {"\16\16\16\16\36\00\00\00\00", U(251A), LINE }, + {"\16\16\16\36\36\36\00\00\00", U(251B), LINE }, + {"\04\04\04\04\07\04\04\04\04", 0x251c, "SF080000", LINE }, + {"\04\04\04\07\07\07\04\04\04", U(251D), LINE }, + {"\16\16\16\16\17\04\04\04\04", U(251E), LINE }, + {"\04\04\04\04\17\16\16\16\16", U(251F), LINE }, + {"\16\16\16\16\17\16\16\16\16", U(2520), LINE }, + {"\16\16\16\17\17\17\04\04\04", U(2521), LINE }, + {"\04\04\04\17\17\17\16\16\16", U(2522), LINE }, + {"\16\16\16\17\17\17\16\16\16", U(2523), LINE }, + {"\04\04\04\04\34\04\04\04\04", 0x2524, "SF090000", LINE }, + {"\04\04\04\34\34\34\04\04\04", U(2525), LINE }, + {"\16\16\16\16\36\04\04\04\04", U(2526), LINE }, + {"\04\04\04\04\36\16\16\16\16", U(2527), LINE }, + {"\16\16\16\16\36\16\16\16\16", U(2528), LINE }, + {"\16\16\16\36\36\36\04\04\04", U(2529), LINE }, + {"\04\04\04\36\36\36\16\16\16", U(252A), LINE }, + {"\16\16\16\36\36\36\16\16\16", U(252B), LINE }, + {"\00\00\00\00\37\04\04\04\04", 0x252c, "SF060000", LINE }, + {"\00\00\00\34\37\34\04\04\04", U(252D), LINE }, + {"\00\00\00\07\37\07\04\04\04", U(252E), LINE }, + {"\00\00\00\37\37\37\04\04\04", U(252F), LINE }, + {"\00\00\00\00\37\16\16\16\16", U(2530), LINE }, + {"\00\00\00\36\37\36\16\16\16", U(2531), LINE }, + {"\00\00\00\17\37\17\16\16\16", U(2532), LINE }, + {"\00\00\00\37\37\37\16\16\16", U(2533), LINE }, + {"\04\04\04\04\37\00\00\00\00", 0x2534, "SF070000", LINE }, + {"\04\04\04\34\37\34\00\00\00", U(2535), LINE }, + {"\04\04\04\07\37\07\00\00\00", U(2536), LINE }, + {"\04\04\04\37\37\37\00\00\00", U(2537), LINE }, + {"\16\16\16\16\37\00\00\00\00", U(2538), LINE }, + {"\16\16\16\36\37\36\00\00\00", U(2539), LINE }, + {"\16\16\16\17\37\17\00\00\00", U(253A), LINE }, + {"\16\16\16\37\37\37\00\00\00", U(253B), LINE }, + {"\04\04\04\04\37\04\04\04\04", 0x253c, "SF050000", LINE }, + {"\04\04\04\34\37\34\04\04\04", U(253D), LINE }, + {"\04\04\04\07\37\07\04\04\04", U(253E), LINE }, + {"\04\04\04\37\37\37\04\04\04", U(253F), LINE }, + {"\16\16\16\16\37\04\04\04\04", U(2540), LINE }, + {"\04\04\04\04\37\16\16\16\16", U(2541), LINE }, + {"\16\16\16\16\37\16\16\16\16", U(2542), LINE }, + {"\16\16\16\36\37\36\04\04\04", U(2543), LINE }, + {"\16\16\16\17\37\17\04\04\04", U(2544), LINE }, + {"\04\04\04\36\37\36\16\16\16", U(2545), LINE }, + {"\04\04\04\17\37\17\16\16\16", U(2546), LINE }, + {"\16\16\16\37\37\37\04\04\04", U(2547), LINE }, + {"\04\04\04\37\37\37\16\16\16", U(2548), LINE }, + {"\16\16\16\36\37\36\16\16\16", U(2549), LINE }, + {"\16\16\16\17\37\17\16\16\16", U(254A), LINE }, + {"\16\16\16\37\37\37\16\16\16", U(254B), LINE }, {"\00\00\00\00\33\00\00\00\00", U(254C) }, {"\00\00\00\33\33\33\00\00\00", U(254D) }, {"\04\04\04\04\00\04\04\04\04", U(254E) }, {"\16\16\16\16\00\16\16\16\16", U(254F) }, - {"\00\00\00\37\00\37\00\00\00", 0x2550, "SF430000" }, - {"\12\12\12\12\12\12\12\12\12", 0x2551, "SF240000" }, - {"\00\00\00\07\04\07\04\04\04", 0x2552, "SF510000" }, - {"\00\00\00\00\17\12\12\12\12", 0x2553, "SF520000" }, - {"\00\00\00\17\10\13\12\12\12", 0x2554, "SF390000" }, - {"\00\00\00\34\04\34\04\04\04", 0x2555, "SF220000" }, - {"\00\00\00\00\36\12\12\12\12", 0x2556, "SF210000" }, - {"\00\00\00\36\02\32\12\12\12", 0x2557, "SF250000" }, - {"\04\04\04\07\04\07\00\00\00", 0x2558, "SF500000" }, - {"\12\12\12\12\17\00\00\00\00", 0x2559, "SF490000" }, - {"\12\12\12\13\10\17\00\00\00", 0x255a, "SF380000" }, - {"\04\04\04\34\04\34\00\00\00", 0x255b, "SF280000" }, - {"\12\12\12\12\36\00\00\00\00", 0x255c, "SF270000" }, - {"\12\12\12\32\02\36\00\00\00", 0x255d, "SF260000" }, - {"\04\04\04\07\04\07\04\04\04", 0x255e, "SF360000" }, - {"\12\12\12\12\13\12\12\12\12", 0x255f, "SF370000" }, - {"\12\12\12\13\10\13\12\12\12", 0x2560, "SF420000" }, - {"\04\04\04\34\04\34\04\04\04", 0x2561, "SF190000" }, - {"\12\12\12\12\32\12\12\12\12", 0x2562, "SF200000" }, - {"\12\12\12\32\02\32\12\12\12", 0x2563, "SF230000" }, - {"\00\00\00\37\00\37\04\04\04", 0x2564, "SF470000" }, - {"\00\00\00\00\37\12\12\12\12", 0x2565, "SF480000" }, - {"\00\00\00\37\00\33\12\12\12", 0x2566, "SF410000" }, - {"\04\04\04\37\00\37\00\00\00", 0x2567, "SF450000" }, - {"\12\12\12\12\37\00\00\00\00", 0x2568, "SF460000" }, - {"\12\12\12\33\00\37\00\00\00", 0x2569, "SF400000" }, - {"\04\04\04\37\04\37\04\04\04", 0x256a, "SF540000" }, - {"\12\12\12\12\37\12\12\12\12", 0x256b, "SF530000" }, - {"\12\12\12\33\00\33\12\12\12", 0x256c, "SF440000" }, - {"\00\00\00\00\03\04\04\04\04", U(256D) }, - {"\00\00\00\00\30\04\04\04\04", U(256E) }, - {"\04\04\04\04\30\00\00\00\00", U(256F) }, - {"\04\04\04\04\03\00\00\00\00", U(2570) }, - {"\00\00\00\00\34\00\00\00\00", U(2574) }, - {"\04\04\04\04\04\00\00\00\00", U(2575) }, - {"\00\00\00\00\07\00\00\00\00", U(2576) }, - {"\00\00\00\00\04\04\04\04\04", U(2577) }, - {"\00\00\00\34\34\34\00\00\00", U(2578) }, - {"\16\16\16\16\16\00\00\00\00", U(2579) }, - {"\00\00\00\07\07\07\00\00\00", U(257A) }, - {"\00\00\00\00\16\16\16\16\16", U(257B) }, - {"\00\00\00\07\37\07\00\00\00", U(257C) }, - {"\04\04\04\04\16\16\16\16\16", U(257D) }, - {"\00\00\00\34\37\34\00\00\00", U(257E) }, - {"\16\16\16\16\16\04\04\04\04", U(257F) }, + {"\00\00\00\37\00\37\00\00\00", 0x2550, "SF430000", LINE }, + {"\12\12\12\12\12\12\12\12\12", 0x2551, "SF240000", LINE }, + {"\00\00\00\07\04\07\04\04\04", 0x2552, "SF510000", LINE }, + {"\00\00\00\00\17\12\12\12\12", 0x2553, "SF520000", LINE }, + {"\00\00\00\17\10\13\12\12\12", 0x2554, "SF390000", LINE }, + {"\00\00\00\34\04\34\04\04\04", 0x2555, "SF220000", LINE }, + {"\00\00\00\00\36\12\12\12\12", 0x2556, "SF210000", LINE }, + {"\00\00\00\36\02\32\12\12\12", 0x2557, "SF250000", LINE }, + {"\04\04\04\07\04\07\00\00\00", 0x2558, "SF500000", LINE }, + {"\12\12\12\12\17\00\00\00\00", 0x2559, "SF490000", LINE }, + {"\12\12\12\13\10\17\00\00\00", 0x255a, "SF380000", LINE }, + {"\04\04\04\34\04\34\00\00\00", 0x255b, "SF280000", LINE }, + {"\12\12\12\12\36\00\00\00\00", 0x255c, "SF270000", LINE }, + {"\12\12\12\32\02\36\00\00\00", 0x255d, "SF260000", LINE }, + {"\04\04\04\07\04\07\04\04\04", 0x255e, "SF360000", LINE }, + {"\12\12\12\12\13\12\12\12\12", 0x255f, "SF370000", LINE }, + {"\12\12\12\13\10\13\12\12\12", 0x2560, "SF420000", LINE }, + {"\04\04\04\34\04\34\04\04\04", 0x2561, "SF190000", LINE }, + {"\12\12\12\12\32\12\12\12\12", 0x2562, "SF200000", LINE }, + {"\12\12\12\32\02\32\12\12\12", 0x2563, "SF230000", LINE }, + {"\00\00\00\37\00\37\04\04\04", 0x2564, "SF470000", LINE }, + {"\00\00\00\00\37\12\12\12\12", 0x2565, "SF480000", LINE }, + {"\00\00\00\37\00\33\12\12\12", 0x2566, "SF410000", LINE }, + {"\04\04\04\37\00\37\00\00\00", 0x2567, "SF450000", LINE }, + {"\12\12\12\12\37\00\00\00\00", 0x2568, "SF460000", LINE }, + {"\12\12\12\33\00\37\00\00\00", 0x2569, "SF400000", LINE }, + {"\04\04\04\37\04\37\04\04\04", 0x256a, "SF540000", LINE }, + {"\12\12\12\12\37\12\12\12\12", 0x256b, "SF530000", LINE }, + {"\12\12\12\33\00\33\12\12\12", 0x256c, "SF440000", LINE }, + {"\00\00\00\00\03\04\04\04\04", U(256D), LINE }, + {"\00\00\00\00\30\04\04\04\04", U(256E), LINE }, + {"\04\04\04\04\30\00\00\00\00", U(256F), LINE }, + {"\04\04\04\04\03\00\00\00\00", U(2570), LINE }, + {"\00\00\00\00\34\00\00\00\00", U(2574), LINE }, + {"\04\04\04\04\04\00\00\00\00", U(2575), LINE }, + {"\00\00\00\00\07\00\00\00\00", U(2576), LINE }, + {"\00\00\00\00\04\04\04\04\04", U(2577), LINE }, + {"\00\00\00\34\34\34\00\00\00", U(2578), LINE }, + {"\16\16\16\16\16\00\00\00\00", U(2579), LINE }, + {"\00\00\00\07\07\07\00\00\00", U(257A), LINE }, + {"\00\00\00\00\16\16\16\16\16", U(257B), LINE }, + {"\00\00\00\07\37\07\00\00\00", U(257C), LINE }, + {"\04\04\04\04\16\16\16\16\16", U(257D), LINE }, + {"\00\00\00\34\37\34\00\00\00", U(257E), LINE }, + {"\16\16\16\16\16\04\04\04\04", U(257F), LINE }, /* Block elements */ {{0x03}, 0x2580, "upblock", MOS4 }, {{0x3}, 0xf1e3, "upblock.sep4", SEP4 }, @@ -2630,6 +2631,11 @@ getpix(char const data[YSIZE - 1], int x, int y, unsigned flags) * Like the top row, the left column of the character cell * always reads as 0. */ + if (flags & LINE) { + /* Line-drawing characters repeat top row and left column. */ + if (x == 0) x = 1; + if (y == 0) y = 1; + } if (x < 1 || x >= XSIZE || y < 1 || y >= YSIZE) return 0; else