Add support for curses color output over serial.

Note that the sequence \e[m for turning off bold resets all attributes,
including color.

Signed-off-by: Ulf Jordan <jordan@chalmers.se>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3561 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Ulf Jordan 2008-09-03 19:59:44 +00:00 committed by Jordan Crouse
parent d21f68bbd5
commit d57a680632
3 changed files with 26 additions and 0 deletions

View File

@ -669,10 +669,12 @@ int wnoutrefresh(WINDOW *win)
// FIXME.
int serial_is_bold = 0;
int serial_is_altcharset = 0;
int serial_cur_pair = 0;
int x, y;
chtype ch;
int need_altcharset;
short fg, bg;
serial_end_bold();
serial_end_altcharset();
@ -703,6 +705,7 @@ int wnoutrefresh(WINDOW *win)
if (serial_is_bold) {
serial_end_bold();
serial_is_bold = 0;
serial_cur_pair = 0;
}
}
@ -723,6 +726,13 @@ int wnoutrefresh(WINDOW *win)
serial_is_altcharset = 0;
}
if (serial_cur_pair != PAIR_NUMBER(attr)) {
pair_content(PAIR_NUMBER(attr),
&fg, &bg);
serial_set_color(fg, bg);
serial_cur_pair = PAIR_NUMBER(attr);
}
serial_putchar(ch);
}

View File

@ -110,6 +110,8 @@ int serial_getchar(void)
enacs=\E(B\E)0, smacs=^N, rmacs=^O. */
#define VT100_SMACS "\e(0"
#define VT100_RMACS "\e(B"
/* A vt100 doesn't do color, setaf/setab below are from xterm-color. */
#define VT100_SET_COLOR "\e[3%d;4%dm"
static void serial_putcmd(char *str)
{
@ -142,6 +144,19 @@ void serial_end_altcharset(void)
serial_putcmd(VT100_RMACS);
}
/**
* Set the foreground and background colors on the serial console.
*
* @param fg Foreground color number.
* @param bg Background color number.
*/
void serial_set_color(short fg, short bg)
{
char buffer[32];
snprintf(buffer, sizeof(buffer), VT100_SET_COLOR, fg, bg);
serial_putcmd(buffer);
}
void serial_set_cursor(int y, int x)
{
char buffer[32];

View File

@ -139,6 +139,7 @@ void serial_start_bold(void);
void serial_end_bold(void);
void serial_start_altcharset(void);
void serial_end_altcharset(void);
void serial_set_color(short fg, short bg);
void serial_set_cursor(int y, int x);
/** @} */