Merge pull request #6 from jepler/sextant

This commit is contained in:
Jeff Epler 2024-10-28 19:42:18 -05:00 committed by GitHub
commit a3ded925b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 487 additions and 12 deletions

View file

@ -496,8 +496,38 @@ static void master_write(void *user_data, void *buffer_in, size_t len) {
}
}
static int map_unicode(void *unused, int n) {
static int map_unicode(void *user_data, int n, lw_cell_t *attr) {
struct lw_terminal_vt100 *vt100 = (struct lw_terminal_vt100 *)user_data;
if (n >= 0x1fb00 && n <= 0x1fb3b) {
n = n - 0x1fb00 +
129; // 1fb00 is sextant-1, which lives at position 129
if (n >= 169)
n++; // the 135 and 246 sextants are elsewhere
if (n >= 149)
n++;
if (n >= 160) { // half of sextants are inverted
struct lw_parsed_attr tmp_attr = vt100->parsed_attr;
tmp_attr.inverse = !tmp_attr.inverse;
n ^= 0x3f;
*attr = vt100->encode_attr(vt100, &tmp_attr);
}
return n;
}
switch (n) {
case 9608: {
struct lw_parsed_attr tmp_attr = vt100->parsed_attr;
tmp_attr.inverse = !tmp_attr.inverse;
*attr = vt100->encode_attr(vt100, &tmp_attr);
return 32; // FULL BLOCK U+2588
}
case 9612:
return 149; // LEFT HALF BLOCK U+258c
case 9616: {
struct lw_parsed_attr tmp_attr = vt100->parsed_attr;
tmp_attr.inverse = !tmp_attr.inverse;
*attr = vt100->encode_attr(vt100, &tmp_attr);
return 149; // RIGHT HALF BLOCK U+2590
}
case 9670:
return 1;
case 9618:

View file

@ -334,7 +334,12 @@ x Pm = 97 / 107 fg/bg Bright White
x Pm = 99 / 109 fg/bg Bright Default
*/
static int default_map_unicode(void *user_data, int c) { return '?'; }
static int default_map_unicode(void *user_data, int c, lw_cell_t *attr) {
(void)user_data;
(void)c;
(void)attr;
return '?';
}
static lw_cell_t default_encode_attr(void *user_data,
const struct lw_parsed_attr *attr) {
@ -471,10 +476,10 @@ static void CUP(struct lw_terminal *term_emul) {
if ((unsigned int)arg0 > vt100->margin_bottom)
arg0 = vt100->margin_bottom;
}
if (arg0 >= vt100->height) {
if (arg0 >= (int)vt100->height) {
arg0 = vt100->height - 1;
}
if (arg1 >= vt100->width) {
if (arg1 >= (int)vt100->width) {
arg1 = vt100->width - 1;
}
vt100->y = arg0;
@ -861,7 +866,7 @@ static void DCH(struct lw_terminal *term_emul) {
for (x = vt100->x; x < vt100->width; ++x) {
int x1 = x + arg0;
if (x1 >= vt100->width) {
if (x1 >= (int)vt100->width) {
set(vt100, x, y, ' ');
} else {
aset(vt100, x, y, aget(vt100, x1, y));
@ -1028,19 +1033,35 @@ static void vt100_write_unicode(struct lw_terminal *term_emul, int c) {
if (c < ' ') {
return;
}
lw_cell_t attr = vt100->attr;
if (vt100->x == vt100->width) {
if (MODE_IS_SET(vt100, DECAWM))
NEL(term_emul);
else
vt100->x -= 1;
}
if (!vt100->selected_charset && c >= 95 && c < 127) {
c = c - 95;
if (!vt100->selected_charset && c > 95 && c < 127) {
c = c - 95; // you can't hit the glyph at 0 this way, oh well
}
if (!vt100->unicode && !vt100->selected_charset && c > 32 && c <= 95) {
// extension: In the alternate character set, there are also
// sixels/sextant chars. Because there's only room for 32 of the 64
// in the character bitmap (at 128-160) half are displayed in
// inverse video instead.
c = c + 64;
if (c >= 160) {
struct lw_parsed_attr tmp_attr = vt100->parsed_attr;
tmp_attr.inverse = !tmp_attr.inverse;
c ^= 0x1f;
attr = vt100->encode_attr(vt100, &tmp_attr);
}
}
if (c >= 0x100) {
c = vt100->map_unicode(vt100, c);
c = vt100->map_unicode(vt100, c, &attr);
}
set(vt100, vt100->x, vt100->y, c);
aset(vt100, vt100->x, vt100->y, c | attr);
vt100->x += 1;
}

View file

@ -106,7 +106,7 @@ struct lw_terminal_vt100 {
void (*master_write)(void *user_data, void *buffer, size_t len);
lw_cell_t (*encode_attr)(void *user_data,
const struct lw_parsed_attr *attr);
int (*map_unicode)(void *user_data, int c);
int (*map_unicode)(void *user_data, int c, lw_cell_t *attr);
void *user_data;
};

View file

@ -26,9 +26,8 @@ QUAD_WIDTH 5
FONT_ASCENT 7
FONT_DESCENT 2
DEFAULT_CHAR 0
_XMBDFED_INFO "Edited with xmbdfed 4.5."
ENDPROPERTIES
CHARS 223
CHARS 255
STARTCHAR char0
ENCODING 0
SWIDTH 640 0
@ -1674,6 +1673,431 @@ DWIDTH 5 0
BBX 0 0 0 0
BITMAP
ENDCHAR
STARTCHAR char128
ENCODING 128
SWIDTH 640 0
DWIDTH 5 0
BBX 0 0 0 0
BITMAP
ENDCHAR
STARTCHAR char129
ENCODING 129
SWIDTH 640 0
DWIDTH 5 0
BBX 3 3 0 4
BITMAP
E0
E0
E0
ENDCHAR
STARTCHAR char130
ENCODING 130
SWIDTH 640 0
DWIDTH 5 0
BBX 3 3 2 4
BITMAP
E0
E0
E0
ENDCHAR
STARTCHAR char131
ENCODING 131
SWIDTH 640 0
DWIDTH 5 0
BBX 5 3 0 4
BITMAP
F8
F8
F8
ENDCHAR
STARTCHAR char132
ENCODING 132
SWIDTH 640 0
DWIDTH 5 0
BBX 3 3 0 1
BITMAP
E0
E0
E0
ENDCHAR
STARTCHAR char133
ENCODING 133
SWIDTH 640 0
DWIDTH 5 0
BBX 3 6 0 1
BITMAP
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char134
ENCODING 134
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
38
38
38
E0
E0
E0
ENDCHAR
STARTCHAR char135
ENCODING 135
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
F8
F8
F8
E0
E0
E0
ENDCHAR
STARTCHAR char136
ENCODING 136
SWIDTH 640 0
DWIDTH 5 0
BBX 3 3 2 1
BITMAP
E0
E0
E0
ENDCHAR
STARTCHAR char137
ENCODING 137
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
E0
E0
E0
38
38
38
ENDCHAR
STARTCHAR char138
ENCODING 138
SWIDTH 640 0
DWIDTH 5 0
BBX 3 6 2 1
BITMAP
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char139
ENCODING 139
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
F8
F8
F8
38
38
38
ENDCHAR
STARTCHAR char140
ENCODING 140
SWIDTH 640 0
DWIDTH 5 0
BBX 5 3 0 1
BITMAP
F8
F8
F8
ENDCHAR
STARTCHAR char141
ENCODING 141
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
E0
E0
E0
F8
F8
F8
ENDCHAR
STARTCHAR char142
ENCODING 142
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
38
38
38
F8
F8
F8
ENDCHAR
STARTCHAR char143
ENCODING 143
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 1
BITMAP
F8
F8
F8
F8
F8
F8
ENDCHAR
STARTCHAR char145
ENCODING 144
SWIDTH 640 0
DWIDTH 5 0
BBX 3 3 0 -2
BITMAP
E0
E0
E0
ENDCHAR
STARTCHAR char146
ENCODING 145
SWIDTH 640 0
DWIDTH 5 0
BBX 3 9 0 -2
BITMAP
E0
E0
E0
00
00
00
E0
E0
E0
ENDCHAR
STARTCHAR char147
ENCODING 146
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
38
38
38
00
00
00
E0
E0
E0
ENDCHAR
STARTCHAR char148
ENCODING 147
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
F8
F8
F8
00
00
00
E0
E0
E0
ENDCHAR
STARTCHAR char149
ENCODING 148
SWIDTH 640 0
DWIDTH 5 0
BBX 3 6 0 -2
BITMAP
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char150
ENCODING 149
SWIDTH 640 0
DWIDTH 5 0
BBX 3 9 0 -2
BITMAP
E0
E0
E0
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char151
ENCODING 150
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
38
38
38
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char135
ENCODING 151
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
F8
F8
F8
E0
E0
E0
E0
E0
E0
ENDCHAR
STARTCHAR char136
ENCODING 152
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 -2
BITMAP
38
38
38
E0
E0
E0
ENDCHAR
STARTCHAR char137
ENCODING 153
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
E0
E0
E0
38
38
38
E0
E0
E0
ENDCHAR
STARTCHAR char138
ENCODING 154
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
38
38
38
38
38
38
E0
E0
E0
ENDCHAR
STARTCHAR char139
ENCODING 155
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
F8
F8
F8
38
38
38
E0
E0
E0
ENDCHAR
STARTCHAR char140
ENCODING 156
SWIDTH 640 0
DWIDTH 5 0
BBX 5 6 0 -2
BITMAP
F8
F8
F8
E0
E0
E0
ENDCHAR
STARTCHAR char141
ENCODING 157
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
E0
E0
E0
F8
F8
F8
E0
E0
E0
ENDCHAR
STARTCHAR char142
ENCODING 158
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
38
38
38
F8
F8
F8
E0
E0
E0
ENDCHAR
STARTCHAR char143
ENCODING 159
SWIDTH 640 0
DWIDTH 5 0
BBX 5 9 0 -2
BITMAP
F8
F8
F8
F8
F8
F8
E0
E0
E0
ENDCHAR
STARTCHAR exclamdown
ENCODING 161
SWIDTH 640 0