kbd_mode: new applet by Loïc Grenié <loic.grenie@gmail.com>

kbd_mode_main                                          -     189    +189
packed_usage                                       22745   22833     +88
applets                                             3132    3144     +12
static.opts                                            7      12      +5
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/0 up/down: 294/0)             Total: 294 bytes
   text    data     bss     dec     hex filename
 777210    1000    9532  787742   c051e busybox_old
 777575    1000    9532  788107   c068b busybox_unstripped
This commit is contained in:
Denis Vlasenko 2007-10-20 00:17:34 +00:00
parent 85ff862753
commit aa7a888e42
6 changed files with 90 additions and 1 deletions

View File

@ -31,6 +31,12 @@ config DUMPKMAP
This program dumps the kernel's keyboard translation table to This program dumps the kernel's keyboard translation table to
stdout, in binary format. You can then use loadkmap to load it. stdout, in binary format. You can then use loadkmap to load it.
config KBD_MODE
bool "kbd_mode"
default n
help
This program reports and sets keyboard mode.
config LOADFONT config LOADFONT
bool "loadfont" bool "loadfont"
default n default n

View File

@ -10,6 +10,7 @@ lib-$(CONFIG_CLEAR) += clear.o
lib-$(CONFIG_DEALLOCVT) += deallocvt.o lib-$(CONFIG_DEALLOCVT) += deallocvt.o
lib-$(CONFIG_DUMPKMAP) += dumpkmap.o lib-$(CONFIG_DUMPKMAP) += dumpkmap.o
lib-$(CONFIG_SETCONSOLE) += setconsole.o lib-$(CONFIG_SETCONSOLE) += setconsole.o
lib-$(CONFIG_KBD_MODE) += kbd_mode.o
lib-$(CONFIG_LOADFONT) += loadfont.o lib-$(CONFIG_LOADFONT) += loadfont.o
lib-$(CONFIG_LOADKMAP) += loadkmap.o lib-$(CONFIG_LOADKMAP) += loadkmap.o
lib-$(CONFIG_OPENVT) += openvt.o lib-$(CONFIG_OPENVT) += openvt.o

71
console-tools/kbd_mode.c Normal file
View File

@ -0,0 +1,71 @@
/* vi: set sw=4 ts=4: */
/*
* Mini loadkmap implementation for busybox
*
* Copyright (C) 2007 Loïc Grenié <loic.grenie@gmail.com>
* written using Andries Brouwer <aeb@cwi.nl>'s kbd_mode from
* console-utils v0.2.3, licensed under GNU GPLv2
*
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*
*/
#include <getopt.h>
#include "libbb.h"
#include <linux/kd.h>
int kbd_mode_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int kbd_mode_main(int argc, char **argv)
{
static const char opts[] = "saku";
const char *opt = argv[1];
const char *p;
int fd;
fd = get_console_fd();
if (fd < 0) /* get_console_fd() already complained */
return EXIT_FAILURE;
if (opt == NULL) {
/* No arg */
const char *msg = "unknown";
int mode;
ioctl(fd, KDGKBMODE, &mode);
switch(mode) {
case K_RAW:
msg = "raw (scancode)";
break;
case K_XLATE:
msg = "default (ASCII)";
break;
case K_MEDIUMRAW:
msg = "mediumraw (keycode)";
break;
case K_UNICODE:
msg = "Unicode (UTF-8)";
break;
}
printf("The keyboard is in %s mode\n", msg);
}
else if (argc > 2 /* more than 1 arg */
|| *opt != '-' /* not an option */
|| (p = strchr(opts, opt[1])) == NULL /* not an option we expect */
|| opt[2] != '\0' /* more than one option char */
) {
bb_show_usage();
/* return EXIT_FAILURE; - not reached */
}
else {
#if K_RAW != 0 || K_XLATE != 1 || K_MEDIUMRAW != 2 || K_UNICODE != 3
#error kbd_mode must be changed
#endif
/* The options are in the order of the various K_xxx */
ioctl(fd, KDSKBMODE, p - opts);
}
if (ENABLE_FEATURE_CLEAN_UP)
close(fd);
return EXIT_SUCCESS;
}

View File

@ -202,6 +202,7 @@ USE_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_KBD_MODE(APPLET(kbd_mode, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall)) USE_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall))
USE_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall5)) USE_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall5))

View File

@ -1805,6 +1805,16 @@
" [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n" \ " [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n" \
" [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]" " [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]"
#define kbd_mode_trivial_usage \
"[-a|k|s|u]"
#define kbd_mode_full_usage \
"Report or set the keyboard mode" \
"\n\nOptions set mode:\n" \
" -a Default (ASCII)\n" \
" -k Medium-raw (keyboard)\n" \
" -s Raw (scancode)\n" \
" -u Unicode (utf-8)"
#define kill_trivial_usage \ #define kill_trivial_usage \
"[-l] [-signal] process-id [process-id ...]" "[-l] [-signal] process-id [process-id ...]"
#define kill_full_usage \ #define kill_full_usage \

View File

@ -67,6 +67,6 @@ int get_console_fd(void)
} }
} }
bb_error_msg("cannot get file descriptor referring to console"); bb_error_msg("can't open console");
return fd; /* total failure */ return fd; /* total failure */
} }