static char *window_name, *icon_name;
-static Ldisc *real_ldisc;
-
static int compose_state = 0;
-void begin_session(void) {
- ldisc = real_ldisc;
-}
+/* Dummy routine, only required in plink. */
+void ldisc_update(int echo, int edit) {}
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
static char appname[] = "PuTTY";
return 1;
}
- real_ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
- /* To start with, we use the simple line discipline, so we can
- * type passwords etc without fear of them being echoed... */
- ldisc = &ldisc_simple;
-
if (!prev) {
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
vsprintf(stuff, fmt, ap);
va_end(ap);
MessageBox(hwnd, stuff, "PuTTY Fatal Error", MB_ICONERROR | MB_OK);
- if (cfg.close_on_exit)
+ if (cfg.close_on_exit == COE_ALWAYS)
PostQuitMessage(1);
else {
session_closed = TRUE;
ret = select_result (pend_netevent_wParam, pend_netevent_lParam);
reentering = 0;
- if (ret == 0) {
- if (cfg.close_on_exit)
+ if (ret == 0 && !session_closed) {
+ /* Abnormal exits will already have set session_closed and taken
+ * appropriate action. */
+ if (cfg.close_on_exit == COE_ALWAYS ||
+ cfg.close_on_exit == COE_NORMAL)
PostQuitMessage(0);
else {
- session_closed = TRUE;
- MessageBox(hwnd, "Connection closed by remote host",
- "PuTTY", MB_OK | MB_ICONINFORMATION);
- SetWindowText (hwnd, "PuTTY (inactive)");
+ session_closed = TRUE;
+ SetWindowText (hwnd, "PuTTY (inactive)");
+ MessageBox(hwnd, "Connection closed by remote host",
+ "PuTTY", MB_OK | MB_ICONINFORMATION);
}
}
}
init_fonts(0);
sfree(logpal);
/*
- * Telnet will change local echo -> remote if the
- * remote asks.
+ * Flush the line discipline's edit buffer in the
+ * case where local editing has just been disabled.
*/
- if (cfg.protocol != PROT_TELNET)
- ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
+ ldisc_send(NULL, 0);
if (pal)
DeleteObject(pal);
logpal = NULL;
len = TranslateKey (message, wParam, lParam, buf);
if (len == -1)
return DefWindowProc (hwnd, message, wParam, lParam);
- ldisc->send (buf, len);
+ ldisc_send (buf, len);
if (len > 0)
show_mouseptr(0);
buf[1] = wParam;
buf[0] = wParam >> 8;
- ldisc->send (buf, 2);
+ ldisc_send (buf, 2);
}
case WM_CHAR:
case WM_SYSCHAR:
*/
{
char c = xlat_kbd2tty((unsigned char)wParam);
- ldisc->send (&c, 1);
+ ldisc_send (&c, 1);
}
return 0;
}