/*++ Copyright (c) 1994 Microsoft Corporation All rights reserved. Module Name: debug.h Abstract: PrintUI core debugging macros/tools. Author: Lazar Ivanov (LazarI) Jul-05-2000 Revision History: --*/ #ifndef _DEBUG_H #define _DEBUG_H // open C code brace #ifdef __cplusplus extern "C" { #endif /////////////////////// // core debug macros & // functions // #define DBG_NONE 0x0000 #define DBG_INFO 0x0001 #define DBG_WARN 0x0002 #define DBG_WARNING 0x0002 #define DBG_ERROR 0x0004 #define DBG_TRACE 0x0008 #define DBG_SECURITY 0x0010 #define DBG_EXEC 0x0020 #define DBG_PORT 0x0040 #define DBG_NOTIFY 0x0080 #define DBG_PAUSE 0x0100 #define DBG_THREADM 0x0400 #define DBG_MIN 0x0800 #define DBG_TIME 0x1000 #define DBG_FOLDER 0x2000 #define DBG_NOHEAD 0x8000 #if DBG VOID _DbgSingleThreadReset( const DWORD *pdwThreadId ); VOID _DbgSingleThread( const DWORD *pdwThreadId ); VOID _DbgSingleThreadNot( const DWORD *pdwThreadId ); VOID _DbgMsg( LPCSTR pszMsgFormat, ... ); VOID _DbgWarnInvalid( PVOID pvObject, UINT uDbg, UINT uLine, LPCSTR pszFileA, LPCSTR pszModuleA ); HRESULT _DbgInit( VOID ); HRESULT _DbgDone( VOID ); VOID _DbgBreak( VOID ); #define DBG_PRINT_MASK 0xffff #define DBG_BREAK_SHIFT 16 #define DBG_PRINT(x) (x) #define DBG_BREAK(x) (((x) << DBG_BREAK_SHIFT)|(x)) #ifndef MODULE #define MODULE "PRINTUI:" #endif extern DWORD MODULE_DEBUG; #define MODULE_DEBUG_INIT(printMask, breakMask) \ (DBG_PRINT(printMask) | DBG_BREAK(breakMask)) #ifdef UNICODE #define TSTR "%ws" #else #define TSTR "%s" #endif #define DBGSTR(str) \ ((str) ? (str) : TEXT("(NULL)")) #define DBGMSG(Level, MsgAndArgs) \ do \ { \ if( ( (Level) & 0xFFFF ) & MODULE_DEBUG ){ \ _DbgMsg MsgAndArgs; \ } \ if( ( (Level) << 16 ) & MODULE_DEBUG ) \ _DbgBreak(); \ } \ while (FALSE) \ #define SPLASSERT(expr) \ do \ { \ if (!(expr)) \ { \ _DbgMsg("Failed: %s\nLine %d, %s\n", #expr, __LINE__, __FILE__); \ _DbgBreak(); \ } \ } \ while (FALSE) \ #define SINGLETHREAD_VAR(var) \ DWORD dwSingleThread_##var; #define SINGLETHREAD(var) \ _DbgSingleThread(&dwSingleThread_##var); #define SINGLETHREADNOT(var) \ _DbgSingleThreadNot(&dwSingleThread_##var); #define SINGLETHREADRESET(var) \ _DbgSingleThreadReset(&dwSingleThread_##var); #define VALID_PTR(x) \ ((( x ) && (( x )->bValid( ))) ? \ TRUE : \ ( _DbgWarnInvalid( (PVOID)(x), MODULE_DEBUG, __LINE__, __FILE__, MODULE ), FALSE )) #define VALID_OBJ(x) \ ((( x ).bValid( )) ? \ TRUE : \ ( _DbgWarnInvalid( (PVOID)&(x), MODULE_DEBUG, __LINE__, __FILE__, MODULE ), FALSE )) #define VALID_BASE(x) \ (( x::bValid( )) ? \ TRUE : \ ( _DbgWarnInvalid( (PVOID)this, MODULE_DEBUG, __LINE__, __FILE__, MODULE ), FALSE )) #else // DBG not defined - expand all debug code appropriately (i.e. to nothing) #define MODULE_DEBUG_INIT(printMask, breakMask) #define DBGMSG(Level, MsgAndArgs) #define SPLASSERT(exp) #define SINGLETHREAD_VAR(var) #define SINGLETHREAD(var) #define SINGLETHREADNOT(var) #define SINGLETHREADRESET(var) #define VALID_PTR(x) \ (( x ) && (( x )->bValid())) #define VALID_OBJ(x) \ (( x ).bValid()) #define VALID_BASE(x) \ ( x::bValid( )) #endif // DBG // close C code brace #ifdef __cplusplus } #endif #endif // _DEBUG_H