* term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Support C0 code.
This commit is contained in:
parent
265d68cd10
commit
2bf6012d7f
2 changed files with 24 additions and 14 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue