Enable better build-time flexibility over which WinSock to include
[u/mdw/putty] / window.c
index 13cf177..9c973fa 100644 (file)
--- a/window.c
+++ b/window.c
@@ -1,6 +1,12 @@
 #include <windows.h>
 #include <commctrl.h>
+#ifndef AUTO_WINSOCK
+#ifdef WINSOCK_TWO
+#include <winsock2.h>
+#else
 #include <winsock.h>
+#endif
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -82,6 +88,12 @@ static Mouse_Button lastbtn;
 
 static char *window_name, *icon_name;
 
+static Ldisc *real_ldisc;
+
+void begin_session(void) {
+    ldisc = real_ldisc;
+}
+
 int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
     static char appname[] = "PuTTY";
     WORD winsock_ver;
@@ -239,7 +251,10 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
         }
     }
 
-    ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
+    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;
@@ -521,6 +536,25 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
 }
 
 /*
+ * Print a message box and close the connection.
+ */
+void connection_fatal(char *fmt, ...) {
+    va_list ap;
+    char stuff[200];
+
+    va_start(ap, fmt);
+    vsprintf(stuff, fmt, ap);
+    va_end(ap);
+    MessageBox(hwnd, stuff, "PuTTY Fatal Error", MB_ICONERROR | MB_OK);
+    if (cfg.close_on_exit)
+        PostQuitMessage(1);
+    else {
+        session_closed = TRUE;
+        SetWindowText (hwnd, "PuTTY (inactive)");
+    }
+}
+
+/*
  * Actually do the job requested by a WM_NETEVENT
  */
 static void enact_pending_netevent(void) {
@@ -546,10 +580,9 @@ static void enact_pending_netevent(void) {
            sprintf(buf, "Unexpected network error %d", -i);
            break;
        }
-       MessageBox(hwnd, buf, "PuTTY Fatal Error",
-                  MB_ICONERROR | MB_OK);
-       PostQuitMessage(1);
-    } else if (i == 0) {
+        connection_fatal(buf);
+    }
+    if (i <= 0) {
        if (cfg.close_on_exit)
            PostQuitMessage(0);
        else {