These are some keyboard fixes. keys.patch --------------------------------------------------------------- This patch implements functionality of some keys (Home, End and Backspace) following the ECMA-48 standard.
unimplemented_key.patch ---------------------------------------------------------------- This patch prevents that fancy characters show up in screen when keys that the virtual terminal doesn't understand are pressed. -- Best Regards, Manoel Abranches <[EMAIL PROTECTED]> IBM Linux Technology Center Brazil
Index: term/ieee1275/ofconsole.c =================================================================== --- term/ieee1275/ofconsole.c (revision 1917) +++ term/ieee1275/ofconsole.c (working copy) @@ -150,41 +150,60 @@ grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual > 0 && c == '\e') - { - grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual <= 0) - { + if (actual > 0) + switch(c){ + case 0x7f: + /* Backspace: Ctrl-h. */ + c=8; + break; + case '\e': + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); + if (actual <= 0) + { *key = '\e'; return 1; } + + if (c != 91 ) + return 0; + + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); + + if (actual <= 0) + return 0; - if (c != 91) - return 0; - - grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual <= 0) - return 0; - - switch (c) + switch (c) { - case 65: - /* Up: Ctrl-p. */ - c = 16; - break; - case 66: - /* Down: Ctrl-n. */ - c = 14; - break; - case 67: - /* Right: Ctrl-f. */ - c = 6; - break; - case 68: - /* Left: Ctrl-b. */ - c = 2; - break; + case 72: + /* Home: Ctrl-a. */ + c = 1; + break; + case 70: + /* End: Ctrl-e. */ + c = 5; + break; + case 51: + /* Delete: Ctrl-d. */ + c = 4; + break; + case 65: + /* Up: Ctrl-p. */ + c = 16; + break; + case 66: + /* Down: Ctrl-n. */ + c = 14; + break; + case 67: + /* Right: Ctrl-f. */ + c = 6; + break; + case 68: + /* Left: Ctrl-b. */ + c = 2; + break; } + break; } *key = c;
--- term/ieee1275/ofconsole-bk.c 2008-11-18 17:00:46.000000000 +0100 +++ term/ieee1275/ofconsole.c 2008-11-18 16:59:50.000000000 +0100 @@ -146,7 +146,10 @@ static int grub_ofconsole_readkey (int *key) { char c; + char ctmp; grub_ssize_t actual = 0; + grub_ssize_t actualtmp = 0; + char implemented = 1;//indicates an unimplemented key grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); @@ -165,8 +168,11 @@ grub_ofconsole_readkey (int *key) } if (c != 91 ) - return 0; - + { + implemented = 0; + break; + } + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); if (actual <= 0) @@ -202,12 +208,25 @@ grub_ofconsole_readkey (int *key) /* Left: Ctrl-b. */ c = 2; break; + default: + implemented = 0; + break; } break; } + + /*stores actual state*/ + ctmp = c; + actualtmp = actual; + /*clean buffer*/ + while(actual > 0 && !grub_ieee1275_read(stdin_ihandle, &c, 1, &actual)); + /*return to previos state*/ + c = ctmp; + actual = actualtmp; *key = c; - return actual > 0; + return (actual > 0 && implemented); + } static int
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel