From: ben Date: Sat, 21 Jun 2003 22:40:42 +0000 (+0000) Subject: Improve SCOANSI emulation: The colours that SGR 0 returns to are now changed X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/69761fd51226e0a2582c933eafeca38d39a6c4fc 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 --- 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', '='):