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.
720 lines
23 KiB
720 lines
23 KiB
/*++
|
|
|
|
Copyright (c) 1992-2002 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Memory.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the memory options dialog callback and supporting
|
|
routines to choose options for memory display.
|
|
|
|
--*/
|
|
|
|
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
|
|
|
|
_FORMATS_MEM_WIN g_FormatsMemWin[] = {
|
|
{8, fmtAscii, 0, FALSE, 1, _T("ASCII")},
|
|
{16, fmtUnicode, 0, FALSE, 1, _T("Unicode")},
|
|
{8, fmtBit, 2, FALSE, 8, _T("Bit")},
|
|
{8, fmtInt | fmtZeroPad, 16, TRUE, 2, _T("Byte")},
|
|
{16, fmtInt | fmtSpacePad, 10, FALSE, 6, _T("Short")},
|
|
{16, fmtUInt | fmtZeroPad, 16, FALSE, 4, _T("Short Hex")},
|
|
{16, fmtUInt | fmtSpacePad, 10, FALSE, 5, _T("Short Unsigned")},
|
|
{32, fmtInt | fmtSpacePad, 10, FALSE, 11, _T("Long")},
|
|
{32, fmtUInt | fmtZeroPad, 16, FALSE, 8, _T("Long Hex")},
|
|
{32, fmtUInt | fmtSpacePad, 10, FALSE, 10, _T("Long Unsigned")},
|
|
{64, fmtInt | fmtSpacePad, 10, FALSE, 21, _T("Quad")},
|
|
{64, fmtUInt | fmtZeroPad, 16, FALSE, 16, _T("Quad Hex")},
|
|
{64, fmtUInt | fmtSpacePad, 10, FALSE, 20, _T("Quad Unsigned")},
|
|
{32, fmtFloat, 10, FALSE, 14, _T("Real (32-bit)")},
|
|
{64, fmtFloat, 10, FALSE, 23, _T("Real (64-bit)")},
|
|
{80, fmtFloat, 10, FALSE, 25, _T("Real (10-byte)")},
|
|
{128,fmtFloat, 10, FALSE, 42, _T("Real (16-byte)")}
|
|
};
|
|
|
|
const int g_nMaxNumFormatsMemWin = sizeof(g_FormatsMemWin) / sizeof(g_FormatsMemWin[0]);
|
|
|
|
|
|
|
|
|
|
HWND hwndMemOptsParent = NULL;
|
|
|
|
|
|
void
|
|
Init(HWND,
|
|
HINSTANCE,
|
|
LPPROPSHEETHEADER,
|
|
PROPSHEETPAGE [],
|
|
const int
|
|
);
|
|
|
|
|
|
INT_PTR CALLBACK DlgProc_Physical_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
INT_PTR CALLBACK DlgProc_Virtual_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
INT_PTR CALLBACK DlgProc_IO_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
INT_PTR CALLBACK DlgProc_Bus_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
INT_PTR CALLBACK DlgProc_Control_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
INT_PTR CALLBACK DlgProc_MSR_Mem(HWND, UINT, WPARAM, LPARAM);
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_MemoryProperties(MEMORY_TYPE, HWND, UINT, WPARAM, LPARAM);
|
|
|
|
|
|
int
|
|
MemType_To_DlgId(
|
|
MEMORY_TYPE memtype
|
|
)
|
|
{
|
|
int i;
|
|
struct {
|
|
MEMORY_TYPE memtype;
|
|
int nId;
|
|
} rgMap[] = {
|
|
{ PHYSICAL_MEM_TYPE, IDD_DLG_MEM_PHYSICAL },
|
|
{ VIRTUAL_MEM_TYPE, IDD_DLG_MEM_VIRTUAL },
|
|
{ BUS_MEM_TYPE, IDD_DLG_MEM_BUS_DATA },
|
|
{ CONTROL_MEM_TYPE, IDD_DLG_MEM_CONTROL },
|
|
{ IO_MEM_TYPE, IDD_DLG_MEM_IO },
|
|
{ MSR_MEM_TYPE, IDD_DLG_MEM_MSR }
|
|
};
|
|
|
|
for (i=0; i<sizeof(rgMap)/sizeof(rgMap[0]); i++) {
|
|
if (memtype == rgMap[i].memtype) {
|
|
return rgMap[i].nId;
|
|
}
|
|
}
|
|
|
|
Assert(!"This should not happen");
|
|
return 0;
|
|
}
|
|
|
|
|
|
INT_PTR
|
|
DisplayOptionsPropSheet(
|
|
HWND hwndOwner,
|
|
HINSTANCE hinst,
|
|
MEMORY_TYPE memtypeStartPage
|
|
)
|
|
/*++
|
|
Routine Description:
|
|
Will Initialize and display the Options property sheet. Handle the return codes,
|
|
and the commitment of changes to the debugger.
|
|
|
|
Arguments:
|
|
hwndOwner
|
|
hinst
|
|
Are both used initialize the property sheet dialog.
|
|
nStart - Is used to specify the page that is to be initially
|
|
displayed when the prop sheet first appears. The default
|
|
value is 0. The values specified correspond to array index
|
|
of the PROPSHEETPAGE array.
|
|
|
|
Returns
|
|
Button pushed IDOK, etc...
|
|
--*/
|
|
{
|
|
INT_PTR nRes = 0;
|
|
PROPSHEETHEADER psh = {0};
|
|
PROPSHEETPAGE apsp[MAX_MEMORY_TYPE] = {0};
|
|
int nNumPropPages = sizeof(apsp) / sizeof(PROPSHEETPAGE);
|
|
|
|
Init(hwndOwner, hinst, &psh, apsp, nNumPropPages);
|
|
|
|
{
|
|
//
|
|
// Figure out the initial page to be displayed
|
|
//
|
|
|
|
int i;
|
|
int nStartPage = 0;
|
|
int nId = MemType_To_DlgId(memtypeStartPage);
|
|
|
|
for (i=0; i<MAX_MEMORY_TYPE; i++) {
|
|
if ( (PVOID)(MAKEINTRESOURCE(nId)) == (PVOID)(apsp[i].pszTemplate) ) {
|
|
nStartPage = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
psh.nStartPage = nStartPage;
|
|
}
|
|
|
|
|
|
hwndMemOptsParent = hwndOwner;
|
|
|
|
nRes = PropertySheet(&psh);
|
|
|
|
hwndMemOptsParent = NULL;
|
|
|
|
if (IDOK == nRes) {
|
|
// Save workspace changes here
|
|
}
|
|
|
|
return nRes;
|
|
}
|
|
|
|
|
|
void
|
|
Init(
|
|
HWND hwndOwner,
|
|
HINSTANCE hinst,
|
|
LPPROPSHEETHEADER lppsh,
|
|
PROPSHEETPAGE apsp[],
|
|
const int nMaxPropPages
|
|
)
|
|
/*++
|
|
Routine Description:
|
|
Initializes the property sheet header and pages.
|
|
|
|
Arguments:
|
|
hwndOwner
|
|
hinst
|
|
Are both used by the PROPSHEETHEADER & PROPSHEETPAGE structure.
|
|
Please see the docs for the these structures for more info.
|
|
|
|
lppsh
|
|
Standard prop sheet structure.
|
|
|
|
apsp[]
|
|
An array of prop pages
|
|
Standard prop sheet structure.
|
|
|
|
nNumPropPages
|
|
Number of prop pages in the "apsp" array.
|
|
--*/
|
|
{
|
|
int nPropIdx;
|
|
|
|
memset(lppsh, 0, sizeof(PROPSHEETHEADER));
|
|
|
|
lppsh->dwSize = sizeof(PROPSHEETHEADER);
|
|
lppsh->dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
|
|
lppsh->hwndParent = hwndOwner;
|
|
lppsh->hInstance = hinst;
|
|
lppsh->pszCaption = "Memory Options";
|
|
lppsh->nPages = 0;
|
|
lppsh->ppsp = apsp;
|
|
|
|
// Init the first one, then copy its contents to all the others
|
|
memset(apsp, 0, sizeof(PROPSHEETPAGE));
|
|
apsp[0].dwSize = sizeof(PROPSHEETPAGE);
|
|
// apsp[0].dwFlags = PSP_HASHELP;
|
|
apsp[0].hInstance = hinst;
|
|
|
|
for (nPropIdx = 1; nPropIdx < nMaxPropPages; nPropIdx++) {
|
|
memcpy(&(apsp[nPropIdx]), &apsp[0], sizeof(PROPSHEETPAGE));
|
|
}
|
|
|
|
|
|
|
|
// Only init the distinct values
|
|
nPropIdx = 0;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_VIRTUAL);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_Virtual_Mem;
|
|
|
|
if (g_TargetClass == DEBUG_CLASS_KERNEL)
|
|
{
|
|
nPropIdx = 1;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_PHYSICAL);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_Physical_Mem;
|
|
|
|
nPropIdx = 2;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_BUS_DATA);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_Bus_Mem;
|
|
|
|
nPropIdx = 3;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_CONTROL);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_Control_Mem;
|
|
|
|
nPropIdx = 4;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_IO);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_IO_Mem;
|
|
|
|
nPropIdx = 5;
|
|
apsp[nPropIdx].pszTemplate = MAKEINTRESOURCE(IDD_DLG_MEM_MSR);
|
|
apsp[nPropIdx].pfnDlgProc = DlgProc_MSR_Mem;
|
|
}
|
|
|
|
Assert(nPropIdx < nMaxPropPages);
|
|
lppsh->nPages = nPropIdx + 1;
|
|
}
|
|
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_MemoryProperties(
|
|
MEMORY_TYPE memtype,
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
LRESULT nPos;
|
|
MEMWIN_DATA *pMemWinData = GetMemWinData( hwndMemOptsParent );
|
|
|
|
switch (uMsg) {
|
|
|
|
/*
|
|
case WM_HELP:
|
|
WinHelp((HWND)((LPHELPINFO) lParam)->hItemHandle, "windbg.hlp", HELP_WM_HELP,
|
|
(DWORD_PTR)(LPVOID) HelpArray );
|
|
return TRUE;
|
|
|
|
case WM_CONTEXTMENU:
|
|
WinHelp ((HWND) wParam, "windbg.hlp", HELP_CONTEXTMENU,
|
|
(DWORD_PTR)(LPVOID) HelpArray );
|
|
return TRUE;
|
|
*/
|
|
|
|
case WM_COMMAND:
|
|
/*{
|
|
WORD wNotifyCode = HIWORD(wParam); // notification code
|
|
WORD wID = LOWORD(wParam); // item, control, or accelerator identifier
|
|
HWND hwndCtl = (HWND) lParam; // handle of control
|
|
BOOL bEnabled;
|
|
|
|
switch(wID) {
|
|
case ID_ENV_SRCHPATH:
|
|
if (BN_CLICKED == wNotifyCode) {
|
|
BOOL b = IsDlgButtonChecked(hDlg, ID_ENV_SRCHPATH);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_EXECUTABLE_SEARCH_PATH), b);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BUT_BROWSE), b);
|
|
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
}*/
|
|
break;
|
|
|
|
case WM_INITDIALOG:
|
|
{ // begin Prog & Arguments code block
|
|
|
|
int nIdx;
|
|
TCHAR szTmp[MAX_MSG_TXT];
|
|
|
|
|
|
//
|
|
// Enter the display formats
|
|
//
|
|
for (nIdx=0; nIdx < g_nMaxNumFormatsMemWin; nIdx++) {
|
|
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_DISPLAY_FORMAT,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) g_FormatsMemWin[nIdx].lpszDescription
|
|
);
|
|
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_DISPLAY_FORMAT,
|
|
CB_SETITEMDATA,
|
|
(WPARAM) nPos,
|
|
(LPARAM) (UINT) nIdx
|
|
);
|
|
}
|
|
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_DISPLAY_FORMAT,
|
|
CB_SELECTSTRING,
|
|
(WPARAM) -1,
|
|
(LPARAM) g_FormatsMemWin[pMemWinData->m_GenMemData.nDisplayFormat].lpszDescription
|
|
);
|
|
|
|
//
|
|
// Update the offset. Offset is common to all dialogs
|
|
//
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_OFFSET, EM_LIMITTEXT,
|
|
sizeof(pMemWinData->m_OffsetExpr) - 1, 0);
|
|
SetDlgItemText(hDlg, IDC_EDIT_OFFSET, pMemWinData->m_OffsetExpr);
|
|
|
|
switch (memtype) {
|
|
default:
|
|
Assert(!"Unhandled value");
|
|
break;
|
|
|
|
case VIRTUAL_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case PHYSICAL_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case CONTROL_MEM_TYPE:
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_PROCESSOR, EM_LIMITTEXT,
|
|
32, 0);
|
|
|
|
sprintf(szTmp, "%d",
|
|
pMemWinData->m_GenMemData.any.control.Processor);
|
|
SetDlgItemText(hDlg, IDC_EDIT_PROCESSOR, szTmp);
|
|
break;
|
|
|
|
case IO_MEM_TYPE:
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_BUS_NUMBER, EM_LIMITTEXT,
|
|
32, 0);
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_ADDRESS_SPACE, EM_LIMITTEXT,
|
|
32, 0);
|
|
|
|
sprintf(szTmp, "%d",
|
|
pMemWinData->m_GenMemData.any.io.BusNumber);
|
|
SetDlgItemText(hDlg, IDC_EDIT_BUS_NUMBER, szTmp);
|
|
|
|
sprintf(szTmp, "%d",
|
|
pMemWinData->m_GenMemData.any.io.AddressSpace);
|
|
SetDlgItemText(hDlg, IDC_EDIT_ADDRESS_SPACE, szTmp);
|
|
|
|
|
|
//
|
|
// Enter the interface types
|
|
//
|
|
for (nIdx = 0; nIdx < sizeof(rgInterfaceTypeNames) /
|
|
sizeof(rgInterfaceTypeNames[0]); nIdx++) {
|
|
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_INTERFACE_TYPE,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) rgInterfaceTypeNames[nIdx].psz
|
|
);
|
|
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_INTERFACE_TYPE,
|
|
CB_SETITEMDATA,
|
|
(WPARAM) nPos,
|
|
(LPARAM) (UINT) nIdx
|
|
);
|
|
}
|
|
|
|
if (memtype == pMemWinData->m_GenMemData.memtype) {
|
|
nIdx = pMemWinData->m_GenMemData.any.io.interface_type;
|
|
} else {
|
|
nIdx = 0;
|
|
}
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_INTERFACE_TYPE,
|
|
CB_SELECTSTRING,
|
|
(WPARAM) -1,
|
|
(LPARAM) rgInterfaceTypeNames[nIdx].psz
|
|
);
|
|
break;
|
|
|
|
case MSR_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case BUS_MEM_TYPE:
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_BUS_NUMBER, EM_LIMITTEXT,
|
|
32, 0);
|
|
SendDlgItemMessage(hDlg, IDC_EDIT_SLOT_NUMBER, EM_LIMITTEXT,
|
|
32, 0);
|
|
|
|
sprintf(szTmp, "%d",
|
|
pMemWinData->m_GenMemData.any.bus.BusNumber);
|
|
SetDlgItemText(hDlg, IDC_EDIT_BUS_NUMBER, szTmp);
|
|
|
|
sprintf(szTmp, "%d",
|
|
pMemWinData->m_GenMemData.any.bus.SlotNumber);
|
|
SetDlgItemText(hDlg, IDC_EDIT_SLOT_NUMBER, szTmp);
|
|
|
|
//
|
|
// Enter the bus types
|
|
//
|
|
for (nIdx = 0; nIdx < sizeof(rgBusTypeNames) /
|
|
sizeof(rgBusTypeNames[0]); nIdx++) {
|
|
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_BUS_DATA_TYPE,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) rgBusTypeNames[nIdx].psz
|
|
);
|
|
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_BUS_DATA_TYPE,
|
|
CB_SETITEMDATA,
|
|
(WPARAM) nPos,
|
|
(LPARAM) (UINT) nIdx
|
|
);
|
|
}
|
|
|
|
if (memtype == pMemWinData->m_GenMemData.memtype) {
|
|
nIdx = pMemWinData->m_GenMemData.any.bus.bus_type;
|
|
} else {
|
|
nIdx = 0;
|
|
}
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_BUS_DATA_TYPE,
|
|
CB_SELECTSTRING,
|
|
(WPARAM) -1,
|
|
(LPARAM) rgBusTypeNames[nIdx].psz
|
|
);
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
} // end Prog & Arguments code block
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *) lParam)->code) {
|
|
case PSN_SETACTIVE:
|
|
pMemWinData->m_GenMemData.memtype = memtype;
|
|
return 0;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
|
|
return 1;
|
|
|
|
case PSN_APPLY:
|
|
if (memtype != pMemWinData->m_GenMemData.memtype) {
|
|
// This isn't the current page so ignore.
|
|
break;
|
|
}
|
|
|
|
int nIdx;
|
|
TCHAR szTmp[MAX_MSG_TXT];
|
|
|
|
//
|
|
// Get the display formats
|
|
//
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_DISPLAY_FORMAT,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0
|
|
);
|
|
|
|
if (CB_ERR == nPos) {
|
|
pMemWinData->m_GenMemData.nDisplayFormat = 0;
|
|
} else {
|
|
nIdx = (int)SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_DISPLAY_FORMAT,
|
|
CB_GETITEMDATA,
|
|
(WPARAM) nPos,
|
|
0
|
|
);
|
|
if (CB_ERR == nIdx) {
|
|
pMemWinData->m_GenMemData.nDisplayFormat = 0;
|
|
} else {
|
|
pMemWinData->m_GenMemData.nDisplayFormat = nIdx;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Update the offset. Offset is common to all dialogs
|
|
//
|
|
GetDlgItemText(hDlg, IDC_EDIT_OFFSET,
|
|
pMemWinData->m_OffsetExpr,
|
|
sizeof(pMemWinData->m_OffsetExpr));
|
|
|
|
switch (memtype) {
|
|
default:
|
|
Assert(!"Unhandled value");
|
|
break;
|
|
|
|
case VIRTUAL_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case PHYSICAL_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case CONTROL_MEM_TYPE:
|
|
GetDlgItemText(hDlg, IDC_EDIT_PROCESSOR,
|
|
szTmp, _tsizeof(szTmp));
|
|
if (sscanf(szTmp, "%d", &pMemWinData->
|
|
m_GenMemData.any.control.Processor) != 1)
|
|
{
|
|
pMemWinData->m_GenMemData.any.control.Processor = 0;
|
|
}
|
|
break;
|
|
|
|
case IO_MEM_TYPE:
|
|
GetDlgItemText(hDlg, IDC_EDIT_BUS_NUMBER,
|
|
szTmp, _tsizeof(szTmp));
|
|
if (sscanf(szTmp, "%d", &pMemWinData->
|
|
m_GenMemData.any.io.BusNumber) != 1)
|
|
{
|
|
pMemWinData->m_GenMemData.any.io.BusNumber = 0;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDC_EDIT_ADDRESS_SPACE,
|
|
szTmp, _tsizeof(szTmp));
|
|
if (sscanf(szTmp, "%d", &pMemWinData->
|
|
m_GenMemData.any.io.AddressSpace) != 1)
|
|
{
|
|
pMemWinData->m_GenMemData.any.io.AddressSpace = 0;
|
|
}
|
|
|
|
//
|
|
// Get the interface types
|
|
//
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_INTERFACE_TYPE,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0
|
|
);
|
|
|
|
if (CB_ERR == nPos) {
|
|
pMemWinData->m_GenMemData.any.io.interface_type =
|
|
_INTERFACE_TYPE(0);
|
|
} else {
|
|
nIdx = (int)SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_INTERFACE_TYPE,
|
|
CB_GETITEMDATA,
|
|
(WPARAM) nPos,
|
|
0
|
|
);
|
|
if (CB_ERR == nIdx) {
|
|
pMemWinData->m_GenMemData.any.io.interface_type =
|
|
_INTERFACE_TYPE(0);
|
|
} else {
|
|
pMemWinData->m_GenMemData.any.io.interface_type =
|
|
_INTERFACE_TYPE(nIdx);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case MSR_MEM_TYPE:
|
|
// Nothing to do
|
|
break;
|
|
|
|
case BUS_MEM_TYPE:
|
|
GetDlgItemText(hDlg, IDC_EDIT_BUS_NUMBER,
|
|
szTmp, _tsizeof(szTmp));
|
|
if (sscanf(szTmp, "%d", &pMemWinData->
|
|
m_GenMemData.any.bus.BusNumber) != 1)
|
|
{
|
|
pMemWinData->m_GenMemData.any.bus.BusNumber = 0;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDC_EDIT_SLOT_NUMBER,
|
|
szTmp, _tsizeof(szTmp));
|
|
if (sscanf(szTmp, "%d", &pMemWinData->
|
|
m_GenMemData.any.bus.SlotNumber) != 1)
|
|
{
|
|
pMemWinData->m_GenMemData.any.bus.SlotNumber = 0;
|
|
}
|
|
|
|
//
|
|
// Get the bus type
|
|
//
|
|
nPos = SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_BUS_DATA_TYPE,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0
|
|
);
|
|
|
|
if (CB_ERR == nPos) {
|
|
pMemWinData->m_GenMemData.any.bus.bus_type =
|
|
_BUS_DATA_TYPE(0);
|
|
} else {
|
|
nIdx = (int)SendDlgItemMessage(hDlg,
|
|
IDC_COMBO_BUS_DATA_TYPE,
|
|
CB_GETITEMDATA,
|
|
(WPARAM) nPos,
|
|
0
|
|
);
|
|
if (CB_ERR == nIdx) {
|
|
pMemWinData->m_GenMemData.any.bus.bus_type =
|
|
_BUS_DATA_TYPE(0);
|
|
} else {
|
|
pMemWinData->m_GenMemData.any.bus.bus_type =
|
|
_BUS_DATA_TYPE(nIdx);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_Physical_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(PHYSICAL_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_Virtual_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(VIRTUAL_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_IO_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(IO_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_Bus_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(BUS_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_Control_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(CONTROL_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
DlgProc_MSR_Mem(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
return DlgProc_MemoryProperties(MSR_MEM_TYPE, hDlg, uMsg, wParam, lParam);
|
|
}
|