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.
507 lines
14 KiB
507 lines
14 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft OLE
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1995.
|
|
//
|
|
// File: cdbgdlg.cxx
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 4-10-95 kennethm Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include <dfheader.hxx>
|
|
#pragma hdrstop
|
|
#include <debdlg.h>
|
|
|
|
// BUGBUG:KILL this ARRAYSIZE DEF when its becomes globally available.
|
|
#ifndef ARRAYSIZE
|
|
#define ARRAYSIZE(a) (sizeof (a)/sizeof (a[0]))
|
|
#endif
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: UpdateTraceLevels
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hwndDlg] --
|
|
// [fTraceLvl] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CDebugHelp::UpdateTraceLevels(HWND hwndDlg, DWORD fTraceLvl)
|
|
{
|
|
TCHAR szTraceLvl[MAX_PATH];
|
|
|
|
//
|
|
// Trace Level flags
|
|
//
|
|
|
|
CheckDlgButton(hwndDlg, IDC_ADDREL, (fTraceLvl & DH_LVL_ADDREL) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_QI, (fTraceLvl & DH_LVL_QI) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_INTERF, (fTraceLvl & DH_LVL_INTERF) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LEVEL1, (fTraceLvl & DH_LVL_TRACE1) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LEVEL2, (fTraceLvl & DH_LVL_TRACE2) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LEVEL3, (fTraceLvl & DH_LVL_TRACE3) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LEVEL4, (fTraceLvl & DH_LVL_TRACE4) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_FUNCIN, (fTraceLvl & DH_LVL_ENTRY) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_FUNCOUT,(fTraceLvl & DH_LVL_EXIT) ? 1 : 0);
|
|
|
|
//
|
|
// Set trace level text
|
|
//
|
|
|
|
wsprintf(szTraceLvl, TEXT("%#08lx"), fTraceLvl);
|
|
|
|
SetDlgItemText(hwndDlg, IDC_TRACELEVEL, szTraceLvl);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: UpdateLogLocations
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hwndDlg] --
|
|
// [fLogLoc] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CDebugHelp::UpdateLogLocations(HWND hwndDlg, DWORD fLogLoc)
|
|
{
|
|
CheckDlgButton(hwndDlg, IDC_LLDEBUGTERM, (fLogLoc & DH_LOC_TERM) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LLLOGFILE, (fLogLoc & DH_LOC_LOG) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LLCONSOLE, (fLogLoc & DH_LOC_STDOUT) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_LLSPYWIN, (fLogLoc & DH_LOC_SPYWIN) ? 1 : 0);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: UpdateTraceLocations
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hwndDlg] --
|
|
// [fTraceLoc] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CDebugHelp::UpdateTraceLocations(HWND hwndDlg, DWORD fTraceLoc)
|
|
{
|
|
CheckDlgButton(hwndDlg, IDC_TLDEBUGTERM, (fTraceLoc & DH_LOC_TERM) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_TLLOGFILE, (fTraceLoc & DH_LOC_LOG) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_TLCONSOLE, (fTraceLoc & DH_LOC_STDOUT) ? 1 : 0);
|
|
CheckDlgButton(hwndDlg, IDC_TLSPYWIN, (fTraceLoc & DH_LOC_SPYWIN) ? 1 : 0);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: UpdateTraceLevelFromText
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hwndDlg] --
|
|
// [pfTraceLvl] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CDebugHelp::UpdateTraceLevelFromText(HWND hwndDlg, DWORD *pfTraceLvl)
|
|
{
|
|
CHAR szTraceLvl[MAX_PATH];
|
|
|
|
GetDlgItemTextA(hwndDlg, IDC_TRACELEVEL, szTraceLvl, MAX_PATH);
|
|
sscanf(szTraceLvl, "%lx", pfTraceLvl);
|
|
*pfTraceLvl &= DH_LVL_OUTMASK;
|
|
UpdateTraceLevels(hwndDlg, *pfTraceLvl);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: DebugDialogProc
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hwndDlg] --
|
|
// [uMsg] --
|
|
// [wParam] --
|
|
// [lParam] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
BOOL CALLBACK CDebugHelp::OptionsDialogProc(
|
|
HWND hwndDlg, // handle of dialog box
|
|
UINT uMsg, // message
|
|
WPARAM wParam, // first message parameter
|
|
LPARAM lParam) // second message parameter
|
|
{
|
|
static DWORD fLabMode;
|
|
static DWORD fBreakMode;
|
|
static DWORD fVerbose;
|
|
static DWORD fTraceLoc;
|
|
static DWORD fTraceLvl;
|
|
static DWORD fLogLoc;
|
|
DWORD fLevelMask = 0;
|
|
DWORD fTraceLocMask = 0;
|
|
DWORD fLogLocMask = 0;
|
|
CDebugHelp *pdh = 0;
|
|
|
|
// get or set the this pointer.
|
|
if (WM_INITDIALOG == uMsg)
|
|
{
|
|
// this pointer comes in as lParam. Save it.
|
|
SetWindowLong (hwndDlg, DWL_USER, lParam);
|
|
pdh = (CDebugHelp*)lParam;
|
|
}
|
|
else
|
|
{
|
|
pdh = (CDebugHelp*)GetWindowLong (hwndDlg, DWL_USER);
|
|
}
|
|
|
|
// if we dont have one, bail.
|
|
if (NULL == pdh)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// message processor
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
|
|
//
|
|
// Initialize the controls
|
|
//
|
|
|
|
fLabMode = pdh->_fMode&DH_LABMODE ? DH_LABMODE_ON : DH_LABMODE_OFF;
|
|
fBreakMode= pdh->_fMode&DH_BREAKMODE ? DH_BREAKMODE_ON : DH_BREAKMODE_OFF;
|
|
fVerbose = pdh->_fMode&DH_VERBOSE ? DH_VERBOSE_ON : DH_VERBOSE_OFF;
|
|
fTraceLoc = pdh->_fTraceLoc;
|
|
fTraceLvl = pdh->_fTraceLvl;
|
|
fLogLoc = pdh->_fLogLoc;
|
|
|
|
//
|
|
// modes
|
|
//
|
|
if (DH_LABMODE_OFF == fLabMode)
|
|
{
|
|
CheckDlgButton(hwndDlg, IDC_POPUP, TRUE);
|
|
}
|
|
if (DH_BREAKMODE_ON == fBreakMode)
|
|
{
|
|
CheckDlgButton(hwndDlg, IDC_BREAK, TRUE);
|
|
}
|
|
if (DH_VERBOSE_ON == fVerbose)
|
|
{
|
|
CheckDlgButton(hwndDlg, IDC_VERBOSE, TRUE);
|
|
}
|
|
|
|
//
|
|
// Trace location flags
|
|
//
|
|
|
|
pdh->UpdateTraceLocations(hwndDlg, fTraceLoc);
|
|
|
|
//
|
|
// Log Location flags
|
|
//
|
|
|
|
pdh->UpdateLogLocations(hwndDlg, fLogLoc);
|
|
|
|
//
|
|
// Trace level flags
|
|
//
|
|
|
|
pdh->UpdateTraceLevels(hwndDlg, fTraceLvl);
|
|
|
|
// if no log object show the notification
|
|
if (!pdh->_plog)
|
|
{
|
|
ShowWindow (GetDlgItem(hwndDlg, IDC_WARNING), SW_SHOW);
|
|
}
|
|
|
|
// display the spywindow class if there is one
|
|
if (pdh->GetSpyWindowClass ())
|
|
{
|
|
SetDlgItemText (hwndDlg, IDC_SPYWINDOWLOC, pdh->GetSpyWindowClass ());
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
// if log to file is set and we have a log file
|
|
// create a log object
|
|
if (fTraceLoc & DH_LOC_LOG || fLogLoc & DH_LOC_LOG)
|
|
{
|
|
CHAR szLog[MAX_PATH] = {"/t:"};
|
|
if (0 < GetDlgItemTextA (hwndDlg,
|
|
IDC_LOGFILELOC,
|
|
&szLog[3],
|
|
sizeof (szLog) - 3))
|
|
{
|
|
pdh->CreateLog (szLog);
|
|
}
|
|
}
|
|
|
|
// if spywindow is set and we have a spy window class
|
|
// set spy window class in debug object
|
|
if (fTraceLoc & DH_LOC_SPYWIN || fLogLoc & DH_LOC_SPYWIN)
|
|
{
|
|
TCHAR tszSpyWin[255] = {TEXT("")};
|
|
if (0 < GetDlgItemText (hwndDlg,
|
|
IDC_SPYWINDOWLOC,
|
|
tszSpyWin,
|
|
ARRAYSIZE (tszSpyWin)))
|
|
{
|
|
pdh->SetSpyWindowClass (tszSpyWin);
|
|
}
|
|
}
|
|
|
|
//
|
|
// The user pressed ok, save the settings
|
|
//
|
|
pdh->UpdateTraceLevelFromText(hwndDlg, &fTraceLvl);
|
|
pdh->SetDebugInfo(
|
|
fLogLoc,
|
|
fTraceLoc,
|
|
fTraceLvl,
|
|
fLabMode | fBreakMode | fVerbose);
|
|
|
|
if (IsDlgButtonChecked(hwndDlg, IDC_SAVE) == 1)
|
|
{
|
|
//
|
|
// Save the settings to the registry
|
|
//
|
|
pdh->WriteRegDbgInfo (DEFAULT_REG_LOC);
|
|
}
|
|
|
|
//
|
|
// Fall through
|
|
//
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hwndDlg, 0);
|
|
return TRUE;
|
|
|
|
// Popup and break are mutually exclusive.
|
|
// If one is turned on, turn other off.
|
|
case IDC_POPUP:
|
|
if (IsDlgButtonChecked(hwndDlg, wParam) == 1)
|
|
{
|
|
fLabMode = DH_LABMODE_OFF;
|
|
fBreakMode = DH_BREAKMODE_OFF;
|
|
CheckDlgButton (hwndDlg, IDC_BREAK, FALSE); //turn off Break.
|
|
}
|
|
else
|
|
{
|
|
fLabMode = DH_LABMODE_ON;
|
|
}
|
|
break;
|
|
|
|
case IDC_BREAK:
|
|
if (IsDlgButtonChecked(hwndDlg, wParam) == 1)
|
|
{
|
|
fBreakMode = DH_BREAKMODE_ON;
|
|
fLabMode = DH_LABMODE_ON;
|
|
CheckDlgButton (hwndDlg, IDC_POPUP, FALSE); //turn off Popup.
|
|
}
|
|
else
|
|
{
|
|
fBreakMode = DH_BREAKMODE_OFF;
|
|
}
|
|
break;
|
|
|
|
case IDC_VERBOSE:
|
|
if (IsDlgButtonChecked(hwndDlg, wParam) == 1)
|
|
{
|
|
fVerbose = DH_VERBOSE_ON;
|
|
}
|
|
else
|
|
{
|
|
fVerbose = DH_VERBOSE_OFF;
|
|
}
|
|
break;
|
|
|
|
case IDC_TRACELEVEL:
|
|
if (HIWORD(wParam) == EN_KILLFOCUS)
|
|
{
|
|
pdh->UpdateTraceLevelFromText(hwndDlg, &fTraceLvl);
|
|
}
|
|
break;
|
|
|
|
case IDC_TLDEBUGTERM:
|
|
fTraceLocMask = DH_LOC_TERM;
|
|
break;
|
|
case IDC_TLSPYWIN:
|
|
fTraceLocMask = DH_LOC_SPYWIN;
|
|
break;
|
|
case IDC_TLCONSOLE:
|
|
fTraceLocMask = DH_LOC_STDOUT;
|
|
break;
|
|
case IDC_TLLOGFILE:
|
|
fTraceLocMask = DH_LOC_LOG;
|
|
break;
|
|
case IDC_LLDEBUGTERM:
|
|
fLogLocMask = DH_LOC_TERM;
|
|
break;
|
|
case IDC_LLSPYWIN:
|
|
fLogLocMask = DH_LOC_SPYWIN;
|
|
break;
|
|
case IDC_LLCONSOLE:
|
|
fLogLocMask = DH_LOC_STDOUT;
|
|
break;
|
|
case IDC_LLLOGFILE:
|
|
fLogLocMask = DH_LOC_LOG;
|
|
break;
|
|
case IDC_LEVEL1:
|
|
fLevelMask = DH_LVL_TRACE1;
|
|
break;
|
|
case IDC_LEVEL2:
|
|
fLevelMask = DH_LVL_TRACE2;
|
|
break;
|
|
case IDC_LEVEL3:
|
|
fLevelMask = DH_LVL_TRACE3;
|
|
break;
|
|
case IDC_LEVEL4:
|
|
fLevelMask = DH_LVL_TRACE4;
|
|
break;
|
|
case IDC_FUNCOUT:
|
|
fLevelMask = DH_LVL_EXIT;
|
|
break;
|
|
case IDC_FUNCIN:
|
|
fLevelMask = DH_LVL_ENTRY;
|
|
break;
|
|
case IDC_QI:
|
|
fLevelMask = DH_LVL_QI;
|
|
break;
|
|
case IDC_ADDREL:
|
|
fLevelMask = DH_LVL_ADDREL;
|
|
break;
|
|
case IDC_INTERF:
|
|
fLevelMask = DH_LVL_INTERF;
|
|
break;
|
|
}
|
|
|
|
//
|
|
// See if any of the mask have been changed.
|
|
// If one has been then update our local flag
|
|
//
|
|
|
|
if (fLevelMask != 0)
|
|
{
|
|
if (IsDlgButtonChecked(hwndDlg, LOWORD(wParam)) == 0)
|
|
{
|
|
fTraceLvl &= ~fLevelMask;
|
|
}
|
|
else
|
|
{
|
|
fTraceLvl |= fLevelMask;
|
|
}
|
|
pdh->UpdateTraceLevels(hwndDlg, fTraceLvl);
|
|
}
|
|
if (fLogLocMask != 0)
|
|
{
|
|
if (IsDlgButtonChecked(hwndDlg, LOWORD(wParam)) == 0)
|
|
{
|
|
fLogLoc &= ~fLogLocMask;
|
|
}
|
|
else
|
|
{
|
|
fLogLoc |= fLogLocMask;
|
|
}
|
|
pdh->UpdateTraceLevels(hwndDlg, fTraceLvl);
|
|
}
|
|
if (fTraceLocMask != 0)
|
|
{
|
|
if (IsDlgButtonChecked(hwndDlg, LOWORD(wParam)) == 0)
|
|
{
|
|
fTraceLoc &= ~fTraceLocMask;
|
|
}
|
|
else
|
|
{
|
|
fTraceLoc |= fTraceLocMask;
|
|
}
|
|
pdh->UpdateTraceLevels(hwndDlg, fTraceLvl);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: DebugOptionsDialog
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [hinstance] --
|
|
// [hWnd] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 4-29-95 kennethm Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
HRESULT CDebugHelp::OptionsDialog(HINSTANCE hinstance, HWND hWnd)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
int iRet;
|
|
|
|
iRet = DialogBoxParam(
|
|
hinstance,
|
|
MAKEINTRESOURCE(IDD_DEBUGDIALOG),
|
|
hWnd,
|
|
OptionsDialogProc,
|
|
(long)this);
|
|
|
|
if (iRet == -1)
|
|
{
|
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
return hr;
|
|
}
|