tty: vt: define an enum for CSI+m codes
authorJiri Slaby (SUSE) <jirislaby@kernel.org>
Mon, 22 Jan 2024 11:03:23 +0000 (12:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 28 Jan 2024 02:08:53 +0000 (18:08 -0800)
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: "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.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/vt.c

index c8783730607470f5f0e031407e4d678a05db71ca..b2ba1b943eb6595bd848ee73ea42436234fe9fe7 100644 (file)
@@ -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);