kbd_mode: show "off" mode too
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 6 Aug 2017 09:58:46 +0000 (11:58 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 6 Aug 2017 09:58:46 +0000 (11:58 +0200)
function                                             old     new   delta
kbd_mode_main                                        156     166     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
console-tools/kbd_mode.c

index d81c56e92a561dce61307e03329d397d4baea1a7..da31af28d33cde71bf6b49eadc104ad1224ed3ce 100644 (file)
@@ -24,7 +24,7 @@
 //usage:#define kbd_mode_full_usage "\n\n"
 //usage:       "Report or set the keyboard mode\n"
 //usage:     "\n       -a      Default (ASCII)"
-//usage:     "\n       -k      Medium-raw (keyboard)"
+//usage:     "\n       -k      Medium-raw (keycode)"
 //usage:     "\n       -s      Raw (scancode)"
 //usage:     "\n       -u      Unicode (utf-8)"
 //usage:     "\n       -C TTY  Affect TTY instead of /dev/tty"
@@ -43,6 +43,10 @@ int kbd_mode_main(int argc UNUSED_PARAM, char **argv)
        };
        int fd;
        unsigned opt;
+//TODO? kbd-2.0.3 without -C tries in sequence:
+//fd#0, /dev/tty, /dev/tty0.
+//Also, it checks KDGKBTYPE before doing KDGKBMODE
+//maybe we can use get_console_fd_or_die()?
        const char *tty_name = CURRENT_TTY;
 
        opt = getopt32(argv, "sakuC:", &tty_name);
@@ -62,9 +66,19 @@ int kbd_mode_main(int argc UNUSED_PARAM, char **argv)
                        mode = "mediumraw (keycode)";
                else if (m == K_UNICODE)
                        mode = "Unicode (UTF-8)";
+               else if (m == 4 /*K_OFF*/) /* kbd-2.0.3 does not show this mode, says "unknown" */
+                       mode = "off";
                printf("The keyboard is in %s mode\n", mode);
        } else {
-               /* here we depend on specific bits assigned to options (*) */
+               /* here we depend on specific bits assigned to options (*)
+                * KDSKBMODE constants have these values:
+                * #define K_RAW           0x00
+                * #define K_XLATE         0x01
+                * #define K_MEDIUMRAW     0x02
+                * #define K_UNICODE       0x03
+                * #define K_OFF           0x04
+                * (looks like "-ak" together would cause the same effect as -u)
+                */
                opt = opt & UNICODE ? 3 : opt >> 1;
                /* double cast prevents warnings about widening conversion */
                xioctl(fd, KDSKBMODE, (void*)(ptrdiff_t)opt);