static void enact_pending_netevent(void);
static void flash_window(int mode);
static void sys_cursor_update(void);
+static int is_shift_pressed(void);
static int get_fullscreen_rect(RECT * ss);
static time_t last_movement = 0;
static int caret_x = -1, caret_y = -1;
+static void *ldisc;
+
#define FONT_NORMAL 0
#define FONT_BOLD 1
#define FONT_UNDERLINE 2
static UINT wm_mousewheel = WM_MOUSEWHEEL;
/* Dummy routine, only required in plink. */
-void ldisc_update(int echo, int edit)
+void ldisc_update(void *frontend, int echo, int edit)
{
}
char msg[1024], *title;
char *realhost;
- error = back->init((void *)term,
+ error = back->init((void *)term, &backhandle,
cfg.host, cfg.port, &realhost, cfg.tcp_nodelay);
if (error) {
sprintf(msg, "Unable to open connection to\n"
set_icon(title);
}
+ /*
+ * Connect the terminal to the backend for resize purposes.
+ */
+ term_provide_resize_fn(term, back->size, backhandle);
+
+ /*
+ * Set up a line discipline.
+ */
+ ldisc = ldisc_create(term, back, backhandle, NULL);
+
session_closed = FALSE;
/*
time_t now;
time(&now);
if (now - last_movement > cfg.ping_interval) {
- back->special(TS_PING);
+ back->special(backhandle, TS_PING);
last_movement = now;
}
}
* Flush the line discipline's edit buffer in the
* case where local editing has just been disabled.
*/
- ldisc_send(NULL, 0, 0);
+ ldisc_send(ldisc, NULL, 0, 0);
if (pal)
DeleteObject(pal);
logpal = NULL;
break;
case IDM_RESET:
term_pwron(term);
- ldisc_send(NULL, 0, 0);
+ ldisc_send(ldisc, NULL, 0, 0);
break;
case IDM_TEL_AYT:
- back->special(TS_AYT);
+ back->special(backhandle, TS_AYT);
net_pending_errors();
break;
case IDM_TEL_BRK:
- back->special(TS_BRK);
+ back->special(backhandle, TS_BRK);
net_pending_errors();
break;
case IDM_TEL_SYNCH:
- back->special(TS_SYNCH);
+ back->special(backhandle, TS_SYNCH);
net_pending_errors();
break;
case IDM_TEL_EC:
- back->special(TS_EC);
+ back->special(backhandle, TS_EC);
net_pending_errors();
break;
case IDM_TEL_EL:
- back->special(TS_EL);
+ back->special(backhandle, TS_EL);
net_pending_errors();
break;
case IDM_TEL_GA:
- back->special(TS_GA);
+ back->special(backhandle, TS_GA);
net_pending_errors();
break;
case IDM_TEL_NOP:
- back->special(TS_NOP);
+ back->special(backhandle, TS_NOP);
net_pending_errors();
break;
case IDM_TEL_ABORT:
- back->special(TS_ABORT);
+ back->special(backhandle, TS_ABORT);
net_pending_errors();
break;
case IDM_TEL_AO:
- back->special(TS_AO);
+ back->special(backhandle, TS_AO);
net_pending_errors();
break;
case IDM_TEL_IP:
- back->special(TS_IP);
+ back->special(backhandle, TS_IP);
net_pending_errors();
break;
case IDM_TEL_SUSP:
- back->special(TS_SUSP);
+ back->special(backhandle, TS_SUSP);
net_pending_errors();
break;
case IDM_TEL_EOR:
- back->special(TS_EOR);
+ back->special(backhandle, TS_EOR);
net_pending_errors();
break;
case IDM_TEL_EOF:
- back->special(TS_EOF);
+ back->special(backhandle, TS_EOF);
net_pending_errors();
break;
case IDM_ABOUT:
* we're sent.
*/
term_seen_key_event(term);
- ldisc_send(buf, len, 1);
+ ldisc_send(ldisc, buf, len, 1);
show_mouseptr(0);
}
}
*/
term_seen_key_event(term);
for (i = 0; i < n; i += 2) {
- luni_send((unsigned short *)(buff+i), 1, 1);
+ luni_send(ldisc, (unsigned short *)(buff+i), 1, 1);
}
free(buff);
}
buf[1] = wParam;
buf[0] = wParam >> 8;
term_seen_key_event(term);
- lpage_send(kbd_codepage, buf, 2, 1);
+ lpage_send(ldisc, kbd_codepage, buf, 2, 1);
} else {
char c = (unsigned char) wParam;
term_seen_key_event(term);
- lpage_send(kbd_codepage, &c, 1, 1);
+ lpage_send(ldisc, kbd_codepage, &c, 1, 1);
}
return (0);
case WM_CHAR:
{
char c = (unsigned char)wParam;
term_seen_key_event(term);
- lpage_send(CP_ACP, &c, 1, 1);
+ lpage_send(ldisc, CP_ACP, &c, 1, 1);
}
return 0;
case WM_SETCURSOR:
}
keybuf = nc;
term_seen_key_event(term);
- luni_send(&keybuf, 1, 1);
+ luni_send(ldisc, &keybuf, 1, 1);
continue;
}
if (in_utf(term) || dbcs_screenfont) {
keybuf = alt_sum;
term_seen_key_event(term);
- luni_send(&keybuf, 1, 1);
+ luni_send(ldisc, &keybuf, 1, 1);
} else {
ch = (char) alt_sum;
/*
* everything we're sent.
*/
term_seen_key_event(term);
- ldisc_send(&ch, 1, 1);
+ ldisc_send(ldisc, &ch, 1, 1);
}
alt_sum = 0;
} else
term_seen_key_event(term);
- lpage_send(kbd_codepage, &ch, 1, 1);
+ lpage_send(ldisc, kbd_codepage, &ch, 1, 1);
} else {
if(capsOn && ch < 0x80) {
WCHAR cbuf[2];
cbuf[0] = 27;
cbuf[1] = xlat_uskbd2cyrllic(ch);
term_seen_key_event(term);
- luni_send(cbuf+!left_alt, 1+!!left_alt, 1);
+ luni_send(ldisc, cbuf+!left_alt, 1+!!left_alt, 1);
} else {
char cbuf[2];
cbuf[0] = '\033';
cbuf[1] = ch;
term_seen_key_event(term);
- lpage_send(kbd_codepage, cbuf+!left_alt, 1+!!left_alt, 1);
+ lpage_send(ldisc, kbd_codepage,
+ cbuf+!left_alt, 1+!!left_alt, 1);
}
}
show_mouseptr(0);
ShowWindow(hwnd, SW_MAXIMIZE);
}
}
+
+void frontend_keypress(void *handle)
+{
+ /*
+ * Keypress termination in non-Close-On-Exit mode is not
+ * currently supported in PuTTY proper, because the window
+ * always has a perfectly good Close button anyway. So we do
+ * nothing here.
+ */
+ return;
+}