Support serial colors

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-05-07 18:07:05 +02:00
parent bf8733749b
commit 710d05aa8c
2 changed files with 22 additions and 9 deletions

View file

@ -39,16 +39,18 @@ struct color
int blue; int blue;
}; };
/* Use serial colors as they are default on most firmwares and some firmwares
ignore set-color!. Additionally output may be redirected to serial. */
static struct color colors[] = static struct color colors[] =
{ {
// {R, G, B} // {R, G, B}
{0x00, 0x00, 0x00}, {0x00, 0x00, 0x00}, // 0 = black
{0x00, 0x00, 0xA8}, // 1 = blue {0xA8, 0x00, 0x00}, // 1 = red
{0x00, 0xA8, 0x00}, // 2 = green {0x00, 0xA8, 0x00}, // 2 = green
{0x00, 0xA8, 0xA8}, // 3 = cyan {0xFE, 0xFE, 0x54}, // 3 = yellow
{0xA8, 0x00, 0x00}, // 4 = red {0x00, 0x00, 0xA8}, // 4 = blue
{0xA8, 0x00, 0xA8}, // 5 = magenta {0xA8, 0x00, 0xA8}, // 5 = magenta
{0xFE, 0xFE, 0x54}, // 6 = yellow {0x00, 0xA8, 0xA8}, // 6 = cyan
{0xFE, 0xFE, 0xFE} // 7 = white {0xFE, 0xFE, 0xFE} // 7 = white
}; };

View file

@ -255,9 +255,8 @@ grub_terminfo_setcolor (struct grub_term_output *term,
struct grub_terminfo_output_state *data struct grub_terminfo_output_state *data
= (struct grub_terminfo_output_state *) term->data; = (struct grub_terminfo_output_state *) term->data;
/* Discard bright bit. */ data->normal_color = normal_color;
data->normal_color = normal_color & 0x77; data->highlight_color = highlight_color;
data->highlight_color = highlight_color & 0x77;
} }
void void
@ -283,6 +282,17 @@ grub_terminfo_setcolorstate (struct grub_term_output *term,
{ {
int fg; int fg;
int bg; int bg;
/* Map from VGA to terminal colors. */
const int colormap[8]
= { 0, /* Black. */
4, /* Blue. */
2, /* Green. */
6, /* Cyan. */
1, /* Red. */
5, /* Magenta. */
3, /* Yellow. */
7, /* White. */
};
switch (state) switch (state)
{ {
@ -299,7 +309,8 @@ grub_terminfo_setcolorstate (struct grub_term_output *term,
return; return;
} }
putstr (term, grub_terminfo_tparm (data->setcolor, fg, bg)); putstr (term, grub_terminfo_tparm (data->setcolor, colormap[fg & 7],
colormap[bg & 7]));
return; return;
} }