+ break;
+ case IDC_SESSSAVE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ /*
+ * Save a session
+ */
+ char str[2048];
+ GetDlgItemText(hwnd, IDC_SESSEDIT, str,
+ sizeof(str) - 1);
+ if (!*str) {
+ int n = SendDlgItemMessage(hwnd, IDC_SESSLIST,
+ LB_GETCURSEL, 0, 0);
+ if (n == LB_ERR) {
+ MessageBeep(0);
+ break;
+ }
+ strcpy(str, sessions[n]);
+ }
+ save_settings(str, !!strcmp(str, "Default Settings"),
+ &cfg);
+ get_sesslist(FALSE);
+ get_sesslist(TRUE);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
+ FALSE, 0);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
+ 0, 0);
+ for (i = 0; i < nsessions; i++)
+ SendDlgItemMessage(hwnd, IDC_SESSLIST,
+ LB_ADDSTRING, 0,
+ (LPARAM) (sessions[i]));
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
+ (WPARAM) - 1, 0);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
+ TRUE, 0);
+ InvalidateRect(GetDlgItem(hwnd, IDC_SESSLIST), NULL,
+ TRUE);
+ }
+ break;
+ case IDC_SESSLIST:
+ case IDC_SESSLOAD:
+ if (LOWORD(wParam) == IDC_SESSLIST) {
+ if (HIWORD(wParam) == LBN_SETFOCUS)
+ sesslist_has_focus = 1;
+ else if (HIWORD(wParam) == LBN_KILLFOCUS)
+ sesslist_has_focus = 0;
+ }
+ if (LOWORD(wParam) == IDC_SESSLOAD &&
+ HIWORD(wParam) != BN_CLICKED &&
+ HIWORD(wParam) != BN_DOUBLECLICKED) break;
+ if (LOWORD(wParam) == IDC_SESSLIST &&
+ HIWORD(wParam) != LBN_DBLCLK) break;
+ /* Load the session selected in SESSLIST. */
+ if (load_selected_session(hwnd) &&
+ LOWORD(wParam) == IDC_SESSLIST) {
+ /*
+ * A double-click on a saved session should
+ * actually start the session, not just load it.
+ * Unless it's Default Settings or some other
+ * host-less set of saved settings.
+ */
+ if (*cfg.host) {
+ readytogo = TRUE;
+ SetCapture(hwnd);
+ }
+ }
+ break;
+ case IDC_SESSDEL:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ int n = SendDlgItemMessage(hwnd, IDC_SESSLIST,
+ LB_GETCURSEL, 0, 0);
+ if (n == LB_ERR || n == 0) {
+ MessageBeep(0);
+ break;
+ }
+ del_settings(sessions[n]);
+ get_sesslist(FALSE);
+ get_sesslist(TRUE);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
+ FALSE, 0);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
+ 0, 0);
+ for (i = 0; i < nsessions; i++)
+ SendDlgItemMessage(hwnd, IDC_SESSLIST,
+ LB_ADDSTRING, 0,
+ (LPARAM) (sessions[i]));
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
+ (WPARAM) - 1, 0);
+ SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
+ TRUE, 0);
+ InvalidateRect(GetDlgItem(hwnd, IDC_SESSLIST), NULL,
+ TRUE);
+ }
+ case IDC_PINGEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ 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 ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.bksp_is_delete =
+ IsDlgButtonChecked(hwnd, IDC_DEL127);
+ break;
+ case IDC_HOMETILDE:
+ case IDC_HOMERXVT:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.rxvt_homeend =
+ IsDlgButtonChecked(hwnd, IDC_HOMERXVT);
+ break;
+ case IDC_FUNCTILDE:
+ case IDC_FUNCLINUX:
+ case IDC_FUNCXTERM:
+ case IDC_FUNCVT400:
+ case IDC_FUNCVT100P:
+ case IDC_FUNCSCO:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ switch (LOWORD(wParam)) {
+ case IDC_FUNCTILDE:
+ cfg.funky_type = 0;
+ break;
+ case IDC_FUNCLINUX:
+ cfg.funky_type = 1;
+ break;
+ case IDC_FUNCXTERM:
+ cfg.funky_type = 2;
+ break;
+ case IDC_FUNCVT400:
+ cfg.funky_type = 3;
+ break;
+ case IDC_FUNCVT100P:
+ cfg.funky_type = 4;
+ break;
+ case IDC_FUNCSCO:
+ cfg.funky_type = 5;
+ break;
+ }
+ break;
+ case IDC_KPNORMAL:
+ case IDC_KPAPPLIC:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.app_keypad =
+ IsDlgButtonChecked(hwnd, IDC_KPAPPLIC);
+ cfg.nethack_keypad = FALSE;
+ }
+ break;
+ case IDC_KPNH:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.app_keypad = FALSE;
+ cfg.nethack_keypad = TRUE;
+ }
+ break;
+ case IDC_CURNORMAL:
+ case IDC_CURAPPLIC:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.app_cursor =
+ IsDlgButtonChecked(hwnd, IDC_CURAPPLIC);
+ break;
+ case IDC_NOAPPLICC:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_applic_c =
+ IsDlgButtonChecked(hwnd, IDC_NOAPPLICC);
+ break;
+ case IDC_NOAPPLICK:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.no_applic_k =
+ IsDlgButtonChecked(hwnd, IDC_NOAPPLICK);
+ break;
+ case IDC_ALTF4:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.alt_f4 = IsDlgButtonChecked(hwnd, IDC_ALTF4);
+ break;
+ case IDC_ALTSPACE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.alt_space =
+ IsDlgButtonChecked(hwnd, IDC_ALTSPACE);
+ break;
+ case IDC_ALTONLY:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.alt_only =
+ IsDlgButtonChecked(hwnd, IDC_ALTONLY);
+ break;
+ case IDC_ECHOBACKEND:
+ case IDC_ECHOYES:
+ case IDC_ECHONO:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (LOWORD(wParam) == IDC_ECHOBACKEND)
+ cfg.localecho = LD_BACKEND;
+ if (LOWORD(wParam) == IDC_ECHOYES)
+ cfg.localecho = LD_YES;
+ if (LOWORD(wParam) == IDC_ECHONO)
+ cfg.localecho = LD_NO;
+ }
+ break;
+ case IDC_EDITBACKEND:
+ case IDC_EDITYES:
+ case IDC_EDITNO:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (LOWORD(wParam) == IDC_EDITBACKEND)
+ cfg.localedit = LD_BACKEND;
+ if (LOWORD(wParam) == IDC_EDITYES)
+ cfg.localedit = LD_YES;
+ if (LOWORD(wParam) == IDC_EDITNO)
+ cfg.localedit = LD_NO;
+ }
+ break;
+ case IDC_ANSWEREDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_ANSWEREDIT, cfg.answerback,
+ sizeof(cfg.answerback) - 1);
+ break;
+ case IDC_ALWAYSONTOP:
+ 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.scroll_on_key =
+ IsDlgButtonChecked(hwnd, IDC_SCROLLKEY);
+ break;
+ case IDC_SCROLLDISP:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.scroll_on_disp =
+ IsDlgButtonChecked(hwnd, IDC_SCROLLDISP);
+ break;
+ case IDC_COMPOSEKEY:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.compose_key =
+ IsDlgButtonChecked(hwnd, IDC_COMPOSEKEY);
+ break;
+ case IDC_CTRLALTKEYS:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.ctrlaltkeys =
+ IsDlgButtonChecked(hwnd, IDC_CTRLALTKEYS);
+ break;
+ case IDC_TELNETKEY:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.telnet_keyboard =
+ IsDlgButtonChecked(hwnd, IDC_TELNETKEY);
+ break;
+ case IDC_WRAPMODE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.wrap_mode =
+ IsDlgButtonChecked(hwnd, IDC_WRAPMODE);
+ break;
+ case IDC_DECOM:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.dec_om = IsDlgButtonChecked(hwnd, IDC_DECOM);
+ break;
+ case IDC_LFHASCR:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.lfhascr =
+ IsDlgButtonChecked(hwnd, IDC_LFHASCR);
+ break;
+ case IDC_ROWSEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemInt(hwnd, IDC_ROWSEDIT, &cfg.height);
+ break;
+ case IDC_COLSEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemInt(hwnd, IDC_COLSEDIT, &cfg.width);
+ break;
+ case IDC_SAVEEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemInt(hwnd, IDC_SAVEEDIT, &cfg.savelines);
+ break;
+ case IDC_CHOOSEFONT:
+ {
+ HDC hdc = GetDC(0);
+ lf.lfHeight = -MulDiv(cfg.fontheight,
+ GetDeviceCaps(hdc, LOGPIXELSY),
+ 72);
+ ReleaseDC(0, hdc);
+ }
+ lf.lfWidth = lf.lfEscapement = lf.lfOrientation = 0;
+ lf.lfItalic = lf.lfUnderline = lf.lfStrikeOut = 0;
+ lf.lfWeight = (cfg.fontisbold ? FW_BOLD : 0);
+ lf.lfCharSet = cfg.fontcharset;
+ lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfQuality = DEFAULT_QUALITY;
+ lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
+ strncpy(lf.lfFaceName, cfg.font,
+ sizeof(lf.lfFaceName) - 1);
+ lf.lfFaceName[sizeof(lf.lfFaceName) - 1] = '\0';
+
+ cf.lStructSize = sizeof(cf);
+ cf.hwndOwner = hwnd;
+ cf.lpLogFont = &lf;
+ cf.Flags = CF_FIXEDPITCHONLY | CF_FORCEFONTEXIST |
+ CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
+
+ if (ChooseFont(&cf)) {
+ strncpy(cfg.font, lf.lfFaceName, sizeof(cfg.font) - 1);
+ cfg.font[sizeof(cfg.font) - 1] = '\0';
+ cfg.fontisbold = (lf.lfWeight == FW_BOLD);
+ cfg.fontcharset = lf.lfCharSet;
+ cfg.fontheight = cf.iPointSize / 10;
+ fmtfont(fontstatic);
+ SetDlgItemText(hwnd, IDC_FONTSTATIC, fontstatic);
+ }
+ break;
+ case IDC_BELL_DISABLED:
+ case IDC_BELL_DEFAULT:
+ case IDC_BELL_WAVEFILE:
+ case IDC_BELL_VISUAL:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (LOWORD(wParam) == IDC_BELL_DISABLED)
+ cfg.beep = BELL_DISABLED;
+ if (LOWORD(wParam) == IDC_BELL_DEFAULT)
+ cfg.beep = BELL_DEFAULT;
+ if (LOWORD(wParam) == IDC_BELL_WAVEFILE)
+ cfg.beep = BELL_WAVEFILE;
+ if (LOWORD(wParam) == IDC_BELL_VISUAL)
+ cfg.beep = BELL_VISUAL;
+ }
+ break;
+ case IDC_B_IND_DISABLED:
+ case IDC_B_IND_FLASH:
+ case IDC_B_IND_STEADY:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (LOWORD(wParam) == IDC_B_IND_DISABLED)
+ cfg.beep_ind = B_IND_DISABLED;
+ if (LOWORD(wParam) == IDC_B_IND_FLASH)
+ cfg.beep_ind = B_IND_FLASH;
+ if (LOWORD(wParam) == IDC_B_IND_STEADY)
+ cfg.beep_ind = B_IND_STEADY;
+ }
+ break;
+ case IDC_BELL_WAVEBROWSE:
+ memset(&of, 0, sizeof(of));
+#ifdef OPENFILENAME_SIZE_VERSION_400
+ of.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+#else
+ of.lStructSize = sizeof(of);
+#endif
+ of.hwndOwner = hwnd;
+ of.lpstrFilter = "Wave Files\0*.WAV\0AllFiles\0*\0\0\0";
+ of.lpstrCustomFilter = NULL;
+ of.nFilterIndex = 1;
+ of.lpstrFile = filename;
+ strcpy(filename, cfg.bell_wavefile);
+ of.nMaxFile = sizeof(filename);
+ of.lpstrFileTitle = NULL;
+ of.lpstrInitialDir = NULL;
+ of.lpstrTitle = "Select Bell Sound File";
+ of.Flags = 0;
+ if (GetOpenFileName(&of)) {
+ strcpy(cfg.bell_wavefile, filename);
+ SetDlgItemText(hwnd, IDC_BELL_WAVEEDIT,
+ cfg.bell_wavefile);
+ }
+ break;
+ case IDC_BELL_WAVEEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_BELL_WAVEEDIT,
+ cfg.bell_wavefile,
+ sizeof(cfg.bell_wavefile) - 1);
+ break;
+ case IDC_BELLOVL:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.bellovl =
+ IsDlgButtonChecked(hwnd, IDC_BELLOVL);
+ break;
+ case IDC_BELLOVLN:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemInt(hwnd, IDC_BELLOVLN, &cfg.bellovl_n);
+ break;
+ case IDC_BELLOVLT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemFlt(hwnd, IDC_BELLOVLT, &cfg.bellovl_t,
+ 1000);
+ break;
+ case IDC_BELLOVLS:
+ if (HIWORD(wParam) == EN_CHANGE)
+ MyGetDlgItemFlt(hwnd, IDC_BELLOVLS, &cfg.bellovl_s,
+ 1000);
+ break;
+ case IDC_BLINKTEXT:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.blinktext =
+ IsDlgButtonChecked(hwnd, IDC_BLINKTEXT);
+ break;
+ case IDC_BCE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.bce = IsDlgButtonChecked(hwnd, IDC_BCE);
+ break;
+ case IDC_WINNAME:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.win_name_always =
+ IsDlgButtonChecked(hwnd, IDC_WINNAME);
+ break;
+ case IDC_HIDEMOUSE:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.hide_mouseptr =
+ IsDlgButtonChecked(hwnd, IDC_HIDEMOUSE);
+ break;
+ case IDC_SUNKENEDGE:
+ 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.cursor_type = 0;
+ break;
+ case IDC_CURUNDER:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.cursor_type = 1;
+ break;
+ case IDC_CURVERT:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.cursor_type = 2;
+ break;
+ case IDC_BLINKCUR:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.blink_cur =
+ IsDlgButtonChecked(hwnd, IDC_BLINKCUR);
+ break;
+ case IDC_SCROLLBAR:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.scrollbar =
+ IsDlgButtonChecked(hwnd, IDC_SCROLLBAR);
+ break;
+ case IDC_SCROLLBARFULLSCREEN:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ 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_WINEDIT, cfg.wintitle,
+ sizeof(cfg.wintitle) - 1);
+ break;
+ case IDC_COEALWAYS:
+ case IDC_COENEVER:
+ case IDC_COENORMAL:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ cfg.close_on_exit =
+ IsDlgButtonChecked(hwnd,
+ IDC_COEALWAYS) ? COE_ALWAYS :
+ IsDlgButtonChecked(hwnd,
+ IDC_COENEVER) ? COE_NEVER :
+ COE_NORMAL;
+ }
+ break;
+ case IDC_CLOSEWARN:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.warn_on_close =
+ IsDlgButtonChecked(hwnd, IDC_CLOSEWARN);
+ break;
+ case IDC_TTEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_TTEDIT, cfg.termtype,
+ sizeof(cfg.termtype) - 1);
+ break;
+ case IDC_LGFEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_LGFEDIT, cfg.logfilename,
+ sizeof(cfg.logfilename) - 1);
+ break;
+ case IDC_LGFBUTTON:
+ memset(&of, 0, sizeof(of));
+#ifdef OPENFILENAME_SIZE_VERSION_400
+ of.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+#else
+ of.lStructSize = sizeof(of);
+#endif
+ of.hwndOwner = hwnd;
+ of.lpstrFilter = "All Files\0*\0\0\0";
+ of.lpstrCustomFilter = NULL;
+ of.nFilterIndex = 1;
+ of.lpstrFile = filename;
+ strcpy(filename, cfg.logfilename);
+ of.nMaxFile = sizeof(filename);
+ of.lpstrFileTitle = NULL;
+ of.lpstrInitialDir = NULL;
+ of.lpstrTitle = "Select session log file";
+ of.Flags = 0;
+ if (GetSaveFileName(&of)) {
+ strcpy(cfg.logfilename, filename);
+ SetDlgItemText(hwnd, IDC_LGFEDIT, cfg.logfilename);
+ }
+ break;
+ case IDC_LSTATOFF:
+ case IDC_LSTATASCII:
+ case IDC_LSTATRAW:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATOFF))
+ cfg.logtype = 0;
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATASCII))
+ cfg.logtype = 1;
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATRAW))
+ cfg.logtype = 2;
+ }
+ break;
+ case IDC_LSTATXASK:
+ case IDC_LSTATXAPN:
+ case IDC_LSTATXOVR:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATXASK))
+ cfg.logxfovr = LGXF_ASK;
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATXAPN))
+ cfg.logxfovr = LGXF_APN;
+ if (IsDlgButtonChecked(hwnd, IDC_LSTATXOVR))
+ cfg.logxfovr = LGXF_OVR;
+ }
+ break;
+ case IDC_TSEDIT:
+ case IDC_R_TSEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, LOWORD(wParam), cfg.termspeed,
+ sizeof(cfg.termspeed) - 1);
+ break;
+ case IDC_LOGEDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_LOGEDIT, cfg.username,
+ sizeof(cfg.username) - 1);
+ break;
+ case IDC_RLLUSEREDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ GetDlgItemText(hwnd, IDC_RLLUSEREDIT,
+ cfg.localusername,
+ sizeof(cfg.localusername) - 1);
+ break;
+ case IDC_EMBSD:
+ case IDC_EMRFC:
+ cfg.rfc_environ = IsDlgButtonChecked(hwnd, IDC_EMRFC);
+ break;
+ case IDC_TPASSIVE:
+ case IDC_TACTIVE:
+ cfg.passive_telnet =
+ IsDlgButtonChecked(hwnd, IDC_TPASSIVE);
+ break;
+ case IDC_ENVADD:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED) {
+ char str[sizeof(cfg.environmt)];
+ char *p;
+ GetDlgItemText(hwnd, IDC_VAREDIT, str,
+ sizeof(str) - 1);
+ if (!*str) {
+ MessageBeep(0);
+ break;
+ }
+ p = str + strlen(str);
+ *p++ = '\t';
+ GetDlgItemText(hwnd, IDC_VALEDIT, p,
+ sizeof(str) - 1 - (p - str));
+ if (!*p) {
+ MessageBeep(0);
+ break;
+ }
+ p = cfg.environmt;
+ while (*p) {
+ while (*p)
+ p++;
+ p++;
+ }
+ if ((p - cfg.environmt) + strlen(str) + 2 <
+ sizeof(cfg.environmt)) {
+ strcpy(p, str);
+ p[strlen(str) + 1] = '\0';
+ SendDlgItemMessage(hwnd, IDC_ENVLIST, LB_ADDSTRING,
+ 0, (LPARAM) str);
+ SetDlgItemText(hwnd, IDC_VAREDIT, "");
+ SetDlgItemText(hwnd, IDC_VALEDIT, "");
+ } else {
+ MessageBox(hwnd, "Environment too big",
+ "PuTTY Error", MB_OK | MB_ICONERROR);
+ }
+ }
+ break;
+ case IDC_ENVREMOVE:
+ if (HIWORD(wParam) != BN_CLICKED &&
+ HIWORD(wParam) != BN_DOUBLECLICKED) break;
+ i =
+ SendDlgItemMessage(hwnd, IDC_ENVLIST, LB_GETCURSEL, 0,
+ 0);
+ if (i == LB_ERR)
+ MessageBeep(0);
+ else {
+ char *p, *q;
+
+ SendDlgItemMessage(hwnd, IDC_ENVLIST, LB_DELETESTRING,
+ i, 0);
+ p = cfg.environmt;
+ while (i > 0) {
+ if (!*p)
+ goto disaster;
+ while (*p)
+ p++;
+ p++;
+ i--;
+ }
+ q = p;