Author: jcrouse
Date: 2008-09-03 21:59:44 +0200 (Wed, 03 Sep 2008)
New Revision: 3561

Modified:
   trunk/payloads/libpayload/curses/tinycurses.c
   trunk/payloads/libpayload/drivers/serial.c
   trunk/payloads/libpayload/include/libpayload.h
Log:
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 <[EMAIL PROTECTED]>
Acked-by: Jordan Crouse <[EMAIL PROTECTED]>


Modified: trunk/payloads/libpayload/curses/tinycurses.c
===================================================================
--- trunk/payloads/libpayload/curses/tinycurses.c       2008-09-02 16:06:22 UTC 
(rev 3560)
+++ trunk/payloads/libpayload/curses/tinycurses.c       2008-09-03 19:59:44 UTC 
(rev 3561)
@@ -669,10 +669,12 @@
        // 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 @@
                                        if (serial_is_bold) {
                                                serial_end_bold();
                                                serial_is_bold = 0;
+                                               serial_cur_pair = 0;
                                        }
                                }
 
@@ -723,6 +726,13 @@
                                        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);
                        }
 

Modified: trunk/payloads/libpayload/drivers/serial.c
===================================================================
--- trunk/payloads/libpayload/drivers/serial.c  2008-09-02 16:06:22 UTC (rev 
3560)
+++ trunk/payloads/libpayload/drivers/serial.c  2008-09-03 19:59:44 UTC (rev 
3561)
@@ -110,6 +110,8 @@
    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 @@
        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];

Modified: trunk/payloads/libpayload/include/libpayload.h
===================================================================
--- trunk/payloads/libpayload/include/libpayload.h      2008-09-02 16:06:22 UTC 
(rev 3560)
+++ trunk/payloads/libpayload/include/libpayload.h      2008-09-03 19:59:44 UTC 
(rev 3561)
@@ -139,6 +139,7 @@
 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);
 /** @} */
 


--
coreboot mailing list
[email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to