summaryrefslogtreecommitdiffstats
path: root/src/hci/mucurses
diff options
context:
space:
mode:
authorMichael Brown2013-11-28 06:01:29 +0100
committerMichael Brown2013-11-28 06:03:05 +0100
commit7271b5089073d84d74709d3986e1bb32234f1c4d (patch)
tree7cdef75cc1c16c386eceee27c06f39da1cb45f08 /src/hci/mucurses
parent[pnm] Add support for PNM images (diff)
downloadipxe-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/mucurses')
-rw-r--r--src/hci/mucurses/ansi_screen.c33
-rw-r--r--src/hci/mucurses/clear.c10
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;
+}