The WinSock library is now loaded at run-time, which means we can
[u/mdw/putty] / winmisc.c
index 2590bef..7e58e93 100644 (file)
--- a/winmisc.c
+++ b/winmisc.c
@@ -2,11 +2,12 @@
  * winmisc.c: miscellaneous Windows-specific things.
  */
 
-#include <windows.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "putty.h"
 
+OSVERSIONINFO osVersion;
+
 void platform_get_x11_auth(char *display, int *proto,
                            unsigned char *data, int *datalen)
 {
@@ -36,6 +37,79 @@ 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)
+{
+    WNDCLASS wc;
+    HWND hwnd;
+    MSG 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 (flags & DF_END)
+           break;
+    }
+
+    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)
+{
+    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
 static FILE *debug_fp = NULL;
 static HANDLE debug_hdl = INVALID_HANDLE_VALUE;