12 static const char *action = NULL;
13 static const char *value = NULL;
15 static void __attribute__ ((noreturn))
18 _("Usage: %1$s [-C DEVICE] getmode [text|graphics]\n"
19 " or: %1$s [-C DEVICE] gkbmode [raw|xlate|mediumraw|unicode]\n"
20 " or: %1$s [-C DEVICE] gkbmeta [metabit|escprefix]\n"
21 " or: %1$s [-C DEVICE] gkbled [scrolllock|numlock|capslock]\n"),
27 answer(const char *ans) {
29 return strcasecmp(value, ans) ? EXIT_FAILURE : EXIT_SUCCESS;
36 main(int argc, char **argv) {
38 int rc = EXIT_FAILURE;
40 const char *console = NULL;
42 set_progname(argv[0]);
44 setlocale(LC_ALL, "");
45 bindtextdomain(PACKAGE_NAME, LOCALEDIR);
46 textdomain(PACKAGE_NAME);
48 while ((c = getopt(argc, argv, "C:hV")) != EOF) {
51 if (optarg == NULL || optarg[0] == '\0')
56 print_version_and_exit();
65 fprintf(stderr, _("Error: Not enough arguments.\n"));
69 action = argv[optind++];
72 value = argv[optind++];
76 if (!strcasecmp("GETMODE", action)) {
77 if (ioctl(fd, KDGETMODE, &mode) == -1)
78 error(EXIT_FAILURE, errno, "ioctl");
81 case KD_TEXT: rc = answer("text"); break;
82 case KD_GRAPHICS: rc = answer("graphics"); break;
85 } else if (!strcasecmp("GKBMODE", action)) {
86 if (ioctl(fd, KDGKBMODE, &mode) == -1)
87 error(EXIT_FAILURE, errno, "ioctl");
90 case K_RAW: rc = answer("raw"); break;
91 case K_XLATE: rc = answer("xlate"); break;
92 case K_MEDIUMRAW: rc = answer("mediumraw"); break;
93 case K_UNICODE: rc = answer("unicode"); break;
96 } else if (!strcasecmp("GKBMETA", action)) {
97 if (ioctl(fd, KDGKBMETA, &mode) == -1)
98 error(EXIT_FAILURE, errno, "ioctl");
101 case K_METABIT: rc = answer("metabit"); break;
102 case K_ESCPREFIX: rc = answer("escprefix"); break;
105 } else if (!strcasecmp("GKBLED", action)) {
106 if (ioctl(fd, KDGKBLED, &flags) == -1)
107 error(EXIT_FAILURE, errno, "ioctl");
109 mode = (flags & 0x7);
112 if (((mode & LED_SCR) && !strcasecmp(value, "scrolllock")) ||
113 ((mode & LED_NUM) && !strcasecmp(value, "numlock")) ||
114 ((mode & LED_CAP) && !strcasecmp(value, "capslock")))
117 printf("scrolllock:%s ", (mode & LED_SCR) ? "on" : "off");
118 printf("numlock:%s ", (mode & LED_NUM) ? "on" : "off");
119 printf("capslock:%s\n", (mode & LED_CAP) ? "on" : "off");
124 fprintf(stderr, _("Error: Unrecognized action: %s\n"), action);