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
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
\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
int guess_width, guess_height;
hinst = inst;
int guess_width, guess_height;
hinst = inst;
flags = FLAG_VERBOSE | FLAG_INTERACTIVE;
sk_init();
flags = FLAG_VERBOSE | FLAG_INTERACTIVE;
sk_init();
"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);
RegisterClass(&wndclass);
}
RegisterClass(&wndclass);
}
memset(&ucsdata, 0, sizeof(ucsdata));
cfgtopalette();
memset(&ucsdata, 0, sizeof(ucsdata));
cfgtopalette();
* 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
!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(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) {
/*
InitCommonControls();
hinst = inst;
InitCommonControls();
hinst = inst;
/*
* See if we can find our Help file.
/*
* See if we can find our Help file.
-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;
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);
*/
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;
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;
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);
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));
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));
} 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) {
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);
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.lpstrFilter = FILTER_KEY_FILES;
of.lpstrCustomFilter = NULL;
of.nFilterIndex = 1;
of.lpstrFilter = FILTER_KEY_FILES;
of.lpstrCustomFilter = NULL;
of.nFilterIndex = 1;
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;
}
}
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 {
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);
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);
}
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);
/*
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;
}
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);
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).
/*
* See if we can find our Help file.
*/
/*
* See if we can find our Help file.
*/
RegisterClass(&wndclass);
}
RegisterClass(&wndclass);
}
- main_hwnd = 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);
/* Accelerators used: nsvkxa */
systray_menu = CreatePopupMenu();
/* Accelerators used: nsvkxa */
systray_menu = CreatePopupMenu();
/* 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.
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.uID = 1;
Shell_NotifyIcon(NIM_DELETE, &tnid);
tnid.uID = 1;
Shell_NotifyIcon(NIM_DELETE, &tnid);
} 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
* 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;