setkeycodes: fix handling of 0exx scancodes

function                                             old     new   delta
setkeycodes_main                                     143     130     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/console-tools/setkeycodes.c b/console-tools/setkeycodes.c
index b785101..b6a9a32 100644
--- a/console-tools/setkeycodes.c
+++ b/console-tools/setkeycodes.c
@@ -21,7 +21,7 @@
 int setkeycodes_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int setkeycodes_main(int argc, char **argv)
 {
-	int fd, sc;
+	int fd;
 	struct kbkeycode a;
 
 	if (!(argc & 1) /* if even */ || argc < 2) {
@@ -30,17 +30,17 @@
 
 	fd = get_console_fd_or_die();
 
-	while (argc > 2) {
-		a.keycode = xatou_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;
+	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);
-		argc -= 2;
 		argv += 2;
 	}
 	return EXIT_SUCCESS;