static int readytogo;
static int sesslist_has_focus;
+static int requested_help;
static struct prefslist cipherlist;
IDC_CURAPPLIC,
IDC_COMPOSEKEY,
IDC_CTRLALTKEYS,
- IDC_TELNETKEY,
keyboardpanelend,
terminalpanelstart,
IDC_RESIZETERM,
IDC_RESIZEFONT,
IDC_RESIZENONE,
+ IDC_RESIZEEITHER,
IDC_SCROLLBAR,
IDC_SCROLLBARFULLSCREEN,
- IDC_CLOSEWARN,
IDC_SAVESTATIC,
IDC_SAVEEDIT,
+ IDC_SCROLLKEY,
+ IDC_SCROLLDISP,
+ windowpanelend,
+
+ behaviourpanelstart,
+ IDC_TITLE_BEHAVIOUR,
+ IDC_BOX_BEHAVIOUR1,
+ IDC_CLOSEWARN,
IDC_ALTF4,
IDC_ALTSPACE,
IDC_ALTONLY,
- IDC_SCROLLKEY,
- IDC_SCROLLDISP,
IDC_ALWAYSONTOP,
IDC_FULLSCREENONALTENTER,
- windowpanelend,
+ behaviourpanelend,
appearancepanelstart,
IDC_TITLE_APPEARANCE,
IDC_TITLE_CONNECTION,
IDC_BOX_CONNECTION1,
IDC_BOX_CONNECTION2,
+ IDC_BOX_CONNECTION3,
IDC_TTSTATIC,
IDC_TTEDIT,
IDC_LOGSTATIC,
IDC_LOGEDIT,
IDC_PINGSTATIC,
IDC_PINGEDIT,
+ IDC_NODELAY,
connectionpanelend,
telnetpanelstart,
IDC_ACTSTATIC,
IDC_TPASSIVE,
IDC_TACTIVE,
+ IDC_TELNETKEY,
telnetpanelend,
rloginpanelstart,
IDC_CIPHERUP,
IDC_CIPHERDN,
IDC_BUGGYMAC,
+ IDC_SSH2DES,
IDC_SSHPROTSTATIC,
IDC_SSHPROT1,
IDC_SSHPROT2,
IDC_PKEDIT,
IDC_PKBUTTON,
IDC_AGENTFWD,
+ IDC_CHANGEUSER,
IDC_AUTHTIS,
+ IDC_AUTHKI,
sshauthpanelend,
selectionpanelstart,
IDC_CCSTATIC2,
IDC_CCEDIT,
IDC_RAWCNP,
+ IDC_RTFPASTE,
selectionpanelend,
colourspanelstart,
(cfg.fontheight < 0 ? -cfg.fontheight : cfg.fontheight));
}
+char *help_context_cmd(int id)
+{
+ switch (id) {
+ case IDC_HOSTSTATIC:
+ case IDC_HOST:
+ case IDC_PORTSTATIC:
+ case IDC_PORT:
+ case IDC_PROTSTATIC:
+ case IDC_PROTRAW:
+ case IDC_PROTTELNET:
+ case IDC_PROTRLOGIN:
+ case IDC_PROTSSH:
+ return "JI(`',`session.hostname')";
+ case IDC_SESSSTATIC:
+ case IDC_SESSEDIT:
+ case IDC_SESSLIST:
+ case IDC_SESSLOAD:
+ case IDC_SESSSAVE:
+ case IDC_SESSDEL:
+ return "JI(`',`session.saved')";
+ case IDC_CLOSEEXIT:
+ case IDC_COEALWAYS:
+ case IDC_COENEVER:
+ case IDC_COENORMAL:
+ return "JI(`',`session.coe')";
+ case IDC_LSTATSTATIC:
+ case IDC_LSTATOFF:
+ case IDC_LSTATASCII:
+ case IDC_LSTATRAW:
+ return "JI(`',`logging.main')";
+ case IDC_LGFSTATIC:
+ case IDC_LGFEDIT:
+ case IDC_LGFBUTTON:
+ case IDC_LGFEXPLAIN:
+ return "JI(`',`logging.filename')";
+ case IDC_LSTATXIST:
+ case IDC_LSTATXOVR:
+ case IDC_LSTATXAPN:
+ case IDC_LSTATXASK:
+ return "JI(`',`logging.exists')";
+
+ case IDC_DELSTATIC:
+ case IDC_DEL008:
+ case IDC_DEL127:
+ return "JI(`',`keyboard.backspace')";
+ case IDC_HOMESTATIC:
+ case IDC_HOMETILDE:
+ case IDC_HOMERXVT:
+ return "JI(`',`keyboard.homeend')";
+ case IDC_FUNCSTATIC:
+ case IDC_FUNCTILDE:
+ case IDC_FUNCLINUX:
+ case IDC_FUNCXTERM:
+ case IDC_FUNCVT400:
+ case IDC_FUNCVT100P:
+ case IDC_FUNCSCO:
+ return "JI(`',`keyboard.funkeys')";
+ case IDC_KPSTATIC:
+ case IDC_KPNORMAL:
+ case IDC_KPAPPLIC:
+ case IDC_NOAPPLICK:
+ return "JI(`',`keyboard.appkeypad')";
+ case IDC_NOAPPLICC:
+ case IDC_CURSTATIC:
+ case IDC_CURNORMAL:
+ case IDC_CURAPPLIC:
+ return "JI(`',`keyboard.appcursor')";
+ case IDC_KPNH:
+ return "JI(`',`keyboard.nethack')";
+ case IDC_COMPOSEKEY:
+ return "JI(`',`keyboard.compose')";
+ case IDC_CTRLALTKEYS:
+ return "JI(`',`keyboard.ctrlalt')";
+
+ case IDC_WRAPMODE:
+ return "JI(`',`terminal.autowrap')";
+ case IDC_DECOM:
+ return "JI(`',`terminal.decom')";
+ case IDC_LFHASCR:
+ return "JI(`',`terminal.lfhascr')";
+ case IDC_BCE:
+ return "JI(`',`terminal.bce')";
+ case IDC_BLINKTEXT:
+ return "JI(`',`terminal.blink')";
+ case IDC_ANSWERBACK:
+ case IDC_ANSWEREDIT:
+ return "JI(`',`terminal.answerback')";
+ case IDC_ECHOSTATIC:
+ case IDC_ECHOBACKEND:
+ case IDC_ECHOYES:
+ case IDC_ECHONO:
+ return "JI(`',`terminal.localecho')";
+ case IDC_EDITSTATIC:
+ case IDC_EDITBACKEND:
+ case IDC_EDITYES:
+ case IDC_EDITNO:
+ return "JI(`',`terminal.localedit')";
+
+ case IDC_BELLSTATIC:
+ case IDC_BELL_DISABLED:
+ case IDC_BELL_DEFAULT:
+ case IDC_BELL_WAVEFILE:
+ case IDC_BELL_VISUAL:
+ case IDC_BELL_WAVESTATIC:
+ case IDC_BELL_WAVEEDIT:
+ case IDC_BELL_WAVEBROWSE:
+ return "JI(`',`bell.style')";
+ case IDC_B_IND_STATIC:
+ case IDC_B_IND_DISABLED:
+ case IDC_B_IND_FLASH:
+ case IDC_B_IND_STEADY:
+ return "JI(`',`bell.taskbar')";
+ case IDC_BELLOVL:
+ case IDC_BELLOVLNSTATIC:
+ case IDC_BELLOVLN:
+ case IDC_BELLOVLTSTATIC:
+ case IDC_BELLOVLT:
+ case IDC_BELLOVLEXPLAIN:
+ case IDC_BELLOVLSSTATIC:
+ case IDC_BELLOVLS:
+ return "JI(`',`bell.overload')";
+
+ case IDC_ROWSSTATIC:
+ case IDC_ROWSEDIT:
+ case IDC_COLSSTATIC:
+ case IDC_COLSEDIT:
+ return "JI(`',`window.size')";
+ case IDC_RESIZESTATIC:
+ case IDC_RESIZETERM:
+ case IDC_RESIZEFONT:
+ case IDC_RESIZENONE:
+ case IDC_RESIZEEITHER:
+ return "JI(`',`window.resize')";
+ case IDC_SCROLLBAR:
+ case IDC_SCROLLBARFULLSCREEN:
+ case IDC_SAVESTATIC:
+ case IDC_SAVEEDIT:
+ case IDC_SCROLLKEY:
+ case IDC_SCROLLDISP:
+ return "JI(`',`window.scrollback')";
+
+ case IDC_CLOSEWARN:
+ return "JI(`',`behaviour.closewarn')";
+ case IDC_ALTF4:
+ return "JI(`',`behaviour.altf4')";
+ case IDC_ALTSPACE:
+ return "JI(`',`behaviour.altspace')";
+ case IDC_ALTONLY:
+ return "JI(`',`behaviour.altonly')";
+ case IDC_ALWAYSONTOP:
+ return "JI(`',`behaviour.alwaysontop')";
+ case IDC_FULLSCREENONALTENTER:
+ return "JI(`',`behaviour.altenter')";
+
+ case IDC_CURSORSTATIC:
+ case IDC_CURBLOCK:
+ case IDC_CURUNDER:
+ case IDC_CURVERT:
+ case IDC_BLINKCUR:
+ return "JI(`',`appearance.cursor')";
+ case IDC_FONTSTATIC:
+ case IDC_CHOOSEFONT:
+ return "JI(`',`appearance.font')";
+ case IDC_WINTITLE:
+ case IDC_WINEDIT:
+ case IDC_WINNAME:
+ return "JI(`',`appearance.title')";
+ case IDC_HIDEMOUSE:
+ return "JI(`',`appearance.hidemouse')";
+ case IDC_SUNKENEDGE:
+ case IDC_WINBSTATIC:
+ case IDC_WINBEDIT:
+ return "JI(`',`appearance.border')";
+
+ case IDC_TTSTATIC:
+ case IDC_TTEDIT:
+ return "JI(`',`connection.termtype')";
+ case IDC_LOGSTATIC:
+ case IDC_LOGEDIT:
+ return "JI(`',`connection.username')";
+ case IDC_PINGSTATIC:
+ case IDC_PINGEDIT:
+ return "JI(`',`connection.keepalive')";
+ case IDC_NODELAY:
+ return "JI(`',`connection.nodelay')";
+
+ case IDC_TSSTATIC:
+ case IDC_TSEDIT:
+ return "JI(`',`telnet.termspeed')";
+ case IDC_ENVSTATIC:
+ case IDC_VARSTATIC:
+ case IDC_VAREDIT:
+ case IDC_VALSTATIC:
+ case IDC_VALEDIT:
+ case IDC_ENVLIST:
+ case IDC_ENVADD:
+ case IDC_ENVREMOVE:
+ return "JI(`',`telnet.environ')";
+ case IDC_EMSTATIC:
+ case IDC_EMBSD:
+ case IDC_EMRFC:
+ return "JI(`',`telnet.oldenviron')";
+ case IDC_ACTSTATIC:
+ case IDC_TPASSIVE:
+ case IDC_TACTIVE:
+ return "JI(`',`telnet.passive')";
+ case IDC_TELNETKEY:
+ return "JI(`',`telnet.specialkeys')";
+
+ case IDC_R_TSSTATIC:
+ case IDC_R_TSEDIT:
+ return "JI(`',`rlogin.termspeed')";
+ case IDC_RLLUSERSTATIC:
+ case IDC_RLLUSEREDIT:
+ return "JI(`',`rlogin.localuser')";
+
+ case IDC_NOPTY:
+ return "JI(`',`ssh.nopty')";
+ case IDC_CIPHERSTATIC2:
+ case IDC_CIPHERLIST:
+ case IDC_CIPHERUP:
+ case IDC_CIPHERDN:
+ case IDC_SSH2DES:
+ return "JI(`',`ssh.ciphers')";
+ case IDC_BUGGYMAC:
+ return "JI(`',`ssh.buggymac')";
+ case IDC_SSHPROTSTATIC:
+ case IDC_SSHPROT1:
+ case IDC_SSHPROT2:
+ return "JI(`',`ssh.protocol')";
+ case IDC_CMDSTATIC:
+ case IDC_CMDEDIT:
+ return "JI(`',`ssh.command')";
+ case IDC_COMPRESS:
+ return "JI(`',`ssh.compress')";
+
+ case IDC_PKSTATIC:
+ case IDC_PKEDIT:
+ case IDC_PKBUTTON:
+ return "JI(`',`ssh.auth.privkey')";
+ case IDC_AGENTFWD:
+ return "JI(`',`ssh.auth.agentfwd')";
+ case IDC_CHANGEUSER:
+ return "JI(`',`ssh.auth.changeuser')";
+ case IDC_AUTHTIS:
+ return "JI(`',`ssh.auth.tis')";
+ case IDC_AUTHKI:
+ return "JI(`',`ssh.auth.ki')";
+
+ case IDC_MBSTATIC:
+ case IDC_MBWINDOWS:
+ case IDC_MBXTERM:
+ return "JI(`',`selection.buttons')";
+ case IDC_MOUSEOVERRIDE:
+ return "JI(`',`selection.shiftdrag')";
+ case IDC_SELTYPESTATIC:
+ case IDC_SELTYPELEX:
+ case IDC_SELTYPERECT:
+ return "JI(`',`selection.rect')";
+ case IDC_CCSTATIC:
+ case IDC_CCLIST:
+ case IDC_CCSET:
+ case IDC_CCSTATIC2:
+ case IDC_CCEDIT:
+ return "JI(`',`selection.charclasses')";
+ case IDC_RAWCNP:
+ return "JI(`',`selection.linedraw')";
+ case IDC_RTFPASTE:
+ return "JI(`',`selection.rtf')";
+
+ case IDC_BOLDCOLOUR:
+ return "JI(`',`colours.bold')";
+ case IDC_PALETTE:
+ return "JI(`',`colours.logpal')";
+ case IDC_COLOURSTATIC:
+ case IDC_COLOURLIST:
+ case IDC_RSTATIC:
+ case IDC_GSTATIC:
+ case IDC_BSTATIC:
+ case IDC_RVALUE:
+ case IDC_GVALUE:
+ case IDC_BVALUE:
+ case IDC_CHANGE:
+ return "JI(`',`colours.config')";
+
+ case IDC_CODEPAGESTATIC:
+ case IDC_CODEPAGE:
+ return "JI(`',`translation.codepage')";
+ case IDC_CAPSLOCKCYR:
+ return "JI(`',`translation.cyrillic')";
+ case IDC_VTSTATIC:
+ case IDC_VTXWINDOWS:
+ case IDC_VTOEMANSI:
+ case IDC_VTOEMONLY:
+ case IDC_VTPOORMAN:
+ case IDC_VTUNICODE:
+ return "JI(`',`translation.linedraw')";
+
+ case IDC_X11_FORWARD:
+ case IDC_X11_DISPSTATIC:
+ case IDC_X11_DISPLAY:
+ return "JI(`',`ssh.tunnels.x11')";
+ case IDC_LPORT_ALL:
+ case IDC_PFWDSTATIC:
+ case IDC_PFWDSTATIC2:
+ case IDC_PFWDREMOVE:
+ case IDC_PFWDLIST:
+ case IDC_PFWDADD:
+ case IDC_SPORTSTATIC:
+ case IDC_SPORTEDIT:
+ case IDC_DPORTSTATIC:
+ case IDC_DPORTEDIT:
+ case IDC_PFWDLOCAL:
+ case IDC_PFWDREMOTE:
+ return "JI(`',`ssh.tunnels.portfwd')";
+
+ default:
+ return NULL;
+ }
+}
+
/* 2nd arg: NZ => don't redraw session list (use when loading
* a new session) */
static void init_dlg_ctrls(HWND hwnd, int keepsess)
cfg.protocol ==
PROT_RLOGIN ? IDC_PROTRLOGIN : IDC_PROTRAW);
SetDlgItemInt(hwnd, IDC_PINGEDIT, cfg.ping_interval, FALSE);
+ CheckDlgButton(hwnd, IDC_NODELAY, cfg.tcp_nodelay);
CheckRadioButton(hwnd, IDC_DEL008, IDC_DEL127,
cfg.bksp_is_delete ? IDC_DEL127 : IDC_DEL008);
CheckDlgButton(hwnd, IDC_BLINKCUR, cfg.blink_cur);
CheckDlgButton(hwnd, IDC_SCROLLBAR, cfg.scrollbar);
CheckDlgButton(hwnd, IDC_SCROLLBARFULLSCREEN, cfg.scrollbar_in_fullscreen);
- CheckRadioButton(hwnd, IDC_RESIZETERM, IDC_RESIZENONE,
+ CheckRadioButton(hwnd, IDC_RESIZETERM, IDC_RESIZEEITHER,
cfg.resize_action == RESIZE_TERM ? IDC_RESIZETERM :
cfg.resize_action == RESIZE_FONT ? IDC_RESIZEFONT :
+ cfg.resize_action == RESIZE_EITHER ? IDC_RESIZEEITHER :
IDC_RESIZENONE);
CheckRadioButton(hwnd, IDC_COEALWAYS, IDC_COENORMAL,
cfg.close_on_exit == COE_NORMAL ? IDC_COENORMAL :
CheckDlgButton(hwnd, IDC_NOPTY, cfg.nopty);
CheckDlgButton(hwnd, IDC_COMPRESS, cfg.compression);
CheckDlgButton(hwnd, IDC_BUGGYMAC, cfg.buggymac);
+ CheckDlgButton(hwnd, IDC_SSH2DES, cfg.ssh2_des_cbc);
CheckDlgButton(hwnd, IDC_AGENTFWD, cfg.agentfwd);
+ CheckDlgButton(hwnd, IDC_CHANGEUSER, cfg.change_username);
CheckRadioButton(hwnd, IDC_SSHPROT1, IDC_SSHPROT2,
cfg.sshprot == 1 ? IDC_SSHPROT1 : IDC_SSHPROT2);
CheckDlgButton(hwnd, IDC_AUTHTIS, cfg.try_tis_auth);
+ CheckDlgButton(hwnd, IDC_AUTHKI, cfg.try_ki_auth);
SetDlgItemText(hwnd, IDC_PKEDIT, cfg.keyfile);
SetDlgItemText(hwnd, IDC_CMDEDIT, cfg.remote_cmd);
static const struct { char *s; int c; } ciphers[] = {
{ "3DES", CIPHER_3DES },
{ "Blowfish", CIPHER_BLOWFISH },
- { "DES (SSH 1 only)", CIPHER_DES },
+ { "DES", CIPHER_DES },
{ "AES (SSH 2 only)", CIPHER_AES },
{ "-- warn below here --", CIPHER_WARN }
};
cfg.rect_select == 0 ? IDC_SELTYPELEX : IDC_SELTYPERECT);
CheckDlgButton(hwnd, IDC_MOUSEOVERRIDE, cfg.mouse_override);
CheckDlgButton(hwnd, IDC_RAWCNP, cfg.rawcnp);
+ CheckDlgButton(hwnd, IDC_RTFPASTE, cfg.rtf_paste);
{
static int tabs[4] = { 25, 61, 96, 128 };
SendDlgItemMessage(hwnd, IDC_CCLIST, LB_SETTABSTOPS, 4,
/* The Keyboard panel. Accelerators used: [acgo] bhf ruyntd */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
- /*
- bartitle(&cp, "Options controlling the effects of keys",
- IDC_TITLE_KEYBOARD);
- */
+ bartitle(&cp, "Options controlling the effects of keys",
+ IDC_TITLE_KEYBOARD);
beginbox(&cp, "Change the sequences sent by:", IDC_BOX_KEYBOARD1);
radioline(&cp, "The &Backspace key", IDC_DELSTATIC, 2,
"Control-H", IDC_DEL008,
}
if (panel == windowpanelstart) {
- /* The Window panel. Accelerators used: [acgo] rmz sdikp w4ylt f */
+ /* The Window panel. Accelerators used: [acgo] rmz sdikp */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling PuTTY's window",
multiedit(&cp,
"&Rows", IDC_ROWSSTATIC, IDC_ROWSEDIT, 50,
"Colu&mns", IDC_COLSSTATIC, IDC_COLSEDIT, 50, NULL);
- radioline(&cp, "Action when the window is resized:", IDC_RESIZESTATIC,
- 3, "Resi&ze terminal", IDC_RESIZETERM,
- "Change fo&nt", IDC_RESIZEFONT,
- "Forb&id resizing", IDC_RESIZENONE, NULL);
+ radiobig(&cp, "When window is resi&zed:", IDC_RESIZESTATIC,
+ "Change the number of rows and columns", IDC_RESIZETERM,
+ "Change the size of the font", IDC_RESIZEFONT,
+ "Change font size only when maximised", IDC_RESIZEEITHER,
+ "Forbid resizing completely", IDC_RESIZENONE, NULL);
endbox(&cp);
beginbox(&cp, "Control the scrollback in the window",
IDC_BOX_WINDOW2);
checkbox(&cp, "Reset scrollback on dis&play activity",
IDC_SCROLLDISP);
endbox(&cp);
- beginbox(&cp, NULL, IDC_BOX_WINDOW3);
- checkbox(&cp, "&Warn before closing window", IDC_CLOSEWARN);
- checkbox(&cp, "Window closes on ALT-F&4", IDC_ALTF4);
- checkbox(&cp, "S&ystem menu appears on ALT-Space", IDC_ALTSPACE);
- checkbox(&cp, "System menu appears on A< alone", IDC_ALTONLY);
- checkbox(&cp, "Ensure window is always on &top", IDC_ALWAYSONTOP);
- checkbox(&cp, "&Full screen on Alt-Enter", IDC_FULLSCREENONALTENTER);
- endbox(&cp);
}
if (panel == appearancepanelstart) {
/* The Appearance panel. Accelerators used: [acgo] luvb h ti p s */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
- /* bartitle(&cp, "Options controlling PuTTY's appearance",
- IDC_TITLE_APPEARANCE); */
+ bartitle(&cp, "Configure the appearance of PuTTY's window",
+ IDC_TITLE_APPEARANCE);
beginbox(&cp, "Adjust the use of the cursor", IDC_BOX_APPEARANCE1);
radioline(&cp, "Cursor appearance:", IDC_CURSORSTATIC, 3,
"B&lock", IDC_CURBLOCK,
endbox(&cp);
}
+ if (panel == behaviourpanelstart) {
+ /* The Behaviour panel. Accelerators used: [acgo] w4yltf */
+ struct ctlpos cp;
+ ctlposinit(&cp, hwnd, 80, 3, 13);
+ bartitle(&cp, "Configure the behaviour of PuTTY's window",
+ IDC_TITLE_WINDOW);
+ beginbox(&cp, NULL, IDC_BOX_BEHAVIOUR1);
+ checkbox(&cp, "&Warn before closing window", IDC_CLOSEWARN);
+ checkbox(&cp, "Window closes on ALT-F&4", IDC_ALTF4);
+ checkbox(&cp, "S&ystem menu appears on ALT-Space", IDC_ALTSPACE);
+ checkbox(&cp, "System menu appears on A< alone", IDC_ALTONLY);
+ checkbox(&cp, "Ensure window is always on &top", IDC_ALWAYSONTOP);
+ checkbox(&cp, "&Full screen on Alt-Enter", IDC_FULLSCREENONALTENTER);
+ endbox(&cp);
+ }
+
if (panel == translationpanelstart) {
/* The Translation panel. Accelerators used: [acgo] rxbepus */
struct ctlpos cp;
}
if (panel == selectionpanelstart) {
- /* The Selection panel. Accelerators used: [acgo] d wxp hst nr */
+ /* The Selection panel. Accelerators used: [acgo] df wxp hst nr */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling copy and paste",
checkbox(&cp,
"&Don't translate line drawing chars into +, - and |",
IDC_RAWCNP);
+ checkbox(&cp,
+ "Paste to clipboard in RT&F as well as plain text",
+ IDC_RTFPASTE);
endbox(&cp);
beginbox(&cp, "Control which mouse button does which thing",
IDC_BOX_SELECTION2);
}
if (panel == connectionpanelstart) {
- /* The Connection panel. Accelerators used: [acgo] tuk */
+ /* The Connection panel. Accelerators used: [acgo] tukn */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling the connection",
staticedit(&cp, "Seconds between &keepalives (0 to turn off)",
IDC_PINGSTATIC, IDC_PINGEDIT, 20);
endbox(&cp);
+ if (dlgtype == 0) {
+ beginbox(&cp, "Low-level TCP connection options",
+ IDC_BOX_CONNECTION3);
+ checkbox(&cp, "Disable &Nagle's algorithm (TCP_NODELAY option)",
+ IDC_NODELAY);
+ endbox(&cp);
+ }
}
if (panel == telnetpanelstart) {
}
if (panel == sshpanelstart) {
- /* The SSH panel. Accelerators used: [acgo] r pe12i s */
+ /* The SSH panel. Accelerators used: [acgo] r pe12i sd */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
prefslist(&cipherlist, &cp, "Encryption cipher &selection policy:",
IDC_CIPHERSTATIC2, IDC_CIPHERLIST, IDC_CIPHERUP,
IDC_CIPHERDN);
+ checkbox(&cp, "Enable non-standard use of single-&DES in SSH 2",
+ IDC_SSH2DES);
endbox(&cp);
}
}
if (panel == sshauthpanelstart) {
- /* The SSH authentication panel. Accelerators used: [acgo] m fkw */
+ /* The SSH authentication panel. Accelerators used: [acgo] m fkiw */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
IDC_TITLE_SSHAUTH);
beginbox(&cp, "Authentication methods",
IDC_BOX_SSHAUTH1);
- checkbox(&cp, "Atte&mpt TIS or CryptoCard authentication",
+ checkbox(&cp, "Atte&mpt TIS or CryptoCard authentication (SSH1)",
IDC_AUTHTIS);
+ checkbox(&cp, "Attempt \"keyboard-&interactive\" authentication"
+ " (SSH2)", IDC_AUTHKI);
endbox(&cp);
beginbox(&cp, "Authentication parameters",
IDC_BOX_SSHAUTH2);
checkbox(&cp, "Allow agent &forwarding", IDC_AGENTFWD);
+ checkbox(&cp, "Allow attempted changes of &username in SSH2",
+ IDC_CHANGEUSER);
editbutton(&cp, "Private &key file for authentication:",
IDC_PKSTATIC, IDC_PKEDIT, "Bro&wse...",
IDC_PKBUTTON);
case WM_INITDIALOG:
readytogo = 0;
SetWindowLong(hwnd, GWL_USERDATA, 0);
+ if (help_path)
+ SetWindowLong(hwnd, GWL_EXSTYLE,
+ GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_CONTEXTHELP);
+ else {
+ HWND item = GetDlgItem(hwnd, IDC_HELPBTN);
+ if (item)
+ DestroyWindow(item);
+ }
+ requested_help = FALSE;
SendMessage(hwnd, WM_SETICON, (WPARAM) ICON_BIG,
(LPARAM) LoadIcon(hinst, MAKEINTRESOURCE(IDI_CFGICON)));
/*
treeview_insert(&tvfaff, 1, "Bell");
treeview_insert(&tvfaff, 0, "Window");
treeview_insert(&tvfaff, 1, "Appearance");
+ treeview_insert(&tvfaff, 1, "Behaviour");
treeview_insert(&tvfaff, 1, "Translation");
treeview_insert(&tvfaff, 1, "Selection");
treeview_insert(&tvfaff, 1, "Colours");
create_controls(hwnd, dlgtype, windowpanelstart);
if (!strcmp(buffer, "Appearance"))
create_controls(hwnd, dlgtype, appearancepanelstart);
+ if (!strcmp(buffer, "Behaviour"))
+ create_controls(hwnd, dlgtype, behaviourpanelstart);
if (!strcmp(buffer, "Tunnels"))
create_controls(hwnd, dlgtype, tunnelspanelstart);
if (!strcmp(buffer, "Connection"))
}
}
/* If at this point we have a valid session, go! */
- if (*cfg.host)
+ if (*cfg.host) {
+ if (requested_help) {
+ WinHelp(hwnd, help_path, HELP_QUIT, 0);
+ requested_help = FALSE;
+ }
EndDialog(hwnd, 1);
- else
+ } else
MessageBeep(0);
return 0;
+ case IDC_HELPBTN:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (help_path) {
+ WinHelp(hwnd, help_path,
+ help_has_contents ? HELP_FINDER : HELP_CONTENTS,
+ 0);
+ requested_help = TRUE;
+ }
+ }
+ break;
case IDCANCEL:
+ if (requested_help) {
+ WinHelp(hwnd, help_path, HELP_QUIT, 0);
+ requested_help = FALSE;
+ }
EndDialog(hwnd, 0);
return 0;
case IDC_PROTTELNET:
MyGetDlgItemInt(hwnd, IDC_PINGEDIT,
&cfg.ping_interval);
break;
+ case IDC_NODELAY:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.tcp_nodelay =
+ IsDlgButtonChecked(hwnd, IDC_NODELAY);
+ break;
case IDC_DEL008:
case IDC_DEL127:
if (HIWORD(wParam) == BN_CLICKED ||
case IDC_RESIZETERM:
case IDC_RESIZEFONT:
case IDC_RESIZENONE:
+ case IDC_RESIZEEITHER:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
cfg.resize_action =
IDC_RESIZETERM) ? RESIZE_TERM :
IsDlgButtonChecked(hwnd,
IDC_RESIZEFONT) ? RESIZE_FONT :
+ IsDlgButtonChecked(hwnd,
+ IDC_RESIZEEITHER) ? RESIZE_EITHER :
RESIZE_DISABLED;
}
break;
cfg.buggymac =
IsDlgButtonChecked(hwnd, IDC_BUGGYMAC);
break;
+ case IDC_SSH2DES:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.ssh2_des_cbc =
+ IsDlgButtonChecked(hwnd, IDC_SSH2DES);
+ break;
case IDC_AGENTFWD:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.agentfwd =
IsDlgButtonChecked(hwnd, IDC_AGENTFWD);
break;
+ case IDC_CHANGEUSER:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.change_username =
+ IsDlgButtonChecked(hwnd, IDC_CHANGEUSER);
+ break;
case IDC_CIPHERLIST:
case IDC_CIPHERUP:
case IDC_CIPHERDN:
cfg.try_tis_auth =
IsDlgButtonChecked(hwnd, IDC_AUTHTIS);
break;
+ case IDC_AUTHKI:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.try_ki_auth =
+ IsDlgButtonChecked(hwnd, IDC_AUTHKI);
+ break;
case IDC_PKEDIT:
if (HIWORD(wParam) == EN_CHANGE)
GetDlgItemText(hwnd, IDC_PKEDIT, cfg.keyfile,
case IDC_RAWCNP:
cfg.rawcnp = IsDlgButtonChecked(hwnd, IDC_RAWCNP);
break;
+ case IDC_RTFPASTE:
+ cfg.rtf_paste = IsDlgButtonChecked(hwnd, IDC_RTFPASTE);
+ break;
case IDC_MBWINDOWS:
case IDC_MBXTERM:
cfg.mouse_is_xterm = IsDlgButtonChecked(hwnd, IDC_MBXTERM);
break;
}
return 0;
+ case WM_HELP:
+ if (help_path) {
+ int id = ((LPHELPINFO)lParam)->iCtrlId;
+ char *cmd = help_context_cmd(id);
+ if (cmd) {
+ WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd);
+ requested_help = TRUE;
+ } else {
+ MessageBeep(0);
+ }
+ }
+ break;
case WM_CLOSE:
+ if (requested_help) {
+ WinHelp(hwnd, help_path, HELP_QUIT, 0);
+ requested_help = FALSE;
+ }
EndDialog(hwnd, 0);
return 0;
else
return 0;
}
+
+/*
+ * Warn about the obsolescent key file format.
+ */
+void old_keyfile_warning(void)
+{
+ static const char mbtitle[] = "PuTTY Key File Warning";
+ static const char message[] =
+ "You are loading an SSH 2 private key which has an\n"
+ "old version of the file format. This means your key\n"
+ "file is not fully tamperproof. Future versions of\n"
+ "PuTTY may stop supporting this private key format,\n"
+ "so we recommend you convert your key to the new\n"
+ "format.\n"
+ "\n"
+ "You can perform this conversion by loading the key\n"
+ "into PuTTYgen and then saving it again.";
+
+ MessageBox(NULL, message, mbtitle, MB_OK);
+}