bbc6a89
From bdd89d239cd9b4089630bfb5ec862aab8086dca2 Mon Sep 17 00:00:00 2001
bbc6a89
From: Pete Batard <pete@akeo.ie>
bbc6a89
Date: Mon, 7 Aug 2017 16:20:30 +0100
146faa5
Subject: [PATCH 062/229] core: use GRUB_TERM_ definitions when handling term
bbc6a89
 characters
bbc6a89
bbc6a89
* Also use hex value for GRUB_TERM_ESC as '\e' is not in the C standard and is not understood by some compilers
bbc6a89
---
bbc6a89
 grub-core/commands/keylayouts.c    |  6 +++---
bbc6a89
 grub-core/commands/menuentry.c     |  4 ++--
bbc6a89
 grub-core/lib/crypto.c             |  4 ++--
bbc6a89
 grub-core/normal/auth.c            |  6 +++---
bbc6a89
 grub-core/normal/cmdline.c         |  4 ++--
bbc6a89
 grub-core/normal/menu.c            |  2 +-
bbc6a89
 grub-core/normal/menu_entry.c      |  2 +-
bbc6a89
 grub-core/term/efi/console.c       |  2 +-
bbc6a89
 grub-core/term/i386/pc/console.c   |  2 +-
bbc6a89
 grub-core/term/terminfo.c          | 10 +++++-----
bbc6a89
 grub-core/tests/cmdline_cat_test.c |  2 +-
bbc6a89
 grub-core/tests/gfxterm_menu.c     |  2 +-
bbc6a89
 include/grub/term.h                |  3 ++-
bbc6a89
 13 files changed, 25 insertions(+), 24 deletions(-)
bbc6a89
bbc6a89
diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
81987f4
index f4b7730208a..f35d3a369ba 100644
bbc6a89
--- a/grub-core/commands/keylayouts.c
bbc6a89
+++ b/grub-core/commands/keylayouts.c
bbc6a89
@@ -40,7 +40,7 @@ static struct grub_keyboard_layout layout_us = {
bbc6a89
     /* 0x10 */ 'm',  'n',  'o',  'p',  'q', 'r', 's', 't',
bbc6a89
     /* 0x18 */ 'u',  'v',  'w',  'x',  'y', 'z', '1', '2',
bbc6a89
     /* 0x20 */ '3',  '4',  '5',  '6',  '7', '8', '9', '0',
bbc6a89
-    /* 0x28 */ '\n', '\e', '\b', '\t', ' ', '-', '=', '[',
bbc6a89
+    /* 0x28 */ '\n', GRUB_TERM_ESC, GRUB_TERM_BACKSPACE, GRUB_TERM_TAB, ' ', '-', '=', '[',
bbc6a89
     /* According to usage table 0x31 should be mapped to '/'
bbc6a89
        but testing with real keyboard shows that 0x32 is remapped to '/'.
bbc6a89
        Map 0x31 to 0. 
bbc6a89
@@ -82,8 +82,8 @@ static struct grub_keyboard_layout layout_us = {
bbc6a89
     /* 0x10 */ 'M',  'N',  'O',  'P',  'Q', 'R', 'S', 'T',
bbc6a89
     /* 0x18 */ 'U',  'V',  'W',  'X',  'Y', 'Z', '!', '@',
bbc6a89
     /* 0x20 */ '#',  '$',  '%',  '^',  '&', '*', '(', ')',
bbc6a89
-    /* 0x28 */ '\n' | GRUB_TERM_SHIFT, '\e' | GRUB_TERM_SHIFT, 
bbc6a89
-    /* 0x2a */ '\b' | GRUB_TERM_SHIFT, '\t' | GRUB_TERM_SHIFT, 
bbc6a89
+    /* 0x28 */ '\n' | GRUB_TERM_SHIFT, GRUB_TERM_ESC | GRUB_TERM_SHIFT,
bbc6a89
+    /* 0x2a */ GRUB_TERM_BACKSPACE | GRUB_TERM_SHIFT, GRUB_TERM_TAB | GRUB_TERM_SHIFT,
bbc6a89
     /* 0x2c */ ' '  | GRUB_TERM_SHIFT,  '_', '+', '{',
bbc6a89
     /* According to usage table 0x31 should be mapped to '/'
bbc6a89
        but testing with real keyboard shows that 0x32 is remapped to '/'.
bbc6a89
diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c
81987f4
index 58d4dadf6ee..2c5363da7f5 100644
bbc6a89
--- a/grub-core/commands/menuentry.c
bbc6a89
+++ b/grub-core/commands/menuentry.c
bbc6a89
@@ -52,8 +52,8 @@ static struct
bbc6a89
   int key;
bbc6a89
 } hotkey_aliases[] =
bbc6a89
   {
bbc6a89
-    {"backspace", '\b'},
bbc6a89
-    {"tab", '\t'},
bbc6a89
+    {"backspace", GRUB_TERM_BACKSPACE},
bbc6a89
+    {"tab", GRUB_TERM_TAB},
bbc6a89
     {"delete", GRUB_TERM_KEY_DC},
bbc6a89
     {"insert", GRUB_TERM_KEY_INSERT},
bbc6a89
     {"f1", GRUB_TERM_KEY_F1},
bbc6a89
diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c
81987f4
index 683a8aaa711..ca334d5a40e 100644
bbc6a89
--- a/grub-core/lib/crypto.c
bbc6a89
+++ b/grub-core/lib/crypto.c
bbc6a89
@@ -462,7 +462,7 @@ grub_password_get (char buf[], unsigned buf_size)
bbc6a89
       if (key == '\n' || key == '\r')
bbc6a89
 	break;
bbc6a89
 
bbc6a89
-      if (key == '\e')
bbc6a89
+      if (key == GRUB_TERM_ESC)
bbc6a89
 	{
bbc6a89
 	  cur_len = 0;
bbc6a89
 	  break;
bbc6a89
@@ -487,7 +487,7 @@ grub_password_get (char buf[], unsigned buf_size)
bbc6a89
   grub_xputs ("\n");
bbc6a89
   grub_refresh ();
bbc6a89
 
bbc6a89
-  return (key != '\e');
bbc6a89
+  return (key != GRUB_TERM_ESC);
bbc6a89
 }
bbc6a89
 #endif
bbc6a89
 
bbc6a89
diff --git a/grub-core/normal/auth.c b/grub-core/normal/auth.c
81987f4
index 7338f8245e3..6be678c0de1 100644
bbc6a89
--- a/grub-core/normal/auth.c
bbc6a89
+++ b/grub-core/normal/auth.c
bbc6a89
@@ -166,13 +166,13 @@ grub_username_get (char buf[], unsigned buf_size)
bbc6a89
       if (key == '\n' || key == '\r')
bbc6a89
 	break;
bbc6a89
 
bbc6a89
-      if (key == '\e')
bbc6a89
+      if (key == GRUB_TERM_ESC)
bbc6a89
 	{
bbc6a89
 	  cur_len = 0;
bbc6a89
 	  break;
bbc6a89
 	}
bbc6a89
 
bbc6a89
-      if (key == '\b')
bbc6a89
+      if (key == GRUB_TERM_BACKSPACE)
bbc6a89
 	{
bbc6a89
 	  if (cur_len)
bbc6a89
 	    {
bbc6a89
@@ -197,7 +197,7 @@ grub_username_get (char buf[], unsigned buf_size)
bbc6a89
   grub_xputs ("\n");
bbc6a89
   grub_refresh ();
bbc6a89
 
bbc6a89
-  return (key != '\e');
bbc6a89
+  return (key != GRUB_TERM_ESC);
bbc6a89
 }
bbc6a89
 
bbc6a89
 grub_err_t
bbc6a89
diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c
81987f4
index a36180d7530..c037d5050ed 100644
bbc6a89
--- a/grub-core/normal/cmdline.c
bbc6a89
+++ b/grub-core/normal/cmdline.c
bbc6a89
@@ -626,12 +626,12 @@ grub_cmdline_get (const char *prompt_translated)
bbc6a89
 	    cl_insert (cl_terms, nterms, &lpos, &llen, &max_len, &buf, kill_buf);
bbc6a89
 	  break;
bbc6a89
 
bbc6a89
-	case '\e':
bbc6a89
+	case GRUB_TERM_ESC:
bbc6a89
 	  grub_free (cl_terms);
bbc6a89
 	  grub_free (buf);
bbc6a89
 	  return 0;
bbc6a89
 
bbc6a89
-	case '\b':
bbc6a89
+	case GRUB_TERM_BACKSPACE:
bbc6a89
 	  if (lpos > 0)
bbc6a89
 	    {
bbc6a89
 	      lpos--;
bbc6a89
diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
81987f4
index 719e2fb1c26..e7a83c2d6e2 100644
bbc6a89
--- a/grub-core/normal/menu.c
bbc6a89
+++ b/grub-core/normal/menu.c
bbc6a89
@@ -763,7 +763,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
bbc6a89
               *auto_boot = 0;
bbc6a89
 	      return current_entry;
bbc6a89
 
bbc6a89
-	    case '\e':
bbc6a89
+	    case GRUB_TERM_ESC:
bbc6a89
 	      if (nested)
bbc6a89
 		{
bbc6a89
 		  menu_fini ();
bbc6a89
diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c
81987f4
index eeeee5580ab..cdf3590a364 100644
bbc6a89
--- a/grub-core/normal/menu_entry.c
bbc6a89
+++ b/grub-core/normal/menu_entry.c
bbc6a89
@@ -1403,7 +1403,7 @@ grub_menu_entry_run (grub_menu_entry_t entry)
bbc6a89
 	    goto fail;
bbc6a89
 	  break;
bbc6a89
 
bbc6a89
-	case '\e':
bbc6a89
+	case GRUB_TERM_ESC:
bbc6a89
 	  destroy_screen (screen);
bbc6a89
 	  return;
bbc6a89
 
bbc6a89
diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c
81987f4
index 7d31095b1ef..02f64ea7441 100644
bbc6a89
--- a/grub-core/term/efi/console.c
bbc6a89
+++ b/grub-core/term/efi/console.c
bbc6a89
@@ -104,7 +104,7 @@ const unsigned efi_codes[] =
bbc6a89
     GRUB_TERM_KEY_DC, GRUB_TERM_KEY_PPAGE, GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_F1,
bbc6a89
     GRUB_TERM_KEY_F2, GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4, GRUB_TERM_KEY_F5,
bbc6a89
     GRUB_TERM_KEY_F6, GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8, GRUB_TERM_KEY_F9,
bbc6a89
-    GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F11, GRUB_TERM_KEY_F12, '\e'
bbc6a89
+    GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F11, GRUB_TERM_KEY_F12, GRUB_TERM_ESC
bbc6a89
   };
bbc6a89
 
bbc6a89
 static int
bbc6a89
diff --git a/grub-core/term/i386/pc/console.c b/grub-core/term/i386/pc/console.c
81987f4
index 28de46b576a..f6142a2dea8 100644
bbc6a89
--- a/grub-core/term/i386/pc/console.c
bbc6a89
+++ b/grub-core/term/i386/pc/console.c
bbc6a89
@@ -204,7 +204,7 @@ static int
bbc6a89
 grub_console_getkey (struct grub_term_input *term __attribute__ ((unused)))
bbc6a89
 {
bbc6a89
   const grub_uint16_t bypass_table[] = {
bbc6a89
-    0x0100 | '\e', 0x0f00 | '\t', 0x0e00 | '\b', 0x1c00 | '\r', 0x1c00 | '\n'
bbc6a89
+    0x0100 | GRUB_TERM_ESC, 0x0f00 | GRUB_TERM_TAB, 0x0e00 | GRUB_TERM_BACKSPACE, 0x1c00 | '\r', 0x1c00 | '\n'
bbc6a89
   };
bbc6a89
   struct grub_bios_int_registers regs;
bbc6a89
   unsigned i;
bbc6a89
diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c
81987f4
index f0d3e3debc6..d317efa368d 100644
bbc6a89
--- a/grub-core/term/terminfo.c
bbc6a89
+++ b/grub-core/term/terminfo.c
bbc6a89
@@ -426,12 +426,12 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len,
bbc6a89
     }
bbc6a89
   *len = 1;
bbc6a89
   keys[0] = c;
bbc6a89
-  if (c != ANSI_CSI && c != '\e')
bbc6a89
+  if (c != ANSI_CSI && c != GRUB_TERM_ESC)
bbc6a89
     {
bbc6a89
       /* Backspace: Ctrl-h.  */
bbc6a89
       if (c == 0x7f)
bbc6a89
-	c = '\b'; 
bbc6a89
-      if (c < 0x20 && c != '\t' && c!= '\b' && c != '\n' && c != '\r')
bbc6a89
+	c = GRUB_TERM_BACKSPACE;
bbc6a89
+      if (c < 0x20 && c != GRUB_TERM_TAB && c!= GRUB_TERM_BACKSPACE && c != '\n' && c != '\r')
bbc6a89
 	c = GRUB_TERM_CTRL | (c - 1 + 'a');
bbc6a89
       *len = 1;
bbc6a89
       keys[0] = c;
bbc6a89
@@ -487,7 +487,7 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len,
bbc6a89
 	  GRUB_TERM_KEY_HOME, GRUB_TERM_KEY_END };
bbc6a89
     unsigned i;
bbc6a89
 
bbc6a89
-    if (c == '\e')
bbc6a89
+    if (c == GRUB_TERM_ESC)
bbc6a89
       {
bbc6a89
 	CONTINUE_READ;
bbc6a89
 
bbc6a89
@@ -606,7 +606,7 @@ grub_terminfo_getkey (struct grub_term_input *termi)
bbc6a89
 			 &data->npending, data->readkey);
bbc6a89
 
bbc6a89
 #if defined(__powerpc__) && defined(GRUB_MACHINE_IEEE1275)
bbc6a89
-  if (data->npending == 1 && data->input_buf[0] == '\e'
bbc6a89
+  if (data->npending == 1 && data->input_buf[0] == GRUB_TERM_ESC
bbc6a89
       && grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_REPEAT)
bbc6a89
       && grub_get_time_ms () - data->last_key_time < 1000
bbc6a89
       && (data->last_key & GRUB_TERM_EXTENDED))
bbc6a89
diff --git a/grub-core/tests/cmdline_cat_test.c b/grub-core/tests/cmdline_cat_test.c
81987f4
index f1e21439e2b..baea7688a1d 100644
bbc6a89
--- a/grub-core/tests/cmdline_cat_test.c
bbc6a89
+++ b/grub-core/tests/cmdline_cat_test.c
bbc6a89
@@ -103,7 +103,7 @@ cmdline_cat_test (void)
bbc6a89
 					     '/', 't', 'e', 's', 't', '.',
bbc6a89
 					     't', 'x', 't', '\n',
bbc6a89
 					     GRUB_TERM_NO_KEY,
bbc6a89
-					     GRUB_TERM_NO_KEY, '\e'},
bbc6a89
+					     GRUB_TERM_NO_KEY, GRUB_TERM_ESC},
bbc6a89
 					 23);
bbc6a89
 
bbc6a89
       grub_video_checksum ("cmdline_cat");
bbc6a89
diff --git a/grub-core/tests/gfxterm_menu.c b/grub-core/tests/gfxterm_menu.c
81987f4
index 8f63dc27a35..12836fb9659 100644
bbc6a89
--- a/grub-core/tests/gfxterm_menu.c
bbc6a89
+++ b/grub-core/tests/gfxterm_menu.c
bbc6a89
@@ -146,7 +146,7 @@ gfxterm_menu (void)
bbc6a89
 	    return;
bbc6a89
 	  }
bbc6a89
 	grub_terminal_input_fake_sequence ((int []) { -1, -1, -1, GRUB_TERM_KEY_DOWN, -1, 'e',
bbc6a89
-	      -1, GRUB_TERM_KEY_RIGHT, -1, 'x', -1,  '\e', -1, '\e' }, 14);
bbc6a89
+	      -1, GRUB_TERM_KEY_RIGHT, -1, 'x', -1,  GRUB_TERM_ESC, -1, GRUB_TERM_ESC }, 14);
bbc6a89
 
bbc6a89
 	grub_video_checksum (tests[j].name);
bbc6a89
 
bbc6a89
diff --git a/include/grub/term.h b/include/grub/term.h
81987f4
index 5ffb38f69aa..8117e2a24da 100644
bbc6a89
--- a/include/grub/term.h
bbc6a89
+++ b/include/grub/term.h
bbc6a89
@@ -55,7 +55,8 @@
bbc6a89
 #define GRUB_TERM_KEY_INSERT    (GRUB_TERM_EXTENDED | 0x52)
bbc6a89
 #define GRUB_TERM_KEY_CENTER    (GRUB_TERM_EXTENDED | 0x4c)
bbc6a89
 
bbc6a89
-#define GRUB_TERM_ESC		'\e'
bbc6a89
+/* Hex value is used for ESC, since '\e' is nonstandard */
bbc6a89
+#define GRUB_TERM_ESC		0x1b
bbc6a89
 #define GRUB_TERM_TAB		'\t'
bbc6a89
 #define GRUB_TERM_BACKSPACE	'\b'
bbc6a89
 
bbc6a89
-- 
81987f4
2.15.0
bbc6a89