Improve SCOANSI emulation: The colours that SGR 0 returns to are now changed
authorben <ben@cda61777-01e9-0310-a592-d414129be87e>
Sat, 21 Jun 2003 22:40:42 +0000 (22:40 +0000)
committerben <ben@cda61777-01e9-0310-a592-d414129be87e>
Sat, 21 Jun 2003 22:40:42 +0000 (22:40 +0000)
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

index db024ad..7b56e61 100644 (file)
@@ -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', '='):