|
|
/***
*ClRtlDbg.h - Supports debugging features for clusters (from the C runtime library). * * Copyright (c) 1994-1998, Microsoft Corporation. All rights reserved. * *Purpose: * Support Cluster debugging features. * * [Public] * ****/
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef __CLRTLDBG_H_
#define __CLRTLDBG_H_
#ifdef __cplusplus
extern "C" { #endif /* __cplusplus */
#ifndef CLRTL_INCLUDE_DEBUG_REPORTING
/****************************************************************************
* * Debug OFF * Debug OFF * Debug OFF * ***************************************************************************/
#define _CLRTL_ASSERT(expr) ((void)0)
#define _CLRTL_ASSERTE(expr) ((void)0)
#define _CLRTL_RPT0(rptno, msg)
#define _CLRTL_RPT1(rptno, msg, arg1)
#define _CLRTL_RPT2(rptno, msg, arg1, arg2)
#define _CLRTL_RPT3(rptno, msg, arg1, arg2, arg3)
#define _CLRTL_RPT4(rptno, msg, arg1, arg2, arg3, arg4)
#define _CLRTL_RPTF0(rptno, msg)
#define _CLRTL_RPTF1(rptno, msg, arg1)
#define _CLRTL_RPTF2(rptno, msg, arg1, arg2)
#define _CLRTL_RPTF3(rptno, msg, arg1, arg2, arg3)
#define _CLRTL_RPTF4(rptno, msg, arg1, arg2, arg3, arg4)
#define _ClRtlSetReportHook(f) ((void)0)
#define _ClRtlSetReportMode(t, f) ((int)0)
#define _ClRtlSetReportFile(t, f) ((void)0)
#define _ClRtlDbgBreak() ((void)0)
#else /* CLRTL_INCLUDE_DEBUG_REPORTING */
/****************************************************************************
* * Debug ON * Debug ON * Debug ON * ***************************************************************************/
/* Define _CLRTLIMP */
#ifndef _CLRTLIMP
//#ifdef _DLL
//#define _CLRTLIMP __declspec(dllimport)
//#else /* ndef _DLL */
#define _CLRTLIMP
//#endif /* _DLL */
#endif /* _CLRTLIMP */
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
/****************************************************************************
* * Debug Reporting * ***************************************************************************/
typedef void *_HFILE; /* file handle pointer */
#define _CLRTLDBG_WARN 0
#define _CLRTLDBG_ERROR 1
#define _CLRTLDBG_ASSERT 2
#define _CLRTLDBG_ERRCNT 3
#define _CLRTLDBG_MODE_FILE 0x1
#define _CLRTLDBG_MODE_DEBUG 0x2
#define _CLRTLDBG_MODE_WNDW 0x4
#define _CLRTLDBG_REPORT_MODE -1
#define _CLRTLDBG_INVALID_HFILE ((_HFILE)-1)
#define _CLRTLDBG_HFILE_ERROR ((_HFILE)-2)
#define _CLRTLDBG_FILE_STDOUT ((_HFILE)-4)
#define _CLRTLDBG_FILE_STDERR ((_HFILE)-5)
#define _CLRTLDBG_REPORT_FILE ((_HFILE)-6)
//#if defined(_DLL) && defined(_M_IX86)
//#define _clrtlAssertBusy (*__p__clrtlAssertBusy())
//_CLRTLIMP long * __cdecl __p__clrtlAssertBusy(void);
//#else /* !(defined(_DLL) && defined(_M_IX86)) */
//_CLRTLIMP extern long _clrtlAssertBusy;
//#endif /* defined(_DLL) && defined(_M_IX86) */
typedef int (__cdecl * _CLRTL_REPORT_HOOK)(int, char *, int *);
_CLRTLIMP _CLRTL_REPORT_HOOK __cdecl _ClRtlSetReportHook( _CLRTL_REPORT_HOOK );
_CLRTLIMP int __cdecl _ClRtlSetReportMode( int, int );
_CLRTLIMP _HFILE __cdecl _ClRtlSetReportFile( int, _HFILE );
_CLRTLIMP int __cdecl _ClRtlDbgReport( int, const char *, int, const char *, const char *, ...);
/* Asserts */
#define _CLRTL_ASSERT(expr) \
do { if (!(expr) && \ (1 == _ClRtlDbgReport(_CLRTLDBG_ASSERT, __FILE__, __LINE__, NULL, NULL))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_ASSERTE(expr) \
do { if (!(expr) && \ (1 == _ClRtlDbgReport(_CLRTLDBG_ASSERT, __FILE__, __LINE__, NULL, #expr))) \ _ClRtlDbgBreak(); } while (0)
/* Reports with no file/line info */
#define _CLRTL_RPT0(rptno, msg) \
do { if ((1 == _ClRtlDbgReport(rptno, NULL, 0, NULL, "%s", msg))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPT1(rptno, msg, arg1) \
do { if ((1 == _ClRtlDbgReport(rptno, NULL, 0, NULL, msg, arg1))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPT2(rptno, msg, arg1, arg2) \
do { if ((1 == _ClRtlDbgReport(rptno, NULL, 0, NULL, msg, arg1, arg2))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPT3(rptno, msg, arg1, arg2, arg3) \
do { if ((1 == _ClRtlDbgReport(rptno, NULL, 0, NULL, msg, arg1, arg2, arg3))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPT4(rptno, msg, arg1, arg2, arg3, arg4) \
do { if ((1 == _ClRtlDbgReport(rptno, NULL, 0, NULL, msg, arg1, arg2, arg3, arg4))) \ _ClRtlDbgBreak(); } while (0)
/* Reports with file/line info */
#define _CLRTL_RPTF0(rptno, msg) \
do { if ((1 == _ClRtlDbgReport(rptno, __FILE__, __LINE__, NULL, "%s", msg))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPTF1(rptno, msg, arg1) \
do { if ((1 == _ClRtlDbgReport(rptno, __FILE__, __LINE__, NULL, msg, arg1))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPTF2(rptno, msg, arg1, arg2) \
do { if ((1 == _ClRtlDbgReport(rptno, __FILE__, __LINE__, NULL, msg, arg1, arg2))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPTF3(rptno, msg, arg1, arg2, arg3) \
do { if ((1 == _ClRtlDbgReport(rptno, __FILE__, __LINE__, NULL, msg, arg1, arg2, arg3))) \ _ClRtlDbgBreak(); } while (0)
#define _CLRTL_RPTF4(rptno, msg, arg1, arg2, arg3, arg4) \
do { if ((1 == _ClRtlDbgReport(rptno, __FILE__, __LINE__, NULL, msg, arg1, arg2, arg3, arg4))) \ _ClRtlDbgBreak(); } while (0)
#if defined(_M_IX86) && !defined(_CLRTL_PORTABLE)
#define _ClRtlDbgBreak() __asm { int 3 }
#elif defined(_M_ALPHA) && !defined(_CLRTL_PORTABLE)
void _BPT(); #pragma intrinsic(_BPT)
#define _ClRtlDbgBreak() _BPT()
#else
_CLRTLIMP void __cdecl _ClRtlDbgBreak( void ); #endif
#endif // CLRTL_INCLUDE_DEBUG_REPORTING
#ifdef __cplusplus
} #endif /* __cplusplus */
#endif // __CLRTLDBG_H_
|