#include "win_res.h"
#include "storage.h"
+#ifdef MSVC4
+#define TVINSERTSTRUCT TV_INSERTSTRUCT
+#define TVITEM TV_ITEM
+#define ICON_BIG 1
+#endif
+
static char **events = NULL;
static int nevents = 0, negsize = 0;
static int readytogo;
static int sesslist_has_focus;
+static int requested_help;
static struct prefslist cipherlist;
+extern Config cfg; /* defined in window.c */
+
+struct sesslist sesslist; /* exported to window.c */
+
+#define PRINTER_DISABLED_STRING "None (printing disabled)"
+
void force_normal(HWND hwnd)
{
static int recurse = 0;
memcpy(p, sel_nl, sizeof(sel_nl));
p += sizeof(sel_nl);
}
- write_aclip(clipdata, size, TRUE);
+ write_aclip(NULL, clipdata, size, TRUE);
sfree(clipdata);
}
sfree(selitems);
IDC_LSTATOFF,
IDC_LSTATASCII,
IDC_LSTATRAW,
+ IDC_LSTATPACKET,
IDC_LGFSTATIC,
IDC_LGFEDIT,
IDC_LGFBUTTON,
+ IDC_LGFEXPLAIN,
IDC_LSTATXIST,
IDC_LSTATXOVR,
IDC_LSTATXAPN,
IDC_KPNORMAL,
IDC_KPAPPLIC,
IDC_KPNH,
- IDC_NOAPPLICK,
- IDC_NOAPPLICC,
IDC_CURSTATIC,
IDC_CURNORMAL,
IDC_CURAPPLIC,
IDC_COMPOSEKEY,
IDC_CTRLALTKEYS,
- IDC_TELNETKEY,
keyboardpanelend,
terminalpanelstart,
IDC_TITLE_TERMINAL,
IDC_BOX_TERMINAL1,
IDC_BOX_TERMINAL2,
+ IDC_BOX_TERMINAL3,
IDC_WRAPMODE,
IDC_DECOM,
IDC_LFHASCR,
IDC_EDITBACKEND,
IDC_EDITYES,
IDC_EDITNO,
+ IDC_PRINTERSTATIC,
+ IDC_PRINTER,
terminalpanelend,
+ featurespanelstart,
+ IDC_TITLE_FEATURES,
+ IDC_BOX_FEATURES1,
+ IDC_NOAPPLICK,
+ IDC_NOAPPLICC,
+ IDC_NOMOUSEREP,
+ IDC_NORESIZE,
+ IDC_NOALTSCREEN,
+ IDC_NOWINTITLE,
+ IDC_NODBACKSPACE,
+ IDC_NOCHARSET,
+ featurespanelend,
+
bellpanelstart,
IDC_TITLE_BELL,
IDC_BOX_BELL1,
IDC_ROWSEDIT,
IDC_COLSSTATIC,
IDC_COLSEDIT,
- IDC_LOCKSIZE,
+ IDC_RESIZESTATIC,
+ IDC_RESIZETERM,
+ IDC_RESIZEFONT,
+ IDC_RESIZENONE,
+ IDC_RESIZEEITHER,
IDC_SCROLLBAR,
- IDC_CLOSEWARN,
+ IDC_SCROLLBARFULLSCREEN,
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,
- windowpanelend,
+ IDC_FULLSCREENONALTENTER,
+ behaviourpanelend,
appearancepanelstart,
IDC_TITLE_APPEARANCE,
IDC_WINNAME,
IDC_HIDEMOUSE,
IDC_SUNKENEDGE,
+ IDC_WINBSTATIC,
+ IDC_WINBEDIT,
appearancepanelend,
connectionpanelstart,
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,
+ proxypanelstart,
+ IDC_TITLE_PROXY,
+ IDC_BOX_PROXY1,
+ IDC_PROXYTYPESTATIC,
+ IDC_PROXYTYPENONE,
+ IDC_PROXYTYPEHTTP,
+ IDC_PROXYTYPESOCKS,
+ IDC_PROXYTYPETELNET,
+ IDC_PROXYHOSTSTATIC,
+ IDC_PROXYHOSTEDIT,
+ IDC_PROXYPORTSTATIC,
+ IDC_PROXYPORTEDIT,
+ IDC_PROXYEXCLUDESTATIC,
+ IDC_PROXYEXCLUDEEDIT,
+ IDC_PROXYLOCALHOST,
+ IDC_PROXYDNSSTATIC,
+ IDC_PROXYDNSNO,
+ IDC_PROXYDNSAUTO,
+ IDC_PROXYDNSYES,
+ IDC_PROXYUSERSTATIC,
+ IDC_PROXYUSEREDIT,
+ IDC_PROXYPASSSTATIC,
+ IDC_PROXYPASSEDIT,
+ IDC_BOX_PROXY2,
+ IDC_PROXYTELNETCMDSTATIC,
+ IDC_PROXYTELNETCMDEDIT,
+ IDC_PROXYSOCKSVERSTATIC,
+ IDC_PROXYSOCKSVER5,
+ IDC_PROXYSOCKSVER4,
+ proxypanelend,
+
telnetpanelstart,
IDC_TITLE_TELNET,
IDC_BOX_TELNET1,
IDC_ACTSTATIC,
IDC_TPASSIVE,
IDC_TACTIVE,
+ IDC_TELNETKEY,
+ IDC_TELNETRET,
telnetpanelend,
rloginpanelstart,
IDC_CIPHERLIST,
IDC_CIPHERUP,
IDC_CIPHERDN,
- IDC_BUGGYMAC,
+ IDC_SSH2DES,
IDC_SSHPROTSTATIC,
+ IDC_SSHPROT1ONLY,
IDC_SSHPROT1,
IDC_SSHPROT2,
+ IDC_SSHPROT2ONLY,
IDC_CMDSTATIC,
IDC_CMDEDIT,
IDC_COMPRESS,
IDC_PKEDIT,
IDC_PKBUTTON,
IDC_AGENTFWD,
+ IDC_CHANGEUSER,
IDC_AUTHTIS,
+ IDC_AUTHKI,
sshauthpanelend,
+ sshbugspanelstart,
+ IDC_TITLE_SSHBUGS,
+ IDC_BOX_SSHBUGS1,
+ IDC_BUGS_IGNORE1,
+ IDC_BUGD_IGNORE1,
+ IDC_BUGS_PLAINPW1,
+ IDC_BUGD_PLAINPW1,
+ IDC_BUGS_RSA1,
+ IDC_BUGD_RSA1,
+ IDC_BUGS_HMAC2,
+ IDC_BUGD_HMAC2,
+ IDC_BUGS_DERIVEKEY2,
+ IDC_BUGD_DERIVEKEY2,
+ IDC_BUGS_RSAPAD2,
+ IDC_BUGD_RSAPAD2,
+ IDC_BUGS_DHGEX2,
+ IDC_BUGD_DHGEX2,
+ sshbugspanelend,
+
selectionpanelstart,
IDC_TITLE_SELECTION,
IDC_BOX_SELECTION1,
IDC_MBSTATIC,
IDC_MBWINDOWS,
IDC_MBXTERM,
+ IDC_MOUSEOVERRIDE,
+ IDC_SELTYPESTATIC,
+ IDC_SELTYPELEX,
+ IDC_SELTYPERECT,
IDC_CCSTATIC,
IDC_CCLIST,
IDC_CCSET,
IDC_CCSTATIC2,
IDC_CCEDIT,
IDC_RAWCNP,
+ IDC_RTFPASTE,
selectionpanelend,
colourspanelstart,
IDC_TITLE_TRANSLATION,
IDC_BOX_TRANSLATION1,
IDC_BOX_TRANSLATION2,
+ IDC_BOX_TRANSLATION3,
IDC_CODEPAGESTATIC,
IDC_CODEPAGE,
+ IDC_CAPSLOCKCYR,
IDC_VTSTATIC,
IDC_VTXWINDOWS,
IDC_VTOEMANSI,
IDC_X11_FORWARD,
IDC_X11_DISPSTATIC,
IDC_X11_DISPLAY,
+ IDC_X11AUTHSTATIC,
+ IDC_X11MIT,
+ IDC_X11XDM,
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:
+ return "JI(`',`keyboard.appkeypad')";
+ 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_NOAPPLICK:
+ case IDC_NOAPPLICC:
+ return "JI(`',`features.application')";
+ case IDC_NOMOUSEREP:
+ return "JI(`',`features.mouse')";
+ case IDC_NORESIZE:
+ return "JI(`',`features.resize')";
+ case IDC_NOALTSCREEN:
+ return "JI(`',`features.altscreen')";
+ case IDC_NOWINTITLE:
+ return "JI(`',`features.retitle')";
+ case IDC_NODBACKSPACE:
+ return "JI(`',`features.dbackspace')";
+ case IDC_NOCHARSET:
+ return "JI(`',`features.charset')";
+
+ 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_PRINTERSTATIC:
+ case IDC_PRINTER:
+ return "JI(`',`terminal.printing')";
+
+ 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_PROXYTYPESTATIC:
+ case IDC_PROXYTYPENONE:
+ case IDC_PROXYTYPEHTTP:
+ case IDC_PROXYTYPESOCKS:
+ case IDC_PROXYTYPETELNET:
+ return "JI(`',`proxy.type')";
+ case IDC_PROXYHOSTSTATIC:
+ case IDC_PROXYHOSTEDIT:
+ case IDC_PROXYPORTSTATIC:
+ case IDC_PROXYPORTEDIT:
+ return "JI(`',`proxy.main')";
+ case IDC_PROXYEXCLUDESTATIC:
+ case IDC_PROXYEXCLUDEEDIT:
+ case IDC_PROXYLOCALHOST:
+ return "JI(`',`proxy.exclude')";
+ case IDC_PROXYDNSSTATIC:
+ case IDC_PROXYDNSNO:
+ case IDC_PROXYDNSAUTO:
+ case IDC_PROXYDNSYES:
+ return "JI(`',`proxy.dns')";
+ case IDC_PROXYUSERSTATIC:
+ case IDC_PROXYUSEREDIT:
+ case IDC_PROXYPASSSTATIC:
+ case IDC_PROXYPASSEDIT:
+ return "JI(`',`proxy.auth')";
+ case IDC_PROXYTELNETCMDSTATIC:
+ case IDC_PROXYTELNETCMDEDIT:
+ return "JI(`',`proxy.command')";
+ case IDC_PROXYSOCKSVERSTATIC:
+ case IDC_PROXYSOCKSVER5:
+ case IDC_PROXYSOCKSVER4:
+ return "JI(`',`proxy.socksver')";
+
+ 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_SSHPROTSTATIC:
+ case IDC_SSHPROT1ONLY:
+ case IDC_SSHPROT1:
+ case IDC_SSHPROT2:
+ case IDC_SSHPROT2ONLY:
+ 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_X11AUTHSTATIC:
+ case IDC_X11MIT:
+ case IDC_X11XDM:
+ return "JI(`',`ssh.tunnels.x11auth')";
+ 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')";
+
+ case IDC_BUGS_IGNORE1:
+ case IDC_BUGD_IGNORE1:
+ return "JI(`',`ssh.bugs.ignore1')";
+ case IDC_BUGS_PLAINPW1:
+ case IDC_BUGD_PLAINPW1:
+ return "JI(`',`ssh.bugs.plainpw1')";
+ case IDC_BUGS_RSA1:
+ case IDC_BUGD_RSA1:
+ return "JI(`',`ssh.bugs.rsa1')";
+ case IDC_BUGS_HMAC2:
+ case IDC_BUGD_HMAC2:
+ return "JI(`',`ssh.bugs.hmac2')";
+ case IDC_BUGS_DERIVEKEY2:
+ case IDC_BUGD_DERIVEKEY2:
+ return "JI(`',`ssh.bugs.derivekey2')";
+ case IDC_BUGS_RSAPAD2:
+ case IDC_BUGD_RSAPAD2:
+ return "JI(`',`ssh.bugs.rsapad2')";
+ case IDC_BUGS_DHGEX2:
+ case IDC_BUGD_DHGEX2:
+ return "JI(`',`ssh.bugs.dhgex2')";
+
+ 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)
n = SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_GETCOUNT, 0, 0);
for (i = n; i-- > 0;)
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_DELETESTRING, i, 0);
- for (i = 0; i < nsessions; i++)
+ for (i = 0; i < sesslist.nsessions; i++)
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_ADDSTRING,
- 0, (LPARAM) (sessions[i]));
+ 0, (LPARAM) (sesslist.sessions[i]));
}
SetDlgItemInt(hwnd, IDC_PORT, cfg.port, FALSE);
CheckRadioButton(hwnd, IDC_PROTRAW, IDC_PROTSSH,
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);
cfg.funky_type == 5 ? IDC_FUNCSCO : IDC_FUNCTILDE);
CheckDlgButton(hwnd, IDC_NOAPPLICC, cfg.no_applic_c);
CheckDlgButton(hwnd, IDC_NOAPPLICK, cfg.no_applic_k);
+ CheckDlgButton(hwnd, IDC_NOMOUSEREP, cfg.no_mouse_rep);
+ CheckDlgButton(hwnd, IDC_NORESIZE, cfg.no_remote_resize);
+ CheckDlgButton(hwnd, IDC_NOALTSCREEN, cfg.no_alt_screen);
+ CheckDlgButton(hwnd, IDC_NOWINTITLE, cfg.no_remote_wintitle);
+ CheckDlgButton(hwnd, IDC_NODBACKSPACE, cfg.no_dbackspace);
+ CheckDlgButton(hwnd, IDC_NOCHARSET, cfg.no_remote_charset);
CheckRadioButton(hwnd, IDC_CURNORMAL, IDC_CURAPPLIC,
cfg.app_cursor ? IDC_CURAPPLIC : IDC_CURNORMAL);
CheckRadioButton(hwnd, IDC_KPNORMAL, IDC_KPNH,
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);
cfg.localedit == LD_YES ? IDC_EDITYES : IDC_EDITNO);
SetDlgItemText(hwnd, IDC_ANSWEREDIT, cfg.answerback);
CheckDlgButton(hwnd, IDC_ALWAYSONTOP, cfg.alwaysontop);
+ CheckDlgButton(hwnd, IDC_FULLSCREENONALTENTER, cfg.fullscreenonaltenter);
CheckDlgButton(hwnd, IDC_SCROLLKEY, cfg.scroll_on_key);
CheckDlgButton(hwnd, IDC_SCROLLDISP, cfg.scroll_on_disp);
CheckDlgButton(hwnd, IDC_WINNAME, cfg.win_name_always);
CheckDlgButton(hwnd, IDC_HIDEMOUSE, cfg.hide_mouseptr);
CheckDlgButton(hwnd, IDC_SUNKENEDGE, cfg.sunken_edge);
+ SetDlgItemInt(hwnd, IDC_WINBEDIT, cfg.window_border, FALSE);
CheckRadioButton(hwnd, IDC_CURBLOCK, IDC_CURVERT,
cfg.cursor_type == 0 ? IDC_CURBLOCK :
cfg.cursor_type == 1 ? IDC_CURUNDER : IDC_CURVERT);
CheckDlgButton(hwnd, IDC_BLINKCUR, cfg.blink_cur);
CheckDlgButton(hwnd, IDC_SCROLLBAR, cfg.scrollbar);
- CheckDlgButton(hwnd, IDC_LOCKSIZE, cfg.locksize);
+ CheckDlgButton(hwnd, IDC_SCROLLBARFULLSCREEN, cfg.scrollbar_in_fullscreen);
+ 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 :
cfg.close_on_exit ==
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 :
SetDlgItemText(hwnd, IDC_LOGEDIT, cfg.username);
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);
- CheckRadioButton(hwnd, IDC_SSHPROT1, IDC_SSHPROT2,
- cfg.sshprot == 1 ? IDC_SSHPROT1 : IDC_SSHPROT2);
+ CheckDlgButton(hwnd, IDC_CHANGEUSER, cfg.change_username);
+ CheckRadioButton(hwnd, IDC_SSHPROT1ONLY, IDC_SSHPROT2ONLY,
+ cfg.sshprot == 1 ? IDC_SSHPROT1 :
+ cfg.sshprot == 2 ? IDC_SSHPROT2 :
+ cfg.sshprot == 3 ? IDC_SSHPROT2ONLY : IDC_SSHPROT1ONLY);
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 }
};
}
-
CheckRadioButton(hwnd, IDC_MBWINDOWS, IDC_MBXTERM,
cfg.mouse_is_xterm ? IDC_MBXTERM : IDC_MBWINDOWS);
+ CheckRadioButton(hwnd, IDC_SELTYPELEX, IDC_SELTYPERECT,
+ 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,
char *cp;
strcpy(cfg.line_codepage, cp_name(decode_codepage(cfg.line_codepage)));
SendDlgItemMessage(hwnd, IDC_CODEPAGE, CB_RESETCONTENT, 0, 0);
+ CheckDlgButton (hwnd, IDC_CAPSLOCKCYR, cfg.xlat_capslockcyr);
for (i = 0; (cp = cp_enumerate(i)) != NULL; i++) {
SendDlgItemMessage(hwnd, IDC_CODEPAGE, CB_ADDSTRING,
0, (LPARAM) cp);
}
SetDlgItemText(hwnd, IDC_CODEPAGE, cfg.line_codepage);
}
-
+
+ {
+ int i, nprinters;
+ printer_enum *pe;
+ pe = printer_start_enum(&nprinters);
+ SendDlgItemMessage(hwnd, IDC_PRINTER, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_PRINTER, CB_ADDSTRING,
+ 0, (LPARAM) PRINTER_DISABLED_STRING);
+ for (i = 0; i < nprinters; i++) {
+ char *printer_name = printer_get_name(pe, i);
+ SendDlgItemMessage(hwnd, IDC_PRINTER, CB_ADDSTRING,
+ 0, (LPARAM) printer_name);
+ }
+ printer_finish_enum(pe);
+ SetDlgItemText(hwnd, IDC_PRINTER,
+ *cfg.printer ? cfg.printer : PRINTER_DISABLED_STRING);
+ }
+
CheckRadioButton(hwnd, IDC_VTXWINDOWS, IDC_VTUNICODE,
cfg.vtmode == VT_XWINDOWS ? IDC_VTXWINDOWS :
cfg.vtmode == VT_OEMANSI ? IDC_VTOEMANSI :
CheckDlgButton(hwnd, IDC_X11_FORWARD, cfg.x11_forward);
SetDlgItemText(hwnd, IDC_X11_DISPLAY, cfg.x11_display);
+ CheckRadioButton(hwnd, IDC_X11MIT, IDC_X11XDM,
+ cfg.x11_auth == X11_MIT ? IDC_X11MIT : IDC_X11XDM);
CheckDlgButton(hwnd, IDC_LPORT_ALL, cfg.lport_acceptall);
+ CheckDlgButton(hwnd, IDC_RPORT_ALL, cfg.rport_acceptall);
CheckRadioButton(hwnd, IDC_PFWDLOCAL, IDC_PFWDREMOTE, IDC_PFWDLOCAL);
+
+ /* proxy config */
+ CheckRadioButton(hwnd, IDC_PROXYTYPENONE, IDC_PROXYTYPETELNET,
+ cfg.proxy_type == PROXY_HTTP ? IDC_PROXYTYPEHTTP :
+ cfg.proxy_type == PROXY_SOCKS ? IDC_PROXYTYPESOCKS :
+ cfg.proxy_type == PROXY_TELNET ? IDC_PROXYTYPETELNET : IDC_PROXYTYPENONE);
+ SetDlgItemText(hwnd, IDC_PROXYHOSTEDIT, cfg.proxy_host);
+ SetDlgItemInt(hwnd, IDC_PROXYPORTEDIT, cfg.proxy_port, FALSE);
+ SetDlgItemText(hwnd, IDC_PROXYEXCLUDEEDIT, cfg.proxy_exclude_list);
+ CheckDlgButton(hwnd, IDC_PROXYLOCALHOST, cfg.even_proxy_localhost);
+ CheckRadioButton(hwnd, IDC_PROXYDNSNO, IDC_PROXYDNSYES,
+ cfg.proxy_dns == PROXYDNS_NO ? IDC_PROXYDNSNO :
+ cfg.proxy_dns == PROXYDNS_YES ? IDC_PROXYDNSYES :
+ IDC_PROXYDNSAUTO);
+ SetDlgItemText(hwnd, IDC_PROXYTELNETCMDEDIT, cfg.proxy_telnet_command);
+ SetDlgItemText(hwnd, IDC_PROXYUSEREDIT, cfg.proxy_username);
+ SetDlgItemText(hwnd, IDC_PROXYPASSEDIT, cfg.proxy_password);
+ CheckRadioButton(hwnd, IDC_PROXYSOCKSVER5, IDC_PROXYSOCKSVER4,
+ cfg.proxy_socks_version == 4 ? IDC_PROXYSOCKSVER4 : IDC_PROXYSOCKSVER5);
+
+ /* SSH bugs config */
+ SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1, CB_SETCURSEL,
+ cfg.sshbug_ignore1 == BUG_ON ? 2 :
+ cfg.sshbug_ignore1 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1, CB_SETCURSEL,
+ cfg.sshbug_plainpw1 == BUG_ON ? 2 :
+ cfg.sshbug_plainpw1 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSA1, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSA1, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSA1, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSA1, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSA1, CB_SETCURSEL,
+ cfg.sshbug_rsa1 == BUG_ON ? 2 :
+ cfg.sshbug_rsa1 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2, CB_SETCURSEL,
+ cfg.sshbug_hmac2 == BUG_ON ? 2 :
+ cfg.sshbug_hmac2 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2, CB_SETCURSEL,
+ cfg.sshbug_derivekey2 == BUG_ON ? 2 :
+ cfg.sshbug_derivekey2 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2, CB_SETCURSEL,
+ cfg.sshbug_rsapad2 == BUG_ON ? 2 :
+ cfg.sshbug_rsapad2 == BUG_OFF ? 1 : 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2, CB_ADDSTRING, 0, (LPARAM)"Auto");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2, CB_ADDSTRING, 0, (LPARAM)"Off");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2, CB_ADDSTRING, 0, (LPARAM)"On");
+ SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2, CB_SETCURSEL,
+ cfg.sshbug_dhgex2 == BUG_ON ? 2 :
+ cfg.sshbug_dhgex2 == BUG_OFF ? 1 : 0, 0);
}
struct treeview_faff {
static void create_controls(HWND hwnd, int dlgtype, int panel)
{
if (panel == sessionpanelstart) {
- /* The Session panel. Accelerators used: [acgo] nprtih elsd w */
+ /* The Session panel. Accelerators used: [acgoh] nprtis elvd w */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Basic options for your PuTTY session",
"&Telnet", IDC_PROTTELNET,
"Rlog&in", IDC_PROTRLOGIN,
#ifdef FWHACK
- "SS&H/hack",
+ "&SSH/hack",
#else
- "SS&H",
+ "&SSH",
#endif
IDC_PROTSSH, NULL);
}
sesssaver(&cp, "Sav&ed Sessions",
IDC_SESSSTATIC, IDC_SESSEDIT, IDC_SESSLIST,
"&Load", IDC_SESSLOAD,
- "&Save", IDC_SESSSAVE, "&Delete", IDC_SESSDEL, NULL);
+ "Sa&ve", IDC_SESSSAVE, "&Delete", IDC_SESSDEL, NULL);
endbox(&cp);
}
beginbox(&cp, NULL, IDC_BOX_SESSION3);
}
if (panel == loggingpanelstart) {
- /* The Logging panel. Accelerators used: [acgo] tplfwe */
+ /* The Logging panel. Accelerators used: [acgoh] 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);
+ statictext(&cp, "(Log file name can contain &&Y, &&M, &&D for date,"
+ " &&T for time, and &&H for host name)", 2, IDC_LGFEXPLAIN);
radiobig(&cp,
"What to do if the log file already &exists:",
IDC_LSTATXIST, "Always overwrite it", IDC_LSTATXOVR,
}
if (panel == terminalpanelstart) {
- /* The Terminal panel. Accelerators used: [acgo] wdlen hts */
+ /* The Terminal panel. Accelerators used: [acgoh] wdren lts p */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling the terminal emulation",
beginbox(&cp, "Set various terminal options", IDC_BOX_TERMINAL1);
checkbox(&cp, "Auto &wrap mode initially on", IDC_WRAPMODE);
checkbox(&cp, "&DEC Origin Mode initially on", IDC_DECOM);
- checkbox(&cp, "Implicit CR in every &LF", IDC_LFHASCR);
+ checkbox(&cp, "Implicit C&R in every LF", IDC_LFHASCR);
checkbox(&cp, "Use background colour to &erase screen", IDC_BCE);
checkbox(&cp, "Enable bli&nking text", IDC_BLINKTEXT);
multiedit(&cp,
endbox(&cp);
beginbox(&cp, "Line discipline options", IDC_BOX_TERMINAL2);
- radioline(&cp, "Local ec&ho:", IDC_ECHOSTATIC, 3,
+ radioline(&cp, "&Local echo:", IDC_ECHOSTATIC, 3,
"Auto", IDC_ECHOBACKEND,
"Force on", IDC_ECHOYES, "Force off", IDC_ECHONO, NULL);
radioline(&cp, "Local line edi&ting:", IDC_EDITSTATIC, 3,
"Auto", IDC_EDITBACKEND,
"Force on", IDC_EDITYES, "Force off", IDC_EDITNO, NULL);
endbox(&cp);
+
+ beginbox(&cp, "Remote-controlled printing", IDC_BOX_TERMINAL3);
+ combobox(&cp, "&Printer to send ANSI printer output to:",
+ IDC_PRINTERSTATIC, IDC_PRINTER);
+ endbox(&cp);
+ }
+
+ if (panel == featurespanelstart) {
+ /* The Features panel. Accelerators used: [acgoh] ukswtbrx */
+ struct ctlpos cp;
+ ctlposinit(&cp, hwnd, 80, 3, 13);
+ bartitle(&cp, "Enabling and disabling advanced terminal features ",
+ IDC_TITLE_FEATURES);
+ beginbox(&cp, NULL, IDC_BOX_FEATURES1);
+ checkbox(&cp, "Disable application c&ursor keys mode", IDC_NOAPPLICC);
+ checkbox(&cp, "Disable application &keypad mode", IDC_NOAPPLICK);
+ checkbox(&cp, "Disable &xterm-style mouse reporting", IDC_NOMOUSEREP);
+ checkbox(&cp, "Disable remote-controlled terminal re&sizing",
+ IDC_NORESIZE);
+ checkbox(&cp, "Disable s&witching to alternate terminal screen",
+ IDC_NOALTSCREEN);
+ checkbox(&cp, "Disable remote-controlled window &title changing",
+ IDC_NOWINTITLE);
+ checkbox(&cp, "Disable destructive &backspace on server sending ^?",
+ IDC_NODBACKSPACE);
+ checkbox(&cp, "Disable remote-controlled cha&racter set configuration",
+ IDC_NOCHARSET);
+ endbox(&cp);
}
if (panel == bellpanelstart) {
- /* The Bell panel. Accelerators used: [acgo] bdsm wit */
+ /* The Bell panel. Accelerators used: [acgoh] bdsm wit */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling the terminal bell",
IDC_BELLOVLTSTATIC, IDC_BELLOVLT, 20);
statictext(&cp,
"The bell is re-enabled after a few seconds of silence.",
- IDC_BELLOVLEXPLAIN);
+ 1, IDC_BELLOVLEXPLAIN);
staticedit(&cp, "Seconds of &silence required", IDC_BELLOVLSSTATIC,
IDC_BELLOVLS, 20);
endbox(&cp);
}
if (panel == keyboardpanelstart) {
- /* The Keyboard panel. Accelerators used: [acgo] bhf ruyntd */
+ /* The Keyboard panel. Accelerators used: [acgoh] bef rntd */
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,
"Control-? (127)", IDC_DEL127, NULL);
- radioline(&cp, "The &Home and End keys", IDC_HOMESTATIC, 2,
+ radioline(&cp, "The Home and &End keys", IDC_HOMESTATIC, 2,
"Standard", IDC_HOMETILDE, "rxvt", IDC_HOMERXVT, NULL);
radioline(&cp, "The &Function keys and keypad", IDC_FUNCSTATIC, 3,
"ESC[n~", IDC_FUNCTILDE,
"VT100+", IDC_FUNCVT100P, "SCO", IDC_FUNCSCO, NULL);
endbox(&cp);
beginbox(&cp, "Application keypad settings:", IDC_BOX_KEYBOARD2);
- checkbox(&cp,
- "Application c&ursor keys totally disabled",
- IDC_NOAPPLICC);
radioline(&cp, "Initial state of cu&rsor keys:", IDC_CURSTATIC, 2,
"Normal", IDC_CURNORMAL,
"Application", IDC_CURAPPLIC, NULL);
- checkbox(&cp,
- "Application ke&ypad keys totally disabled",
- IDC_NOAPPLICK);
radioline(&cp, "Initial state of &numeric keypad:", IDC_KPSTATIC,
3, "Normal", IDC_KPNORMAL, "Application", IDC_KPAPPLIC,
"NetHack", IDC_KPNH, NULL);
}
if (panel == windowpanelstart) {
- /* The Window panel. Accelerators used: [acgo] rmz sdkp w4ylt */
+ /* The Window panel. Accelerators used: [acgoh] 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);
- checkbox(&cp, "Lock window size against resi&zing", IDC_LOCKSIZE);
+ 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);
staticedit(&cp, "Lines of &scrollback",
IDC_SAVESTATIC, IDC_SAVEEDIT, 50);
checkbox(&cp, "&Display scrollbar", IDC_SCROLLBAR);
+ checkbox(&cp, "D&isplay scrollbar in full screen mode", IDC_SCROLLBARFULLSCREEN);
checkbox(&cp, "Reset scrollback on &keypress", IDC_SCROLLKEY);
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);
- endbox(&cp);
}
if (panel == appearancepanelstart) {
- /* The Appearance panel. Accelerators used: [acgo] luvb h ti p s */
+ /* The Appearance panel. Accelerators used: [acgoh] luvb n ti p s */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
- bartitle(&cp, "Options controlling PuTTY's 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,
endbox(&cp);
beginbox(&cp, "Set the font used in the terminal window",
IDC_BOX_APPEARANCE2);
- staticbtn(&cp, "", IDC_FONTSTATIC, "C&hange...", IDC_CHOOSEFONT);
+ staticbtn(&cp, "", IDC_FONTSTATIC, "Cha&nge...", IDC_CHOOSEFONT);
endbox(&cp);
beginbox(&cp, "Adjust the use of the window title",
IDC_BOX_APPEARANCE3);
beginbox(&cp, "Adjust the window border", IDC_BOX_APPEARANCE5);
checkbox(&cp, "&Sunken-edge border (slightly thicker)",
IDC_SUNKENEDGE);
+ staticedit(&cp, "Gap between text and window edge",
+ IDC_WINBSTATIC, IDC_WINBEDIT, 20);
+ endbox(&cp);
+ }
+
+ if (panel == behaviourpanelstart) {
+ /* The Behaviour panel. Accelerators used: [acgoh] 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] xbep t s */
+ /* The Translation panel. Accelerators used: [acgoh] rxbepus */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling character set translation",
IDC_TITLE_TRANSLATION);
- beginbox(&cp, "Adjust how PuTTY displays line drawing characters",
+ beginbox(&cp, "Character set translation on received data",
IDC_BOX_TRANSLATION1);
+ combobox(&cp, "&Received data assumed to be in which character set:",
+ IDC_CODEPAGESTATIC, IDC_CODEPAGE);
+ endbox(&cp);
+ beginbox(&cp, "Enable character set translation on input data",
+ IDC_BOX_TRANSLATION2);
+ checkbox(&cp, "Cap&s Lock acts as Cyrillic switch",
+ IDC_CAPSLOCKCYR);
+ endbox(&cp);
+ beginbox(&cp, "Adjust how PuTTY displays line drawing characters",
+ IDC_BOX_TRANSLATION3);
radiobig(&cp,
"Handling of line drawing characters:", IDC_VTSTATIC,
"Font has &XWindows encoding", IDC_VTXWINDOWS,
"&Poor man's line drawing (" "+" ", " "-" " and " "|" ")",
IDC_VTPOORMAN, "&Unicode mode", IDC_VTUNICODE, NULL);
endbox(&cp);
- beginbox(&cp, "Character set translation on received data",
- IDC_BOX_TRANSLATION2);
- combobox(&cp, "Received data assumed to be in which character set:",
- IDC_CODEPAGESTATIC, IDC_CODEPAGE);
- endbox(&cp);
}
if (panel == selectionpanelstart) {
- /* The Selection panel. Accelerators used: [acgo] d wx hst */
+ /* The Selection panel. Accelerators used: [acgoh] df wxp est 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);
"&Windows (Right pastes, Middle extends)", IDC_MBWINDOWS,
"&xterm (Right extends, Middle pastes)", IDC_MBXTERM,
NULL);
+ checkbox(&cp,
+ "Shift overrides a&pplication's use of mouse",
+ IDC_MOUSEOVERRIDE);
+ radioline(&cp,
+ "Default selection mode (Alt+drag does the other one):",
+ IDC_SELTYPESTATIC, 2,
+ "&Normal", IDC_SELTYPELEX,
+ "&Rectangular block", IDC_SELTYPERECT, NULL);
endbox(&cp);
beginbox(&cp, "Control the select-one-word-at-a-time mode",
IDC_BOX_SELECTION3);
- charclass(&cp, "C&haracter classes:", IDC_CCSTATIC, IDC_CCLIST,
+ charclass(&cp, "Charact&er classes:", IDC_CCSTATIC, IDC_CCLIST,
"&Set", IDC_CCSET, IDC_CCEDIT,
"&to class", IDC_CCSTATIC2);
endbox(&cp);
}
if (panel == colourspanelstart) {
- /* The Colours panel. Accelerators used: [acgo] blum */
+ /* The Colours panel. Accelerators used: [acgoh] blum */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
bartitle(&cp, "Options controlling use of colours",
}
if (panel == connectionpanelstart) {
- /* The Connection panel. Accelerators used: [acgo] tuk */
+ /* The Connection panel. Accelerators used: [acgoh] 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 == proxypanelstart) {
+ /* The Proxy panel. Accelerators used: [acgoh] ntslypeuwmvxd */
+ struct ctlpos cp;
+ ctlposinit(&cp, hwnd, 80, 3, 13);
+ if (dlgtype == 0) {
+ bartitle(&cp, "Options controlling proxy usage",
+ IDC_TITLE_PROXY);
+ beginbox(&cp, "Proxy basics", IDC_BOX_PROXY1);
+ radioline(&cp, "Proxy type:", IDC_PROXYTYPESTATIC, 4,
+ "&None", IDC_PROXYTYPENONE,
+ "H&TTP", IDC_PROXYTYPEHTTP,
+ "&SOCKS", IDC_PROXYTYPESOCKS,
+ "Te&lnet", IDC_PROXYTYPETELNET, NULL);
+ multiedit(&cp,
+ "Prox&y Host", IDC_PROXYHOSTSTATIC, IDC_PROXYHOSTEDIT, 80,
+ "&Port", IDC_PROXYPORTSTATIC, IDC_PROXYPORTEDIT, 20, NULL);
+ multiedit(&cp,
+ "&Exclude Hosts/IPs", IDC_PROXYEXCLUDESTATIC,
+ IDC_PROXYEXCLUDEEDIT, 100, NULL);
+ checkbox(&cp, "Consider pro&xying local host connections",
+ IDC_PROXYLOCALHOST);
+ radioline(&cp, "Do &DNS name lookup at proxy end:",
+ IDC_PROXYDNSSTATIC, 3,
+ "No", IDC_PROXYDNSNO,
+ "Auto", IDC_PROXYDNSAUTO,
+ "Yes", IDC_PROXYDNSYES, NULL);
+ staticedit(&cp, "&Username", IDC_PROXYUSERSTATIC,
+ IDC_PROXYUSEREDIT, 60);
+ staticpassedit(&cp, "Pass&word", IDC_PROXYPASSSTATIC,
+ IDC_PROXYPASSEDIT, 60);
+ endbox(&cp);
+ beginbox(&cp, "Misc. proxy settings", IDC_BOX_PROXY2);
+ multiedit(&cp,
+ "Telnet co&mmand", IDC_PROXYTELNETCMDSTATIC,
+ IDC_PROXYTELNETCMDEDIT, 100, NULL);
+ radioline(&cp, "SOCKS &Version", IDC_PROXYSOCKSVERSTATIC,
+ 2, "Version 5", IDC_PROXYSOCKSVER5, "Version 4",
+ IDC_PROXYSOCKSVER4, NULL);
+ endbox(&cp);
+ }
}
if (panel == telnetpanelstart) {
- /* The Telnet panel. Accelerators used: [acgo] svldr bftk */
+ /* The Telnet panel. Accelerators used: [acgoh] svldr bftk */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
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 == rloginpanelstart) {
- /* The Rlogin panel. Accelerators used: [acgo] sl */
+ /* The Rlogin panel. Accelerators used: [acgoh] sl */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
}
if (panel == sshpanelstart) {
- /* The SSH panel. Accelerators used: [acgo] r pe12i sud */
+ /* The SSH panel. Accelerators used: [acgoh] r pe12ni sd */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
checkbox(&cp, "Don't allocate a &pseudo-terminal", IDC_NOPTY);
checkbox(&cp, "Enable compr&ession", IDC_COMPRESS);
radioline(&cp, "Preferred SSH protocol version:",
- IDC_SSHPROTSTATIC, 2,
- "&1", IDC_SSHPROT1, "&2", IDC_SSHPROT2, NULL);
- checkbox(&cp, "&Imitate SSH 2 MAC bug in commercial <= v2.3.x",
- IDC_BUGGYMAC);
+ IDC_SSHPROTSTATIC, 4,
+ "1 on&ly", IDC_SSHPROT1ONLY,
+ "&1", IDC_SSHPROT1, "&2", IDC_SSHPROT2,
+ "2 o&nly", IDC_SSHPROT2ONLY, NULL);
endbox(&cp);
beginbox(&cp, "Encryption options", IDC_BOX_SSH3);
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: [acgoh] m fkiuw */
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 == sshbugspanelstart) {
+ /* The SSH bugs panel. Accelerators used: [acgoh] isrmep */
+ struct ctlpos cp;
+ ctlposinit(&cp, hwnd, 80, 3, 13);
+ if (dlgtype == 0) {
+ bartitle(&cp, "Workarounds for SSH server bugs",
+ IDC_TITLE_SSHBUGS);
+ beginbox(&cp, "Detection of known bugs in SSH servers",
+ IDC_BOX_SSHBUGS1);
+ staticddl(&cp, "Chokes on SSH1 &ignore messages",
+ IDC_BUGS_IGNORE1, IDC_BUGD_IGNORE1, 20);
+ staticddl(&cp, "Refuses all SSH1 pa&ssword camouflage",
+ IDC_BUGS_PLAINPW1, IDC_BUGD_PLAINPW1, 20);
+ staticddl(&cp, "Chokes on SSH1 &RSA authentication",
+ IDC_BUGS_RSA1, IDC_BUGD_RSA1, 20);
+ staticddl(&cp, "Miscomputes SSH2 H&MAC keys",
+ IDC_BUGS_HMAC2, IDC_BUGD_HMAC2, 20);
+ staticddl(&cp, "Miscomputes SSH2 &encryption keys",
+ IDC_BUGS_DERIVEKEY2, IDC_BUGD_DERIVEKEY2, 20);
+ staticddl(&cp, "Requires &padding on SSH2 RSA signatures",
+ IDC_BUGS_RSAPAD2, IDC_BUGD_RSAPAD2, 20);
+ staticddl(&cp, "Chokes on &Diffie-Hellman group exchange",
+ IDC_BUGS_DHGEX2, IDC_BUGD_DHGEX2, 20);
+ endbox(&cp);
+ }
+ }
+
if (panel == tunnelspanelstart) {
- /* The Tunnels panel. Accelerators used: [acgo] deilmrstx */
+ /* The Tunnels panel. Accelerators used: [acgoh] deilmrstxp */
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
if (dlgtype == 0) {
IDC_TITLE_TUNNELS);
beginbox(&cp, "X11 forwarding", IDC_BOX_TUNNELS1);
checkbox(&cp, "&Enable X11 forwarding", IDC_X11_FORWARD);
- multiedit(&cp, "&X display location", IDC_X11_DISPSTATIC,
- IDC_X11_DISPLAY, 50, NULL);
+ staticedit(&cp, "&X display location", IDC_X11_DISPSTATIC,
+ IDC_X11_DISPLAY, 50);
+ radioline(&cp, "Remote X11 a&uthentication protocol",
+ IDC_X11AUTHSTATIC, 2,
+ "MIT-Magic-Cookie-1", IDC_X11MIT,
+ "XDM-Authorization-1", IDC_X11XDM, 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 the same (SSH v2 only)",
+ IDC_RPORT_ALL);
staticbtn(&cp, "Forwarded ports:", IDC_PFWDSTATIC,
"&Remove", IDC_PFWDREMOVE);
fwdsetter(&cp, IDC_PFWDLIST,
"Add new forwarded port:", IDC_PFWDSTATIC2,
"&Source port", IDC_SPORTSTATIC, IDC_SPORTEDIT,
"Dest&ination", IDC_DPORTSTATIC, IDC_DPORTEDIT,
- "A&dd", IDC_PFWDADD);
- bareradioline(&cp, 2,
- "&Local", IDC_PFWDLOCAL, "Re&mote", IDC_PFWDREMOTE, NULL);
+ "A&dd", IDC_PFWDADD,
+ "&Local", IDC_PFWDLOCAL,
+ "Re&mote", IDC_PFWDREMOTE);
endbox(&cp);
}
MessageBeep(0);
return 0;
}
- isdef = !strcmp(sessions[n], "Default Settings");
- load_settings(sessions[n], !isdef, &cfg);
+ isdef = !strcmp(sesslist.sessions[n], "Default Settings");
+ load_settings(sesslist.sessions[n], !isdef, &cfg);
init_dlg_ctrls(hwnd, TRUE);
if (!isdef)
- SetDlgItemText(hwnd, IDC_SESSEDIT, sessions[n]);
+ SetDlgItemText(hwnd, IDC_SESSEDIT, sesslist.sessions[n]);
else
SetDlgItemText(hwnd, IDC_SESSEDIT, "");
/* Restore the selection, which will have been clobbered by
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)));
/*
r.left = 3;
r.right = r.left + 75;
r.top = 13;
- r.bottom = r.top + 206;
+ r.bottom = r.top + 219;
MapDialogRect(hwnd, &r);
treeview = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, "",
WS_CHILD | WS_VISIBLE |
treeview_insert(&tvfaff, 0, "Terminal");
treeview_insert(&tvfaff, 1, "Keyboard");
treeview_insert(&tvfaff, 1, "Bell");
+ treeview_insert(&tvfaff, 1, "Features");
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");
treeview_insert(&tvfaff, 0, "Connection");
if (dlgtype == 0) {
+ treeview_insert(&tvfaff, 1, "Proxy");
treeview_insert(&tvfaff, 1, "Telnet");
treeview_insert(&tvfaff, 1, "Rlogin");
if (backends[3].backend != NULL) {
/* XXX make it closed by default? */
treeview_insert(&tvfaff, 2, "Auth");
treeview_insert(&tvfaff, 2, "Tunnels");
+ treeview_insert(&tvfaff, 2, "Bugs");
}
}
TVITEM item;
int j;
char buffer[64];
+
+ SendMessage (hwnd, WM_SETREDRAW, FALSE, 0);
+
item.hItem = i;
item.pszText = buffer;
item.cchTextMax = sizeof(buffer);
create_controls(hwnd, dlgtype, terminalpanelstart);
if (!strcmp(buffer, "Bell"))
create_controls(hwnd, dlgtype, bellpanelstart);
+ if (!strcmp(buffer, "Features"))
+ create_controls(hwnd, dlgtype, featurespanelstart);
if (!strcmp(buffer, "Window"))
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"))
create_controls(hwnd, dlgtype, connectionpanelstart);
+ if (!strcmp(buffer, "Proxy"))
+ create_controls(hwnd, dlgtype, proxypanelstart);
if (!strcmp(buffer, "Telnet"))
create_controls(hwnd, dlgtype, telnetpanelstart);
if (!strcmp(buffer, "Rlogin"))
create_controls(hwnd, dlgtype, sshpanelstart);
if (!strcmp(buffer, "Auth"))
create_controls(hwnd, dlgtype, sshauthpanelstart);
+ if (!strcmp(buffer, "Bugs"))
+ create_controls(hwnd, dlgtype, sshbugspanelstart);
if (!strcmp(buffer, "Selection"))
create_controls(hwnd, dlgtype, selectionpanelstart);
if (!strcmp(buffer, "Colours"))
create_controls(hwnd, dlgtype, translationpanelstart);
init_dlg_ctrls(hwnd, FALSE);
+
+ SendMessage (hwnd, WM_SETREDRAW, TRUE, 0);
+ InvalidateRect (hwnd, NULL, TRUE);
SetFocus(((LPNMHDR) lParam)->hwndFrom); /* ensure focus stays */
return 0;
}
}
/* 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:
cfg.protocol =
i ? PROT_SSH : j ? PROT_TELNET : k ? PROT_RLOGIN :
PROT_RAW;
- if ((cfg.protocol == PROT_SSH && cfg.port != 22)
- || (cfg.protocol == PROT_TELNET && cfg.port != 23)
- || (cfg.protocol == PROT_RLOGIN
- && cfg.port != 513)) {
+ /*
+ * When switching using the arrow keys, we
+ * appear to get two of these messages, both
+ * mentioning the target button in
+ * LOWORD(wParam), but one of them called while
+ * the previous button is still checked. This
+ * causes an unnecessary reset of the port
+ * number field, which we fix by ensuring here
+ * that the button selected is indeed the one
+ * checked.
+ */
+ if (IsDlgButtonChecked(hwnd, LOWORD(wParam)) &&
+ ((cfg.protocol == PROT_SSH && cfg.port != 22)
+ || (cfg.protocol == PROT_TELNET && cfg.port != 23)
+ || (cfg.protocol == PROT_RLOGIN
+ && cfg.port != 513))) {
cfg.port = i ? 22 : j ? 23 : 513;
SetDlgItemInt(hwnd, IDC_PORT, cfg.port, FALSE);
}
MessageBeep(0);
break;
}
- strcpy(str, sessions[n]);
+ strcpy(str, sesslist.sessions[n]);
}
save_settings(str, !!strcmp(str, "Default Settings"),
&cfg);
- get_sesslist(FALSE);
- get_sesslist(TRUE);
+ get_sesslist(&sesslist, FALSE);
+ get_sesslist(&sesslist, TRUE);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
FALSE, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
0, 0);
- for (i = 0; i < nsessions; i++)
+ for (i = 0; i < sesslist.nsessions; i++)
SendDlgItemMessage(hwnd, IDC_SESSLIST,
LB_ADDSTRING, 0,
- (LPARAM) (sessions[i]));
+ (LPARAM) (sesslist.sessions[i]));
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
(WPARAM) - 1, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
MessageBeep(0);
break;
}
- del_settings(sessions[n]);
- get_sesslist(FALSE);
- get_sesslist(TRUE);
+ del_settings(sesslist.sessions[n]);
+ get_sesslist(&sesslist, FALSE);
+ get_sesslist(&sesslist, TRUE);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
FALSE, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
0, 0);
- for (i = 0; i < nsessions; i++)
+ for (i = 0; i < sesslist.nsessions; i++)
SendDlgItemMessage(hwnd, IDC_SESSLIST,
LB_ADDSTRING, 0,
- (LPARAM) (sessions[i]));
+ (LPARAM) (sesslist.sessions[i]));
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
(WPARAM) - 1, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
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.no_applic_k =
IsDlgButtonChecked(hwnd, IDC_NOAPPLICK);
break;
+ case IDC_NOMOUSEREP:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_mouse_rep =
+ IsDlgButtonChecked(hwnd, IDC_NOMOUSEREP);
+ break;
+ case IDC_NORESIZE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_remote_resize =
+ IsDlgButtonChecked(hwnd, IDC_NORESIZE);
+ break;
+ case IDC_NOALTSCREEN:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_alt_screen =
+ IsDlgButtonChecked(hwnd, IDC_NOALTSCREEN);
+ break;
+ case IDC_NOWINTITLE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_remote_wintitle =
+ IsDlgButtonChecked(hwnd, IDC_NOWINTITLE);
+ break;
+ case IDC_NODBACKSPACE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_dbackspace =
+ IsDlgButtonChecked(hwnd, IDC_NODBACKSPACE);
+ break;
+ case IDC_NOCHARSET:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_remote_charset =
+ IsDlgButtonChecked(hwnd, IDC_NOCHARSET);
+ break;
case IDC_ALTF4:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.alwaysontop =
IsDlgButtonChecked(hwnd, IDC_ALWAYSONTOP);
break;
+ case IDC_FULLSCREENONALTENTER:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.fullscreenonaltenter =
+ IsDlgButtonChecked(hwnd, IDC_FULLSCREENONALTENTER);
+ break;
case IDC_SCROLLKEY:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
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)
cfg.sunken_edge =
IsDlgButtonChecked(hwnd, IDC_SUNKENEDGE);
break;
+ case IDC_WINBEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemInt(hwnd, IDC_WINBEDIT,
+ &cfg.window_border);
+ if (cfg.window_border > 32)
+ cfg.window_border = 32;
+ break;
case IDC_CURBLOCK:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.scrollbar =
IsDlgButtonChecked(hwnd, IDC_SCROLLBAR);
break;
- case IDC_LOCKSIZE:
+ case IDC_SCROLLBARFULLSCREEN:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.locksize =
- IsDlgButtonChecked(hwnd, IDC_LOCKSIZE);
+ cfg.scrollbar_in_fullscreen =
+ IsDlgButtonChecked(hwnd, IDC_SCROLLBARFULLSCREEN);
+ break;
+ case IDC_RESIZETERM:
+ case IDC_RESIZEFONT:
+ case IDC_RESIZENONE:
+ case IDC_RESIZEEITHER:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.resize_action =
+ IsDlgButtonChecked(hwnd,
+ IDC_RESIZETERM) ? RESIZE_TERM :
+ IsDlgButtonChecked(hwnd,
+ IDC_RESIZEFONT) ? RESIZE_FONT :
+ IsDlgButtonChecked(hwnd,
+ IDC_RESIZEEITHER) ? RESIZE_EITHER :
+ RESIZE_DISABLED;
+ }
break;
case IDC_WINEDIT:
if (HIWORD(wParam) == EN_CHANGE)
GetDlgItemText(hwnd, IDC_TTEDIT, cfg.termtype,
sizeof(cfg.termtype) - 1);
break;
+
+ /* proxy config */
+ case IDC_PROXYHOSTEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_PROXYHOSTEDIT, cfg.proxy_host,
+ sizeof(cfg.proxy_host) - 1);
+ break;
+ case IDC_PROXYPORTEDIT:
+ if (HIWORD(wParam) == EN_CHANGE) {
+ GetDlgItemText(hwnd, IDC_PROXYPORTEDIT, portname, 31);
+ if (isdigit(portname[0]))
+ MyGetDlgItemInt(hwnd, IDC_PROXYPORTEDIT, &cfg.proxy_port);
+ else {
+ service = getservbyname(portname, NULL);
+ if (service)
+ cfg.proxy_port = ntohs(service->s_port);
+ else
+ cfg.proxy_port = 0;
+ }
+ }
+ break;
+ case IDC_PROXYEXCLUDEEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_PROXYEXCLUDEEDIT,
+ cfg.proxy_exclude_list,
+ sizeof(cfg.proxy_exclude_list) - 1);
+ break;
+ case IDC_PROXYUSEREDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_PROXYUSEREDIT,
+ cfg.proxy_username,
+ sizeof(cfg.proxy_username) - 1);
+ break;
+ case IDC_PROXYPASSEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_PROXYPASSEDIT,
+ cfg.proxy_password,
+ sizeof(cfg.proxy_password) - 1);
+ break;
+ case IDC_PROXYTELNETCMDEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_PROXYTELNETCMDEDIT,
+ cfg.proxy_telnet_command,
+ sizeof(cfg.proxy_telnet_command) - 1);
+ break;
+ case IDC_PROXYSOCKSVER5:
+ case IDC_PROXYSOCKSVER4:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.proxy_socks_version =
+ IsDlgButtonChecked(hwnd, IDC_PROXYSOCKSVER4) ? 4 : 5;
+ }
+ break;
+ case IDC_PROXYLOCALHOST:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.even_proxy_localhost =
+ IsDlgButtonChecked(hwnd, IDC_PROXYLOCALHOST);
+ break;
+ case IDC_PROXYDNSNO:
+ case IDC_PROXYDNSAUTO:
+ case IDC_PROXYDNSYES:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.proxy_dns =
+ IsDlgButtonChecked(hwnd, IDC_PROXYDNSNO) ? PROXYDNS_NO :
+ IsDlgButtonChecked(hwnd, IDC_PROXYDNSYES) ? PROXYDNS_YES :
+ PROXYDNS_AUTO;
+ }
+ break;
+ case IDC_PROXYTYPENONE:
+ case IDC_PROXYTYPEHTTP:
+ case IDC_PROXYTYPESOCKS:
+ case IDC_PROXYTYPETELNET:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.proxy_type =
+ IsDlgButtonChecked(hwnd, IDC_PROXYTYPEHTTP) ? PROXY_HTTP :
+ IsDlgButtonChecked(hwnd, IDC_PROXYTYPESOCKS) ? PROXY_SOCKS :
+ IsDlgButtonChecked(hwnd, IDC_PROXYTYPETELNET) ? PROXY_TELNET :
+ PROXY_NONE;
+ }
+ break;
+
case IDC_LGFEDIT:
if (HIWORD(wParam) == EN_CHANGE)
GetDlgItemText(hwnd, IDC_LGFEDIT, cfg.logfilename,
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.compression =
IsDlgButtonChecked(hwnd, IDC_COMPRESS);
break;
- case IDC_BUGGYMAC:
+ case IDC_SSH2DES:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.buggymac =
- IsDlgButtonChecked(hwnd, IDC_BUGGYMAC);
+ cfg.ssh2_des_cbc =
+ IsDlgButtonChecked(hwnd, IDC_SSH2DES);
break;
case IDC_AGENTFWD:
if (HIWORD(wParam) == BN_CLICKED ||
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.ssh_cipherlist, CIPHER_MAX,
0, hwnd, wParam, lParam);
break;
+ case IDC_SSHPROT1ONLY:
case IDC_SSHPROT1:
case IDC_SSHPROT2:
+ case IDC_SSHPROT2ONLY:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (IsDlgButtonChecked(hwnd, IDC_SSHPROT1ONLY))
+ cfg.sshprot = 0;
if (IsDlgButtonChecked(hwnd, IDC_SSHPROT1))
cfg.sshprot = 1;
else if (IsDlgButtonChecked(hwnd, IDC_SSHPROT2))
cfg.sshprot = 2;
+ else if (IsDlgButtonChecked(hwnd, IDC_SSHPROT2ONLY))
+ cfg.sshprot = 3;
}
break;
case IDC_AUTHTIS:
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,
of.lStructSize = sizeof(of);
#endif
of.hwndOwner = hwnd;
- of.lpstrFilter = "All Files\0*\0\0\0";
+ of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.PPK\0"
+ "AllFiles\0*\0\0\0";
of.lpstrCustomFilter = NULL;
of.nFilterIndex = 1;
of.lpstrFile = filename;
of.nMaxFile = sizeof(filename);
of.lpstrFileTitle = NULL;
of.lpstrInitialDir = NULL;
- of.lpstrTitle = "Select Public Key File";
+ of.lpstrTitle = "Select Private Key File";
of.Flags = 0;
if (GetOpenFileName(&of)) {
strcpy(cfg.keyfile, filename);
break;
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;
+ case IDC_SELTYPELEX:
+ case IDC_SELTYPERECT:
+ cfg.rect_select = IsDlgButtonChecked(hwnd, IDC_SELTYPERECT);
+ break;
+ case IDC_MOUSEOVERRIDE:
+ cfg.mouse_override = IsDlgButtonChecked(hwnd, IDC_MOUSEOVERRIDE);
+ break;
case IDC_CCSET:
{
BOOL ok;
SetDlgItemText(hwnd, IDC_CODEPAGE, cfg.line_codepage);
}
break;
+ case IDC_PRINTER:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_PRINTER,
+ CB_GETCURSEL, 0, 0);
+ SendDlgItemMessage(hwnd, IDC_PRINTER, CB_GETLBTEXT,
+ index, (LPARAM)cfg.printer);
+ } else if (HIWORD(wParam) == CBN_EDITCHANGE) {
+ GetDlgItemText(hwnd, IDC_PRINTER, cfg.printer,
+ sizeof(cfg.printer) - 1);
+ }
+ if (!strcmp(cfg.printer, PRINTER_DISABLED_STRING))
+ *cfg.printer = '\0';
+ break;
+ case IDC_CAPSLOCKCYR:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.xlat_capslockcyr =
+ IsDlgButtonChecked (hwnd, IDC_CAPSLOCKCYR);
+ }
+ break;
case IDC_VTXWINDOWS:
case IDC_VTOEMANSI:
case IDC_VTOEMONLY:
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)
GetDlgItemText(hwnd, IDC_X11_DISPLAY, cfg.x11_display,
sizeof(cfg.x11_display) - 1);
break;
+ case IDC_X11MIT:
+ case IDC_X11XDM:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (IsDlgButtonChecked(hwnd, IDC_X11MIT))
+ cfg.x11_auth = X11_MIT;
+ else if (IsDlgButtonChecked(hwnd, IDC_X11XDM))
+ cfg.x11_auth = X11_XDM;
+ }
+ break;
case IDC_PFWDADD:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
disaster2:;
}
break;
+ case IDC_BUGD_IGNORE1:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_IGNORE1,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_ignore1 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_PLAINPW1:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_PLAINPW1,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_plainpw1 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_RSA1:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_RSA1,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_rsa1 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_HMAC2:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_HMAC2,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_hmac2 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_DERIVEKEY2:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_DERIVEKEY2,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_derivekey2 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_RSAPAD2:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_RSAPAD2,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_rsapad2 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ break;
+ case IDC_BUGD_DHGEX2:
+ if (HIWORD(wParam) == CBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwnd, IDC_BUGD_DHGEX2,
+ CB_GETCURSEL, 0, 0);
+ cfg.sshbug_dhgex2 = (index == 0 ? BUG_AUTO :
+ index == 1 ? BUG_OFF : BUG_ON);
+ }
+ 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;
{
int ret;
- get_sesslist(TRUE);
+ get_sesslist(&sesslist, TRUE);
savedsession[0] = '\0';
ret =
DialogBox(hinst, MAKEINTRESOURCE(IDD_MAINBOX), NULL, MainDlgProc);
- get_sesslist(FALSE);
+ get_sesslist(&sesslist, FALSE);
return ret;
}
return ret;
}
-void logevent(char *string)
+void logevent(void *frontend, char *string)
{
char timebuf[40];
time_t t;
+ log_eventlog(logctx, string);
+
if (nevents >= negsize) {
negsize += 64;
events = srealloc(events, negsize * sizeof(*events));
DialogBox(hinst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, AboutProc);
}
-void verify_ssh_host_key(char *host, int port, char *keytype,
+void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
char *keystr, char *fingerprint)
{
int ret;
if (mbret == IDYES)
store_host_key(host, port, keytype, keystr);
if (mbret == IDCANCEL)
- exit(0);
+ cleanup_exit(0);
}
if (ret == 1) { /* key was absent */
int mbret;
if (mbret == IDYES)
store_host_key(host, port, keytype, keystr);
if (mbret == IDCANCEL)
- exit(0);
+ cleanup_exit(0);
}
}
* below the configured 'warn' threshold).
* cs: 0 = both ways, 1 = client->server, 2 = server->client
*/
-void askcipher(char *ciphername, int cs)
+void askcipher(void *frontend, char *ciphername, int cs)
{
static const char mbtitle[] = "PuTTY Security Alert";
static const char msg[] =
if (mbret == IDYES)
return;
else
- exit(0);
+ cleanup_exit(0);
}
/*
* Ask whether to wipe a session log file before writing to it.
* Returns 2 for wipe, 1 for append, 0 for cancel (don't log).
*/
-int askappend(char *filename)
+int askappend(void *frontend, char *filename)
{
static const char mbtitle[] = "PuTTY Log to File";
static const char msgtemplate[] =
"or Cancel to disable logging.";
char message[sizeof(msgtemplate) + FILENAME_MAX];
int mbret;
- if (cfg.logxfovr != LGXF_ASK) {
- return ((cfg.logxfovr == LGXF_OVR) ? 2 : 1);
- }
+
sprintf(message, msgtemplate, FILENAME_MAX, filename);
mbret = MessageBox(NULL, message, mbtitle,
else
return 0;
}
+
+/*
+ * Warn about the obsolescent key file format.
+ *
+ * Uniquely among these functions, this one does _not_ expect a
+ * frontend handle. This means that if PuTTY is ported to a
+ * platform which requires frontend handles, this function will be
+ * an anomaly. Fortunately, the problem it addresses will not have
+ * been present on that platform, so it can plausibly be
+ * implemented as an empty function.
+ */
+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);
+}