Hello. We have made those simple patches to fix some problems with unimplemented keys in ieee1275 terminals. The first patch (ofconsole_keys) implements the "backspace" and "delete" keys. The second one (ofconsole_unimplemented_keys) will clean the buffer of unknown keys and prevent garbage to show up in the screen. This patch was tested in both P5 and P6 machines. Please review and let me know your opinion about it. Thank you.
-- Best Regards, Manoel Rebelo Abranches Software engineer IBM - Linux Technology Center - Brazil
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: abranc...@abranches-laptop-20100205193309-\ # 8ff6d3xgumr490c7 # target_branch: file:///home/abranches/GRUB/grub/ # testament_sha1: 8a81468fed40ede8bbced8c4fdc5ff74d7e8519c # timestamp: 2010-02-05 17:33:50 -0200 # base_revision_id: phco...@gmail.com-20100202234935-y9rsa3vbdoj8tey6 # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2010-02-02 23:49:35 +0000 +++ ChangeLog 2010-02-05 19:33:09 +0000 @@ -1,3 +1,7 @@ +2010-02-05 Manoel Rebelo Abranches <mrab...@br.ibm.com> + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Add some unimplemented keys. + 2010-02-03 Vladimir Serbinenko <phco...@gmail.com> * util/hostdisk.c (open_device): Don't use partition device when reading === modified file 'term/ieee1275/ofconsole.c' --- term/ieee1275/ofconsole.c 2010-01-22 19:42:02 +0000 +++ term/ieee1275/ofconsole.c 2010-02-05 19:33:09 +0000 @@ -156,41 +156,52 @@ 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; - - switch (c) + + /*We expect the format \e[ in special keys. Anything else is just ignored.*/ + if (c != 91 ) + return 0; + + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); + if (actual <= 0) + return 0; + + 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 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; # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWdLKDjMAAyhfgFUwcff//34G loy////4UAXvONraRQlhBCKDCSRTaCSbyRtDJoAp5DUxHkmmQxPUekG1DjJkyYjEwAmTBMgBowjA EMAlAiApnqmg9U/TVNP1NQ9TEB6gAND1GgA4yZMmIxMAJkwTIAaMIwBDAJJCZADST00FM0nplJo8 iep6nlMmmQBkekgklABWIxPZc6LrgohTDLegr8UIuMkB5+MZjbJNHKm6vDLDGEJDqSXVPFTTKLYY U4QoEqCNOMOqqh/CVuKSV7MySSx0SUgDEVI9D28uAf2e/8w/Sgw+A1wnOkUUVQVTpwXel3WGu38W NQkY2SGZuNSK5ZE9crKoubJgdq4fecvCg2xMzLqYRUwJIxxuhyfTSm9cf7OrLrlOkF8Vr+VLFDOZ waCAvUuKt23tbc2fiw+UMsGXe7HYk7FW9JcocPVxcYWpkR+5h2jCWEXSLo2Ri0QmWkiw1GjzQmiY GCN24CYc0cUFj82tCBkm4Zs8kH27nMijkQ2g0JVdiGrVFMpklO+6PcFNZRMCUVHFhkEUEHX2CsCK HdIxHqJljgSQkBJHan1FIHzQ4cwm4uLmCSS6ZI2SRRRRNHOnPphStD4JJLIO83CSYHXLMo4oFSxW lpAwp5NhdoimjlZL2wQ825kEjGYMoE7i0tUYwJBcKUBFDyUGqUiQszA1IeiNZQPP+htutdQi4mAx RQBUJgYChNHPAiSLT6XhuAuJNYrbSwYyvNAGDsDYqqsRiwcxjvakGKIIIxzMhiiSEVFDQTJkpVmb 6b91TlY3NeTm91uIrrUtvADPQ0NZMDFZncjLcZIc4VNODZogUlBbNGeE7HDphmRPPrRSWSrHm6w2 VmWlN1XsY1GB0AegHI66NYGdm4xAfroR0IlM1DkEgbKA8NoQ1V51bvh5HhizfZ7LJqy0LQmEMFmi LiL+AWxHK4olQuS5NrFBVNqnQOh7+I1Vmpzo2cgpEKwym3q7+5ObyvUxZod4VAguQkJSaqKorfWp gH7IeUmI7PX+4B5N6ZcX1dFxQ5ncxhyHLmOH4+McmUgeLMpIgx1HE46S+b0HjWUgxjNm9bylE5Mj Ih6Xsu1hsCvwAV5H8Xgg7pwKkuQKO7abjEWEpYYPDqIztJTKX0W5xu4gVHEGRWZSgn9U4QeSPTzz +Z8kESHUWjSPH6ys8QLpNUcDrRcspOarUa8HTI9CI44m1o50rOCUaEdrDl4nJ2/WA4tB4Nal0nYd hrORb/KLj1rWQLDeEe5Lz7TY/tPrBB0IzvGO+wmYcsNpav6LN8mH33jkMd5NkHqJnvXtNhjaSiXI n0oh57V561M45EjM704V2mDkb3GQawWIyCpV1JG22lH7jAyjSHRy4kUeBodIDpnA2JQW8CxfI9Ri TYJ9j5VpHMhiTchuw89ptOCPUC9qVTZRTHs8zIhcehDtNIDsVrL8Rrvolt3DiQvGHwzLrfAsRmFI WyIjNSLnRizvhWgbqQfk6d0RsNQR1mZHOlQWldRFaWtMsIs6LYSoHEpMhwMZiSSHe9HUhtZPILsL h3JDgcVqR6dl5nGPNQLwPjJ9ZJ2LtjKoZQG0TxIehh+jx6jWOWEUsEosJl7vTqW1F/Wug5s2B4SN 4ehKpJhrUH4OSs5IGBkW3B3o4QXlq/FkGDjknwq9iyBEou2ULVTKI5ccso2NBUj6ovIfnOBWAwmL kPAXUDJOdQB9crfW4uZPrlsE4qDAfDEII+YRHMdiHJy62Qb01Iwhsg2E0s9YXKpAxIOpKZ3NYTbt Khff8ri/s7PbmZETA6wp1DF74GUxU+4K0aQ0doPNqC1Fa8RMqGC/JGBAvQyPXqvAtLIn08gtVaD7 miY84gQFdU41Idg6Qh6Skl2GoHpr/X/F3JFOFCQ0soOMwA==
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: abranc...@abranches-laptop-20100205204212-\ # 4svg7kg0h5wznomh # target_branch: ../grub # testament_sha1: f50c3d62f277fc3bd9f0c90718283fb6e16c666d # timestamp: 2010-02-05 18:44:04 -0200 # base_revision_id: abranc...@abranches-laptop-20100205193309-\ # 8ff6d3xgumr490c7 # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2010-02-05 19:33:09 +0000 +++ ChangeLog 2010-02-05 20:42:12 +0000 @@ -1,4 +1,9 @@ 2010-02-05 Manoel Rebelo Abranches <mrab...@br.ibm.com> + + Clean buffer of still unimplemented keys to prevent garbage to show up in the screen. + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): New variable. + +2010-02-05 Manoel Rebelo Abranches <mrab...@br.ibm.com> * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Add some unimplemented keys. === modified file 'term/ieee1275/ofconsole.c' --- term/ieee1275/ofconsole.c 2010-02-05 19:33:09 +0000 +++ term/ieee1275/ofconsole.c 2010-02-05 20:42:12 +0000 @@ -152,7 +152,11 @@ grub_ofconsole_readkey (int *key) { char c; + char ctmp; grub_ssize_t actual = 0; + grub_ssize_t actualtmp = 0; + /*Indicates if we have a implemented key*/ + char implemented = 1; grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); @@ -170,11 +174,14 @@ return 1; } - /*We expect the format \e[ in special keys. Anything else is just ignored.*/ if (c != 91 ) - return 0; + { + implemented = 0; + break; + } + + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); if (actual <= 0) return 0; @@ -200,12 +207,24 @@ /* Left: Ctrl-b. */ c = 2; break; + default: + implemented = 0; + break; } break; } + /*Stores current 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 # Begin bundle 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 QkEGG1BE
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel