* include/grub/term.h (struct grub_term): Add `getcolor' function. (grub_getcolor): New function. * kern/term.c (grub_getcolor): New function. * normal/menu.c (GRUB_COLOR_MENU_NORMAL): New macro. (GRUB_COLOR_MENU_HIGHLIGHT): New macro. (print_entry): Set normal and highlight colors to `GRUB_COLOR_MENU_NORMAL' and `GRUB_COLOR_MENU_HIGHLIGHT', respectively, before printing and restore them to old values afterwards. (run_menu): Likewise. * term/efi/console.c (grub_console_getcolor): New function. (struct grub_console_term.getcolor): New variable. * term/gfxterm.c (grub_virtual_screen_getcolor): New function. (struct grub_console_term.getcolor): New variable. * term/i386/pc/console.c (grub_console_getcolor): New function. (struct grub_console_term.getcolor): New variable. * term/ieee1275/ofconsole.c (grub_ofconsole_getcolor): New function. (struct grub_console_term.getcolor): New variable. * term/i386/pc/serial.c (grub_serial_setcolor): Remove function. (struct grub_console_term.setcolor): Remove variable. * term/i386/pc/vesafb.c (grub_virtual_screen_setcolor): Remove function. (struct grub_console_term.setcolor): Remove variable. * term/i386/pc/vga.c (grub_vga_setcolor): Remove function. (struct grub_console_term.setcolor): Remove variable. diff -x '*~' -x configure -Nurp ../grub2/include/grub/term.h ./include/grub/term.h --- ../grub2/include/grub/term.h 2007-07-22 01:32:22.000000000 +0200 +++ ./include/grub/term.h 2007-12-23 21:20:42.000000000 +0100 @@ -164,6 +164,10 @@ struct grub_term color is VGA's. */ void (*setcolor) (grub_uint8_t normal_color, grub_uint8_t highlight_color); + /* Get the normal color and the highlight color. The format of each + color is VGA's. */ + void (*getcolor) (grub_uint8_t *normal_color, grub_uint8_t *highlight_color); + /* Turn on/off the cursor. */ void (*setcursor) (int on); @@ -197,6 +201,8 @@ void EXPORT_FUNC(grub_cls) (void); void EXPORT_FUNC(grub_setcolorstate) (grub_term_color_state state); void EXPORT_FUNC(grub_setcolor) (grub_uint8_t normal_color, grub_uint8_t highlight_color); +void EXPORT_FUNC(grub_getcolor) (grub_uint8_t *normal_color, + grub_uint8_t *highlight_color); int EXPORT_FUNC(grub_setcursor) (int on); int EXPORT_FUNC(grub_getcursor) (void); void EXPORT_FUNC(grub_refresh) (void); diff -x '*~' -x configure -Nurp ../grub2/kern/term.c ./kern/term.c --- ../grub2/kern/term.c 2007-07-22 01:32:26.000000000 +0200 +++ ./kern/term.c 2007-12-23 21:08:10.000000000 +0100 @@ -230,6 +230,13 @@ grub_setcolor (grub_uint8_t normal_color (grub_cur_term->setcolor) (normal_color, highlight_color); } +void +grub_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color) +{ + if (grub_cur_term->getcolor) + (grub_cur_term->getcolor) (normal_color, highlight_color); +} + int grub_setcursor (int on) { diff -x '*~' -x configure -Nurp ../grub2/normal/menu.c ./normal/menu.c --- ../grub2/normal/menu.c 2007-11-10 21:32:32.000000000 +0100 +++ ./normal/menu.c 2007-12-23 21:35:23.000000000 +0100 @@ -25,6 +25,9 @@ #include #include +#define GRUB_COLOR_MENU_NORMAL 0x13 +#define GRUB_COLOR_MENU_HIGHLIGHT 0x1f + static void draw_border (void) { @@ -105,7 +108,8 @@ print_entry (int y, int highlight, grub_ grub_ssize_t len; grub_uint32_t *unicode_title; grub_ssize_t i; - + grub_uint8_t normal_code, highlight_code; + title = entry ? entry->title : ""; unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title)); if (! unicode_title) @@ -121,6 +125,8 @@ print_entry (int y, int highlight, grub_ return; } + grub_getcolor (&normal_code, &highlight_code); + grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT); grub_setcolorstate (highlight ? GRUB_TERM_COLOR_HIGHLIGHT : GRUB_TERM_COLOR_NORMAL); @@ -128,7 +134,7 @@ print_entry (int y, int highlight, grub_ grub_gotoxy (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y); for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1, i = 0; - x < GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN; + x <= GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN; i++) { if (i < len @@ -155,6 +161,7 @@ print_entry (int y, int highlight, grub_ } grub_gotoxy (GRUB_TERM_CURSOR_X, y); + grub_setcolor (normal_code, highlight_code); grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); grub_free (unicode_title); } @@ -279,6 +286,7 @@ run_menu (grub_menu_t menu, int nested) int first, offset; unsigned long saved_time; int default_entry; + grub_uint8_t normal_code, highlight_code; first = 0; @@ -301,8 +309,11 @@ run_menu (grub_menu_t menu, int nested) refresh: grub_setcursor (0); + grub_getcolor (&normal_code, &highlight_code); + grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT); grub_menu_init_page (nested, 0); print_entries (menu, first, offset); + grub_setcolor (normal_code, highlight_code); grub_refresh (); while (1) diff -x '*~' -x configure -Nurp ../grub2/term/efi/console.c ./term/efi/console.c --- ../grub2/term/efi/console.c 2007-07-22 01:32:30.000000000 +0200 +++ ./term/efi/console.c 2007-12-23 21:42:35.000000000 +0100 @@ -260,6 +260,13 @@ grub_console_setcolor (grub_uint8_t norm } static void +grub_console_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color) +{ + *normal_color = grub_console_normal_color; + *highlight_color = grub_console_highlight_color; +} + +static void grub_console_setcursor (int on) { grub_efi_simple_text_output_interface_t *o; @@ -283,6 +290,7 @@ static struct grub_term grub_console_ter .cls = grub_console_cls, .setcolorstate = grub_console_setcolorstate, .setcolor = grub_console_setcolor, + .getcolor = grub_console_getcolor, .setcursor = grub_console_setcursor, .flags = 0, .next = 0 diff -x '*~' -x configure -Nurp ../grub2/term/gfxterm.c ./term/gfxterm.c --- ../grub2/term/gfxterm.c 2007-07-22 01:32:30.000000000 +0200 +++ ./term/gfxterm.c 2007-12-23 21:43:40.000000000 +0100 @@ -848,6 +848,13 @@ grub_virtual_screen_setcolor (grub_uint8 } static void +grub_virtual_screen_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color) +{ + *normal_color = virtual_screen.fg_color_setting; + *highlight_color = virtual_screen.bg_color_setting; +} + +static void grub_gfxterm_setcursor (int on) { if (virtual_screen.cursor_state != on) @@ -883,6 +890,7 @@ static struct grub_term grub_video_term .cls = grub_gfxterm_cls, .setcolorstate = grub_virtual_screen_setcolorstate, .setcolor = grub_virtual_screen_setcolor, + .getcolor = grub_virtual_screen_getcolor, .setcursor = grub_gfxterm_setcursor, .refresh = grub_gfxterm_refresh, .flags = 0, diff -x '*~' -x configure -Nurp ../grub2/term/i386/pc/console.c ./term/i386/pc/console.c --- ../grub2/term/i386/pc/console.c 2007-07-22 01:32:30.000000000 +0200 +++ ./term/i386/pc/console.c 2007-12-23 21:09:59.000000000 +0100 @@ -117,6 +117,13 @@ grub_console_setcolor (grub_uint8_t norm grub_console_highlight_color = highlight_color; } +static void +grub_console_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color) +{ + *normal_color = grub_console_normal_color; + *highlight_color = grub_console_highlight_color; +} + static struct grub_term grub_console_term = { .name = "console", @@ -132,6 +139,7 @@ static struct grub_term grub_console_ter .cls = grub_console_cls, .setcolorstate = grub_console_setcolorstate, .setcolor = grub_console_setcolor, + .getcolor = grub_console_getcolor, .setcursor = grub_console_setcursor, .flags = 0, .next = 0 diff -x '*~' -x configure -Nurp ../grub2/term/i386/pc/serial.c ./term/i386/pc/serial.c --- ../grub2/term/i386/pc/serial.c 2007-11-10 21:23:14.000000000 +0100 +++ ./term/i386/pc/serial.c 2007-12-23 21:41:22.000000000 +0100 @@ -454,13 +454,6 @@ grub_serial_setcolorstate (const grub_te } static void -grub_serial_setcolor (grub_uint8_t normal_color __attribute__ ((unused)), - grub_uint8_t highlight_color __attribute__ ((unused))) -{ - /* FIXME */ -} - -static void grub_serial_setcursor (const int on) { if (on) @@ -483,7 +476,6 @@ static struct grub_term grub_serial_term .gotoxy = grub_serial_gotoxy, .cls = grub_serial_cls, .setcolorstate = grub_serial_setcolorstate, - .setcolor = grub_serial_setcolor, .setcursor = grub_serial_setcursor, .flags = 0, .next = 0 diff -x '*~' -x configure -Nurp ../grub2/term/i386/pc/vesafb.c ./term/i386/pc/vesafb.c --- ../grub2/term/i386/pc/vesafb.c 2007-07-22 01:32:31.000000000 +0200 +++ ./term/i386/pc/vesafb.c 2007-12-23 21:41:09.000000000 +0100 @@ -565,13 +565,6 @@ grub_virtual_screen_setcolorstate (grub_ } static void -grub_virtual_screen_setcolor (grub_uint8_t normal_color __attribute__ ((unused)), - grub_uint8_t highlight_color __attribute__ ((unused))) -{ - /* FIXME */ -} - -static void grub_vesafb_setcursor (int on) { if (virtual_screen.cursor_state != on) @@ -599,7 +592,6 @@ static struct grub_term grub_vesafb_term .gotoxy = grub_vesafb_gotoxy, .cls = grub_vesafb_cls, .setcolorstate = grub_virtual_screen_setcolorstate, - .setcolor = grub_virtual_screen_setcolor, .setcursor = grub_vesafb_setcursor, .flags = 0, .next = 0 diff -x '*~' -x configure -Nurp ../grub2/term/i386/pc/vga.c ./term/i386/pc/vga.c --- ../grub2/term/i386/pc/vga.c 2007-11-10 19:34:48.000000000 +0100 +++ ./term/i386/pc/vga.c 2007-12-23 21:40:50.000000000 +0100 @@ -460,13 +460,6 @@ grub_vga_setcolorstate (grub_term_color_ } static void -grub_vga_setcolor (grub_uint8_t normal_color __attribute__ ((unused)), - grub_uint8_t highlight_color __attribute__ ((unused))) -{ - /* FIXME */ -} - -static void grub_vga_setcursor (int on) { if (cursor_state != on) @@ -494,7 +487,6 @@ static struct grub_term grub_vga_term = .gotoxy = grub_vga_gotoxy, .cls = grub_vga_cls, .setcolorstate = grub_vga_setcolorstate, - .setcolor = grub_vga_setcolor, .setcursor = grub_vga_setcursor, .flags = 0, .next = 0 diff -x '*~' -x configure -Nurp ../grub2/term/ieee1275/ofconsole.c ./term/ieee1275/ofconsole.c --- ../grub2/term/ieee1275/ofconsole.c 2007-07-22 11:05:11.000000000 +0200 +++ ./term/ieee1275/ofconsole.c 2007-12-23 21:45:11.000000000 +0100 @@ -129,6 +129,13 @@ grub_ofconsole_setcolor (grub_uint8_t no bgcolor = highlight_color; } +static void +grub_ofconsole_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color) +{ + *normal_color = fgcolor; + *highlight_color = bgcolor; +} + static int grub_ofconsole_readkey (int *key) { @@ -364,6 +371,7 @@ static struct grub_term grub_ofconsole_t .cls = grub_ofconsole_cls, .setcolorstate = grub_ofconsole_setcolorstate, .setcolor = grub_ofconsole_setcolor, + .getcolor = grub_ofconsole_getcolor, .setcursor = grub_ofconsole_setcursor, .refresh = grub_ofconsole_refresh, .flags = 0,