static int readytogo;
static int sesslist_has_focus;
+static int requested_help;
static struct prefslist cipherlist;
IDC_LSTATOFF,
IDC_LSTATASCII,
IDC_LSTATRAW,
+ IDC_LSTATPACKET,
IDC_LGFSTATIC,
IDC_LGFEDIT,
IDC_LGFBUTTON,
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,
+ IDC_TELNETRET,
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_X11_DISPSTATIC,
IDC_X11_DISPLAY,
IDC_LPORT_ALL,
+ IDC_RPORT_ALL,
IDC_PFWDSTATIC,
IDC_PFWDSTATIC2,
IDC_PFWDREMOVE,
(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:
+ case IDC_LSTATPACKET:
+ 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_TELNETRET:
+ return "JI(`',`telnet.newline')";
+
+ 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_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')";
+ case IDC_LPORT_ALL:
+ case IDC_RPORT_ALL:
+ return "JI(`',`ssh.tunnels.portfwd.localhost')";
+
+ 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_COMPOSEKEY, cfg.compose_key);
CheckDlgButton(hwnd, IDC_CTRLALTKEYS, cfg.ctrlaltkeys);
CheckDlgButton(hwnd, IDC_TELNETKEY, cfg.telnet_keyboard);
+ CheckDlgButton(hwnd, IDC_TELNETRET, cfg.telnet_newline);
CheckRadioButton(hwnd, IDC_ECHOBACKEND, IDC_ECHONO,
cfg.localecho == LD_BACKEND ? IDC_ECHOBACKEND :
cfg.localecho == LD_YES ? IDC_ECHOYES : IDC_ECHONO);
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 :
SetDlgItemText(hwnd, IDC_RLLUSEREDIT, cfg.localusername);
SetDlgItemText(hwnd, IDC_LOGEDIT, cfg.username);
SetDlgItemText(hwnd, IDC_LGFEDIT, cfg.logfilename);
- CheckRadioButton(hwnd, IDC_LSTATOFF, IDC_LSTATRAW,
- cfg.logtype == 0 ? IDC_LSTATOFF :
- cfg.logtype == 1 ? IDC_LSTATASCII : IDC_LSTATRAW);
+ CheckRadioButton(hwnd, IDC_LSTATOFF, IDC_LSTATPACKET,
+ cfg.logtype == LGTYP_NONE ? IDC_LSTATOFF :
+ cfg.logtype == LGTYP_ASCII ? IDC_LSTATASCII :
+ cfg.logtype == LGTYP_DEBUG ? IDC_LSTATRAW :
+ IDC_LSTATPACKET);
CheckRadioButton(hwnd, IDC_LSTATXOVR, IDC_LSTATXASK,
cfg.logxfovr == LGXF_OVR ? IDC_LSTATXOVR :
cfg.logxfovr == LGXF_ASK ? IDC_LSTATXASK :
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);
SetDlgItemText(hwnd, IDC_X11_DISPLAY, cfg.x11_display);
CheckDlgButton(hwnd, IDC_LPORT_ALL, cfg.lport_acceptall);
+ CheckDlgButton(hwnd, IDC_RPORT_ALL, cfg.rport_acceptall);
CheckRadioButton(hwnd, IDC_PFWDLOCAL, IDC_PFWDREMOTE, IDC_PFWDLOCAL);
}
}
if (panel == loggingpanelstart) {
- /* The Logging panel. Accelerators used: [acgo] tplfwe */
+ /* The Logging panel. Accelerators used: [acgo] tplsfwe */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling session logging",
"Session logging:", IDC_LSTATSTATIC,
"Logging &turned off completely", IDC_LSTATOFF,
"Log &printable output only", IDC_LSTATASCII,
- "&Log all session output", IDC_LSTATRAW, NULL);
+ "&Log all session output", IDC_LSTATRAW,
+ "Log &SSH packet data", IDC_LSTATPACKET,
+ NULL);
editbutton(&cp, "Log &file name:",
IDC_LGFSTATIC, IDC_LGFEDIT, "Bro&wse...",
IDC_LGFBUTTON);
/* 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] rmznb 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,
- "For&bid 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 == 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",
beginbox(&cp, "Adjust telnet session.", IDC_BOX_CONNECTION1);
checkbox(&cp, "Keyboard sends telnet Backspace and Interrupt",
IDC_TELNETKEY);
+ checkbox(&cp, "Return key sends telnet New Line instead of ^M",
+ IDC_TELNETRET);
endbox(&cp);
}
beginbox(&cp, "Sending of null packets to keep session active",
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) {
IDC_TACTIVE, NULL);
checkbox(&cp, "&Keyboard sends telnet Backspace and Interrupt",
IDC_TELNETKEY);
+ checkbox(&cp, "Return key sends telnet New Line instead of ^M",
+ IDC_TELNETRET);
endbox(&cp);
}
}
}
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);
}
if (panel == tunnelspanelstart) {
- /* The Tunnels panel. Accelerators used: [acgo] deilmrstx */
+ /* The Tunnels panel. Accelerators used: [acgo] deilmrsthx */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
IDC_X11_DISPLAY, 50, NULL);
endbox(&cp);
beginbox(&cp, "Port forwarding", IDC_BOX_TUNNELS2);
- checkbox(&cp, "Local ports accept connections from o&ther hosts", IDC_LPORT_ALL);
+ checkbox(&cp, "Local ports accept connections from o&ther hosts",
+ IDC_LPORT_ALL);
+ checkbox(&cp, "Remote ports do t&he same (SSH v2 only)",
+ IDC_RPORT_ALL);
staticbtn(&cp, "Forwarded ports:", IDC_PFWDSTATIC,
"&Remove", IDC_PFWDREMOVE);
fwdsetter(&cp, IDC_PFWDLIST,
"Dest&ination", IDC_DPORTSTATIC, IDC_DPORTEDIT,
"A&dd", IDC_PFWDADD);
bareradioline(&cp, 2,
- "&Local", IDC_PFWDLOCAL, "Re&mote", IDC_PFWDREMOTE, NULL);
+ "&Local", IDC_PFWDLOCAL,
+ "Re&mote", IDC_PFWDREMOTE, NULL);
endbox(&cp);
}
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 ||
cfg.telnet_keyboard =
IsDlgButtonChecked(hwnd, IDC_TELNETKEY);
break;
+ case IDC_TELNETRET:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.telnet_newline =
+ IsDlgButtonChecked(hwnd, IDC_TELNETRET);
+ break;
case IDC_WRAPMODE:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
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;
case IDC_LSTATOFF:
case IDC_LSTATASCII:
case IDC_LSTATRAW:
+ case IDC_LSTATPACKET:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
if (IsDlgButtonChecked(hwnd, IDC_LSTATOFF))
- cfg.logtype = 0;
+ cfg.logtype = LGTYP_NONE;
if (IsDlgButtonChecked(hwnd, IDC_LSTATASCII))
- cfg.logtype = 1;
+ cfg.logtype = LGTYP_ASCII;
if (IsDlgButtonChecked(hwnd, IDC_LSTATRAW))
- cfg.logtype = 2;
+ cfg.logtype = LGTYP_DEBUG;
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATPACKET))
+ cfg.logtype = LGTYP_PACKETS;
}
break;
case IDC_LSTATXASK:
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_X11_FORWARD:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.x11_forward =
- IsDlgButtonChecked(hwnd, IDC_X11_FORWARD);
+ cfg.x11_forward =
+ IsDlgButtonChecked(hwnd, IDC_X11_FORWARD);
break;
case IDC_LPORT_ALL:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.lport_acceptall =
- IsDlgButtonChecked(hwnd, IDC_LPORT_ALL);
+ cfg.lport_acceptall =
+ IsDlgButtonChecked(hwnd, IDC_LPORT_ALL);
+ break;
+ case IDC_RPORT_ALL:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.rport_acceptall =
+ IsDlgButtonChecked(hwnd, IDC_RPORT_ALL);
break;
case IDC_X11_DISPLAY:
if (HIWORD(wParam) == EN_CHANGE)
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);
+}