#define NOSHELLDEBUG // don't take shell versions of this // NOTE: You can #define your own DM_* values using bits in the HI BYTE #define DM_TRACE 0x0001 // Trace messages #define DM_WARNING 0x0002 // Warning #define DM_ERROR 0x0004 // Error #define DM_ASSERT 0x0008 // Assertions // NOTE: Default debug mask is 0x00ff (show everything) // // Inside debugger, you can modify wDebugMask variable. // // Set debug mask; returning previous. // UINT SetDebugMask(UINT mask); // Get debug mask. // UINT GetDebugMask(); // Use this macro to declare message text that will be placed // in the CODE segment (useful if DS is getting full) // // Ex: DBGTEXT(szMsg, "Invalid whatever: %d"); // #define DBGTEXT(sz, msg) static const char sz[] = msg; #ifdef _DEBUG // Assert(f) -- Generate "assertion failed in line x of file.c" // message if f is NOT true. // // AssertMsg(f, msg, args...) -- Generate wsprintf-formatted msg w/params // if f is NOT true. // // DebugMsg(mask, msg, args...) - // Generate wsprintf-formatted msg using // specified debug mask. System debug mask // governs whether message is output. // void AssertFailed(LPCSTR szFile, int line); #define Assert(f) \ { \ DBGTEXT(szFile, __FILE__); \ if (!(f)) \ AssertFailed(szFile, __LINE__); \ } #define AssertE(f) Assert(f) void __cdecl _AssertMsg(BOOL f, LPCSTR pszMsg, ...); #define AssertMsg _AssertMsg void __cdecl _DebugMsg(UINT mask, LPCSTR psz, ...); #define DebugMsg _DebugMsg #else // retail versions to produce no code, no data #define Assert(f) #define AssertE(f) (f) #define AssertMsg 1 ? (void)0 : (void) #define DebugMsg 1 ? (void)0 : (void) #endif