Fix sense of test in previous checkin :)
[u/mdw/putty] / terminal.c
index 36f59c3..e846401 100644 (file)
@@ -1017,6 +1017,21 @@ static termline *lineptr(Terminal *term, int y, int lineno, int screen)
     }
 
     /* We assume that we don't screw up and retrieve something out of range. */
+    if (line == NULL) {
+       fatalbox("line==NULL in terminal.c\n"
+                "lineno=%d y=%d w=%d h=%d\n"
+                "count(scrollback=%p)=%d\n"
+                "count(screen=%p)=%d\n"
+                "count(alt=%p)=%d alt_sblines=%d\n"
+                "whichtree=%p treeindex=%d\n\n"
+                "Please contact <putty@projects.tartarus.org> "
+                "and pass on the above information.",
+                lineno, y, term->cols, term->rows,
+                term->scrollback, count234(term->scrollback),
+                term->screen, count234(term->screen),
+                term->alt_screen, count234(term->alt_screen), term->alt_sblines,
+                whichtree, treeindex);
+    }
     assert(line != NULL);
 
     resizeline(term, line, term->cols);
@@ -2608,12 +2623,19 @@ static void term_out(Terminal *term)
            }
        }
 
-       /* How about C1 controls ? */
+       /*
+        * How about C1 controls? 
+        * Explicitly ignore SCI (0x9a), which we don't translate to DECID.
+        */
        if ((c & -32) == 0x80 && term->termstate < DO_CTRLS &&
            !term->vt52_mode && has_compat(VT220)) {
-           term->termstate = SEEN_ESC;
-           term->esc_query = FALSE;
-           c = '@' + (c & 0x1F);
+           if (c == 0x9a)
+               c = 0;
+           else {
+               term->termstate = SEEN_ESC;
+               term->esc_query = FALSE;
+               c = '@' + (c & 0x1F);
+           }
        }
 
        /* Or the GL control. */
@@ -2633,13 +2655,12 @@ static void term_out(Terminal *term)
        if ((c & ~0x1F) == 0 && term->termstate < DO_CTRLS) {
            switch (c) {
              case '\005':             /* ENQ: terminal type query */
-               /* Strictly speaking this is VT100 but a VT100 defaults to
+               /* 
+                * Strictly speaking this is VT100 but a VT100 defaults to
                 * no response. Other terminals respond at their option.
                 *
                 * Don't put a CR in the default string as this tends to
                 * upset some weird software.
-                *
-                * An xterm returns "xterm" (5 characters)
                 */
                compatibility(ANSIMIN);
                if (term->ldisc) {
@@ -3510,7 +3531,7 @@ static void term_out(Terminal *term)
                                  case 95:
                                  case 96:
                                  case 97:
-                                   /* xterm-style bright foreground */
+                                   /* aixterm-style bright foreground */
                                    term->curr_attr &= ~ATTR_FGMASK;
                                    term->curr_attr |=
                                        ((term->esc_args[i] - 90 + 8)
@@ -3541,7 +3562,7 @@ static void term_out(Terminal *term)
                                  case 105:
                                  case 106:
                                  case 107:
-                                   /* xterm-style bright background */
+                                   /* aixterm-style bright background */
                                    term->curr_attr &= ~ATTR_BGMASK;
                                    term->curr_attr |=
                                        ((term->esc_args[i] - 100 + 8)
@@ -3798,7 +3819,7 @@ static void term_out(Terminal *term)
                            }
                        }
                        break;
-                     case 'Z':         /* CBT: BackTab for xterm */
+                     case 'Z':         /* CBT */
                        compatibility(OTHER);
                        {
                            int i = def(term->esc_args[0], 1);