The WinSock library is now loaded at run-time, which means we can
[u/mdw/putty] / winmisc.c
index d3d372d..7e58e93 100644 (file)
--- a/winmisc.c
+++ b/winmisc.c
@@ -2,11 +2,11 @@
  * winmisc.c: miscellaneous Windows-specific things.
  */
 
-#include <windows.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "putty.h"
-#include "winstuff.h"
+
+OSVERSIONINFO osVersion;
 
 void platform_get_x11_auth(char *display, int *proto,
                            unsigned char *data, int *datalen)
@@ -37,29 +37,77 @@ int filename_is_null(Filename fn)
     return !*fn.path;
 }
 
+char *get_username(void)
+{
+    DWORD namelen;
+    char *user;
+
+    namelen = 0;
+    if (GetUserName(NULL, &namelen) == FALSE)
+       return NULL;
+
+    user = snewn(namelen, char);
+    GetUserName(user, &namelen);
+
+    return user;
+}
+
 int SaneDialogBox(HINSTANCE hinst,
                  LPCTSTR tmpl,
                  HWND hwndparent,
                  DLGPROC lpDialogFunc)
 {
-    HWND boxhwnd;
+    WNDCLASS wc;
+    HWND hwnd;
     MSG msg;
-    
-    boxhwnd = CreateDialog(hinst, tmpl, hwndparent, lpDialogFunc);
-    while (GetMessage(&msg, NULL, 0, 0)) {
-       if (!(boxinfo.flags & DF_END) && !IsDialogMessage(boxhwnd, &msg))
+    int flags;
+    int ret;
+    int gm;
+
+    wc.style = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW;
+    wc.lpfnWndProc = DefDlgProc;
+    wc.cbClsExtra = 0;
+    wc.cbWndExtra = DLGWINDOWEXTRA + 8;
+    wc.hInstance = hinst;
+    wc.hIcon = NULL;
+    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+    wc.hbrBackground = (HBRUSH) (COLOR_BACKGROUND +1);
+    wc.lpszMenuName = NULL;
+    wc.lpszClassName = "PuTTYConfigBox";
+    RegisterClass(&wc);
+
+    hwnd = CreateDialog(hinst, tmpl, hwndparent, lpDialogFunc);
+
+    SetWindowLong(hwnd, BOXFLAGS, 0); /* flags */
+    SetWindowLong(hwnd, BOXRESULT, 0); /* result from SaneEndDialog */
+
+    while ((gm=GetMessage(&msg, NULL, 0, 0)) > 0) {
+       flags=GetWindowLong(hwnd, BOXFLAGS);
+       if (!(flags & DF_END) && !IsDialogMessage(hwnd, &msg))
            DispatchMessage(&msg);
-       if (boxinfo.flags & DF_END) break;
+       if (flags & DF_END)
+           break;
     }
-    boxinfo.flags=0;
-    return boxinfo.result;
+
+    if (gm == 0)
+        PostQuitMessage(msg.wParam); /* We got a WM_QUIT, pass it on */
+
+    ret=GetWindowLong(hwnd, BOXRESULT);
+    DestroyWindow(hwnd);
+    return ret;
 }
 
 void SaneEndDialog(HWND hwnd, int ret)
 {
-    boxinfo.result = ret;
-    boxinfo.flags |= DF_END;
-    DestroyWindow(hwnd);
+    SetWindowLong(hwnd, BOXRESULT, ret);
+    SetWindowLong(hwnd, BOXFLAGS, DF_END);
+}
+
+BOOL init_winver(void)
+{
+    ZeroMemory(&osVersion, sizeof(osVersion));
+    osVersion.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
+    return GetVersionEx ( (OSVERSIONINFO *) &osVersion);
 }
 
 #ifdef DEBUG