From 69761fd51226e0a2582c933eafeca38d39a6c4fc Mon Sep 17 00:00:00 2001 From: ben Date: Sat, 21 Jun 2003 22:40:42 +0000 Subject: [PATCH] Improve SCOANSI emulation: The colours that SGR 0 returns to are now changed by the SCO SNF and SNB sequences, which seems to be what the SCO console does (at least in the new mode documented for OpenServer 5.0.6). git-svn-id: svn://svn.tartarus.org/sgt/putty@3286 cda61777-01e9-0310-a592-d414129be87e --- terminal.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/terminal.c b/terminal.c index db024adf..7b56e619 100644 --- a/terminal.c +++ b/terminal.c @@ -201,7 +201,7 @@ static void power_on(Terminal *term) term->in_vbell = FALSE; term->cursor_on = 1; term->big_cursor = 0; - term->save_attr = term->curr_attr = ATTR_DEFAULT; + term->default_attr = term->save_attr = term->curr_attr = ATTR_DEFAULT; term->term_editing = term->term_echoing = FALSE; term->app_cursor_keys = term->cfg.app_cursor; term->app_keypad_keys = term->cfg.app_keypad; @@ -2376,7 +2376,7 @@ void term_out(Terminal *term) for (i = 0; i < term->esc_nargs; i++) { switch (def(term->esc_args[i], 0)) { case 0: /* restore defaults */ - term->curr_attr = ATTR_DEFAULT; + term->curr_attr = term->default_attr; break; case 1: /* enable bold */ compatibility(VT100AVO); @@ -2782,21 +2782,27 @@ void term_out(Terminal *term) case ANSI('F', '='): /* set normal foreground */ compatibility(SCOANSI); if (term->esc_args[0] >= 0 && term->esc_args[0] < 16) { - term->curr_attr &= ~ATTR_FGMASK; - term->curr_attr |= - (sco2ansicolour[term->esc_args[0] & 0x7] | + long colour = + (sco2ansicolour[term->esc_args[0] & 0x7] | ((term->esc_args[0] & 0x8) << 1)) << ATTR_FGSHIFT; + term->curr_attr &= ~ATTR_FGMASK; + term->curr_attr |= colour; + term->default_attr &= ~ATTR_FGMASK; + term->default_attr |= colour; } break; case ANSI('G', '='): /* set normal background */ compatibility(SCOANSI); if (term->esc_args[0] >= 0 && term->esc_args[0] < 16) { - term->curr_attr &= ~ATTR_BGMASK; - term->curr_attr |= - (sco2ansicolour[term->esc_args[0] & 0x7] | + long colour = + (sco2ansicolour[term->esc_args[0] & 0x7] | ((term->esc_args[0] & 0x8) << 1)) << ATTR_BGSHIFT; + term->curr_attr &= ~ATTR_BGMASK; + term->curr_attr |= colour; + term->default_attr &= ~ATTR_BGMASK; + term->default_attr |= colour; } break; case ANSI('L', '='): -- 2.11.0