2008-08-05 Bean <bean123ch@gmail.com>

* util/console.c (grub_console_cur_color): New variable.
	(grub_console_standard_color): Likewise.
	(grub_console_normal_color): Likewise.
	(grub_console_highlight_color): Likewise.
	(color_map): Likewise.
	(use_color): Likewise.
	(NUM_COLORS): New macro.
	(grub_ncurses_setcolorstate): Handle color properly.
	(grub_ncurses_setcolor): Don't change color here, just remember the
	settings, color will be set in grub_ncurses_setcolorstate.
	(grub_ncurses_getcolor): New function.
	(grub_ncurses_init): Initialize color pairs.
	(grub_ncurses_term): New member grub_ncurses_getcolor.
This commit is contained in:
bean 2008-08-05 14:20:00 +00:00
parent 748d089ee3
commit 6977d49f98
2 changed files with 79 additions and 2 deletions

View file

@ -1,3 +1,19 @@
2008-08-05 Bean <bean123ch@gmail.com>
* util/console.c (grub_console_cur_color): New variable.
(grub_console_standard_color): Likewise.
(grub_console_normal_color): Likewise.
(grub_console_highlight_color): Likewise.
(color_map): Likewise.
(use_color): Likewise.
(NUM_COLORS): New macro.
(grub_ncurses_setcolorstate): Handle color properly.
(grub_ncurses_setcolor): Don't change color here, just remember the
settings, color will be set in grub_ncurses_setcolorstate.
(grub_ncurses_getcolor): New function.
(grub_ncurses_init): Initialize color pairs.
(grub_ncurses_term): New member grub_ncurses_getcolor.
2008-08-05 Colin D Bennett <colin@gibibit.com> 2008-08-05 Colin D Bennett <colin@gibibit.com>
High resolution timer support. Implemented for x86 CPUs using TSC. High resolution timer support. Implemented for x86 CPUs using TSC.

View file

@ -41,6 +41,28 @@
static int grub_console_attr = A_NORMAL; static int grub_console_attr = A_NORMAL;
grub_uint8_t grub_console_cur_color = 7;
static grub_uint8_t grub_console_standard_color = 0x7;
static grub_uint8_t grub_console_normal_color = 0x7;
static grub_uint8_t grub_console_highlight_color = 0x70;
#define NUM_COLORS 8
static grub_uint8_t color_map[NUM_COLORS] =
{
COLOR_BLACK,
COLOR_BLUE,
COLOR_GREEN,
COLOR_CYAN,
COLOR_RED,
COLOR_MAGENTA,
COLOR_YELLOW,
COLOR_WHITE
};
static int use_color;
static void static void
grub_ncurses_putchar (grub_uint32_t c) grub_ncurses_putchar (grub_uint32_t c)
{ {
@ -100,24 +122,46 @@ grub_ncurses_setcolorstate (grub_term_color_state state)
switch (state) switch (state)
{ {
case GRUB_TERM_COLOR_STANDARD: case GRUB_TERM_COLOR_STANDARD:
grub_console_cur_color = grub_console_standard_color;
grub_console_attr = A_NORMAL; grub_console_attr = A_NORMAL;
break; break;
case GRUB_TERM_COLOR_NORMAL: case GRUB_TERM_COLOR_NORMAL:
grub_console_cur_color = grub_console_normal_color;
grub_console_attr = A_NORMAL; grub_console_attr = A_NORMAL;
break; break;
case GRUB_TERM_COLOR_HIGHLIGHT: case GRUB_TERM_COLOR_HIGHLIGHT:
grub_console_cur_color = grub_console_highlight_color;
grub_console_attr = A_STANDOUT; grub_console_attr = A_STANDOUT;
break; break;
default: default:
break; break;
} }
if (use_color)
{
grub_uint8_t fg, bg;
fg = (grub_console_cur_color & 7);
bg = (grub_console_cur_color >> 4) & 7;
grub_console_attr = (grub_console_cur_color & 8) ? A_BOLD : A_NORMAL;
color_set ((bg << 3) + fg, 0);
}
} }
/* XXX: This function is never called. */ /* XXX: This function is never called. */
static void static void
grub_ncurses_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color) grub_ncurses_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color)
{ {
color_set (normal_color << 8 | highlight_color, 0); grub_console_normal_color = normal_color;
grub_console_highlight_color = highlight_color;
}
static void
grub_ncurses_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color)
{
*normal_color = grub_console_normal_color;
*highlight_color = grub_console_highlight_color;
} }
static int saved_char = ERR; static int saved_char = ERR;
@ -272,8 +316,24 @@ grub_ncurses_init (void)
nonl (); nonl ();
intrflush (stdscr, FALSE); intrflush (stdscr, FALSE);
keypad (stdscr, TRUE); keypad (stdscr, TRUE);
if (has_colors ())
{
start_color (); start_color ();
if ((COLORS >= NUM_COLORS) && (COLOR_PAIRS >= NUM_COLORS * NUM_COLORS))
{
int i, j, n;
n = 0;
for (i = 0; i < NUM_COLORS; i++)
for (j = 0; j < NUM_COLORS; j++)
init_pair(n++, color_map[j], color_map[i]);
use_color = 1;
}
}
return 0; return 0;
} }
@ -300,6 +360,7 @@ static struct grub_term grub_ncurses_term =
.cls = grub_ncurses_cls, .cls = grub_ncurses_cls,
.setcolorstate = grub_ncurses_setcolorstate, .setcolorstate = grub_ncurses_setcolorstate,
.setcolor = grub_ncurses_setcolor, .setcolor = grub_ncurses_setcolor,
.getcolor = grub_ncurses_getcolor,
.setcursor = grub_ncurses_setcursor, .setcursor = grub_ncurses_setcursor,
.refresh = grub_ncurses_refresh, .refresh = grub_ncurses_refresh,
.flags = 0, .flags = 0,