if (lines > 0) {
for (i = 0; i < nlines; i++)
for (j = 0; j < term->cols; j++)
- copy_termchar(term->disptext[start+i], j,
- term->disptext[start+i+distance]->chars+j);
+ copy_termchar(term->disptext[i], j,
+ term->disptext[i+distance]->chars+j);
if (term->dispcursy >= 0 &&
term->dispcursy >= topline + distance &&
term->dispcursy < topline + distance + nlines)
term->dispcursy -= distance;
for (i = 0; i < distance; i++)
for (j = 0; j < term->cols; j++)
- term->disptext[start+nlines+i]->chars[j].attr |= ATTR_INVALID;
+ term->disptext[nlines+i]->chars[j].attr |= ATTR_INVALID;
} else {
for (i = nlines; i-- ;)
for (j = 0; j < term->cols; j++)
- copy_termchar(term->disptext[start+i+distance], j,
- term->disptext[start+i]->chars+j);
+ copy_termchar(term->disptext[i+distance], j,
+ term->disptext[i]->chars+j);
if (term->dispcursy >= 0 &&
term->dispcursy >= topline &&
term->dispcursy < topline + nlines)
term->dispcursy += distance;
for (i = 0; i < distance; i++)
for (j = 0; j < term->cols; j++)
- term->disptext[start+i]->chars[j].attr |= ATTR_INVALID;
+ term->disptext[i]->chars[j].attr |= ATTR_INVALID;
}
save_scroll(term, topline, botline, lines);
}
}
}
- /* 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. */
if (break_run) {
if ((dirty_run || last_run_dirty) && ccount > 0) {
+ do_text(ctx, start, i, ch, ccount, attr,
+ ldata->lattr);
if (attr & (TATTR_ACTCURS | TATTR_PASCURS))
- do_cursor(ctx, our_curs_x, i, ch, ccount, attr,
+ do_cursor(ctx, start, i, ch, ccount, attr,
ldata->lattr);
- else
- do_text(ctx, start, i, ch, ccount, attr,
- ldata->lattr);
updated_line = 1;
}
}
}
if (dirty_run && ccount > 0) {
+ do_text(ctx, start, i, ch, ccount, attr,
+ ldata->lattr);
if (attr & (TATTR_ACTCURS | TATTR_PASCURS))
- do_cursor(ctx, our_curs_x, i, ch, ccount, attr,
+ do_cursor(ctx, start, i, ch, ccount, attr,
ldata->lattr);
- else
- do_text(ctx, start, i, ch, ccount, attr,
- ldata->lattr);
updated_line = 1;
}