#ifndef _Multi_Level_Zone_Debug_H_ #define _Multi_Level_Zone_Debug_H_ #include #include #define ZONE_FLAG(z) (1 << (z)) #if defined(_DEBUG) && defined(MULTI_LEVEL_ZONES) #define DEFAULT_ZONES "Warning", "Trace", "Function", #define BASE_ZONE_INDEX (ZONE_FUNCTION + 1) #undef TRACE_OUT #define TRACE_OUT(s) MLZ_TraceZoneEnabled(MLZ_FILE_ZONE) ? (MLZ_TraceOut s) : 0 #undef WARNING_OUT #define WARNING_OUT(s) MLZ_WarningOut s #undef DebugEntry #define DebugEntry(fn) MLZ_EntryOut(MLZ_FILE_ZONE, #fn) #undef DebugExitVOID #define DebugExitVOID(fn) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_VOID, (DWORD) 0) #undef DebugExitBOOL #define DebugExitBOOL(fn,f) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_BOOL, (DWORD) f) #undef DebugExitDWORD #define DebugExitDWORD(fn,dw) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_DWORD, (DWORD) dw) #undef DebugExitHRESULT #define DebugExitHRESULT(fn,hr) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_HRESULT, (DWORD) hr) #undef DebugExitINT #define DebugExitINT(fn,n) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_INT, (DWORD) n) #undef DebugExitULONG #define DebugExitULONG(fn,ul) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_ULONG, (DWORD) ul) #undef DebugExitPTR #define DebugExitPTR(fn,lp) MLZ_ExitOut(MLZ_FILE_ZONE, #fn, RCTYPE_PTR, (DWORD_PTR) lp) #ifdef __cplusplus extern "C" { #endif // __cplusplus typedef enum { RCTYPE_VOID = 0, RCTYPE_BOOL = 1, RCTYPE_DWORD = 2, RCTYPE_HRESULT = 3, RCTYPE_INT = 4, RCTYPE_ULONG = 5, RCTYPE_PTR = 6 } RCTYPE; void WINAPI MLZ_DbgInit(PSTR *apszZones, UINT cZones); void WINAPI MLZ_DbgDeInit(void); void WINAPIV MLZ_WarningOut(PSTR pszFormat, ...); BOOL WINAPI MLZ_TraceZoneEnabled(int iZone); void WINAPIV MLZ_TraceOut(PSTR pszFormat, ...); void WINAPI MLZ_EntryOut(int iZone, PSTR pszFunName); void WINAPI MLZ_ExitOut(int iZone, PSTR pszFunName, RCTYPE eRetCodeType, DWORD_PTR dwRetCode); #ifdef __cplusplus } #endif // __cplusplus #else #define DebugExitPTR(fn,lp) #endif // _DEBUG && MULTI_ZONE_OUT #endif // _Multi_Level_Zone_Debug_H_