*
*/
-#include "internal.h"
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
-#include <linux/kd.h>
+#include "busybox.h"
-static const char setkeycodes_usage[] =
- "setkeycodes SCANCODE KEYCODE ...\n"
-#ifndef BB_FEATURE_TRIVIAL_HELP
- "\nSet entries into the kernel's scancode-to-keycode map,\n"
- "allowing unusual keyboards to generate usable keycodes.\n\n"
- "SCANCODE may be either xx or e0xx (hexadecimal),\n"
- "and KEYCODE is given in decimal\n"
-#endif
- ;
+
+/* From <linux/kd.h> */
+struct kbkeycode {
+ unsigned int scancode, keycode;
+};
+static const int KDSETKEYCODE = 0x4B4D; /* write kernel keycode table entry */
extern int
setkeycodes_main(int argc, char** argv)
struct kbkeycode a;
if (argc % 2 != 1 || argc < 2) {
- usage(setkeycodes_usage);
+ show_usage();
}
fd = get_console_fd("/dev/console");
a.keycode = atoi(argv[2]);
a.scancode = sc = strtol(argv[1], &ep, 16);
if (*ep) {
- fatalError("error reading SCANCODE: '%s'\n", argv[1]);
+ error_msg_and_die("error reading SCANCODE: '%s'", argv[1]);
}
if (a.scancode > 127) {
a.scancode -= 0xe000;
a.scancode += 128;
}
if (a.scancode > 255 || a.keycode > 127) {
- fatalError("SCANCODE or KEYCODE outside bounds\n");
+ error_msg_and_die("SCANCODE or KEYCODE outside bounds");
}
if (ioctl(fd,KDSETKEYCODE,&a)) {
perror("KDSETKEYCODE");
- fatalError("failed to set SCANCODE %x to KEYCODE %d\n", sc, a.keycode);
+ error_msg_and_die("failed to set SCANCODE %x to KEYCODE %d", sc, a.keycode);
}
argc -= 2;
argv += 2;
}
- exit( TRUE);
+ return EXIT_SUCCESS;
}