diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/dbgpoint.hxx | 358 |
1 files changed, 358 insertions, 0 deletions
diff --git a/public/sdk/inc/dbgpoint.hxx b/public/sdk/inc/dbgpoint.hxx new file mode 100644 index 000000000..960586ec8 --- /dev/null +++ b/public/sdk/inc/dbgpoint.hxx @@ -0,0 +1,358 @@ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1992 - 1992. +// +// File: dbgpoint.hxx +// +// Contents: Support for visual debug values +// +// Classes: CDebugBaseClass +// CDebugBreakPoint +// CDebugValue +// +// Functions: +// +// History: 12-Mar-93 KevinRo Created +// +// This module handles debug values, such as breakpoints and settable +// values. By using this module, the values can be examined and changed +// in a debugging window. The debugging window uses its own thread, so +// changes can be effected asynchronously. +// +//-------------------------------------------------------------------------- + + +#ifndef __DBGPOINT_HXX__ +#define __DBGPOINT_HXX__ + +#if defined(__cplusplus) + +enum DebugValueType +{ + dvtBreakPoint, + dvtInfoLevel, + dvtValue +}; + +class CDebugBaseClass; + +// +// The following routines are exported from commnot.dll +// + +extern "C" +EXPORTDEF +void APINOT dbgRegisterGroup(WCHAR const *pwzName,HANDLE *hGroup); + +extern "C" +EXPORTDEF +void APINOT dbgRemoveGroup(HANDLE hGroup); + +extern "C" +EXPORTDEF +void APINOT dbgRegisterValue(WCHAR const *pwzName,HANDLE hGroup,CDebugBaseClass *pdv); + +extern "C" +EXPORTDEF +void APINOT dbgRemoveValue(HANDLE hGroup,CDebugBaseClass *pdv); + +extern "C" +EXPORTDEF +void APINOT dbgNotifyChange(HANDLE hGroup,CDebugBaseClass *pdv); + +extern "C" +EXPORTDEF +ULONG APINOT dbgGetIniInfoLevel(WCHAR const *pwzName,ULONG ulDefault); + +extern "C" +EXPORTDEF +ULONG APINOT dbgBreakDialog(char const *pszFileName,ULONG ulLineNumber,WCHAR const *pwzName,long ulCode); + +// The following values may be returned by dbgBreakDialog + +#define CDBG_BREAKPOINT_CONTINUE 0x01 +#define CDBG_BREAKPOINT_BREAK 0x02 +#define CDBG_BREAKPOINT_DISABLE 0x04 + +// +// The following group is for the Infolevel Group. The group is automatically +// registered when a value is added to it. +// + +#define HANDLE_INFOLEVELGROUP ((HANDLE)-1) + + +//+------------------------------------------------------------------------- +// +// Class: CDebugBaseClass +// +// Purpose: Defines a base class used by visual debug value system +// +// Interface: +// +// History: 12-Mar-93 KevinRo Created +// +// Notes: +// +//-------------------------------------------------------------------------- + +class CDebugBaseClass +{ +public: + CDebugBaseClass(WCHAR const *pwzValueName, + HANDLE hGroupHandle, + DebugValueType dvtType): + _dvtType(dvtType), + _hGroupHandle(hGroupHandle) + { + } + + void Register(WCHAR const *pwzValueName) + { + dbgRegisterValue(pwzValueName,_hGroupHandle,this); + } + + +virtual ~CDebugBaseClass() + { + dbgRemoveValue(_hGroupHandle,this); + } + +virtual void NotifyChange() + { + dbgNotifyChange(_hGroupHandle,this); + } + +DebugValueType GetValueType() {return _dvtType;} +HANDLE GetGroupHandle() { return _hGroupHandle;} + +private: + HANDLE _hGroupHandle; + DebugValueType _dvtType; +}; + + + +//+------------------------------------------------------------------------- +// +// Class: CDebugBreakPoint +// +// Purpose: Defines an externally switchable break point. By using the +// visual debug window, you can set or clear this breakpoint +// while a program runs. +// +// Interface: +// +// History: 12-Mar-93 KevinRo Created +// +// Notes: +// +//-------------------------------------------------------------------------- + + +class CDebugBreakPoint : public CDebugBaseClass +{ +public: + CDebugBreakPoint(WCHAR const *pwzName,HANDLE hGroup,ULONG fBreakSet): + _fBreakSet(fBreakSet), + _pwzName(pwzName), + CDebugBaseClass(pwzName,hGroup,dvtBreakPoint) + { + + Register(pwzName); + } + ~CDebugBreakPoint() + { + } + + void ToggleBreakPoint() + { + _fBreakSet = !_fBreakSet; + NotifyChange(); + } + + ULONG GetBreakPoint() + { + return(_fBreakSet); + } + + ULONG SetBreakPoint() + { + register ret = _fBreakSet; + _fBreakSet = TRUE; + NotifyChange(); + return(ret); + } + + ULONG ClearBreakPoint() + { + register ret = _fBreakSet; + _fBreakSet = FALSE; + NotifyChange(); + return(ret); + } + +inline BOOL BreakPointTest() + { + return _fBreakSet; + } + +inline BOOL BreakPointMessage(char *pszFileName,ULONG ulLineNo,long lCode=0) + { + ULONG rc = dbgBreakDialog(pszFileName,ulLineNo,_pwzName,lCode); + + if(rc & CDBG_BREAKPOINT_DISABLE) ClearBreakPoint(); + + return(rc & CDBG_BREAKPOINT_BREAK); + } + +public: + WCHAR const * _pwzName; + BOOL _fBreakSet; + +}; + + + +//+------------------------------------------------------------------------- +// +// Class: CDebugValue +// +// Purpose: A DebugValue makes a ULONG value visible and settable +// from the debugging window. By accepting a ULONG reference, +// it is possible to expose a ULONG value to the debugging +// window. +// +// Interface: +// +// History: 12-Mar-93 KevinRo Created +// +// Notes: +// +//-------------------------------------------------------------------------- + +class CDebugValue : public CDebugBaseClass +{ +public: + CDebugValue(WCHAR const *pwzName,HANDLE hGroup,ULONG & ulValue): + _ulValue(ulValue), + CDebugBaseClass(pwzName,hGroup,dvtValue) + { + Register(pwzName); + } + + ~CDebugValue() + { + } + + ULONG GetValue() + { + return(_ulValue); + } + + ULONG SetValue(ULONG ulValue) + { + register ret = _ulValue; + + _ulValue = ulValue; + NotifyChange(); + return(ret); + } + +private: + + ULONG & _ulValue; + +}; + + +//+------------------------------------------------------------------------- +// +// Class: CInfoLevel +// +// Purpose: A CInfoLevel makes an InfoLevel value accessable by the +// debugging window. +// +// Interface: +// +// History: 12-Mar-93 KevinRo Created +// +// Notes: +// +//-------------------------------------------------------------------------- + + + + +class CInfoLevel : public CDebugBaseClass +{ +public: + CInfoLevel(WCHAR const *pwzName,ULONG & ulValue,ULONG deflvl = DEF_INFOLEVEL): + _ulInfoLevel(ulValue), + CDebugBaseClass(pwzName,HANDLE_INFOLEVELGROUP,dvtInfoLevel) + { + _ulInfoLevel = dbgGetIniInfoLevel(pwzName,deflvl); + + Register(pwzName); + } + + ~CInfoLevel() + { + } + + ULONG GetInfoLevel() + { + return(_ulInfoLevel); + } + + ULONG SetInfoLevel(ULONG ulValue) + { + register ret = _ulInfoLevel; + + _ulInfoLevel = ulValue; + NotifyChange(); + return(ret); + } + +private: + + ULONG & _ulInfoLevel; + +}; + +//+------------------------------------------------------------------------- +// +// Class: CDebugGroupClass +// +// Purpose: Encapsulates a Debug Group +// +// Notes: +// +//-------------------------------------------------------------------------- + + +class CDebugGroupClass +{ +public: + CDebugGroupClass(WCHAR *pwzName) + { + dbgRegisterGroup(pwzName,&_hGroup); + } + + ~CDebugGroupClass() + { + dbgRemoveGroup(_hGroup); + } + + operator HANDLE() { return(_hGroup); } + +private: + HANDLE _hGroup; +}; + + +#endif // defined(__cplusplus) +#endif // __DBGPOINT_HXX__ + |