]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[mucurses] Use "<ESC>[2J" ANSI escape sequence to clear screen
authorMichael Brown <mcb30@ipxe.org>
Thu, 28 Nov 2013 05:01:29 +0000 (05:01 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 28 Nov 2013 05:03:05 +0000 (05:03 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/hci/mucurses/ansi_screen.c
src/hci/mucurses/clear.c
src/include/curses.h

index d952e5f2aa931caf2c03118e31e21e727589b218..ea9ab80cb099352544815b3fbdff44284f1fcda3 100644 (file)
@@ -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,
index 79b296cfe3e1902004bfd02235aa1d02d787c331..f5e52ca20123b40205371f34eea357811f38fc03 100644 (file)
@@ -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;
+}
index 206977904fc6810a859012d265088dd07c29da75..1230e0af30e5da38726353baafd4d0df66f337d6 100644 (file)
@@ -37,6 +37,13 @@ typedef struct _curses_screen {
 
        void ( *init ) ( struct _curses_screen *scr );
        void ( *exit ) ( struct _curses_screen *scr );
+       /**
+        * Erase screen
+        *
+        * @v scr       screen on which to operate
+        * @v attrs     attributes
+        */
+       void ( * erase ) ( struct _curses_screen *scr, attr_t attrs );
        /**
         * Move cursor to position specified by x,y coords
         *
@@ -242,7 +249,7 @@ extern int echo ( void );
 extern int echochar ( const chtype );
 extern int endwin ( void );
 extern char erasechar ( void );
-//extern int erase ( void );
+extern int erase ( void );
 extern void filter ( void );
 extern int flash ( void );
 extern int flushinp ( void );
@@ -552,10 +559,6 @@ static inline int deleteln ( void ) {
        return wdeleteln( stdscr );
 }
 
-static inline int erase ( void ) {
-       return werase ( stdscr );
-}
-
 static inline int getch ( void ) {
        return wgetch ( stdscr );
 }