Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

184 lines
6.4 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-2000 Microsoft Corporation
//
// Module Name:
// TraceTag.h
//
// Abstract:
// Definition of the CTraceTag class.
//
// Implementation File:
// TraceTag.cpp
//
// Author:
// David Potter (davidp) May 28, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _TRACETAG_H_
#define _TRACETAG_H_
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
class CTraceTag;
#endif
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
#define TRACE_TAG_REG_SECTION TEXT("Debug")
#define TRACE_TAG_REG_SECTION_FMT TRACE_TAG_REG_SECTION TEXT("\\%s")
#define TRACE_TAG_REG_FILE TEXT("Trace File")
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//
// CTraceTag
//
// Purpose:
// Object containing a specific set of trace settings allowing trace
// output to go to multiple outputs.
//
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
class CTraceTag : public CString
{
friend class CTraceDialog;
friend void InitAllTraceTags(void);
friend void CleanupAllTraceTags(void);
public:
CTraceTag(IN LPCTSTR pszSubsystem, IN LPCTSTR pszName, IN UINT uiFlagsDefault = NULL);
~CTraceTag(void);
enum TraceFlags
{
tfCom2 = 1,
tfFile = 2,
tfDebug = 4,
tfBreak = 8
};
// Attributes
protected:
UINT m_uiFlags;
UINT m_uiFlagsDialog;
UINT m_uiFlagsDefault;
UINT m_uiFlagsDialogStart; // of Selection...
LPCTSTR m_pszSubsystem;
LPCTSTR m_pszName;
LPCTSTR PszSubsystem(void) { return m_pszSubsystem; }
LPCTSTR PszName(void) { return m_pszName; }
void ConstructRegState(OUT CString & rstr);
void SetFlags(IN UINT tf, IN BOOL bEnable);
void SetFlagsDialog(IN UINT tf, IN BOOL bEnable);
void SetBCom2(IN BOOL bEnable) { SetFlags(tfCom2, bEnable); }
void SetBCom2Dialog(IN BOOL bEnable) { SetFlagsDialog(tfCom2, bEnable); }
BOOL BCom2Dialog(void) const { return m_uiFlagsDialog & tfCom2 ? TRUE : FALSE; }
void SetBFile(IN BOOL bEnable) { SetFlags(tfFile, bEnable); }
void SetBFileDialog(IN BOOL bEnable) { SetFlagsDialog(tfFile, bEnable); }
BOOL BFileDialog(void) const { return m_uiFlagsDialog & tfFile ? TRUE : FALSE; }
void SetBDebug(IN BOOL bEnable) { SetFlags(tfDebug, bEnable); }
void SetBDebugDialog(IN BOOL bEnable) { SetFlagsDialog(tfDebug, bEnable); }
BOOL BDebugDialog(void) const { return m_uiFlagsDialog & tfDebug ? TRUE : FALSE; }
void SetBBreak(IN BOOL bEnable) { SetFlags(tfBreak, bEnable); }
void SetBBreakDialog(IN BOOL bEnable) { SetFlagsDialog(tfBreak, bEnable); }
BOOL BBreakDialog(void) const { return m_uiFlagsDialog & tfBreak ? TRUE : FALSE; }
public:
BOOL BCom2(void) const { return m_uiFlags & tfCom2 ? TRUE : FALSE; }
BOOL BFile(void) const { return m_uiFlags & tfFile ? TRUE : FALSE; }
BOOL BDebug(void) const { return m_uiFlags & tfDebug ? TRUE : FALSE; }
BOOL BBreak(void) const { return m_uiFlags & tfBreak ? TRUE : FALSE; }
BOOL BAny(void) const { return m_uiFlags != 0; }
// Operations
public:
// Implementation
public:
void TraceV(IN LPCTSTR pszFormat, va_list);
protected:
void Init(void);
static LPCTSTR s_pszCom2;
static LPCTSTR s_pszFile;
static LPCTSTR s_pszDebug;
static LPCTSTR s_pszBreak;
static LPCTSTR PszFile(void);
static CTraceTag * s_ptagFirst;
static CTraceTag * s_ptagLast;
CTraceTag * m_ptagNext;
// static HANDLE s_hfileCom2;
static CRITICAL_SECTION s_critsec;
static BOOL s_bCritSecValid;
static BOOL BCritSecValid(void) { return s_bCritSecValid; }
}; //*** class CTraceTag
#endif // _DEBUG
/////////////////////////////////////////////////////////////////////////////
// Global Functions and Data
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
extern CTraceTag g_tagAlways;
extern CTraceTag g_tagError;
void __cdecl Trace(IN OUT CTraceTag & rtag, IN LPCTSTR pszFormat, ...);
void TraceError(IN OUT CException & rexcept);
void TraceError(IN LPCTSTR pszModule, IN SC sc);
void InitAllTraceTags(void);
void CleanupAllTraceTags(void);
void TraceMenu(IN OUT CTraceTag & rtag, IN const CMenu * pmenu, IN LPCTSTR pszPrefix);
// extern LPTSTR g_pszTraceIniFile;
extern CString g_strTraceFile;
extern BOOL g_bBarfDebug;
#else // _DEBUG
// Expand to ";", <tab>, one "/" followed by another "/"
// (which is //).
// NOTE: This means the Trace statements have to be on ONE line.
// If you need multiple line Trace statements, enclose them in
// a #ifdef _DEBUG block.
#define Trace ; /##/
inline void TraceError(IN OUT CException & rexcept) { }
inline void TraceError(IN LPCTSTR pszModule, IN SC sc) { }
#define TraceMenu(_rtag, _pmenu, _pszPrefix)
inline void InitAllTraceTags(void) { }
inline void CleanupAllTraceTags(void) { }
#endif // _DEBUG
/////////////////////////////////////////////////////////////////////////////
#endif // _TRACETAG_H_