X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/8ee3ff16bb05090f9812a924d7d2a085bd22d3b2..7440fd4419acfc9c784f142fb9dee3e64c9a18c2:/winmisc.c diff --git a/winmisc.c b/winmisc.c index d3d372dd..7e58e93d 100644 --- a/winmisc.c +++ b/winmisc.c @@ -2,11 +2,11 @@ * winmisc.c: miscellaneous Windows-specific things. */ -#include #include #include #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