Implement sftp-backend-diagnostic in pscp.
[sgt/putty] / winmisc.c
index 2590bef..916e988 100644 (file)
--- a/winmisc.c
+++ b/winmisc.c
@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "putty.h"
+#include "winstuff.h"
 
 void platform_get_x11_auth(char *display, int *proto,
                            unsigned char *data, int *datalen)
@@ -36,6 +37,57 @@ int filename_is_null(Filename fn)
     return !*fn.path;
 }
 
+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);
+}
+
 #ifdef DEBUG
 static FILE *debug_fp = NULL;
 static HANDLE debug_hdl = INVALID_HANDLE_VALUE;