summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/dbgpoint.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/dbgpoint.hxx358
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__
+