/* vi: set sw=4 ts=4: */ /* * setkeycodes * * Copyright (C) 1994-1998 Andries E. Brouwer <aeb@cwi.nl> * * Adjusted for BusyBox by Erik Andersen <andersen@codepoet.org> * * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ //#include <sys/ioctl.h> #include "libbb.h" /* From <linux/kd.h> */ struct kbkeycode { unsigned int scancode, keycode; }; enum { KDSETKEYCODE = 0x4B4D /* write kernel keycode table entry */ }; int setkeycodes_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int setkeycodes_main(int argc, char **argv) { int fd, sc; struct kbkeycode a; if (argc % 2 != 1 || argc < 2) { bb_show_usage(); } fd = get_console_fd(); while (argc > 2) { a.keycode = xatoul_range(argv[2], 0, 127); a.scancode = sc = xstrtoul_range(argv[1], 16, 0, 255); if (a.scancode > 127) { a.scancode -= 0xe000; a.scancode += 128; } ioctl_or_perror_and_die(fd, KDSETKEYCODE, &a, "failed to set SCANCODE %x to KEYCODE %d", sc, a.keycode); argc -= 2; argv += 2; } return EXIT_SUCCESS; }