From 800cf6341f10d4c927c5ee77a5351b684a431ac1 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Fri, 9 Nov 2007 11:36:26 +0100 Subject: [PATCH 1/1] Fix color initialization, we can recurse into ourselves now \o/ Signed-off-by: Pierre Habouzit --- madtty/madtty.c | 50 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/madtty/madtty.c b/madtty/madtty.c index 83c2a5d..7b85f27 100644 --- a/madtty/madtty.c +++ b/madtty/madtty.c @@ -37,6 +37,8 @@ #define IS_CONTROL(ch) !((ch) & 0xffffff60UL) +static int has_default = 0; + enum { C0_NUL = 0x00, C0_SOH, C0_STX, C0_ETX, C0_EOT, C0_ENQ, C0_ACK, C0_BEL, @@ -209,22 +211,32 @@ static void interpret_csi_SGR(madtty_t *rt, int param[], int pcount) CASE(27, rt->curattrs &= ~A_REVERSE); CASE(28, rt->curattrs &= ~A_INVIS); - case 30 ... 37: - rt->curattrs &= ~0xf0; - rt->curattrs |= (param[i] - 29) << 4; + case 30 ... 37: /* fg */ + if (has_default) { + rt->curattrs &= ~0xf0; + rt->curattrs |= (param[i] + 1 - 30) << 4; + } else { + rt->curattrs &= ~070; + rt->curattrs |= (7 - (param[i] - 30)) << 3; + } break; case 39: - rt->curattrs &= ~0xf0; + rt->curattrs &= has_default ? ~0xf0 : ~070; break; - case 40 ... 47: - rt->curattrs &= ~0x0f; - rt->curattrs |= (param[i] - 39); + case 40 ... 47: /* bg */ + if (has_default) { + rt->curattrs &= ~0x0f; + rt->curattrs |= (param[i] + 1 - 40); + } else { + rt->curattrs &= ~007; + rt->curattrs |= (param[i] - 40); + } break; case 49: - rt->curattrs &= ~0x0f; + rt->curattrs &= has_default ? ~0x0f : ~007; break; default: @@ -765,7 +777,7 @@ madtty_t *madtty_create(int rows, int cols) rt->cols = cols; /* default mode is replace */ - rt->insert = false; + rt->insert = false; /* create the cell matrix */ rt->lines = (mtty_row_t*)calloc(sizeof(mtty_row_t), rt->rows); @@ -900,16 +912,28 @@ void madtty_initialize(void) setlocale(LC_ALL, ""); initscr(); start_color(); - use_default_colors(); noecho(); raw(); nodelay(stdscr, TRUE); keypad(stdscr, TRUE); + curs_set(0); ESCDELAY=50; - for (int i = -1; i < 8; i++) { - for (int j = -1; j < 8; j++) { - init_pair((i + 1) * 16 + j + 1, i, j); + if (COLORS > 8) { + use_default_colors(); + assume_default_colors(-1, -1); + has_default = 1; + + for (int bg = -1; bg < 8; bg++) { + for (int fg = -1; fg < 8; fg++) { + init_pair((fg + 1) * 16 + bg + 1, fg, bg); + } + } + } else { + for (int bg = 0; bg < 8; bg++) { + for (int fg = 0; fg < 8; fg++) { + init_pair((7 - fg) * 8 + bg, fg, bg); + } } } } -- 2.20.1