From 37ca32ed18b3e104c1056713f5112b90c6547e89 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 27 Jan 2003 23:03:31 +0000 Subject: [PATCH] xterm apparently supports ESC[90m through ESC[97m to set bright foreground colours, and ESC[100m through ESC[107m to set bright background colours. Hence, so do we. Bright-foreground is distinguishable from bold, and bright-background distinguishable from blink, when it leaves terminal.c; the front end may then choose to display them in the same way if it's configured to do so. This change makes the xterm backend for Turbo Vision (!!!) work properly. Untested on Mac. git-svn-id: svn://svn.tartarus.org/sgt/putty@2734 cda61777-01e9-0310-a592-d414129be87e --- doc/config.but | 9 +++++---- mac/macterm.c | 8 +++++--- putty.h | 26 +++++++++++++------------- terminal.c | 44 ++++++++++++++++++++++++++++++++++++++------ unix/pterm.c | 10 ++++++---- windlg.c | 29 ++--------------------------- window.c | 10 ++++++---- 7 files changed, 75 insertions(+), 61 deletions(-) diff --git a/doc/config.but b/doc/config.but index 51714ecb..37c959cc 100644 --- a/doc/config.but +++ b/doc/config.but @@ -1,4 +1,4 @@ -\versionid $Id: config.but,v 1.51 2003/01/23 11:37:54 jacob Exp $ +\versionid $Id: config.but,v 1.52 2003/01/27 23:03:30 simon Exp $ \C{config} Configuring PuTTY @@ -1282,9 +1282,10 @@ colour to go in place of the old one. PuTTY allows you to set the cursor colour, the default foreground and background, and the precise shades of all the ANSI configurable colours (black, red, green, yellow, blue, magenta, cyan, and white). -In addition, if you have selected \q{Bolded text is a different -colour}, you can also modify the precise shades used for the bold -versions of these colours. +You can also modify the precise shades used for the bold versions of +these colours; these are used to display bold text if you have +selected \q{Bolded text is a different colour}, and can also be used +if the server asks specifically to use them. \H{config-connection} The Connection panel diff --git a/mac/macterm.c b/mac/macterm.c index 4c463565..fc0262e9 100644 --- a/mac/macterm.c +++ b/mac/macterm.c @@ -1,4 +1,4 @@ -/* $Id: macterm.c,v 1.57 2003/01/27 00:39:01 ben Exp $ */ +/* $Id: macterm.c,v 1.58 2003/01/27 23:03:30 simon Exp $ */ /* * Copyright (c) 1999 Simon Tatham * Copyright (c) 1999, 2002 Ben Harris @@ -1090,8 +1090,10 @@ static pascal void do_text_for_device(short depth, short devflags, if (HAVE_COLOR_QD()) { if (depth > 2) { - fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT) * 2; + fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT); + fgcolour = (fgcolour & 0xF) * 2 + (fgcolour & 0x10 ? 1 : 0); bgcolour = ((a->attr & ATTR_BGMASK) >> ATTR_BGSHIFT) * 2; + bgcolour = (bgcolour & 0xF) * 2 + (bgcolour & 0x10 ? 1 : 0); } else { /* * NB: bold reverse in 2bpp breaks with the usual PuTTY model and @@ -1106,7 +1108,7 @@ static pascal void do_text_for_device(short depth, short devflags, bgcolour = tmp; } if (bright && depth > 2) - fgcolour++; + fgcolour |= 1; if ((a->attr & TATTR_ACTCURS) && depth > 1) { fgcolour = CURSOR_FG; bgcolour = CURSOR_BG; diff --git a/putty.h b/putty.h index ad845afe..2efac277 100644 --- a/putty.h +++ b/putty.h @@ -80,27 +80,27 @@ typedef struct terminal_tag Terminal; */ #define UCSWIDE 0xDFFF -#define ATTR_NARROW 0x20000000UL -#define ATTR_WIDE 0x10000000UL -#define ATTR_BOLD 0x01000000UL -#define ATTR_UNDER 0x02000000UL -#define ATTR_REVERSE 0x04000000UL -#define ATTR_BLINK 0x08000000UL -#define ATTR_FGMASK 0x000F0000UL -#define ATTR_BGMASK 0x00F00000UL -#define ATTR_COLOURS 0x00FF0000UL +#define ATTR_NARROW 0x80000000UL +#define ATTR_WIDE 0x40000000UL +#define ATTR_BOLD 0x04000000UL +#define ATTR_UNDER 0x08000000UL +#define ATTR_REVERSE 0x10000000UL +#define ATTR_BLINK 0x20000000UL +#define ATTR_FGMASK 0x001F0000UL +#define ATTR_BGMASK 0x03E00000UL +#define ATTR_COLOURS 0x03FF0000UL #define ATTR_FGSHIFT 16 -#define ATTR_BGSHIFT 20 +#define ATTR_BGSHIFT 21 -#define ATTR_DEFAULT 0x00980000UL +#define ATTR_DEFAULT 0x01280000UL #define ATTR_DEFFG 0x00080000UL -#define ATTR_DEFBG 0x00900000UL +#define ATTR_DEFBG 0x01200000UL #define ERASE_CHAR (ATTR_DEFAULT | ATTR_ASCII | ' ') #define ATTR_MASK 0xFFFFFF00UL #define CHAR_MASK 0x000000FFUL #define ATTR_CUR_AND (~(ATTR_BOLD|ATTR_REVERSE|ATTR_BLINK|ATTR_COLOURS)) -#define ATTR_CUR_XOR 0x00BA0000UL +#define ATTR_CUR_XOR 0x016A0000UL struct sesslist { int nsessions; diff --git a/terminal.c b/terminal.c index a807339c..243e7e5a 100644 --- a/terminal.c +++ b/terminal.c @@ -474,8 +474,9 @@ void term_size(Terminal *term, int newrows, int newcols, int newsavelines) } else { line = smalloc(TSIZE * (newcols + 2)); line[0] = newcols; - for (j = 0; j <= newcols; j++) + for (j = 0; j < newcols; j++) line[j + 1] = ERASE_CHAR; + line[newcols] = LATTR_NORM; } addpos234(term->screen, line, 0); } @@ -504,8 +505,9 @@ void term_size(Terminal *term, int newrows, int newcols, int newsavelines) for (i = 0; i < newrows; i++) { line = smalloc(TSIZE * (newcols + 2)); line[0] = newcols; - for (j = 0; j <= newcols; j++) + for (j = 0; j < newcols; j++) line[j + 1] = term->erase_char; + line[newcols + 1] = LATTR_NORM; addpos234(newalt, line, i); } if (term->alt_screen) { @@ -742,7 +744,7 @@ static void scroll(Terminal *term, int topline, int botline, int lines, int sb) line = resizeline(line, term->cols); for (i = 0; i < term->cols; i++) line[i + 1] = term->erase_char; - line[term->cols + 1] = 0; + line[term->cols + 1] = LATTR_NORM; addpos234(term->screen, line, botline); /* @@ -972,10 +974,12 @@ static void erase_lots(Terminal *term, ldata = lineptr(start.y); while (poslt(start, end)) { - if (start.x == term->cols && !erase_lattr) - ldata[start.x] &= ~(LATTR_WRAPPED | LATTR_WRAPPED2); - else + if (start.x == term->cols) { + if (erase_lattr) + ldata[start.x] &= ~(LATTR_WRAPPED | LATTR_WRAPPED2); + } else { ldata[start.x] = term->erase_char; + } if (incpos(start) && start.y < term->rows) ldata = lineptr(start.y); } @@ -2281,6 +2285,20 @@ void term_out(Terminal *term) term->curr_attr |= (term->esc_args[i] - 30)<curr_attr &= ~ATTR_FGMASK; + term->curr_attr |= + ((term->esc_args[i] - 90 + 16) + << ATTR_FGSHIFT); + break; case 39: /* default-foreground */ term->curr_attr &= ~ATTR_FGMASK; term->curr_attr |= ATTR_DEFFG; @@ -2298,6 +2316,20 @@ void term_out(Terminal *term) term->curr_attr |= (term->esc_args[i] - 40)<curr_attr &= ~ATTR_BGMASK; + term->curr_attr |= + ((term->esc_args[i] - 100 + 16) + << ATTR_BGSHIFT); + break; case 49: /* default-background */ term->curr_attr &= ~ATTR_BGMASK; term->curr_attr |= ATTR_DEFBG; diff --git a/unix/pterm.c b/unix/pterm.c index db8f3a85..016ef21f 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -1542,17 +1542,19 @@ void do_text_internal(Context ctx, int x, int y, char *text, int len, int nfg, nbg, t, fontid, shadow, rlen, widefactor; - nfg = 2 * ((attr & ATTR_FGMASK) >> ATTR_FGSHIFT); - nbg = 2 * ((attr & ATTR_BGMASK) >> ATTR_BGSHIFT); + nfg = ((attr & ATTR_FGMASK) >> ATTR_FGSHIFT); + nfg = 2 * (nfg & 0xF) + (nfg & 0x10 ? 1 : 0); + nbg = ((attr & ATTR_BGMASK) >> ATTR_BGSHIFT); + nbg = 2 * (nbg & 0xF) + (nbg & 0x10 ? 1 : 0); if (attr & ATTR_REVERSE) { t = nfg; nfg = nbg; nbg = t; } if (inst->cfg.bold_colour && (attr & ATTR_BOLD)) - nfg++; + nfg |= 1; if (inst->cfg.bold_colour && (attr & ATTR_BLINK)) - nbg++; + nbg |= 1; if (attr & TATTR_ACTCURS) { nfg = NCOLOURS-2; nbg = NCOLOURS-1; diff --git a/windlg.c b/windlg.c index 4a771719..7c3a8d1d 100644 --- a/windlg.c +++ b/windlg.c @@ -657,11 +657,6 @@ static const char *const colours[] = { "ANSI Cyan", "ANSI Cyan Bold", "ANSI White", "ANSI White Bold" }; -static const int permcolour[] = { - TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, - TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, - TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE -}; static void fmtfont(char *buf) { @@ -1308,9 +1303,8 @@ static void init_dlg_ctrls(HWND hwnd, int keepsess) SendDlgItemMessage(hwnd, IDC_COLOURLIST, LB_DELETESTRING, i, 0); for (i = 0; i < 22; i++) - if (cfg.bold_colour || permcolour[i]) - SendDlgItemMessage(hwnd, IDC_COLOURLIST, LB_ADDSTRING, 0, - (LPARAM) colours[i]); + SendDlgItemMessage(hwnd, IDC_COLOURLIST, LB_ADDSTRING, 0, + (LPARAM) colours[i]); } SendDlgItemMessage(hwnd, IDC_COLOURLIST, LB_SETCURSEL, 0, 0); SetDlgItemInt(hwnd, IDC_RVALUE, cfg.colours[0][0], FALSE); @@ -3399,25 +3393,6 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg, int n, i; cfg.bold_colour = IsDlgButtonChecked(hwnd, IDC_BOLDCOLOUR); - SendDlgItemMessage(hwnd, IDC_COLOURLIST, WM_SETREDRAW, - FALSE, 0); - n = - SendDlgItemMessage(hwnd, IDC_COLOURLIST, - LB_GETCOUNT, 0, 0); - if (n != 12 + 10 * cfg.bold_colour) { - for (i = n; i-- > 0;) - SendDlgItemMessage(hwnd, IDC_COLOURLIST, - LB_DELETESTRING, i, 0); - for (i = 0; i < 22; i++) - if (cfg.bold_colour || permcolour[i]) - SendDlgItemMessage(hwnd, IDC_COLOURLIST, - LB_ADDSTRING, 0, - (LPARAM) colours[i]); - } - SendDlgItemMessage(hwnd, IDC_COLOURLIST, WM_SETREDRAW, - TRUE, 0); - InvalidateRect(GetDlgItem(hwnd, IDC_COLOURLIST), NULL, - TRUE); } break; case IDC_PALETTE: diff --git a/window.c b/window.c index 609e3b6c..b1fb5fee 100644 --- a/window.c +++ b/window.c @@ -2798,8 +2798,10 @@ void do_text(Context ctx, int x, int y, char *text, int len, if ((attr & CSET_MASK) == ATTR_OEMCP) nfont |= FONT_OEM; - nfg = 2 * ((attr & ATTR_FGMASK) >> ATTR_FGSHIFT); - nbg = 2 * ((attr & ATTR_BGMASK) >> ATTR_BGSHIFT); + nfg = ((attr & ATTR_FGMASK) >> ATTR_FGSHIFT); + nfg = 2 * (nfg & 0xF) + (nfg & 0x10 ? 1 : 0); + nbg = ((attr & ATTR_BGMASK) >> ATTR_BGSHIFT); + nbg = 2 * (nbg & 0xF) + (nbg & 0x10 ? 1 : 0); if (bold_mode == BOLD_FONT && (attr & ATTR_BOLD)) nfont |= FONT_BOLD; if (und_mode == UND_FONT && (attr & ATTR_UNDER)) @@ -2821,9 +2823,9 @@ void do_text(Context ctx, int x, int y, char *text, int len, nbg = t; } if (bold_mode == BOLD_COLOURS && (attr & ATTR_BOLD)) - nfg++; + nfg |= 1; if (bold_mode == BOLD_COLOURS && (attr & ATTR_BLINK)) - nbg++; + nbg |= 1; fg = colours[nfg]; bg = colours[nbg]; SelectObject(hdc, fonts[nfont]); -- 2.11.0