Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1465 lines
41 KiB

/* File: D:\WACKER\emu\emudlg.c (Created: 14-Feb-1994)
*
* Copyright 1991, 1998 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 21 $
* $Date: 5/15/02 4:43p $
*/
#include <windows.h>
#pragma hdrstop
#include <commctrl.h>
#include <tdll\stdtyp.h>
#include <tdll\tdll.h>
#include <tdll\assert.h>
#include <tdll\session.h>
#include <tdll\statusbr.h>
#include <tdll\misc.h>
#include <term\res.h>
#include <tdll\globals.h>
#include <tdll\load_res.h>
#include <tdll\htchar.h>
#include <tdll\hlptable.h>
#include "emu.h"
#include "emuid.h"
#include "emudlgs.h"
#include <tdll\term.hh> // This must be after emu.h
// Static function prototypes...
//
STATIC_FUNC void emudlgInitCursorSettings (HWND hDlg,
PSTEMUSET pstEmuSettings,
INT ID_UNDERLINE,
INT ID_BLOCK,
INT ID_BLINK);
#if DEADWOOD
STATIC_FUNC void emudlgInitCharSetSetting(HWND hDlg,
PSTEMUSET pstEmuSettings,
int nCharSetTableID,
int nDefaultCharSetID);
STATIC_FUNC BOOL emudlgFindCharSetName(HWND hDlg,
BYTE *pbCharSetTable,
int nCharSetID,
LPTSTR *ppszCharSetName,
BOOL fTellDlg);
#endif // DEADWOOD
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
STATIC_FUNC void emudlgInitRowsCols(HWND hDlg, PSTEMUSET pstEmuSettings);
STATIC_FUNC void emudlgGetRowColSettings(HWND hDlg, PSTEMUSET pstEmuSettings);
STATIC_FUNC void emudlgCreateUpDownControl(HWND hDlg,
PSTEMUSET pstEmuSettings);
STATIC_FUNC int emudlgValidateEntryFieldSetting(HWND hDlg,
int nIDC,
int nMinVal,
int nMaxVal);
#endif
// Defines...
//
#define IDC_KEYPAD_MODE 104
#define IDC_CURSOR_MODE 106
#define IDC_132_COLUMN 107
#define IDC_TF_CHARACTER_SET 109
#define IDC_CHARACTER_SET 110
#define IDC_BLOCK_CURSOR 112
#define IDC_UNDERLINE_CURSOR 113
#define IDC_BLINK_CURSOR 114
#define IDC_DESTRUCTIVE_BKSP 116
#define IDC_ALT_MODE 117
#define IDC_SEND_POUND_SYMBOL 122
#define IDC_HIDE_CURSOR 119
#define IDC_GR_CURSOR 111
#define IDC_GR_TERMINAL_MODES 118
#define IDC_USE_8_BIT_CODES 120
#define IDC_ALLOW_USERDEFINED_KEYS 121
#define IDC_GR_SCREEN 130
#define IDC_TF_ROWS 131
#define IDC_NUMBER_OF_ROWS 132
#define IDC_TF_COLUMNS 133
#define IDC_NUMBER_OF_COLS 134
#define IDC_PRINT_RAW 135
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuSettingsDlg
*
* DESCRIPTION:
* Decide which emulator settings dialog to call.
*
* ARGUMENTS:
* hSession - the session handle.
* nEmuId - emulator id.
* pstEmuSettings - settings structure to fill in. It should be initialized
* up above.
*
* RETURNS:
* fResult - return value from the DoDialog().
*
*/
BOOL emuSettingsDlg(const HSESSION hSession, const HWND hwndParent,
const int nEmuId, PSTEMUSET pstEmuSettings)
{
BOOL fResult = FALSE;
assert(hSession && hwndParent);
switch (nEmuId)
{
case EMU_ANSIW:
case EMU_ANSI:
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_ANSI_SETTINGS),
hwndParent,
(DLGPROC)emuANSI_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
case EMU_TTY:
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_TTY_SETTINGS),
hwndParent,
(DLGPROC)emuTTY_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
case EMU_VT52:
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_VT52_SETTINGS),
hwndParent,
(DLGPROC)emuVT52_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
case EMU_VT100:
case EMU_VT100J:
#if defined(INCL_VTUTF8)
case EMU_VTUTF8:
#endif
#if defined(INCL_VT100PLUS)
case EMU_VT100PLUS:
#endif
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_VT100_SETTINGS),
hwndParent,
(DLGPROC)emuVT100_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
#if defined(INCL_VT220) || defined(INCL_VT320)
#if defined(INCL_VT220)
case EMU_VT220:
#endif // defined(INCL_VT320)
#if defined(INCL_VT320)
case EMU_VT320:
#endif // defined(INCL_VT320)
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_VT220_SETTINGS),
hwndParent,
(DLGPROC)emuVT220_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
#endif // defined(INCL_VT220) || defined(INCL_VT320)
case EMU_MINI:
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_MINITEL_SETTINGS),
hwndParent,
(DLGPROC)emuMinitel_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
case EMU_VIEW:
fResult = (BOOL)DoDialog(glblQueryDllHinst(),
MAKEINTRESOURCE(IDD_VIEWDATA_SETTINGS),
hwndParent,
(DLGPROC)emuViewdata_SettingsDlgProc,
(LPARAM)pstEmuSettings);
break;
default:
break;
}
return fResult;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuANSI_SettingsDlgProc
*
* DESCRIPTION:
* ANSI Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuANSI_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] =
{
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuTTY_SettingsDlgProc
*
* DESCRIPTION:
* TTY Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuTTY_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] = {IDC_DESTRUCTIVE_BKSP, IDH_TERM_EMUSET_DESTRUCTIVE,
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Destructive Backspace ------------- */
SendDlgItemMessage(hDlg, IDC_DESTRUCTIVE_BKSP, BM_SETCHECK,
(unsigned int)pstEmuSettings->fDestructiveBk, 0);
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Destructive Backspace ------------- */
pstEmuSettings->fDestructiveBk =
(int)(IsDlgButtonChecked(hDlg, IDC_DESTRUCTIVE_BKSP) == BST_CHECKED);
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuVT52_SettingsDlgProc
*
* DESCRIPTION:
* VT52 Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuVT52_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] = {IDC_ALT_MODE, IDH_TERM_EMUSET_ALTMODE,
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Alternate keypad mode ------------- */
SendDlgItemMessage(hDlg, IDC_ALT_MODE, BM_SETCHECK,
(unsigned int)pstEmuSettings->fAltKeypadMode, 0);
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Alternate keypad mode ------------- */
pstEmuSettings->fAltKeypadMode =
(int)(IsDlgButtonChecked(hDlg, IDC_ALT_MODE) == BST_CHECKED);
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuVT100_SettingsDlgProc
*
* DESCRIPTION:
* VT100 Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuVT100_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
int nIndex;
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] = {IDC_KEYPAD_MODE, IDH_TERM_EMUSET_KEYPADMODE,
IDC_CURSOR_MODE, IDH_TERM_EMUSET_CURSORMODE,
IDC_132_COLUMN, IDH_TERM_EMUSET_132COLUMNS,
IDC_GR_TERMINAL_MODES,IDH_TERM_EMUSET_MODES,
#if DEADWOOD
IDC_CHARACTER_SET, IDH_TERM_EMUSET_CHARSETS,
IDC_TF_CHARACTER_SET, IDH_TERM_EMUSET_CHARSETS,
#endif // DEADWOOD
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
IDC_GR_SCREEN, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_TF_ROWS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_NUMBER_OF_ROWS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_TF_COLUMNS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_NUMBER_OF_COLS, IDH_TERM_EMUSET_ROWSANDCOLS,
#endif // defined(INCL_TERMINAL_SIZE_AND_COLORS)
IDC_USE_8_BIT_CODES, IDH_TERM_EMUSET_8BITCODES,
IDC_ALLOW_USERDEFINED_KEYS,IDH_TERM_EMUSET_USERDEFKEYS,
IDC_PRINT_RAW, IDH_TERM_EMUSET_PRINTRAW,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Keypad application mode ------------- */
SendDlgItemMessage(hDlg, IDC_KEYPAD_MODE, BM_SETCHECK,
(unsigned int)pstEmuSettings->fKeypadAppMode, 0);
/* -------------- Cursor keypad mode ------------- */
SendDlgItemMessage(hDlg, IDC_CURSOR_MODE, BM_SETCHECK,
(unsigned int)pstEmuSettings->fCursorKeypadMode, 0);
#if !defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- 132 Column Mode ------------- */
SendDlgItemMessage(hDlg, IDC_132_COLUMN, BM_SETCHECK,
(unsigned int)pstEmuSettings->f132Columns, 0);
#endif
#if defined(INCL_PRINT_PASSTHROUGH)
/* -------------- Host Print Mode ------------- */
// mpt;04-22-00 added interface to control host-controlled printing
SendDlgItemMessage(hDlg, IDC_PRINT_RAW, BM_SETCHECK,
(unsigned int)pstEmuSettings->fPrintRaw, 0);
#endif // INCL_PRINT_PASSTHROUGH
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
/* -------------- VT100 Character Sets ------------- */
#if DEADWOOD
emudlgInitCharSetSetting(hDlg, pstEmuSettings,
IDT_EMU_VT100_CHAR_SETS, EMU_CHARSET_ASCII);
#endif // DEADWOOD
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Keypad Application mode ------------- */
pstEmuSettings->fKeypadAppMode =
(int)(IsDlgButtonChecked(hDlg, IDC_KEYPAD_MODE) == BST_CHECKED);
/* -------------- Cursor Keypad Mode ------------- */
pstEmuSettings->fCursorKeypadMode =
(int)(IsDlgButtonChecked(hDlg, IDC_CURSOR_MODE) == BST_CHECKED);
#if !defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- 132 Column Mode ------------- */
pstEmuSettings->f132Columns =
(int)(IsDlgButtonChecked(hDlg, IDC_132_COLUMN) == BST_CHECKED);
#endif
#if defined(INCL_PRINT_PASSTHROUGH)
/* -------------- Host Print Mode ------------- */
//mpt:04-22-00
pstEmuSettings->fPrintRaw =
(int)(IsDlgButtonChecked(hDlg, IDC_PRINT_RAW) == BST_CHECKED);
#endif // INCL_PRINT_PASSTHROUGH
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
/* -------------- VT100 Character Set ------------- */
nIndex = (int)SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_GETCURSEL, 0, 0);
assert(nIndex != CB_ERR);
//JMH 01-09-97 Get the nCharacterSet value associated with this entry
//
pstEmuSettings->nCharacterSet =
(int)SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_GETITEMDATA,
(WPARAM) nIndex, (LPARAM) 0);
assert(pstEmuSettings->nCharacterSet != CB_ERR);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
#if defined(INCL_VT220)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuVT220_SettingsDlgProc
*
* DESCRIPTION:
* VT220 Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuVT220_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
int nIndex;
static DWORD aHlpTable[] = {IDC_KEYPAD_MODE, IDH_TERM_EMUSET_KEYPADMODE,
IDC_CURSOR_MODE, IDH_TERM_EMUSET_CURSORMODE,
IDC_132_COLUMN, IDH_TERM_EMUSET_132COLUMNS,
IDC_GR_TERMINAL_MODES,IDH_TERM_EMUSET_MODES,
#if DEADWOOD
IDC_CHARACTER_SET, IDH_TERM_EMUSET_CHARSETS,
IDC_TF_CHARACTER_SET, IDH_TERM_EMUSET_CHARSETS,
#endif // DEADWOOD
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
IDC_GR_SCREEN, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_TF_ROWS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_NUMBER_OF_ROWS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_TF_COLUMNS, IDH_TERM_EMUSET_ROWSANDCOLS,
IDC_NUMBER_OF_COLS, IDH_TERM_EMUSET_ROWSANDCOLS,
#endif // defined(INCL_TERMINAL_SIZE_AND_COLORS)
IDC_USE_8_BIT_CODES, IDH_TERM_EMUSET_8BITCODES,
IDC_ALLOW_USERDEFINED_KEYS,IDH_TERM_EMUSET_USERDEFKEYS,
IDC_PRINT_RAW, IDH_TERM_EMUSET_PRINTRAW,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Keypad application mode ------------- */
SendDlgItemMessage(hDlg, IDC_KEYPAD_MODE, BM_SETCHECK,
(unsigned int)pstEmuSettings->fKeypadAppMode, 0);
/* -------------- Cursor keypad mode ------------- */
SendDlgItemMessage(hDlg, IDC_CURSOR_MODE, BM_SETCHECK,
(unsigned int)pstEmuSettings->fCursorKeypadMode, 0);
#if !defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- 132 Column Mode ------------- */
SendDlgItemMessage(hDlg, IDC_132_COLUMN, BM_SETCHECK,
(unsigned int)pstEmuSettings->f132Columns, 0);
#endif
#if defined(INCL_PRINT_PASSTHROUGH)
/* -------------- Host Print Mode ------------- */
SendDlgItemMessage(hDlg, IDC_PRINT_RAW, BM_SETCHECK,
(unsigned int)pstEmuSettings->fPrintRaw, 0);
#endif // INCL_PRINT_PASSTHROUGH
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
/* -------------- 8 bit codes mode ------------- */
SendDlgItemMessage(hDlg, IDC_USE_8_BIT_CODES, BM_SETCHECK,
(unsigned int)pstEmuSettings->fUse8BitCodes, 0);
/* -------------- User defined keys ------------- */
SendDlgItemMessage(hDlg, IDC_ALLOW_USERDEFINED_KEYS, BM_SETCHECK,
(unsigned int)pstEmuSettings->fAllowUserKeys, 0);
/* -------------- VT220 Character Sets ------------- */
#if DEADWOOD
emudlgInitCharSetSetting(hDlg, pstEmuSettings,
IDT_EMU_VT220_CHAR_SETS, EMU_CHARSET_MULTINATIONAL);
#endif // DEADWOOD
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Keypad Application mode ------------- */
pstEmuSettings->fKeypadAppMode =
(int)(IsDlgButtonChecked(hDlg, IDC_KEYPAD_MODE) == BST_CHECKED);
/* -------------- Cursor Keypad Mode ------------- */
pstEmuSettings->fCursorKeypadMode =
(int)(IsDlgButtonChecked(hDlg, IDC_CURSOR_MODE) == BST_CHECKED);
#if !defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- 132 Column Mode ------------- */
pstEmuSettings->f132Columns =
(int)(IsDlgButtonChecked(hDlg, IDC_132_COLUMN) == BST_CHECKED);
#endif
#if defined(INCL_PRINT_PASSTHROUGH)
/* -------------- Host Print Mode ------------- */
pstEmuSettings->fPrintRaw =
(int)(IsDlgButtonChecked(hDlg, IDC_PRINT_RAW) == BST_CHECKED);
#endif // INCL_PRINT_PASSTHROUGH
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
/* -------------- 8 bit codes mode ------------- */
pstEmuSettings->fUse8BitCodes =
(int)(IsDlgButtonChecked(hDlg, IDC_USE_8_BIT_CODES) == BST_CHECKED);
/* -------------- User defined keys ------------- */
pstEmuSettings->fAllowUserKeys =
(int)(IsDlgButtonChecked(hDlg, IDC_ALLOW_USERDEFINED_KEYS) == BST_CHECKED);
/* -------------- VT220 Character Set ------------- */
nIndex = SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_GETCURSEL, 0, 0);
assert(nIndex != CB_ERR);
//JMH 01-09-97 Get the nCharacterSet value associated with this entry
//
pstEmuSettings->nCharacterSet =
SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_GETITEMDATA,
(WPARAM) nIndex, (LPARAM) 0);
assert(pstEmuSettings->nCharacterSet != CB_ERR);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
#endif
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuMinitel_SettingsDlgProc
*
* DESCRIPTION:
* TTY Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuMinitel_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] = {IDC_DESTRUCTIVE_BKSP, IDH_TERM_EMUSET_DESTRUCTIVE,
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0, 0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
/* -------------- Cursor characteristics ------------- */
emudlgInitCursorSettings(hDlg, pstEmuSettings, IDC_UNDERLINE_CURSOR,
IDC_BLOCK_CURSOR, IDC_BLINK_CURSOR);
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
/* -------------- Cursor type ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_BLOCK_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_BLOCK : EMU_CURSOR_LINE;
/* -------------- Cursor Blink ------------- */
pstEmuSettings->fCursorBlink =
(int)(IsDlgButtonChecked(hDlg, IDC_BLINK_CURSOR) == BST_CHECKED);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emuViewdata_SettingsDlgProc
*
* DESCRIPTION:
* TTY Settings dialog proc.
*
* ARGUMENTS:
* Standard window proc parameters.
*
* RETURNS:
* Standerd return value.
*
*/
INT_PTR CALLBACK emuViewdata_SettingsDlgProc(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
{
PSTEMUSET pstEmuSettings;
static DWORD aHlpTable[] = {IDC_DESTRUCTIVE_BKSP, IDH_TERM_EMUSET_DESTRUCTIVE,
IDC_BLOCK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_UNDERLINE_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_BLINK_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_GR_CURSOR, IDH_TERM_EMUSET_CURSOR,
IDC_SEND_POUND_SYMBOL, IDH_TERM_SETTING_ENTER,
IDC_HIDE_CURSOR, IDH_TERM_SETTING_HIDE_CURSOR,
IDCANCEL, IDH_CANCEL,
IDOK, IDH_OK,
0,0};
switch (wMsg)
{
case WM_INITDIALOG:
pstEmuSettings = (PSTEMUSET)lPar;
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)pstEmuSettings);
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgInitRowsCols(hDlg, pstEmuSettings);
#endif
/* -------------- Hide cursor ------------- */
SendDlgItemMessage(hDlg, IDC_HIDE_CURSOR, BM_SETCHECK,
(pstEmuSettings->nCursorType == EMU_CURSOR_NONE) ? 1 : 0,
0);
/* -------------- Enter key sends # ------------- */
SendDlgItemMessage(hDlg, IDC_SEND_POUND_SYMBOL, BM_SETCHECK,
(pstEmuSettings->fLbSymbolOnEnter == TRUE) ? 1 : 0, 0);
break;
case WM_CONTEXTMENU:
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDOK:
pstEmuSettings = (PSTEMUSET)GetWindowLongPtr(hDlg, GWLP_USERDATA);
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/* -------------- Screen rows and columns ------------- */
emudlgGetRowColSettings(hDlg, pstEmuSettings);
#endif
/* -------------- Hide cursor ------------- */
pstEmuSettings->nCursorType =
(int)(IsDlgButtonChecked(hDlg, IDC_HIDE_CURSOR) == BST_CHECKED) ?
EMU_CURSOR_NONE : EMU_CURSOR_LINE;
/* -------------- Enter key sends # ------------- */
pstEmuSettings->fLbSymbolOnEnter =
(int)(IsDlgButtonChecked(hDlg, IDC_SEND_POUND_SYMBOL) == BST_CHECKED);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emudlgInitCursorSettings
*
* DESCRIPTION:
* Initialize cursor settings.
*
* ARGUMENTS:
* hDlg - dialog window.
* pstEmuSettings - pointer to the emulator settings structure.
*
* RETURNS:
* void.
*
*/
STATIC_FUNC void emudlgInitCursorSettings(HWND hDlg,
PSTEMUSET pstEmuSettings,
INT ID_UNDERLINE,
INT ID_BLOCK,
INT ID_BLINK)
{
int i;
switch (pstEmuSettings->nCursorType)
{
case EMU_CURSOR_LINE: i = ID_UNDERLINE; break;
case EMU_CURSOR_BLOCK: i = ID_BLOCK; break;
default: i = ID_UNDERLINE; break;
}
SendDlgItemMessage(hDlg, i, BM_SETCHECK, 1, 0);
SendDlgItemMessage(hDlg, ID_BLINK, BM_SETCHECK,
(unsigned int)pstEmuSettings->fCursorBlink, 0);
if (IsTerminalServicesEnabled())
{
EnableWindow(GetDlgItem(hDlg, ID_BLINK), FALSE);
}
return;
}
#if DEADWOOD
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emudlgInitCharSetSetting
*
* DESCRIPTION:
* Initialize the character set setting.
*
* ARGUMENTS:
* hDlg - dialog window.
* pstEmuSettings - pointer to the emulator settings structure.
*
* RETURNS:
* void.
*
* AUTHOR: Bob Everett - 3 Jun 98
*/
STATIC_FUNC void emudlgInitCharSetSetting(HWND hDlg,
PSTEMUSET pstEmuSettings,
int nCharSetTableID,
int nDefaultCharSetID)
{
BOOL fResult = TRUE;
DWORD nLen;
int nIndex;
BYTE *pb, *pbSel;
if (resLoadDataBlock(glblQueryDllHinst(), nCharSetTableID,
(LPVOID *)&pb, &nLen))
{
assert(FALSE);
}
else
{
if (!emudlgFindCharSetName(hDlg, pb, pstEmuSettings->nCharacterSet,
(LPTSTR *)&pbSel, TRUE))
{
// Couldn't find the current character set in the table of
// characters sets. This happens when switching from one
// terminal type to another that doesn't contain the char
// set. Use the default character set.
pstEmuSettings->nCharacterSet = nDefaultCharSetID;
if (!emudlgFindCharSetName(hDlg, pb, pstEmuSettings->nCharacterSet,
(LPTSTR *)&pbSel, FALSE))
{
// We've got problems.
fResult = FALSE;
assert(FALSE);
}
}
if (fResult)
{
//JMH 01-09-97 Now select the string corresponding to
// nCharacterSet.
nIndex = (int)SendDlgItemMessage(hDlg, IDC_CHARACTER_SET,
CB_SELECTSTRING, 0, (LPARAM)(LPTSTR)pbSel);
assert(nIndex != CB_ERR);
}
}
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* emudlgFindCharSetName
*
* DESCRIPTION:
* Finds the appropriate character set settings.
*
* ARGUMENTS:
* hDlg - dialog window handle
* pbCharSetTable - address of the emu's table of character sets
* pszCharSetName - address at which to put the char set name
* fTellDlg - TRUE if the dialog should be made aware of the table
*
* RETURNS:
* TRUE if successful, FALSE if not.
*
* AUTHOR: Bob Everett - 3 Jun 98
*/
STATIC_FUNC BOOL emudlgFindCharSetName(HWND hDlg,
BYTE *pbCharSetTable,
int nCharSetID,
LPTSTR *ppszCharSetName,
BOOL fTellDlg)
{
BOOL fRetVal = FALSE;
int nCnt, nLen, nEmuCount, nIndex, nCharSet;
BYTE *pb = pbCharSetTable;
nEmuCount = *(RCDATA_TYPE *)pb;
pb += sizeof(RCDATA_TYPE);
for (nCnt = 0 ; nCnt < nEmuCount; nCnt++)
{
nLen = StrCharGetByteCount((LPTSTR)pb) + (int)sizeof(BYTE);
if (fTellDlg)
{
nIndex = (int)SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_ADDSTRING, 0,
(LPARAM)(LPTSTR)pb);
assert(nIndex != CB_ERR);
}
#if FALSE // DEADWOOD:rde 10 Mar 98
//JMH 01-09-97 Because this list gets sorted, we have to store the
// table index with each entry, or else the selection index we get
// when OK is pressed won't mean much.
//
nIndex = SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_SETITEMDATA,
(WPARAM) nIndex, (LPARAM) i);
assert(nIndex != CB_ERR);
#endif
// Save the real char set id with the string. rde 10 Mar 98
nCharSet = *((RCDATA_TYPE *)(pb + nLen));
if (fTellDlg)
{
nIndex = (int)SendDlgItemMessage(hDlg, IDC_CHARACTER_SET, CB_SETITEMDATA,
(WPARAM)nIndex, (LPARAM)nCharSet);
assert(nIndex != CB_ERR);
}
// Must match the char set id to nCharacterSet, not the order in
// which they're listed in the resource data block. rde 10 Mar 98
//if (i == pstEmuSettings->nCharacterSet)
if (nCharSet == nCharSetID)
{
//JMH 01-09-97 Store a pointer to the string corresponding to
// nCharacterSet, so we can select the appropriate entry after
// they've all been sorted.
//
*ppszCharSetName = (LPTSTR)pb;
fRetVal = TRUE;
}
pb += (nLen + (int)sizeof(RCDATA_TYPE));
}
return fRetVal;
}
#endif // DEADWOOD
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* emudlgInitRowsCols
*
* DESCRIPTION:
* Sets up the row and column fields.
*
* ARGUMENTS:
* hDlg - edit control window.
* pstEmuSettings - address of emulator settings structure.
*
* RETURNS:
* void.
*
* AUTHOR: Bob Everett - 22 Jun 1998
*/
STATIC_FUNC void emudlgInitRowsCols(HWND hDlg, PSTEMUSET pstEmuSettings)
{
TCHAR achString[20];
TCHAR achFormat[20];
//
// Since the number of columns can only be numeric and has a size
// between MIN_EMUROWS(10) and MAX_EMUROWS(50), limit to 2 characters.
//
SendDlgItemMessage(hDlg, IDC_NUMBER_OF_ROWS, EM_LIMITTEXT, 2, FALSE);
LoadString(glblQueryDllHinst(), IDS_XD_INT, achFormat,
sizeof(achFormat) / sizeof(TCHAR));
TCHAR_Fill(achString, TEXT('\0'), sizeof(achString) / sizeof(TCHAR));
wsprintf(achString, achFormat, pstEmuSettings->nUserDefRows);
SendDlgItemMessage(hDlg, IDC_NUMBER_OF_ROWS, WM_SETTEXT, 0,
(LPARAM)(LPTSTR)achString);
//
// Since the number of columns can only be numeric and has a size
// between MIN_EMUCOLS(20) and MAX_EMUCOLS(132), limit to 3 characters.
//
SendDlgItemMessage(hDlg, IDC_NUMBER_OF_COLS, EM_LIMITTEXT, 3, FALSE);
LoadString(glblQueryDllHinst(), IDS_XD_INT, achFormat,
sizeof(achFormat) / sizeof(TCHAR));
TCHAR_Fill(achString, TEXT('\0'), sizeof(achString) / sizeof(TCHAR));
wsprintf(achString, achFormat, pstEmuSettings->nUserDefCols);
SendDlgItemMessage(hDlg, IDC_NUMBER_OF_COLS, WM_SETTEXT, 0,
(LPARAM)(LPTSTR)achString);
// Put the spin buttons on the row and column fields.
emudlgCreateUpDownControl(hDlg, pstEmuSettings);
}
#endif
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* emudlgCreateUpDownControl
*
* DESCRIPTION:
* Gets the final row and column settings.
*
* ARGUMENTS:
* hDlg - edit control window.
* pstEmuSettings - address of emulator settings structure.
*
* RETURNS:
* void.
*
* AUTHOR: Bob Everett - 22 Jun 1998
*/
STATIC_FUNC void emudlgGetRowColSettings(HWND hDlg, PSTEMUSET pstEmuSettings)
{
pstEmuSettings->nUserDefRows = emudlgValidateEntryFieldSetting(hDlg,
IDC_NUMBER_OF_ROWS, MIN_EMUROWS, MAX_EMUROWS);
pstEmuSettings->nUserDefCols = emudlgValidateEntryFieldSetting(hDlg,
IDC_NUMBER_OF_COLS, MIN_EMUCOLS, MAX_EMUCOLS);
pstEmuSettings->f132Columns =
(pstEmuSettings->nUserDefCols == 132 ? TRUE : FALSE);
}
#endif
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* emudlgCreateUpDownControl
*
* DESCRIPTION:
* This function puts an up-down control on the edit field for the row and
* column fields. This gives us bounds checking for free... just set the
* appropriate parameters in the CreateUpDownControl call.
*
* NOTE: This is a duplicate of CreateUpDownControl
*
* ARGUMENTS:
* hDlg - edit control window.
*
* RETURNS:
* void.
*
* AUTHOR: Bob Everett - 8 Jun 1998
*/
STATIC_FUNC void emudlgCreateUpDownControl(HWND hDlg, PSTEMUSET pstEmuSettings)
{
RECT rc;
int nHeight, nWidth;
DWORD dwFlags;
HWND hwndChild;
// Draw a spin control for the rows field.
GetClientRect(GetDlgItem(hDlg, IDC_NUMBER_OF_ROWS), &rc);
nHeight = rc.top - rc.bottom;
nWidth = (nHeight / 3) * 2;
dwFlags = WS_CHILD | WS_VISIBLE |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_SETBUDDYINT;
hwndChild = CreateUpDownControl(
dwFlags, // create window flags
rc.right, // left edge
rc.top, // top edge
nWidth, // width
nHeight, // height
hDlg, // parent window
IDC_EDIT_ROWS,
(HINSTANCE)GetWindowLongPtr(hDlg, GWLP_HINSTANCE),
GetDlgItem(hDlg, IDC_NUMBER_OF_ROWS),
MAX_EMUROWS,
MIN_EMUROWS,
pstEmuSettings->nUserDefRows);
// Repeat for the columns field.
GetClientRect(GetDlgItem(hDlg, IDC_NUMBER_OF_COLS), &rc);
nHeight = rc.top - rc.bottom;
nWidth = (nHeight / 3) * 2;
hwndChild = CreateUpDownControl(
dwFlags, // create window flags
rc.right, // left edge
rc.top, // top edge
nWidth, // width
nHeight, // height
hDlg, // parent window
IDC_EDIT_COLUMNS,
(HINSTANCE)GetWindowLongPtr(hDlg, GWLP_HINSTANCE),
GetDlgItem(hDlg, IDC_NUMBER_OF_COLS),
MAX_EMUCOLS,
MIN_EMUCOLS,
pstEmuSettings->nUserDefCols);
assert(hwndChild);
}
#endif
#if defined(INCL_TERMINAL_SIZE_AND_COLORS)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* emudlgValidateEntryFieldSetting
*
* DESCRIPTION:
* If the user entered a value outside of the range we support force the
* value into the range.
*
* Note: copied from propValidateBackscrlSize.
*
* ARGUMENTS:
* hDlg - dialog window handle.
*
* RETURNS:
* nNewValue - number of lines to keep in the backscrol buffer.
*
* AUTHOR: Bob Everett - 8 Jun 1998
*/
STATIC_FUNC int emudlgValidateEntryFieldSetting(HWND hDlg,
int nIDC,
int nMinVal,
int nMaxVal)
{
int nValue = 0, nNewValue = 0;
TCHAR achStrEntered[20], achFormat[20];
TCHAR_Fill(achStrEntered, TEXT('\0'),
sizeof(achStrEntered) / sizeof(TCHAR));
GetDlgItemText(hDlg, nIDC, achStrEntered,
sizeof(achStrEntered) / sizeof(TCHAR));
nNewValue = nValue = atoi(achStrEntered);
if (nValue > nMaxVal)
nNewValue = nMaxVal;
else if (nValue < nMinVal)
nNewValue = nMinVal;
if (nNewValue != nValue)
{
LoadString(glblQueryDllHinst(),
IDS_XD_INT,
achFormat,
sizeof(achFormat) / sizeof(TCHAR));
TCHAR_Fill(achStrEntered,
TEXT('\0'),
sizeof(achStrEntered) / sizeof(TCHAR));
wsprintf(achStrEntered, achFormat, nNewValue);
SendDlgItemMessage(hDlg,
nIDC,
WM_SETTEXT,
0,
(LPARAM)(LPTSTR)achStrEntered);
}
return (nNewValue);
}
#endif