/* vi: set sw=4 ts=4: */ /* * setkeycodes * * Copyright (C) 1994-1998 Andries E. Brouwer * * Adjusted for BusyBox by Erik Andersen * * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ #include "libbb.h" /* From */ struct kbkeycode { unsigned 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; struct kbkeycode a; if (!(argc & 1) /* if even */ || argc < 2) { bb_show_usage(); } fd = get_console_fd_or_die(); while (argv[1]) { int sc = xstrtoul_range(argv[1], 16, 0, 0xe07f); if (sc >= 0xe000) { sc -= 0xe000; sc += 0x0080; } a.scancode = sc; a.keycode = xatou_range(argv[2], 0, 255); ioctl_or_perror_and_die(fd, KDSETKEYCODE, &a, "can't set SCANCODE %x to KEYCODE %d", sc, a.keycode); argv += 2; } return EXIT_SUCCESS; }