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 + + * 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 * 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