DEBUG.H
//--------------------------------------------------------------------------- 
// Debug.H 
//--------------------------------------------------------------------------- 
// Contains the various macros and the like which are only useful in DEBUG 
// builds. 
//--------------------------------------------------------------------------- 
// (C) Copyright 1995-1997 by Microsoft Corporation. All rights reserved. 
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF  
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO  
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A  
// PARTICULAR PURPOSE. 
//--------------------------------------------------------------------------- 
 
//--------------------------------------------------------------------------- 
// All the things required to handle our ASSERT mechanism 
//--------------------------------------------------------------------------- 
#undef DEBUG 
// ;begin_internal 
// BUGBUG DisplayAssert is not coded in this release, 
// until it is, debug builds do not get these debug functions 
// ;end_internal 
 
#ifdef DEBUG 
 
VOID DisplayAssert(LPSTR pszMsg, LPSTR pszAssert, LPSTR pszFile, UINT line); 
 
// *** Include this macro at the top of any source file using *ASSERT*() macros *** 
#define SZTHISFILEstatic char _szThisFile[] = __FILE__; 
 
// Our versions of the ASSERT and FAIL macros. 
#define ASSERT(fTest, szMsg)                                \ 
    if (!(fTest))                                           \ 
        {                                                   \ 
        static char szMsgCode[] = szMsg;                    \ 
        static char szAssert[] = #fTest;                    \ 
        DisplayAssert(szMsgCode, szAssert, _szThisFile, __LINE__); \ 
        } 
 
#define FAIL(szMsg)                                         \ 
        { static char szMsgCode[] = szMsg;                    \ 
        DisplayAssert(szMsgCode, "FAIL", _szThisFile, __LINE__); } 
 
#else  // DEBUG 
 
#define SZTHISFILE 
#define ASSERT(fTest, err) 
#define FAIL(err) 
 
#endif// DEBUG 
 
 
//--------------------------------------------------------------------------- 
// Macro that checks a pointer for validity on input 
//--------------------------------------------------------------------------- 
#ifdef DEBUG 
#define CHECK_POINTER(val) if (!(val) || IsBadWritePtr((void *)(val), sizeof(void *))) return E_POINTER 
#else  // DEBUG 
#define CHECK_POINTER(val) 
#endif // DEBUG 
 
 
//--------------------------------------------------------------------------- 
// Track signatures on objects for debugging 
//--------------------------------------------------------------------------- 
#ifdef DEBUG 
 
#define SIG_destroyed 'XxXx' 
#define DECLARE_SIGNATURE(x)    DWORD __sig 
#define CHECK_SIGNATURE(x)      ASSERT(this->__sig == (x), "Bad signature") 
#define INIT_SIGNATURE(x)       this->__sig = (x) 
#define DESTROY_SIGNATURE(x)    this->__sig = SIG_destroyed 
 
#else // DEBUG 
 
#define DECLARE_SIGNATURE(x) 
#define CHECK_SIGNATURE(x) 
#define INIT_SIGNATURE(x) 
#define DESTROY_SIGNATURE(x) 
 
#endif // DEBUG 
 
//--- EOF -------------------------------------------------------------------