From: hollisb Date: Wed, 9 Nov 2005 06:07:54 +0000 (+0000) Subject: 2005-11-09 Hollis Blanchard X-Git-Tag: 1.98~2039 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d13ea639a896512aa5861f8f613102d839e556d7;p=thirdparty%2Fgrub.git 2005-11-09 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. --- diff --git a/ChangeLog b/ChangeLog index 10e8f8459..63e692091 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-11-09 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 diff --git a/term/ieee1275/ofconsole.c b/term/ieee1275/ofconsole.c index ceeaf3e69..614ec95a8 100644 --- a/term/ieee1275/ofconsole.c +++ b/term/ieee1275/ofconsole.c @@ -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