Commit 09e7f9f6 authored by Jiri Slaby (SUSE)'s avatar Jiri Slaby (SUSE) Committed by Greg Kroah-Hartman

tty: vt: define an enum for CSI+m codes

It's always confusing to read all those case 0:, case 1: etc. in csi_*
handlers. Define enum entries for all those constants in CSI+m and use
them in csi_m().
Signed-off-by: default avatar"Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Tested-by: Helge Deller <deller@gmx.de> # parisc STI console
Link: https://lore.kernel.org/r/20240122110401.7289-10-jirislaby@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d4c0c481
......@@ -1676,6 +1676,39 @@ static int vc_t416_color(struct vc_data *vc, int i,
return i;
}
enum {
CSI_m_DEFAULT = 0,
CSI_m_BOLD = 1,
CSI_m_HALF_BRIGHT = 2,
CSI_m_ITALIC = 3,
CSI_m_UNDERLINE = 4,
CSI_m_BLINK = 5,
CSI_m_REVERSE = 7,
CSI_m_PRI_FONT = 10,
CSI_m_ALT_FONT1 = 11,
CSI_m_ALT_FONT2 = 12,
CSI_m_DOUBLE_UNDERLINE = 21,
CSI_m_NORMAL_INTENSITY = 22,
CSI_m_NO_ITALIC = 23,
CSI_m_NO_UNDERLINE = 24,
CSI_m_NO_BLINK = 25,
CSI_m_NO_REVERSE = 27,
CSI_m_FG_COLOR_BEG = 30,
CSI_m_FG_COLOR_END = 37,
CSI_m_FG_COLOR = 38,
CSI_m_DEFAULT_FG_COLOR = 39,
CSI_m_BG_COLOR_BEG = 40,
CSI_m_BG_COLOR_END = 47,
CSI_m_BG_COLOR = 48,
CSI_m_DEFAULT_BG_COLOR = 49,
CSI_m_BRIGHT_FG_COLOR_BEG = 90,
CSI_m_BRIGHT_FG_COLOR_END = 97,
CSI_m_BRIGHT_FG_COLOR_OFF = CSI_m_BRIGHT_FG_COLOR_BEG - CSI_m_FG_COLOR_BEG,
CSI_m_BRIGHT_BG_COLOR_BEG = 100,
CSI_m_BRIGHT_BG_COLOR_END = 107,
CSI_m_BRIGHT_BG_COLOR_OFF = CSI_m_BRIGHT_BG_COLOR_BEG - CSI_m_BG_COLOR_BEG,
};
/* console_lock is held */
static void csi_m(struct vc_data *vc)
{
......@@ -1683,33 +1716,33 @@ static void csi_m(struct vc_data *vc)
for (i = 0; i <= vc->vc_npar; i++)
switch (vc->vc_par[i]) {
case 0: /* all attributes off */
case CSI_m_DEFAULT: /* all attributes off */
default_attr(vc);
break;
case 1:
case CSI_m_BOLD:
vc->state.intensity = VCI_BOLD;
break;
case 2:
case CSI_m_HALF_BRIGHT:
vc->state.intensity = VCI_HALF_BRIGHT;
break;
case 3:
case CSI_m_ITALIC:
vc->state.italic = true;
break;
case 21:
case CSI_m_DOUBLE_UNDERLINE:
/*
* No console drivers support double underline, so
* convert it to a single underline.
*/
case 4:
case CSI_m_UNDERLINE:
vc->state.underline = true;
break;
case 5:
case CSI_m_BLINK:
vc->state.blink = true;
break;
case 7:
case CSI_m_REVERSE:
vc->state.reverse = true;
break;
case 10: /* ANSI X3.64-1979 (SCO-ish?)
case CSI_m_PRI_FONT: /* ANSI X3.64-1979 (SCO-ish?)
* Select primary font, don't display control chars if
* defined, don't set bit 8 on output.
*/
......@@ -1717,7 +1750,7 @@ static void csi_m(struct vc_data *vc)
vc->vc_disp_ctrl = 0;
vc->vc_toggle_meta = 0;
break;
case 11: /* ANSI X3.64-1979 (SCO-ish?)
case CSI_m_ALT_FONT1: /* ANSI X3.64-1979 (SCO-ish?)
* Select first alternate font, lets chars < 32 be
* displayed as ROM chars.
*/
......@@ -1725,7 +1758,7 @@ static void csi_m(struct vc_data *vc)
vc->vc_disp_ctrl = 1;
vc->vc_toggle_meta = 0;
break;
case 12: /* ANSI X3.64-1979 (SCO-ish?)
case CSI_m_ALT_FONT2: /* ANSI X3.64-1979 (SCO-ish?)
* Select second alternate font, toggle high bit
* before displaying as ROM char.
*/
......@@ -1733,47 +1766,54 @@ static void csi_m(struct vc_data *vc)
vc->vc_disp_ctrl = 1;
vc->vc_toggle_meta = 1;
break;
case 22:
case CSI_m_NORMAL_INTENSITY:
vc->state.intensity = VCI_NORMAL;
break;
case 23:
case CSI_m_NO_ITALIC:
vc->state.italic = false;
break;
case 24:
case CSI_m_NO_UNDERLINE:
vc->state.underline = false;
break;
case 25:
case CSI_m_NO_BLINK:
vc->state.blink = false;
break;
case 27:
case CSI_m_NO_REVERSE:
vc->state.reverse = false;
break;
case 38:
case CSI_m_FG_COLOR:
i = vc_t416_color(vc, i, rgb_foreground);
break;
case 48:
case CSI_m_BG_COLOR:
i = vc_t416_color(vc, i, rgb_background);
break;
case 39:
case CSI_m_DEFAULT_FG_COLOR:
vc->state.color = (vc->vc_def_color & 0x0f) |
(vc->state.color & 0xf0);
break;
case 49:
case CSI_m_DEFAULT_BG_COLOR:
vc->state.color = (vc->vc_def_color & 0xf0) |
(vc->state.color & 0x0f);
break;
default:
if (vc->vc_par[i] >= 90 && vc->vc_par[i] <= 107) {
if (vc->vc_par[i] < 100)
if (vc->vc_par[i] >= CSI_m_BRIGHT_FG_COLOR_BEG &&
vc->vc_par[i] <= CSI_m_BRIGHT_BG_COLOR_END) {
if (vc->vc_par[i] < CSI_m_BRIGHT_BG_COLOR_BEG)
vc->state.intensity = VCI_BOLD;
vc->vc_par[i] -= 60;
vc->vc_par[i] -= CSI_m_BRIGHT_FG_COLOR_OFF;
}
if (vc->vc_par[i] >= 30 && vc->vc_par[i] <= 37)
vc->state.color = color_table[vc->vc_par[i] - 30]
| (vc->state.color & 0xf0);
else if (vc->vc_par[i] >= 40 && vc->vc_par[i] <= 47)
vc->state.color = (color_table[vc->vc_par[i] - 40] << 4)
| (vc->state.color & 0x0f);
if (vc->vc_par[i] >= CSI_m_FG_COLOR_BEG &&
vc->vc_par[i] <= CSI_m_FG_COLOR_END) {
vc->vc_par[i] -= CSI_m_FG_COLOR_BEG;
vc->state.color = color_table[vc->vc_par[i]] |
(vc->state.color & 0xf0);
} else if (vc->vc_par[i] >= CSI_m_BG_COLOR_BEG &&
vc->vc_par[i] <= CSI_m_BG_COLOR_END) {
vc->vc_par[i] -= CSI_m_BG_COLOR_BEG;
vc->state.color = (color_table[vc->vc_par[i]] << 4) |
(vc->state.color & 0x0f);
}
break;
}
update_attr(vc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment