diff options
author | Michael Brown | 2013-11-28 06:01:29 +0100 |
---|---|---|
committer | Michael Brown | 2013-11-28 06:03:05 +0100 |
commit | 7271b5089073d84d74709d3986e1bb32234f1c4d (patch) | |
tree | 7cdef75cc1c16c386eceee27c06f39da1cb45f08 /src/hci | |
parent | [pnm] Add support for PNM images (diff) | |
download | ipxe-7271b5089073d84d74709d3986e1bb32234f1c4d.tar.gz ipxe-7271b5089073d84d74709d3986e1bb32234f1c4d.tar.xz ipxe-7271b5089073d84d74709d3986e1bb32234f1c4d.zip |
[mucurses] Use "<ESC>[2J" ANSI escape sequence to clear screen
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/hci')
-rw-r--r-- | src/hci/mucurses/ansi_screen.c | 33 | ||||
-rw-r--r-- | src/hci/mucurses/clear.c | 10 |
2 files changed, 32 insertions, 11 deletions
diff --git a/src/hci/mucurses/ansi_screen.c b/src/hci/mucurses/ansi_screen.c index d952e5f2..ea9ab80c 100644 --- a/src/hci/mucurses/ansi_screen.c +++ b/src/hci/mucurses/ansi_screen.c @@ -14,12 +14,26 @@ unsigned short _LINES = 24; static unsigned int saved_usage; +static void ansiscr_attrs ( struct _curses_screen *scr, attr_t attrs ) { + int bold = ( attrs & A_BOLD ); + attr_t cpair = PAIR_NUMBER ( attrs ); + short fcol; + short bcol; + + if ( scr->attrs != attrs ) { + scr->attrs = attrs; + pair_content ( cpair, &fcol, &bcol ); + /* ANSI escape sequence to update character attributes */ + printf ( "\033[0;%d;3%d;4%dm", ( bold ? 1 : 22 ), fcol, bcol ); + } +} + static void ansiscr_reset ( struct _curses_screen *scr ) { /* Reset terminal attributes and clear screen */ scr->attrs = 0; scr->curs_x = 0; scr->curs_y = 0; - printf ( "\033[0m" ); + printf ( "\033[0m\033[2J" ); } static void ansiscr_init ( struct _curses_screen *scr ) { @@ -32,6 +46,11 @@ static void ansiscr_exit ( struct _curses_screen *scr ) { console_set_usage ( saved_usage ); } +static void ansiscr_erase ( struct _curses_screen *scr, attr_t attrs ) { + ansiscr_attrs ( scr, attrs ); + printf ( "\033[2J" ); +} + static void ansiscr_movetoyx ( struct _curses_screen *scr, unsigned int y, unsigned int x ) { if ( ( x != scr->curs_x ) || ( y != scr->curs_y ) ) { @@ -45,18 +64,9 @@ static void ansiscr_movetoyx ( struct _curses_screen *scr, static void ansiscr_putc ( struct _curses_screen *scr, chtype c ) { unsigned int character = ( c & A_CHARTEXT ); attr_t attrs = ( c & ( A_ATTRIBUTES | A_COLOR ) ); - int bold = ( attrs & A_BOLD ); - attr_t cpair = PAIR_NUMBER ( attrs ); - short fcol; - short bcol; /* Update attributes if changed */ - if ( attrs != scr->attrs ) { - scr->attrs = attrs; - pair_content ( cpair, &fcol, &bcol ); - /* ANSI escape sequence to update character attributes */ - printf ( "\033[0;%d;3%d;4%dm", ( bold ? 1 : 22 ), fcol, bcol ); - } + ansiscr_attrs ( scr, attrs ); /* Print the actual character */ putchar ( character ); @@ -79,6 +89,7 @@ static bool ansiscr_peek ( struct _curses_screen *scr __unused ) { SCREEN _ansi_screen = { .init = ansiscr_init, .exit = ansiscr_exit, + .erase = ansiscr_erase, .movetoyx = ansiscr_movetoyx, .putc = ansiscr_putc, .getc = ansiscr_getc, diff --git a/src/hci/mucurses/clear.c b/src/hci/mucurses/clear.c index 79b296cf..f5e52ca2 100644 --- a/src/hci/mucurses/clear.c +++ b/src/hci/mucurses/clear.c @@ -88,3 +88,13 @@ int werase ( WINDOW *win ) { wclrtobot( win ); return OK; } + +/** + * Completely clear the screen + * + * @ret rc return status code + */ +int erase ( void ) { + stdscr->scr->erase( stdscr->scr, stdscr->attrs ); + return OK; +} |