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
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWUGG1BEABgHfgFVwcff//34n
noy////6YAnbvilAAAAAAAAAAABxkyaGIxNGARgJhAGAmmjTI0AxxkyaGIxNGARgJhAGAmmjTI0A
wyommaJoADTRoAAAaAAAAAMKRTGJHqGmaQ000DQGTRoNNAGmgGgcZMmhiMTRgEYCYQBgJpo0yNAM
FSSAQE0AmJhNNBTanpk1T09TBE9NDKY0yixJAWcSIJacIeKJGORITAaiokwZS7aKCqYCjDasxDC5
pU/2ZgQUQGS2JF3hu4KtKp/OXQqz1qIT6lEI6gcrkbiqeNMuWtOjbffz69znTBKS5Tkuz5OTfWLJ
GVMqQs5V2qqWXtNMOmr6Y3ZZbeLfJDirfS3FYR07LSQuuklwmCUaipdFSqlV93dqeI/+P6f1GVDY
pgVvEqcEboNkRmYpIpBIEJAcUFIUZfOHX2cuytXm/1ZerkM2bVe7KaVff13S6r3ZZhlsuxpbZ58t
S6s82FbGWeF+6sL2a8ws1L2N/+XS536cy1RxJs7wO0LfIwUdYBiMGAonjmg3ZLaJYXzDPhlyj9K7
X7NTG+srtPz8eX/HM1tWmEcL2xTVKOWbVj00VovZuPVvxchmLsFjBbNsU/6Z656Ozw8LW9rxXLnm
ed/e+qtWqvXjVenV2eN+Hpx7wvv9LwXkng5Ef7eCx0VKozqO2ppx0t6ur0FY092XuT3fSrRPbpUw
jmNxmbTmPOuPOckckRrTEUeLvicZ1I8ZIxu6FbDxwrfara/9dPhpll7Kw28m29HBuimR65HV9UdR
ak4c2i1rPDi1H2OYvvuG51OGsHBUuKvWRKEXU+wq0JR6V/K8uph6qGpobbojJWci62UTUimiYa4u
aRPOP+IvXUPTQta0cKTRJO5ojbkjZDFji5UcXDd39vDVkprRxvwmK2iXTbi8bJe1sLt6hsY2nbm1
OO9US6r7tSYNrFyMmC58PQvbuPBy8dc3JruLhWW7CdKPqfJZEvdGRbaLRFpcMtzcs3WXNkyMm5Vm
Jki9ffMVnRrTFdljuZNHIwsjnc/KwRfDTFizXvfgurlnFt4rnDNF7KJosvplx5MmvSJk3rk1LyyN
KWVjK0Z6ZuJowZtG5o1P+cR5ol3FtqVstutpfgltd41NiphKYqTYvb3S3vNEo8i5N2rJTaxbHG5x
ltzwLbm51qaFGvFJnh8sF4z0yVrWWbFzBfg3FtaNWrc1azkaNbQ3O8b+PRTRVb743ejFi3sd+u9s
W66aHOzyw3uDbylXq0rbxyWuxanQpzROE8zY5nvRyXq49dTmythgpNSzi2VwWucyODXmvbWGjFi1
prUbFzg42q5cXZDmbNipo/b0D0I2THfq2bawaWsXOy7Jc53mbnDm15HBp9NHM2NznidpZHj0Yas+
SJ07utyxLs8EZIy42iyTIvXLuOzViyYsjk7Ow1c23oz6Pv+XwVyVXt997ibKaylNkmwchfwTohjp
cyv8I2smrXfKztZe8atf6NNeietPUp1qFKPYo9q6H30cxrZuJSrlU9rynQpSl96rFlTf9Har4J2v
gvZLGjbLly9UkXmuMIcWNFSqilv7ZPq+H1YDH9GS+/NmsmD9H8n6r0yqr2K67Lyu0c7fGCylvaUW
hZPYWLnH/5y5SqjLHSxgncpOlqaFO95P39b3us/KSPtdroinvKWKcbxfT+TmqfcWMIfU6HKboeUY
Q/ZOFRVTsTrXzFEnUj/SfCSLPn9rkD93dJuTWt88+f7LnK5VO99L6XzcTxdvdizeTW8nXI28FeZ/
NkXOt0HzWXKTidp5Fjg/NLJI/qf5r6/z/l657fxPnJGUX3ObB9BcXed73gucjmhzKNW3tf5XR0c/
fo555/U9zL3s2i8iZ54q9kcsMXik97K6YpK+FpdD2LW9tdDkef2Lol7fJg6mIucST2PFosyedv2/
lG9q/inSYFx2mPLJ6/2+B1f0ws+L4v3xk2qSeZHV9PGotVfX3OB0NPZyu83JvNujKpVXN+8tCjLu
fE46iXy5xvvTifU622cKTTJvRx+CLzmcbH9exP+bk5Tu5IbXa2R0wslibJs6OC0dljlHSmV1pI5C
pI1JswnRUR/11uLRH94oqM2o4OZbo9dcjyPJqR4NDsYxKXXc7NrSaMk7lT0u+JuT6J/Y9pynNSbv
4rtqc47hi2JgqFGv5xXwn9vyfWZ/Wfmj9InZ3PdRU77PmLvYTcfquTX7Y0nReRPjdm93Whd4exlX
1nlbqf4SfN/MsaHY4ffWie+2J3x7D4UNE/D8Mm4qNR6ocuno9q5i6UPXakOp3vtwj5P4GXZPSjmh
xF6fAdEMcE9yVoo7U8o2C7XJF0az621Fwo9U9UNeeeL3r0fFFW9xuZTVJrNxZ7Isll6Zw8nU2GA6
FPBMntTCG6J+LNrvpjM10u1uF7rpMSkxKdSXJEuh/2xe6l65MmwsnzHHkk1pGVEpPw9fOnJHnjh5
JwdB9ClOM+1odx3pNUKaCzchxrJNm2SKFQwrcngjvuTP7+X1vu751L5I6/3vjh0x0u54DBMPloL+
uphDhs1TU1FO6SOpHyR0oudyq9JTXEqSjdC5El7uFoXdi5lgF+z31vm59C43qS5k26utLGpOBdfq
F6L/xMS6j0yLJYee3nXSRUpoVCVxHmNzbJz9Em9L2tCxjmO9Jg99azHisue8pqR9o+X472mttrq4
vL085cZmJ4DM5VF7hewhyuBhQzfcakdN86bdJsXmTiVVo6pIvh++1PilRnQ4M0nAvOJJUj+HonM5
OOJvTdmav93vsMtjcmYtIcinupkvX/1Hs0iYyODatHSi5Y+gvXN+GEbd3LJ8Re4+7/f2v/xdyRTh
QkEGG1BE
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to