+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>
* commands/parttool.c (grub_cmd_parttool): Fix #if !GRUB_NO_MODULES
*highlight_color = grub_ofconsole_highlight_color;
}
+#define ANSI_C0 0x9b
+
static int
grub_ofconsole_readkey (int *key)
{
- char c;
+ grub_uint8_t c;
grub_ssize_t actual = 0;
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
-
if (actual > 0)
switch(c)
{
/* Backspace: Ctrl-h. */
c = '\b';
break;
+ case ANSI_C0:
case '\e':
{
grub_uint64_t start;
- grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
-
- /* On 9600 we have to wait up to 12 milliseconds. */
- 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)
+ if (c == '\e')
{
- *key = '\e';
- return 1;
+ grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
+
+ /* On 9600 we have to wait up to 12 milliseconds. */
+ 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;
}
- if (c != '[')
- return 0;
-
grub_ieee1275_read (stdin_ihandle, &c, 1, &actual);
/* On 9600 we have to wait up to 12 milliseconds. */