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;
};
/* 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[] =
{
// {R, G, B}
{0x00, 0x00, 0x00},
{0x00, 0x00, 0xA8}, // 1 = blue
{0x00, 0x00, 0x00}, // 0 = black
{0xA8, 0x00, 0x00}, // 1 = red
{0x00, 0xA8, 0x00}, // 2 = green
{0x00, 0xA8, 0xA8}, // 3 = cyan
{0xA8, 0x00, 0x00}, // 4 = red
{0xFE, 0xFE, 0x54}, // 3 = yellow
{0x00, 0x00, 0xA8}, // 4 = blue
{0xA8, 0x00, 0xA8}, // 5 = magenta
{0xFE, 0xFE, 0x54}, // 6 = yellow
{0x00, 0xA8, 0xA8}, // 6 = cyan
{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 *) term->data;
/* Discard bright bit. */
data->normal_color = normal_color & 0x77;
data->highlight_color = highlight_color & 0x77;
data->normal_color = normal_color;
data->highlight_color = highlight_color;
}
void
@ -283,6 +282,17 @@ grub_terminfo_setcolorstate (struct grub_term_output *term,
{
int fg;
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)
{
@ -299,7 +309,8 @@ grub_terminfo_setcolorstate (struct grub_term_output *term,
return;
}
putstr (term, grub_terminfo_tparm (data->setcolor, fg, bg));
putstr (term, grub_terminfo_tparm (data->setcolor, colormap[fg & 7],
colormap[bg & 7]));
return;
}