terminal: add 'charset_designator' enum to make code more self-documenting

This commit also renames the term_set_single_shift_ascii_printer()
function to term_single_shift(), since the former is overly verbose
and not really even accurate.
This commit is contained in:
Craig Barnes 2021-06-09 09:51:48 +01:00
parent 3c609771c5
commit e030a2ca08
3 changed files with 19 additions and 18 deletions

View file

@ -1606,11 +1606,11 @@ term_reset(struct terminal *term, bool hard)
term->bell_action_enabled = true; term->bell_action_enabled = true;
term->mouse_tracking = MOUSE_NONE; term->mouse_tracking = MOUSE_NONE;
term->mouse_reporting = MOUSE_NORMAL; term->mouse_reporting = MOUSE_NORMAL;
term->charsets.selected = 0; term->charsets.selected = G0;
term->charsets.set[0] = CHARSET_ASCII; term->charsets.set[G0] = CHARSET_ASCII;
term->charsets.set[1] = CHARSET_ASCII; term->charsets.set[G1] = CHARSET_ASCII;
term->charsets.set[2] = CHARSET_ASCII; term->charsets.set[G2] = CHARSET_ASCII;
term->charsets.set[3] = CHARSET_ASCII; term->charsets.set[G3] = CHARSET_ASCII;
term->saved_charsets = term->charsets; term->saved_charsets = term->charsets;
tll_free_and_free(term->window_title_stack, free); tll_free_and_free(term->window_title_stack, free);
term_set_window_title(term, term->conf->title); term_set_window_title(term, term->conf->title);
@ -2869,10 +2869,10 @@ term_update_ascii_printer(struct terminal *term)
} }
void void
term_set_single_shift_ascii_printer(struct terminal *term, int selected) term_single_shift(struct terminal *term, enum charset_designator idx)
{ {
term->charsets.saved = term->charsets.selected; term->charsets.saved = term->charsets.selected;
term->charsets.selected = selected; term->charsets.selected = idx;
term->ascii_printer = &ascii_printer_single_shift; term->ascii_printer = &ascii_printer_single_shift;
} }

View file

@ -189,10 +189,11 @@ enum cursor_origin { ORIGIN_ABSOLUTE, ORIGIN_RELATIVE };
enum cursor_keys { CURSOR_KEYS_DONTCARE, CURSOR_KEYS_NORMAL, CURSOR_KEYS_APPLICATION }; enum cursor_keys { CURSOR_KEYS_DONTCARE, CURSOR_KEYS_NORMAL, CURSOR_KEYS_APPLICATION };
enum keypad_keys { KEYPAD_DONTCARE, KEYPAD_NUMERICAL, KEYPAD_APPLICATION }; enum keypad_keys { KEYPAD_DONTCARE, KEYPAD_NUMERICAL, KEYPAD_APPLICATION };
enum charset { CHARSET_ASCII, CHARSET_GRAPHIC }; enum charset { CHARSET_ASCII, CHARSET_GRAPHIC };
enum charset_designator { G0, G1, G2, G3 };
struct charsets { struct charsets {
int selected; enum charset_designator selected;
int saved; enum charset_designator saved;
enum charset set[4]; /* G0-G3 */ enum charset set[4]; /* G0-G3 */
}; };
@ -606,7 +607,7 @@ bool term_shutdown(struct terminal *term);
int term_destroy(struct terminal *term); int term_destroy(struct terminal *term);
void term_update_ascii_printer(struct terminal *term); void term_update_ascii_printer(struct terminal *term);
void term_set_single_shift_ascii_printer(struct terminal *term, int selected); void term_single_shift(struct terminal *term, enum charset_designator idx);
void term_reset(struct terminal *term, bool hard); void term_reset(struct terminal *term, bool hard);
bool term_to_slave(struct terminal *term, const void *data, size_t len); bool term_to_slave(struct terminal *term, const void *data, size_t len);

16
vt.c
View file

@ -196,13 +196,13 @@ action_execute(struct terminal *term, uint8_t c)
case '\x0e': case '\x0e':
/* SO - shift out */ /* SO - shift out */
term->charsets.selected = 1; /* G1 */ term->charsets.selected = G1;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;
case '\x0f': case '\x0f':
/* SI - shift in */ /* SI - shift in */
term->charsets.selected = 0; /* G0 */ term->charsets.selected = G0;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;
@ -390,13 +390,13 @@ action_esc_dispatch(struct terminal *term, uint8_t final)
case 'n': case 'n':
/* LS2 - Locking Shift 2 */ /* LS2 - Locking Shift 2 */
term->charsets.selected = 2; /* G2 */ term->charsets.selected = G2;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;
case 'o': case 'o':
/* LS3 - Locking Shift 3 */ /* LS3 - Locking Shift 3 */
term->charsets.selected = 3; /* G3 */ term->charsets.selected = G3;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;
@ -426,12 +426,12 @@ action_esc_dispatch(struct terminal *term, uint8_t final)
case 'N': case 'N':
/* SS2 - Single Shift 2 */ /* SS2 - Single Shift 2 */
term_set_single_shift_ascii_printer(term, 2); /* G2 */ term_single_shift(term, G2);
break; break;
case 'O': case 'O':
/* SS3 - Single Shift 3 */ /* SS3 - Single Shift 3 */
term_set_single_shift_ascii_printer(term, 3); /* G3 */ term_single_shift(term, G3);
break; break;
case '\\': case '\\':
@ -460,7 +460,7 @@ action_esc_dispatch(struct terminal *term, uint8_t final)
switch (final) { switch (final) {
case '0': { case '0': {
size_t idx = term->vt.private - '('; size_t idx = term->vt.private - '(';
xassert(idx <= 3); xassert(idx <= G3);
term->charsets.set[idx] = CHARSET_GRAPHIC; term->charsets.set[idx] = CHARSET_GRAPHIC;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;
@ -468,7 +468,7 @@ action_esc_dispatch(struct terminal *term, uint8_t final)
case 'B': { case 'B': {
size_t idx = term->vt.private - '('; size_t idx = term->vt.private - '(';
xassert(idx <= 3); xassert(idx <= G3);
term->charsets.set[idx] = CHARSET_ASCII; term->charsets.set[idx] = CHARSET_ASCII;
term_update_ascii_printer(term); term_update_ascii_printer(term);
break; break;