Add context help to a couple of message boxes. Unfortunately the ones
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Tue, 1 Mar 2005 01:16:57 +0000 (01:16 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Tue, 1 Mar 2005 01:16:57 +0000 (01:16 +0000)
I wanted to get to -- "software caused connection abort" and friends --
are going to be more involved (probably requiring some cross-platform
notion of help contexts), and these ones hardly seem worth the effort.
Still, I've done it now.

Side-effect: Pageant now uses the same `hinst' and `hwnd' globals as
everything else. Tested basic functionality.

git-svn-id: svn://svn.tartarus.org/sgt/putty@5417 cda61777-01e9-0310-a592-d414129be87e

doc/errors.but
doc/using.but
windows/window.c
windows/winhelp.h
windows/winpgen.c
windows/winpgnt.c
windows/winutils.c

index 771c7ec..2c4385e 100644 (file)
@@ -130,9 +130,11 @@ Similarly, any error message starting with \q{Assertion failed} is a
 bug in PuTTY. Please report it to us, and include the exact text
 from the error message box.
 
 bug in PuTTY. Please report it to us, and include the exact text
 from the error message box.
 
-\H{errors-key-wrong-format} \q{Unable to use this private key file},
+\H{errors-cant-load-key} \q{Unable to use this private key file},
 \q{Couldn't load private key}, \q{Key is of wrong type}
 
 \q{Couldn't load private key}, \q{Key is of wrong type}
 
+\cfg{winhelp-topic}{errors.cantloadkey}
+
 Various forms of this error are printed in the PuTTY window, or
 written to the PuTTY Event Log (see \k{using-eventlog}) when trying
 public-key authentication, or given by Pageant when trying to load a
 Various forms of this error are printed in the PuTTY window, or
 written to the PuTTY Event Log (see \k{using-eventlog}) when trying
 public-key authentication, or given by Pageant when trying to load a
index 81dc552..46d5f16 100644 (file)
@@ -516,6 +516,8 @@ use the \c{-load} option (described in \k{using-cmdline-load}).
 
 \S{using-cleanup} \i\c{-cleanup}
 
 
 \S{using-cleanup} \i\c{-cleanup}
 
+\cfg{winhelp-topic}{options.cleanup}
+
 If invoked with the \c{-cleanup} option, rather than running as
 normal, PuTTY will remove its \I{removing registry entries}registry
 entries and \I{random seed file} from the local machine (after
 If invoked with the \c{-cleanup} option, rather than running as
 normal, PuTTY will remove its \I{removing registry entries}registry
 entries and \I{random seed file} from the local machine (after
index b3d350b..2105888 100644 (file)
@@ -299,6 +299,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
     int guess_width, guess_height;
 
     hinst = inst;
     int guess_width, guess_height;
 
     hinst = inst;
+    hwnd = NULL;
     flags = FLAG_VERBOSE | FLAG_INTERACTIVE;
 
     sk_init();
     flags = FLAG_VERBOSE | FLAG_INTERACTIVE;
 
     sk_init();
@@ -451,8 +452,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                                   "SESSIONS. Are you really sure you want\n"
                                   "to continue?", appname);
                    s2 = dupprintf("%s Warning", appname);
                                   "SESSIONS. Are you really sure you want\n"
                                   "to continue?", appname);
                    s2 = dupprintf("%s Warning", appname);
-                   if (MessageBox(NULL, s1, s2,
-                                  MB_YESNO | MB_ICONWARNING) == IDYES) {
+                   if (message_box(s1, s2, MB_YESNO | MB_ICONWARNING,
+                                   HELPCTXID(option_cleanup)) == IDYES) {
                        cleanup_all();
                    }
                    sfree(s1);
                        cleanup_all();
                    }
                    sfree(s1);
@@ -597,8 +598,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
        RegisterClass(&wndclass);
     }
 
        RegisterClass(&wndclass);
     }
 
-    hwnd = NULL;
-
     memset(&ucsdata, 0, sizeof(ucsdata));
 
     cfgtopalette();
     memset(&ucsdata, 0, sizeof(ucsdata));
 
     cfgtopalette();
index 34cfd93..51e1b9c 100644 (file)
@@ -3,6 +3,7 @@
  * the \cfg{winhelp-topic} directives in the Halibut source.
  */
 
  * the \cfg{winhelp-topic} directives in the Halibut source.
  */
 
+/* Maximum length for WINHELP_CTX_foo strings */
 #define WINHELP_CTX_MAXLEN 80
 
 /* These are used in the cross-platform configuration dialog code. */
 #define WINHELP_CTX_MAXLEN 80
 
 /* These are used in the cross-platform configuration dialog code. */
 #define WINHELP_CTXID_errors_hostkey_absent 1
 #define WINHELP_CTX_errors_hostkey_changed "errors.hostkey.changed"
 #define WINHELP_CTXID_errors_hostkey_changed 2
 #define WINHELP_CTXID_errors_hostkey_absent 1
 #define WINHELP_CTX_errors_hostkey_changed "errors.hostkey.changed"
 #define WINHELP_CTXID_errors_hostkey_changed 2
+#define WINHELP_CTX_errors_cantloadkey "errors.cantloadkey"
+#define WINHELP_CTXID_errors_cantloadkey 3
+#define WINHELP_CTX_option_cleanup "options.cleanup"
+#define WINHELP_CTXID_option_cleanup 4
index eac66de..d027fc7 100644 (file)
@@ -633,8 +633,8 @@ void load_key_file(HWND hwnd, struct MainDlgState *state,
        !import_possible(type)) {
        char *msg = dupprintf("Couldn't load private key (%s)",
                              key_type_to_str(type));
        !import_possible(type)) {
        char *msg = dupprintf("Couldn't load private key (%s)",
                              key_type_to_str(type));
-       MessageBox(NULL, msg,
-                  "PuTTYgen Error", MB_OK | MB_ICONERROR);
+       message_box(msg, "PuTTYgen Error", MB_OK | MB_ICONERROR,
+                   HELPCTXID(errors_cantloadkey));
        sfree(msg);
        return;
     }
        sfree(msg);
        return;
     }
@@ -695,7 +695,8 @@ void load_key_file(HWND hwnd, struct MainDlgState *state,
        sfree(comment);
     if (ret == 0) {
        char *msg = dupprintf("Couldn't load private key (%s)", errmsg);
        sfree(comment);
     if (ret == 0) {
        char *msg = dupprintf("Couldn't load private key (%s)", errmsg);
-       MessageBox(NULL, msg, "PuTTYgen Error", MB_OK | MB_ICONERROR);
+       message_box(msg, "PuTTYgen Error", MB_OK | MB_ICONERROR,
+                   HELPCTXID(errors_cantloadkey));
        sfree(msg);
     } else if (ret == 1) {
        /*
        sfree(msg);
     } else if (ret == 1) {
        /*
@@ -1415,6 +1416,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
 
     InitCommonControls();
     hinst = inst;
 
     InitCommonControls();
     hinst = inst;
+    hwnd = NULL;
 
     /*
      * See if we can find our Help file.
 
     /*
      * See if we can find our Help file.
index e37043e..e128949 100644 (file)
@@ -50,8 +50,6 @@
 
 extern char ver[];
 
 
 extern char ver[];
 
-static HINSTANCE instance;
-static HWND main_hwnd;
 static HWND keylist;
 static HWND aboutbox;
 static HMENU systray_menu, session_menu;
 static HWND keylist;
 static HWND aboutbox;
 static HMENU systray_menu, session_menu;
@@ -80,7 +78,7 @@ void modalfatalbox(char *fmt, ...)
     va_start(ap, fmt);
     buf = dupvprintf(fmt, ap);
     va_end(ap);
     va_start(ap, fmt);
     buf = dupvprintf(fmt, ap);
     va_end(ap);
-    MessageBox(main_hwnd, buf, "Pageant Fatal Error",
+    MessageBox(hwnd, buf, "Pageant Fatal Error",
               MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
     sfree(buf);
     exit(1);
               MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
     sfree(buf);
     exit(1);
@@ -142,7 +140,7 @@ static void *get_keylist2(int *length);
  */
 int random_byte(void)
 {
  */
 int random_byte(void)
 {
-    MessageBox(main_hwnd, "Internal Error", APPNAME, MB_OK | MB_ICONERROR);
+    MessageBox(hwnd, "Internal Error", APPNAME, MB_OK | MB_ICONERROR);
     exit(0);
     /* this line can't be reached but it placates MSVC's warnings :-) */
     return 0;
     exit(0);
     /* this line can't be reached but it placates MSVC's warnings :-) */
     return 0;
@@ -236,7 +234,7 @@ static int CALLBACK AboutProc(HWND hwnd, UINT msg,
            return 0;
          case 101:
            EnableWindow(hwnd, 0);
            return 0;
          case 101:
            EnableWindow(hwnd, 0);
-           DialogBox(instance, MAKEINTRESOURCE(214), hwnd, LicenceProc);
+           DialogBox(hinst, MAKEINTRESOURCE(214), hwnd, LicenceProc);
            EnableWindow(hwnd, 1);
            SetActiveWindow(hwnd);
            return 0;
            EnableWindow(hwnd, 1);
            SetActiveWindow(hwnd);
            return 0;
@@ -412,9 +410,11 @@ static void add_keyfile(Filename filename)
        
     type = key_type(&filename);
     if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2) {
        
     type = key_type(&filename);
     if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2) {
-       char msg[256];
-       sprintf(msg, "Couldn't load this key (%s)", key_type_to_str(type));
-       MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR);
+       char *msg = dupprintf("Couldn't load this key (%s)",
+                             key_type_to_str(type));
+       message_box(msg, APPNAME, MB_OK | MB_ICONERROR,
+                   HELPCTXID(errors_cantloadkey));
+       sfree(msg);
        return;
     }
 
        return;
     }
 
@@ -430,7 +430,8 @@ static void add_keyfile(Filename filename)
        if (type == SSH_KEYTYPE_SSH1) {
            if (!rsakey_pubblob(&filename, &blob, &bloblen, &error)) {
                char *msg = dupprintf("Couldn't load private key (%s)", error);
        if (type == SSH_KEYTYPE_SSH1) {
            if (!rsakey_pubblob(&filename, &blob, &bloblen, &error)) {
                char *msg = dupprintf("Couldn't load private key (%s)", error);
-               MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR);
+               message_box(msg, APPNAME, MB_OK | MB_ICONERROR,
+                           HELPCTXID(errors_cantloadkey));
                sfree(msg);
                return;
            }
                sfree(msg);
                return;
            }
@@ -440,7 +441,8 @@ static void add_keyfile(Filename filename)
            blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error);
            if (!blob) {
                char *msg = dupprintf("Couldn't load private key (%s)", error);
            blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error);
            if (!blob) {
                char *msg = dupprintf("Couldn't load private key (%s)", error);
-               MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR);
+               message_box(msg, APPNAME, MB_OK | MB_ICONERROR,
+                           HELPCTXID(errors_cantloadkey));
                sfree(msg);
                return;
            }
                sfree(msg);
                return;
            }
@@ -541,7 +543,7 @@ static void add_keyfile(Filename filename)
            } else {
                int dlgret;
                original_pass = 1;
            } else {
                int dlgret;
                original_pass = 1;
-               dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210),
+               dlgret = DialogBoxParam(hinst, MAKEINTRESOURCE(210),
                                        NULL, PassphraseProc, (LPARAM) & pps);
                passphrase_box = NULL;
                if (!dlgret) {
                                        NULL, PassphraseProc, (LPARAM) & pps);
                passphrase_box = NULL;
                if (!dlgret) {
@@ -578,7 +580,8 @@ static void add_keyfile(Filename filename)
        sfree(comment);
     if (ret == 0) {
        char *msg = dupprintf("Couldn't load private key (%s)", error);
        sfree(comment);
     if (ret == 0) {
        char *msg = dupprintf("Couldn't load private key (%s)", error);
-       MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR);
+       message_box(msg, APPNAME, MB_OK | MB_ICONERROR,
+                   HELPCTXID(errors_cantloadkey));
        sfree(msg);
        if (type == SSH_KEYTYPE_SSH1)
            sfree(rkey);
        sfree(msg);
        if (type == SSH_KEYTYPE_SSH1)
            sfree(rkey);
@@ -1417,7 +1420,7 @@ static void prompt_add_keyfile(void)
        
     if (!keypath) keypath = filereq_new();
     memset(&of, 0, sizeof(of));
        
     if (!keypath) keypath = filereq_new();
     memset(&of, 0, sizeof(of));
-    of.hwndOwner = main_hwnd;
+    of.hwndOwner = hwnd;
     of.lpstrFilter = FILTER_KEY_FILES;
     of.lpstrCustomFilter = NULL;
     of.nFilterIndex = 1;
     of.lpstrFilter = FILTER_KEY_FILES;
     of.lpstrCustomFilter = NULL;
     of.nFilterIndex = 1;
@@ -1581,7 +1584,7 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg,
             if (HIWORD(wParam) == BN_CLICKED ||
                 HIWORD(wParam) == BN_DOUBLECLICKED) {
                 if (help_path) {
             if (HIWORD(wParam) == BN_CLICKED ||
                 HIWORD(wParam) == BN_DOUBLECLICKED) {
                 if (help_path) {
-                    WinHelp(main_hwnd, help_path, HELP_COMMAND,
+                    WinHelp(hwnd, help_path, HELP_COMMAND,
                             (DWORD)"JI(`',`pageant.general')");
                     requested_help = TRUE;
                 }
                             (DWORD)"JI(`',`pageant.general')");
                     requested_help = TRUE;
                 }
@@ -1600,7 +1603,7 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg,
             }
             if (topic) {
                char *cmd = dupprintf("JI(`',`%s')", topic);
             }
             if (topic) {
                char *cmd = dupprintf("JI(`',`%s')", topic);
-                WinHelp(main_hwnd, help_path, HELP_COMMAND, (DWORD)cmd);
+                WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd);
                sfree(cmd);
                 requested_help = TRUE;
             } else {
                sfree(cmd);
                 requested_help = TRUE;
             } else {
@@ -1633,7 +1636,7 @@ static BOOL AddTrayIcon(HWND hwnd)
     tnid.uID = 1;             /* unique within this systray use */
     tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
     tnid.uCallbackMessage = WM_SYSTRAY;
     tnid.uID = 1;             /* unique within this systray use */
     tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
     tnid.uCallbackMessage = WM_SYSTRAY;
-    tnid.hIcon = hicon = LoadIcon(instance, MAKEINTRESOURCE(201));
+    tnid.hIcon = hicon = LoadIcon(hinst, MAKEINTRESOURCE(201));
     strcpy(tnid.szTip, "Pageant (PuTTY authentication agent)");
 
     res = Shell_NotifyIcon(NIM_ADD, &tnid);
     strcpy(tnid.szTip, "Pageant (PuTTY authentication agent)");
 
     res = Shell_NotifyIcon(NIM_ADD, &tnid);
@@ -1758,7 +1761,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            break;
          case IDM_VIEWKEYS:
            if (!keylist) {
            break;
          case IDM_VIEWKEYS:
            if (!keylist) {
-               keylist = CreateDialog(instance, MAKEINTRESOURCE(211),
+               keylist = CreateDialog(hinst, MAKEINTRESOURCE(211),
                                       NULL, KeyListProc);
                ShowWindow(keylist, SW_SHOWNORMAL);
            }
                                       NULL, KeyListProc);
                ShowWindow(keylist, SW_SHOWNORMAL);
            }
@@ -1783,7 +1786,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            break;
          case IDM_ABOUT:
            if (!aboutbox) {
            break;
          case IDM_ABOUT:
            if (!aboutbox) {
-               aboutbox = CreateDialog(instance, MAKEINTRESOURCE(213),
+               aboutbox = CreateDialog(hinst, MAKEINTRESOURCE(213),
                                        NULL, AboutProc);
                ShowWindow(aboutbox, SW_SHOWNORMAL);
                /* 
                                        NULL, AboutProc);
                ShowWindow(aboutbox, SW_SHOWNORMAL);
                /* 
@@ -1797,7 +1800,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            break;
          case IDM_HELP:
             if (help_path) {
            break;
          case IDM_HELP:
             if (help_path) {
-                WinHelp(main_hwnd, help_path, HELP_COMMAND,
+                WinHelp(hwnd, help_path, HELP_COMMAND,
                         (DWORD)"JI(`',`pageant.general')");
                 requested_help = TRUE;
             }
                         (DWORD)"JI(`',`pageant.general')");
                 requested_help = TRUE;
             }
@@ -1828,7 +1831,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        break;
       case WM_DESTROY:
         if (requested_help) {
        break;
       case WM_DESTROY:
         if (requested_help) {
-            WinHelp(main_hwnd, help_path, HELP_QUIT, 0);
+            WinHelp(hwnd, help_path, HELP_QUIT, 0);
             requested_help = FALSE;
         }
        PostQuitMessage(0);
             requested_help = FALSE;
         }
        PostQuitMessage(0);
@@ -1970,6 +1973,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
     int argc, i;
     char **argv, **argstart;
 
     int argc, i;
     char **argv, **argstart;
 
+    hinst = inst;
+    hwnd = NULL;
+
     /*
      * Determine whether we're an NT system (should have security
      * APIs) or a non-NT system (don't do security).
     /*
      * Determine whether we're an NT system (should have security
      * APIs) or a non-NT system (don't do security).
@@ -2008,8 +2014,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
     } else
        advapi = NULL;
 
     } else
        advapi = NULL;
 
-    instance = inst;
-
     /*
      * See if we can find our Help file.
      */
     /*
      * See if we can find our Help file.
      */
@@ -2074,15 +2078,15 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
            RegisterClass(&wndclass);
        }
 
            RegisterClass(&wndclass);
        }
 
-       main_hwnd = keylist = NULL;
+       keylist = NULL;
 
 
-       main_hwnd = CreateWindow(APPNAME, APPNAME,
-                                 WS_OVERLAPPEDWINDOW | WS_VSCROLL,
-                                 CW_USEDEFAULT, CW_USEDEFAULT,
-                                 100, 100, NULL, NULL, inst, NULL);
+       hwnd = CreateWindow(APPNAME, APPNAME,
+                           WS_OVERLAPPEDWINDOW | WS_VSCROLL,
+                           CW_USEDEFAULT, CW_USEDEFAULT,
+                           100, 100, NULL, NULL, inst, NULL);
 
        /* Set up a system tray icon */
 
        /* Set up a system tray icon */
-       AddTrayIcon(main_hwnd);
+       AddTrayIcon(hwnd);
 
         /* Accelerators used: nsvkxa */
         systray_menu = CreatePopupMenu();
 
         /* Accelerators used: nsvkxa */
         systray_menu = CreatePopupMenu();
@@ -2107,7 +2111,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
        /* Set the default menu item. */
        SetMenuDefaultItem(systray_menu, IDM_VIEWKEYS, FALSE);
 
        /* Set the default menu item. */
        SetMenuDefaultItem(systray_menu, IDM_VIEWKEYS, FALSE);
 
-       ShowWindow(main_hwnd, SW_HIDE);
+       ShowWindow(hwnd, SW_HIDE);
 
        /*
         * Initialise storage for RSA keys.
 
        /*
         * Initialise storage for RSA keys.
@@ -2194,7 +2198,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
        NOTIFYICONDATA tnid;
 
        tnid.cbSize = sizeof(NOTIFYICONDATA);
        NOTIFYICONDATA tnid;
 
        tnid.cbSize = sizeof(NOTIFYICONDATA);
-       tnid.hWnd = main_hwnd;
+       tnid.hWnd = hwnd;
        tnid.uID = 1;
 
        Shell_NotifyIcon(NIM_DELETE, &tnid);
        tnid.uID = 1;
 
        Shell_NotifyIcon(NIM_DELETE, &tnid);
index 5bead7b..450c030 100644 (file)
@@ -104,6 +104,8 @@ static VOID CALLBACK message_box_help_callback(LPHELPINFO lpHelpInfo)
        } while (0)
        CHECK_CTX(errors_hostkey_absent);
        CHECK_CTX(errors_hostkey_changed);
        } while (0)
        CHECK_CTX(errors_hostkey_absent);
        CHECK_CTX(errors_hostkey_changed);
+       CHECK_CTX(errors_cantloadkey);
+       CHECK_CTX(option_cleanup);
 #undef CHECK_CTX
        if (context) {
            /* We avoid using malloc, in case we're in a situation where
 #undef CHECK_CTX
        if (context) {
            /* We avoid using malloc, in case we're in a situation where
@@ -125,8 +127,7 @@ int message_box(LPCTSTR text, LPCTSTR caption, DWORD style, DWORD helpctxid)
      * callback function for the Help button.
      */
     mbox.cbSize = sizeof(mbox);
      * callback function for the Help button.
      */
     mbox.cbSize = sizeof(mbox);
-    /* FIXME: assumes global hwnd and hinst are always the Right Thing;
-     * are they? */
+    /* Assumes the globals `hinst' and `hwnd' have sensible values. */
     mbox.hInstance = hinst;
     mbox.hwndOwner = hwnd;
     mbox.lpfnMsgBoxCallback = &message_box_help_callback;
     mbox.hInstance = hinst;
     mbox.hwndOwner = hwnd;
     mbox.lpfnMsgBoxCallback = &message_box_help_callback;