X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/9754e5ca92d4aa7c9ded57270082ef8348a1ef80..9e3a3317ecc364296a6a8b05c20a7fc19826e22d:/windows/winutils.c diff --git a/windows/winutils.c b/windows/winutils.c index 2e91d8bb..40f1f4a7 100644 --- a/windows/winutils.c +++ b/windows/winutils.c @@ -5,9 +5,8 @@ #include #include #include -#include -#include "winstuff.h" +#include "putty.h" #include "misc.h" #ifdef TESTMODE @@ -26,7 +25,7 @@ */ struct filereq_tag { - TCHAR cwd[PATH_MAX]; + TCHAR cwd[MAX_PATH]; }; /* @@ -37,7 +36,7 @@ struct filereq_tag { */ BOOL request_file(filereq *state, OPENFILENAME *of, int preserve, int save) { - TCHAR cwd[PATH_MAX]; /* process CWD */ + TCHAR cwd[MAX_PATH]; /* process CWD */ BOOL ret; /* Get process CWD */ @@ -89,6 +88,69 @@ void filereq_free(filereq *state) } /* + * Message box with optional context help. + */ + +/* Callback function to launch context help. */ +static VOID CALLBACK message_box_help_callback(LPHELPINFO lpHelpInfo) +{ + char *context = NULL; +#define CHECK_CTX(name) \ + do { \ + if (lpHelpInfo->dwContextId == WINHELP_CTXID_ ## name) \ + context = WINHELP_CTX_ ## name; \ + } while (0) + CHECK_CTX(errors_hostkey_absent); + CHECK_CTX(errors_hostkey_changed); + CHECK_CTX(errors_cantloadkey); + CHECK_CTX(option_cleanup); + CHECK_CTX(pgp_fingerprints); +#undef CHECK_CTX + if (context) + launch_help(hwnd, context); +} + +int message_box(LPCTSTR text, LPCTSTR caption, DWORD style, DWORD helpctxid) +{ + MSGBOXPARAMS mbox; + + /* + * We use MessageBoxIndirect() because it allows us to specify a + * callback function for the Help button. + */ + mbox.cbSize = sizeof(mbox); + /* Assumes the globals `hinst' and `hwnd' have sensible values. */ + mbox.hInstance = hinst; + mbox.hwndOwner = hwnd; + mbox.lpfnMsgBoxCallback = &message_box_help_callback; + mbox.dwLanguageId = LANG_NEUTRAL; + mbox.lpszText = text; + mbox.lpszCaption = caption; + mbox.dwContextHelpId = helpctxid; + mbox.dwStyle = style; + if (helpctxid != 0 && has_help()) mbox.dwStyle |= MB_HELP; + return MessageBoxIndirect(&mbox); +} + +/* + * Display the fingerprints of the PGP Master Keys to the user. + */ +void pgp_fingerprints(void) +{ + message_box("These are the fingerprints of the PuTTY PGP Master Keys. They can\n" + "be used to establish a trust path from this executable to another\n" + "one. See the manual for more information.\n" + "(Note: these fingerprints have nothing to do with SSH!)\n" + "\n" + "PuTTY Master Key (RSA), 1024-bit:\n" + " " PGP_RSA_MASTER_KEY_FP "\n" + "PuTTY Master Key (DSA), 1024-bit:\n" + " " PGP_DSA_MASTER_KEY_FP, + "PGP fingerprints", MB_ICONINFORMATION | MB_OK, + HELPCTXID(pgp_fingerprints)); +} + +/* * Split a complete command line into argc/argv, attempting to do * it exactly the same way Windows itself would do it (so that * console utilities, which receive argc and argv from Windows,