a5bd9f6
From f32d4a82999ed508b131f882b7f058fd5467219d Mon Sep 17 00:00:00 2001
a5bd9f6
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
a5bd9f6
Date: Fri, 12 Apr 2013 22:26:38 +0200
a5bd9f6
Subject: [PATCH 294/364] 	Handle Japanese special keys. 	Reported by:
a5bd9f6
 Hiroyuki YAMAMORI. 	Codes supplied by: Hiroyuki YAMAMORI.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog                       |  6 ++++++
a5bd9f6
 grub-core/commands/keylayouts.c |  5 ++++-
a5bd9f6
 grub-core/term/at_keyboard.c    | 16 +++++++++++++---
a5bd9f6
 include/grub/keyboard_layouts.h |  6 ++++--
a5bd9f6
 util/grub-mklayout.c            | 11 +++++++++--
a5bd9f6
 5 files changed, 36 insertions(+), 8 deletions(-)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index 92cb29d..7054441 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,5 +1,11 @@
a5bd9f6
 2013-04-12  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
 
a5bd9f6
+	Handle Japanese special keys.
a5bd9f6
+	Reported by: Hiroyuki YAMAMORI.
a5bd9f6
+	Codes supplied by: Hiroyuki YAMAMORI.
a5bd9f6
+
a5bd9f6
+2013-04-12  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
+
a5bd9f6
 	* util/grub-mkimage.c: Document memdisk implying --prefix.
a5bd9f6
 
a5bd9f6
 2013-04-12  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
a5bd9f6
index 6b5141c..b93ddf1 100644
a5bd9f6
--- a/grub-core/commands/keylayouts.c
a5bd9f6
+++ b/grub-core/commands/keylayouts.c
a5bd9f6
@@ -132,6 +132,9 @@ map_key_core (int code, int status, int *alt_gr_consumed)
a5bd9f6
 {
a5bd9f6
   *alt_gr_consumed = 0;
a5bd9f6
 
a5bd9f6
+  if (code >= GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE)
a5bd9f6
+    return 0;
a5bd9f6
+
a5bd9f6
   if (status & GRUB_TERM_STATUS_RALT)
a5bd9f6
     {
a5bd9f6
       if (status & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT))
a5bd9f6
@@ -242,7 +245,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
a5bd9f6
       goto fail;
a5bd9f6
     }
a5bd9f6
 
a5bd9f6
-  if (grub_le_to_cpu32 (version) != GRUB_KEYBOARD_LAYOUTS_VERSION)
a5bd9f6
+  if (version != grub_cpu_to_le32_compile_time (GRUB_KEYBOARD_LAYOUTS_VERSION))
a5bd9f6
     {
a5bd9f6
       grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid version");
a5bd9f6
       goto fail;
a5bd9f6
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
a5bd9f6
index b2f328f..e255d40 100644
a5bd9f6
--- a/grub-core/term/at_keyboard.c
a5bd9f6
+++ b/grub-core/term/at_keyboard.c
a5bd9f6
@@ -97,7 +97,17 @@ static const grub_uint8_t set1_mapping[128] =
a5bd9f6
     /* OLPC keys. Just mapped to normal keys.  */
a5bd9f6
     /* 0x64 */ 0,                             GRUB_KEYBOARD_KEY_UP,
a5bd9f6
     /* 0x66 */ GRUB_KEYBOARD_KEY_DOWN,        GRUB_KEYBOARD_KEY_LEFT,
a5bd9f6
-    /* 0x68 */ GRUB_KEYBOARD_KEY_RIGHT
a5bd9f6
+    /* 0x68 */ GRUB_KEYBOARD_KEY_RIGHT,       0,
a5bd9f6
+    /* 0x6a */ 0,                             0,
a5bd9f6
+    /* 0x6c */ 0,                             0,
a5bd9f6
+    /* 0x6e */ 0,                             0,
a5bd9f6
+    /* 0x70 */ 0,                             0,
a5bd9f6
+    /* 0x72 */ 0,                             GRUB_KEYBOARD_KEY_JP_RO,
a5bd9f6
+    /* 0x74 */ 0,                             0,
a5bd9f6
+    /* 0x76 */ 0,                             0,
a5bd9f6
+    /* 0x78 */ 0,                             0,
a5bd9f6
+    /* 0x7a */ 0,                             0,
a5bd9f6
+    /* 0x7c */ 0,                             GRUB_KEYBOARD_KEY_JP_YEN,
a5bd9f6
   };
a5bd9f6
 
a5bd9f6
 static const struct
a5bd9f6
@@ -163,7 +173,7 @@ static const grub_uint8_t set2_mapping[256] =
a5bd9f6
     /* 0x4a */ GRUB_KEYBOARD_KEY_SLASH,       GRUB_KEYBOARD_KEY_L,
a5bd9f6
     /* 0x4c */ GRUB_KEYBOARD_KEY_SEMICOLON,   GRUB_KEYBOARD_KEY_P,
a5bd9f6
     /* 0x4e */ GRUB_KEYBOARD_KEY_DASH,        0,
a5bd9f6
-    /* 0x50 */ 0,                             0,
a5bd9f6
+    /* 0x50 */ 0,                             GRUB_KEYBOARD_KEY_JP_RO,
a5bd9f6
     /* 0x52 */ GRUB_KEYBOARD_KEY_DQUOTE,      0,
a5bd9f6
     /* 0x54 */ GRUB_KEYBOARD_KEY_LBRACKET,    GRUB_KEYBOARD_KEY_EQUAL,
a5bd9f6
     /* 0x56 */ 0,                             0,
a5bd9f6
@@ -176,7 +186,7 @@ static const grub_uint8_t set2_mapping[256] =
a5bd9f6
     /* 0x64 */ 0,                             0,
a5bd9f6
     /* 0x66 */ GRUB_KEYBOARD_KEY_BACKSPACE,   0,
a5bd9f6
     /* 0x68 */ 0,                             GRUB_KEYBOARD_KEY_NUM1,
a5bd9f6
-    /* 0x6a */ 0,                             GRUB_KEYBOARD_KEY_NUM4,
a5bd9f6
+    /* 0x6a */ GRUB_KEYBOARD_KEY_JP_YEN,      GRUB_KEYBOARD_KEY_NUM4,
a5bd9f6
     /* 0x6c */ GRUB_KEYBOARD_KEY_NUM7,        0,
a5bd9f6
     /* 0x6e */ 0,                             0,
a5bd9f6
     /* 0x70 */ GRUB_KEYBOARD_KEY_NUMDOT,      GRUB_KEYBOARD_KEY_NUM0,
a5bd9f6
diff --git a/include/grub/keyboard_layouts.h b/include/grub/keyboard_layouts.h
a5bd9f6
index 1f7213c..8d94490 100644
a5bd9f6
--- a/include/grub/keyboard_layouts.h
a5bd9f6
+++ b/include/grub/keyboard_layouts.h
a5bd9f6
@@ -21,9 +21,9 @@
a5bd9f6
 
a5bd9f6
 #define GRUB_KEYBOARD_LAYOUTS_FILEMAGIC "GRUBLAYO"
a5bd9f6
 #define GRUB_KEYBOARD_LAYOUTS_FILEMAGIC_SIZE (sizeof(GRUB_KEYBOARD_LAYOUTS_FILEMAGIC) - 1)
a5bd9f6
-#define GRUB_KEYBOARD_LAYOUTS_VERSION 8
a5bd9f6
+#define GRUB_KEYBOARD_LAYOUTS_VERSION 10
a5bd9f6
 
a5bd9f6
-#define GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE 128
a5bd9f6
+#define GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE 160
a5bd9f6
 
a5bd9f6
 struct grub_keyboard_layout
a5bd9f6
 {
a5bd9f6
@@ -129,6 +129,8 @@ typedef enum grub_keyboard_key
a5bd9f6
     GRUB_KEYBOARD_KEY_NUM0 = 0x62,
a5bd9f6
     GRUB_KEYBOARD_KEY_NUMDOT = 0x63,
a5bd9f6
     GRUB_KEYBOARD_KEY_102ND = 0x64,
a5bd9f6
+    GRUB_KEYBOARD_KEY_JP_RO = 0x87,
a5bd9f6
+    GRUB_KEYBOARD_KEY_JP_YEN = 0x89,
a5bd9f6
     GRUB_KEYBOARD_KEY_LEFT_CTRL = 0xe0,
a5bd9f6
     GRUB_KEYBOARD_KEY_LEFT_SHIFT = 0xe1,
a5bd9f6
     GRUB_KEYBOARD_KEY_LEFT_ALT = 0xe2,
a5bd9f6
diff --git a/util/grub-mklayout.c b/util/grub-mklayout.c
a5bd9f6
index bff4dd6..e53d710 100644
a5bd9f6
--- a/util/grub-mklayout.c
a5bd9f6
+++ b/util/grub-mklayout.c
a5bd9f6
@@ -250,7 +250,7 @@ static grub_uint8_t linux_to_usb_map[128] = {
a5bd9f6
   /* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT,      GRUB_KEYBOARD_KEY_NUMDOT, 
a5bd9f6
   /* 0x54 */ 0,                             0, 
a5bd9f6
   /* 0x56 */ GRUB_KEYBOARD_KEY_102ND,       GRUB_KEYBOARD_KEY_F11, 
a5bd9f6
-  /* 0x58 */ GRUB_KEYBOARD_KEY_F12,         0,
a5bd9f6
+  /* 0x58 */ GRUB_KEYBOARD_KEY_F12,         GRUB_KEYBOARD_KEY_JP_RO,
a5bd9f6
   /* 0x5a */ 0,                             0,
a5bd9f6
   /* 0x5c */ 0,                             0,
a5bd9f6
   /* 0x5e */ 0,                             0,
a5bd9f6
@@ -261,7 +261,14 @@ static grub_uint8_t linux_to_usb_map[128] = {
a5bd9f6
   /* 0x68 */ GRUB_KEYBOARD_KEY_PPAGE,       GRUB_KEYBOARD_KEY_LEFT,
a5bd9f6
   /* 0x6a */ GRUB_KEYBOARD_KEY_RIGHT,       GRUB_KEYBOARD_KEY_END,
a5bd9f6
   /* 0x6c */ GRUB_KEYBOARD_KEY_DOWN,        GRUB_KEYBOARD_KEY_NPAGE, 
a5bd9f6
-  /* 0x6e */ GRUB_KEYBOARD_KEY_INSERT,      GRUB_KEYBOARD_KEY_DELETE
a5bd9f6
+  /* 0x6e */ GRUB_KEYBOARD_KEY_INSERT,      GRUB_KEYBOARD_KEY_DELETE,
a5bd9f6
+  /* 0x70 */ 0,                             0,
a5bd9f6
+  /* 0x72 */ 0,                             GRUB_KEYBOARD_KEY_JP_RO,
a5bd9f6
+  /* 0x74 */ 0,                             0,
a5bd9f6
+  /* 0x76 */ 0,                             0,
a5bd9f6
+  /* 0x78 */ 0,                             0,
a5bd9f6
+  /* 0x7a */ 0,                             0,
a5bd9f6
+  /* 0x7c */ GRUB_KEYBOARD_KEY_JP_YEN,
a5bd9f6
 }; 
a5bd9f6
 
a5bd9f6
 static void
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6