|
|
/*++
Copyright (c) 1998-1999 Microsoft Corporation All rights reserved.
Module Name:
dbgmsg.cxx
Abstract:
Debug Library
Author:
Steve Kiraly (SteveKi) 10-Dec-1995
Revision History:
--*/ #include "precomp.hxx"
#pragma hdrstop
//
// Singleton instance.
//
namespace { TDebugMsg DebugMsg; }
/*++
Title:
TDebugMsg_Register
Routine Description:
Registers the prefix, device, trace and break level with the global debug messaging library.
Arguments:
pszPrefix - pointer to prefix string. uDevice - debug device type. eLevel - message trace level. eBreak - debug break level.
Return Value:
TRUE device registered, FALSE error occurred.
--*/ extern "C" BOOL TDebugMsg_Register( IN LPCTSTR pszPrefix, IN UINT uDevice, IN INT eLevel, IN INT eBreak ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access the heap.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Don't re-initialize the message class.
//
if (!DebugMsg.Valid()) { //
// Initialize the debug heap.
//
DebugMsg.Initialize(pszPrefix, uDevice, eLevel, eBreak);
//
// Expose the debug message class for the debug extension.
//
Globals.DebugMsgSingleton = &DebugMsg; }
//
// Return the message class status.
//
return DebugMsg.Valid(); }
/*++
Title:
TDebugMsg_Release
Routine Description:
Arguments:
Return Value:
--*/ extern "C" VOID TDebugMsg_Release( VOID ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access the heap.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Destroy the message class.
//
DebugMsg.Destroy();
//
// Remote the debug message class from the debug extension.
//
Globals.DebugMsgSingleton = NULL; }
/*++
Title:
TDebugMsg_vEnable
Routine Description:
Enabled the debug messaging class, debug device will be called when a message is asked to be sent.
Arguments:
None
Return Value:
None
--*/ extern "C" VOID TDebugMsg_Enable( VOID ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Enable(); } }
/*++
Title:
TDebugMsg_Disable
Routine Description:
Disable the debug messaging class, debug device will not be called when a message is asked to be sent.
Arguments:
None
Return Value:
None
--*/ extern "C" VOID TDebugMsg_Disable( VOID ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Disable(); } }
/*++
Title:
TDebugMsg_Attach
Routine Description:
Attaches the output device specified by uDevice and pszConfiguration. if this routing is successfull, the handle to the attached device is returned in phDevice.
Arguments:
phDevice - pointer to device handle were to return newly created add attached output device. uDevice, - output device type to attached, see header file for an enumeration of valid output device types. pszConfiguration - pointer to output device specific configuration string.
Return Value:
TRUE device was attached, FALSE error occurred.
--*/ extern "C" BOOL TDebugMsg_Attach( IN HANDLE *phDevice, IN UINT uDevice, IN LPCTSTR pszConfiguration ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Is the message class valid.
//
BOOL bRetval = DebugMsg.Valid();
//
// Only do the command if the message class is enabled.
//
if (bRetval) { bRetval = DebugMsg.Attach(phDevice, uDevice, pszConfiguration); }
return bRetval; }
/*++
Title:
TDebugMsg_Detach
Routine Description:
Removes the device specified by the handle from the list of output devices.
Arguments:
phDevice - Pointer to debug device handle
Return Value:
None
--*/ extern "C" VOID TDebugMsg_Detach( IN HANDLE *phDevice ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Detach(phDevice); } }
/*++
Title:
TDebugMsg_MsgA
Routine Description:
This function outputs the specified message to the list of output debug devices. Not this routine is not a general purpose output routine, the pszMessage parameter must be have been allocated from the internal debug heap.
Arguments:
uLevel - debug trace and break level pszFile - pointer to file name uLine - file line number pszModulePrefix - pointe to module prefix, OPTIONAL pszMessage - pointer to post formatted message string, that was returned from a call to TDebugMsg_pszFmt, if this pointer is non null then it relased back to the internal debug heap before this routine returns.
Return Value:
None
--*/ extern "C" VOID TDebugMsg_MsgA( IN UINT uLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPSTR pszMessage ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { //
// Message class is not initialized, well lets do it now.
//
DebugMsg.Initialize(NULL, kDbgDebugger, kDbgTrace, kDbgNone);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { INTERNAL_DELETE [] pszMessage; } } }
/*++
Title:
TDebugMsg_Msg
Routine Description:
This function outputs the specified message to the list of output debug devices. Not this routine is not a general purpose output routine, the pszMessage parameter must be have been allocated from the internal debug heap.
Arguments:
uLevel - debug trace and break level pszFile - pointer to file name uLine - file line number pszModulePrefix - pointe to module prefix, OPTIONAL pszMessage - pointer to post formatted message string, that was returned from a call to TDebugMsg_pszFmt, if this pointer is non null then it relased back to the internal debug heap before this routine returns.
Return Value:
Pointer to allocated string, NULL if failure.
--*/ extern "C" VOID TDebugMsg_MsgW( IN UINT uLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPWSTR pszMessage ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { //
// Message class is not initialized, well lets do it now.
//
DebugMsg.Initialize(NULL, kDbgDebugger, kDbgTrace, kDbgNone);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { INTERNAL_DELETE [] pszMessage; } } }
/*++
Title:
TDebugMsg_Msg
Routine Description:
This function outputs the specified message to the list of output debug devices. Not this routine is not a general purpose output routine, the pszMessage parameter must be have been allocated from the internal debug heap.
Arguments:
uLevel - debug trace and break level pszFile - pointer to file name uLine - file line number pszModulePrefix - pointe to module prefix, OPTIONAL pszMessage - pointer to post formatted message string, that was returned from a call to TDebugMsg_pszFmt, if this pointer is non null then it relased back to the internal debug heap before this routine returns.
Return Value:
None
--*/ VOID TDebugMsg_Msg( IN UINT uLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPSTR pszMessage ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { //
// Message class is not initialized, well lets do it now.
//
DebugMsg.Initialize(NULL, kDbgDebugger, kDbgTrace, kDbgNone);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { INTERNAL_DELETE [] pszMessage; } } }
/*++
Title:
TDebugMsg_Msg
Routine Description:
This function outputs the specified message to the list of output debug devices. Not this routine is not a general purpose output routine, the pszMessage parameter must be have been allocated from the internal debug heap.
Arguments:
uLevel - debug trace and break level pszFile - pointer to file name uLine - file line number pszModulePrefix - pointe to module prefix, OPTIONAL pszMessage - pointer to post formatted message string, that was returned from a call to TDebugMsg_pszFmt, if this pointer is non null then it relased back to the internal debug heap before this routine returns.
Return Value:
None
--*/ VOID TDebugMsg_Msg( IN UINT uLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPWSTR pszMessage ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { //
// Message class is not initialized, well lets do it now.
//
DebugMsg.Initialize(NULL, kDbgDebugger, kDbgTrace, kDbgNone);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.Msg(uLevel, pszFile, uLine, pszModulePrefix, pszMessage); } else { INTERNAL_DELETE [] pszMessage; } } }
/*++
Title:
TDebugMsg_FmtA
Routine Description:
This function takes a format string and a list of arguments and returns a allocated string that is formated, specified by the format string.
Arguments:
pszFmt - pointer to format string. ... - varable number of arguments.
Return Value:
Pointer to allocated string, NULL if failure.
--*/ extern "C" LPSTR WINAPIV TDebugMsg_FmtA( IN LPCSTR pszFmt, IN ... ) { va_list pArgs;
va_start(pArgs, pszFmt);
LPSTR pszResult = vFormatA(pszFmt, pArgs);
va_end(pArgs);
return pszResult; }
/*++
Title:
TDebugMsg_FmtW
Routine Description:
This function takes a format string and a list of arguments and returns a allocated string that is formated, specified by the format string.
Arguments:
pszFmt - pointer to format string. ... - varable number of arguments.
Return Value:
Pointer to allocated string, NULL if failure.
--*/ extern "C" LPWSTR WINAPIV TDebugMsg_FmtW( IN LPCWSTR pszFmt, IN ... ) { va_list pArgs;
va_start(pArgs, pszFmt);
LPWSTR pszResult = vFormatW(pszFmt, pArgs);
va_end(pArgs);
return pszResult; }
/*++
Title:
TDebugMsg_Fmt
Routine Description:
This function takes a format string and a list of arguments and returns a allocated string that is formated, specified by the format string.
Arguments:
pszFmt - pointer to format string. ... - varable number of arguments.
Return Value:
Pointer to allocated string, NULL if failure.
--*/ LPSTR WINAPIV TDebugMsg_Fmt( IN LPCSTR pszFmt, IN ... ) { va_list pArgs;
va_start(pArgs, pszFmt);
LPSTR pszResult = vFormatA(pszFmt, pArgs);
va_end(pArgs);
return pszResult; }
/*++
Title:
TDebugMsg_Fmt
Routine Description:
This function takes a format string and a list of arguments and returns a allocated string that is formated, specified by the format string.
Arguments:
pszFmt - pointer to format string. ... - varable number of arguments.
Return Value:
Pointer to allocated format string, NULL if failure.
--*/ LPWSTR WINAPIV TDebugMsg_Fmt( IN LPCWSTR pszFmt, IN ... ) { va_list pArgs;
va_start(pArgs, pszFmt);
LPWSTR pszResult = vFormatW(pszFmt, pArgs);
va_end(pArgs);
return pszResult; }
/*++
Title:
TDebugMsg_SetMessageFieldFormat
Routine Description:
Arguments:
Return Value:
None.
--*/ VOID TDebugMsg_SetMessageFieldFormat( IN UINT eField, IN LPTSTR pszFormat ) { //
// Initialize the debug library, it not already initialized.
//
DebugLibraryInitialize();
//
// Hold the critical section while we access message class.
//
TDebugCriticalSection::TLock CS(GlobalCriticalSection);
//
// Only do the command if the message class is enabled.
//
if (DebugMsg.Valid()) { DebugMsg.SetMessageFieldFormat(eField, pszFormat); } }
|