* term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Support C0 code.

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-05-05 18:42:33 +02:00
parent 265d68cd10
commit 2bf6012d7f
2 changed files with 24 additions and 14 deletions

View file

@ -1,3 +1,7 @@
2010-05-05 Vladimir Serbinenko <phcoder@gmail.com>
* term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Support C0 code.
2010-05-03 Vladimir Serbinenko <phcoder@gmail.com> 2010-05-03 Vladimir Serbinenko <phcoder@gmail.com>
* commands/parttool.c (grub_cmd_parttool): Fix #if !GRUB_NO_MODULES * commands/parttool.c (grub_cmd_parttool): Fix #if !GRUB_NO_MODULES

View file

@ -194,14 +194,15 @@ grub_ofconsole_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_col
*highlight_color = grub_ofconsole_highlight_color; *highlight_color = grub_ofconsole_highlight_color;
} }
#define ANSI_C0 0x9b
static int static int
grub_ofconsole_readkey (int *key) grub_ofconsole_readkey (int *key)
{ {
char c; grub_uint8_t c;
grub_ssize_t actual = 0; grub_ssize_t actual = 0;
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
if (actual > 0) if (actual > 0)
switch(c) switch(c)
{ {
@ -209,24 +210,29 @@ grub_ofconsole_readkey (int *key)
/* Backspace: Ctrl-h. */ /* Backspace: Ctrl-h. */
c = '\b'; c = '\b';
break; break;
case ANSI_C0:
case '\e': case '\e':
{ {
grub_uint64_t start; grub_uint64_t start;
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
/* On 9600 we have to wait up to 12 milliseconds. */ if (c == '\e')
start = grub_get_time_ms ();
while (actual <= 0 && grub_get_time_ms () - start < 12)
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
if (actual <= 0)
{ {
*key = '\e'; grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
return 1;
}
if (c != '[') /* On 9600 we have to wait up to 12 milliseconds. */
return 0; start = grub_get_time_ms ();
while (actual <= 0 && grub_get_time_ms () - start < 12)
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
if (actual <= 0)
{
*key = '\e';
return 1;
}
if (c != '[')
return 0;
}
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);