- 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, 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);
- }
- break;
- case IDC_SESSLIST:
- case IDC_SESSLOAD:
- if (LOWORD(wParam) == IDC_SESSLOAD &&
- HIWORD(wParam) != BN_CLICKED &&
- HIWORD(wParam) != BN_DOUBLECLICKED)
- break;
- if (LOWORD(wParam) == IDC_SESSLIST &&
- HIWORD(wParam) != LBN_DBLCLK)
- break;
- {
- int n = SendDlgItemMessage (hwnd, IDC_SESSLIST,
- LB_GETCURSEL, 0, 0);
- if (n == LB_ERR) {
- MessageBeep(0);
- break;
- }
- load_settings (sessions[n],
- !!strcmp(sessions[n], "Default Settings"),
- &cfg);
- SetDlgItemText (hwnd, IDC_HOST, cfg.host);
- SetDlgItemInt (hwnd, IDC_PORT, cfg.port, FALSE);
- CheckRadioButton (hwnd, IDC_PROTRAW, IDC_PROTSSH,
- (cfg.protocol==PROT_SSH ? IDC_PROTSSH :
- cfg.protocol==PROT_TELNET ? IDC_PROTTELNET : IDC_PROTRAW));
- CheckDlgButton (hwnd, IDC_CLOSEEXIT, cfg.close_on_exit);
- CheckDlgButton (hwnd, IDC_CLOSEWARN, cfg.warn_on_close);
- SendDlgItemMessage (hwnd, IDC_SESSLIST, LB_SETCURSEL,
- (WPARAM) -1, 0);
- }
- if (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, 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);
- }
- }
- }
- return GeneralPanelProc (hwnd, msg, wParam, lParam);
-}
-
-static int CALLBACK KeyboardProc (HWND hwnd, UINT msg,
- WPARAM wParam, LPARAM lParam) {
- struct ctlpos cp;
- enum { controlstartvalue = 1000,
- IDC_DELSTATIC,
- IDC_DEL008,
- IDC_DEL127,
- IDC_HOMESTATIC,
- IDC_HOMETILDE,
- IDC_HOMERXVT,
- IDC_FUNCSTATIC,
- IDC_FUNCTILDE,
- IDC_FUNCLINUX,
- IDC_FUNCXTERM,
- IDC_KPSTATIC,
- IDC_KPNORMAL,
- IDC_KPAPPLIC,
- IDC_KPNH,
- IDC_CURSTATIC,
- IDC_CURNORMAL,
- IDC_CURAPPLIC,
- IDC_ALTF4,
- IDC_ALTSPACE,
- IDC_LDISCTERM,
- IDC_SCROLLKEY
- };
-
- switch (msg) {
- case WM_INITDIALOG:
- /* Accelerators used: [aco] 4?ehiklmnprsuvxy */
- ctlposinit(&cp, hwnd);
- radioline(&cp, "Action of Backspace:", IDC_DELSTATIC, 2,
- "Control-&H", IDC_DEL008,
- "Control-&? (127)", IDC_DEL127, NULL);
- radioline(&cp, "Action of Home and End:", IDC_HOMESTATIC, 2,
- "&Standard", IDC_HOMETILDE,
- "&rxvt", IDC_HOMERXVT, NULL);
- radioline(&cp, "Function key and keypad layout:", IDC_FUNCSTATIC, 3,
- "&VT400", IDC_FUNCTILDE,
- "&Linux", IDC_FUNCLINUX,
- "&Xterm R6", IDC_FUNCXTERM, NULL);
- radioline(&cp, "Initial state of cursor keys:", IDC_CURSTATIC, 2,
- "&Normal", IDC_CURNORMAL,
- "A&pplication", IDC_CURAPPLIC, NULL);
- radioline(&cp, "Initial state of numeric keypad:", IDC_KPSTATIC, 3,
- "Nor&mal", IDC_KPNORMAL,
- "Appl&ication", IDC_KPAPPLIC,
- "N&etHack", IDC_KPNH, NULL);
- checkbox(&cp, "ALT-F&4 is special (closes window)", IDC_ALTF4);
- checkbox(&cp, "ALT-Space is special (S&ystem menu)", IDC_ALTSPACE);
- checkbox(&cp, "&Use local terminal line discipline", IDC_LDISCTERM);
- checkbox(&cp, "Reset scrollback on &keypress", IDC_SCROLLKEY);
-
- CheckRadioButton (hwnd, IDC_DEL008, IDC_DEL127,
- cfg.bksp_is_delete ? IDC_DEL127 : IDC_DEL008);
- CheckRadioButton (hwnd, IDC_HOMETILDE, IDC_HOMERXVT,
- cfg.rxvt_homeend ? IDC_HOMERXVT : IDC_HOMETILDE);
- CheckRadioButton (hwnd, IDC_FUNCTILDE, IDC_FUNCXTERM,
- cfg.funky_type ?
- (cfg.funky_type==2 ? IDC_FUNCXTERM
- : IDC_FUNCLINUX )
- : IDC_FUNCTILDE);
- CheckRadioButton (hwnd, IDC_CURNORMAL, IDC_CURAPPLIC,
- cfg.app_cursor ? IDC_CURAPPLIC : IDC_CURNORMAL);
- CheckRadioButton (hwnd, IDC_KPNORMAL, IDC_KPNH,
- cfg.nethack_keypad ? IDC_KPNH :
- cfg.app_keypad ? IDC_KPAPPLIC : IDC_KPNORMAL);
- CheckDlgButton (hwnd, IDC_ALTF4, cfg.alt_f4);
- CheckDlgButton (hwnd, IDC_ALTSPACE, cfg.alt_space);
- CheckDlgButton (hwnd, IDC_LDISCTERM, cfg.ldisc_term);
- CheckDlgButton (hwnd, IDC_SCROLLKEY, cfg.scroll_on_key);
- break;
- case WM_COMMAND:
- if (HIWORD(wParam) == BN_CLICKED ||
- HIWORD(wParam) == BN_DOUBLECLICKED)
- switch (LOWORD(wParam)) {
- case IDC_DEL008:
- case IDC_DEL127:
- cfg.bksp_is_delete = IsDlgButtonChecked (hwnd, IDC_DEL127);
- break;
- case IDC_HOMETILDE:
- case IDC_HOMERXVT:
- cfg.rxvt_homeend = IsDlgButtonChecked (hwnd, IDC_HOMERXVT);
- break;
- case IDC_FUNCXTERM:
- cfg.funky_type = 2;
- break;
- case IDC_FUNCTILDE:
- case IDC_FUNCLINUX:
- cfg.funky_type = IsDlgButtonChecked (hwnd, IDC_FUNCLINUX);
- break;
- case IDC_KPNORMAL:
- case IDC_KPAPPLIC:
- cfg.app_keypad = IsDlgButtonChecked (hwnd, IDC_KPAPPLIC);
- cfg.nethack_keypad = FALSE;
- break;
- case IDC_KPNH:
- cfg.app_keypad = FALSE;
- cfg.nethack_keypad = TRUE;
- break;
- case IDC_CURNORMAL:
- case IDC_CURAPPLIC:
- cfg.app_cursor = IsDlgButtonChecked (hwnd, IDC_CURAPPLIC);
- 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_LDISCTERM:
- if (HIWORD(wParam) == BN_CLICKED ||
- HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.ldisc_term = IsDlgButtonChecked (hwnd, IDC_LDISCTERM);
- break;
- case IDC_SCROLLKEY:
- if (HIWORD(wParam) == BN_CLICKED ||
- HIWORD(wParam) == BN_DOUBLECLICKED)
- cfg.scroll_on_key = IsDlgButtonChecked (hwnd, IDC_SCROLLKEY);
- break;
- }
- }
- return GeneralPanelProc (hwnd, msg, wParam, lParam);
-}