This patch fixes the line-wrapping problems we've been having on PPC. I rearranged grub_ofconsole_getwh() slightly to avoid excessive indentation. I will apply soon unless people criticize my ChangeLog entry. ;)

-Hollis

Index: ChangeLog
===================================================================
RCS file: /cvsroot/grub/grub2/ChangeLog,v
retrieving revision 1.193
diff -u -p -r1.193 ChangeLog
--- ChangeLog   7 Nov 2005 22:28:55 -0000       1.193
+++ ChangeLog   8 Nov 2005 04:50:12 -0000
@@ -1,3 +1,12 @@
+2005-11-03  Hollis Blanchard  <[EMAIL PROTECTED]>
+
+       * term/ieee1275/ofconsole.c (grub_ofconsole_width): New variable.
+       (grub_ofconsole_height): Likewise.
+       (grub_ofconsole_putchar): If grub_curr_x exceeds console width,
+       manually insert a '\n'.
+       (grub_ofconsole_getwh): Set and return `grub_ofconsole_width' and
+       `grub_ofconsole_height'.  Return early if these are already set.
+
 2005-11-07  Vincent Pelletier  <[EMAIL PROTECTED]>
 
        * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Add
Index: term/ieee1275/ofconsole.c
===================================================================
RCS file: /cvsroot/grub/grub2/term/ieee1275/ofconsole.c,v
retrieving revision 1.7
diff -u -p -r1.7 ofconsole.c
--- term/ieee1275/ofconsole.c   4 Nov 2005 04:50:14 -0000       1.7
+++ term/ieee1275/ofconsole.c   8 Nov 2005 04:50:13 -0000
@@ -28,6 +28,9 @@
 static grub_ieee1275_ihandle_t stdout_ihandle;
 static grub_ieee1275_ihandle_t stdin_ihandle;
 
+static grub_uint8_t grub_ofconsole_width;
+static grub_uint8_t grub_ofconsole_height;
+
 static int grub_curr_x;
 static int grub_curr_y;
 
@@ -79,7 +82,11 @@ grub_ofconsole_putchar (grub_uint32_t c)
       grub_curr_x = 0;
     }
   else
-    grub_curr_x++;
+    {
+      grub_curr_x++;
+      if (grub_curr_x > grub_ofconsole_width)
+       grub_putcode ('\n');
+    }
   grub_ieee1275_write (stdout_ihandle, &chr, 1, 0);
 }
 
@@ -220,50 +227,48 @@ grub_ofconsole_getwh (void)
   grub_ieee1275_ihandle_t options;
   char *val;
   grub_ssize_t lval;
-  static grub_uint8_t w, h;
 
-  /* Once we have them, don't ask them again.  */
-  if (!w || !h)
+  if (grub_ofconsole_width && grub_ofconsole_height)
+    return (grub_ofconsole_width << 8) | grub_ofconsole_height;
+
+  if (! grub_ieee1275_finddevice ("/options", &options)
+      && options != (grub_ieee1275_ihandle_t) -1)
     {
-      if (! grub_ieee1275_finddevice ("/options", &options)
-         && options != (grub_ieee1275_ihandle_t) -1)
-        {
-          if (! grub_ieee1275_get_property_length (options, "screen-#columns",
-                                                   &lval) && lval != -1)
-            {
-             val = grub_malloc (lval);
-             if (val)
-                {
-                  if (! grub_ieee1275_get_property (options, "screen-#columns",
-                                                    val, lval, 0))
-                    w = (grub_uint8_t) grub_strtoul (val, 0, 10);
-
-                  grub_free (val);
-                }
-            }
-          if (! grub_ieee1275_get_property_length (options, "screen-#rows",
-                                                   &lval) && lval != -1)
-            {
-             val = grub_malloc (lval);
-             if (val)
-                {
-                  if (! grub_ieee1275_get_property (options, "screen-#rows",
-                                                    val, lval, 0))
-                    h = (grub_uint8_t) grub_strtoul (val, 0, 10);
-
-                  grub_free (val);
-                }
-            }
+      if (! grub_ieee1275_get_property_length (options, "screen-#columns",
+                                              &lval) && lval != -1)
+       {
+         val = grub_malloc (lval);
+         if (val)
+           {
+             if (! grub_ieee1275_get_property (options, "screen-#columns",
+                                               val, lval, 0))
+               grub_ofconsole_width = (grub_uint8_t) grub_strtoul (val, 0, 10);
+
+             grub_free (val);
+           }
+       }
+      if (! grub_ieee1275_get_property_length (options, "screen-#rows",
+                                              &lval) && lval != -1)
+       {
+         val = grub_malloc (lval);
+         if (val)
+           {
+             if (! grub_ieee1275_get_property (options, "screen-#rows",
+                                               val, lval, 0))
+               grub_ofconsole_height = (grub_uint8_t) grub_strtoul (val, 0, 
10);
+
+             grub_free (val);
+           }
        }
     }
 
   /* Use a small console by default.  */
-  if (! w)
-    w = 80;
-  if (! h)
-    h = 24;
+  if (! grub_ofconsole_width)
+    grub_ofconsole_width = 80;
+  if (! grub_ofconsole_height)
+    grub_ofconsole_height = 24;
 
-  return (w << 8) | h;
+  return (grub_ofconsole_width << 8) | grub_ofconsole_height;
 }
 
 static void
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to