do_toplevel:
switch (c) {
case '\005': /* terminal type query */
- back->send ("\033[?1;2c", 7);
+ ldisc->send ("\033[?1;2c", 7);
break;
case '\007':
beep();
if (insert)
insch (1);
check_selection (cpos, cpos+1);
- *cpos++ = c | curr_attr |
+ *cpos++ = xlat_tty2scr((unsigned char)c) | curr_attr |
(c <= 0x7F ? cset_attr[cset] : ATTR_ASCII);
curs_x++;
if (curs_x == cols) {
must_update = TRUE;
break;
case 'Z': /* terminal type query */
- back->send ("\033[?6c", 5);
+ ldisc->send ("\033[?6c", 5);
break;
case 'c': /* restore power-on settings */
power_on();
must_update = TRUE;
break;
case 'c': /* terminal type query */
- back->send ("\033[?6c", 5);
+ ldisc->send ("\033[?6c", 5);
break;
case 'n': /* cursor position query */
if (esc_args[0] == 6) {
char buf[32];
sprintf (buf, "\033[%d;%dR", curs_y + 1, curs_x + 1);
- back->send (buf, strlen(buf));
+ ldisc->send (buf, strlen(buf));
}
break;
case 'h': /* toggle a mode to high */
}
break;
case 'r': /* set scroll margins */
- if (esc_nargs <= 2) {
+ if (!esc_query && esc_nargs <= 2) {
int top, bot;
top = def(esc_args[0], 1) - 1;
if (top < 0)
top = 0;
- bot = (esc_nargs == 1 ? rows :
+ bot = (esc_nargs <= 1 || esc_args[1] == 0 ? rows :
def(esc_args[1], rows)) - 1;
if (bot >= rows)
bot = rows-1;
if (i == 0 || i == 1) {
strcpy (buf, "\033[2;1;1;112;112;1;0x");
buf[2] += i;
- back->send (buf, 20);
+ ldisc->send (buf, 20);
}
}
break;
if (y<0) y = 0;
if (y>=rows) y = rows-1;
- if (x<0) x = 0;
+ if (x<0) {
+ if (y > 0) {
+ x = cols-1;
+ y--;
+ } else
+ x = 0;
+ }
if (x>=cols) x = cols-1;
selpoint = disptop + y * (cols+1) + x;
!(p <= data+len-sizeof(sel_nl) &&
!memcmp(p, sel_nl, sizeof(sel_nl))))
p++;
- back->send (q, p-q);
+
+ {
+ int i;
+ unsigned char c;
+ for(i=0;i<p-q;i++)
+ {
+ c=xlat_kbd2tty(q[i]);
+ ldisc->send(&c,1);
+ }
+ }
+
if (p <= data+len-sizeof(sel_nl) &&
!memcmp(p, sel_nl, sizeof(sel_nl))) {
- back->send ("\r", 1);
+ ldisc->send ("\r", 1);
p += sizeof(sel_nl);
}
q = p;