/*++ Copyright (c) 1998-1999 Microsoft Corporation All rights reserved. Module Name: dbgstate.cxx Abstract: status support Author: Steve Kiraly (SteveKi) 2-Mar-1997 Revision History: --*/ #include "precomp.hxx" #pragma hdrstop #include "dbgreslt.hxx" #include "dbgstate.hxx" #if DBG /******************************************************************** Debugging TStatus base members ********************************************************************/ TStatusBase:: TStatusBase( IN BOOL dwStatus, IN UINT uDbgLevel ) : m_dwStatus(dwStatus), m_uDbgLevel(uDbgLevel), m_dwStatusSafe1(-1), m_dwStatusSafe2(-1), m_dwStatusSafe3(-1), m_uLine(0), m_pszFile(NULL) { } TStatusBase:: ~TStatusBase( VOID ) { } TStatusBase& TStatusBase:: pNoChk( VOID ) { m_pszFile = NULL; m_uLine = 0; return (TStatusBase&)*this; } TStatusBase& TStatusBase:: pSetInfo( UINT uLine, LPCTSTR pszFile ) { m_uLine = uLine; m_pszFile = pszFile; return (TStatusBase&)*this; } VOID TStatusBase:: pConfig( IN UINT uDbgLevel, IN DWORD dwStatusSafe1, IN DWORD dwStatusSafe2, IN DWORD dwStatusSafe3 ) { m_uDbgLevel = uDbgLevel; m_dwStatusSafe1 = dwStatusSafe1; m_dwStatusSafe2 = dwStatusSafe2; m_dwStatusSafe3 = dwStatusSafe3; } DWORD TStatusBase:: dwGeTStatusBase( VOID ) const { // // Assert if we are reading an UnInitalized variable. // if (m_dwStatus == kUnInitializedValue) { DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatus variable!***\n"))); DBG_BREAK(); } // // Return the error value. // return m_dwStatus; } DWORD TStatusBase:: operator=( IN DWORD dwStatus ) { // // Do nothing if the file and line number are cleared. // This is the case when the NoChk method is used. // if (m_uLine && m_pszFile) { // // Get the last error value. // DWORD LastError = GetLastError(); // // Check if we have an error, and it's not one of the accepted "safe" errors. // if (dwStatus != ERROR_SUCCESS && dwStatus != m_dwStatusSafe1 && dwStatus != m_dwStatusSafe2 && dwStatus != m_dwStatusSafe3) { // // Convert the last error value to a string. // TDebugResult Result(dwStatus); DBG_MSG(m_uDbgLevel, (_T("TStatus failure, %d, %s\n%s %d\n"), dwStatus, Result.GetErrorString(), m_pszFile, m_uLine)); } // // Restore the last error, the message call may have destoyed the last // error value, we don't want the caller to loose this value. // SetLastError(LastError); } return m_dwStatus = dwStatus; } TStatusBase:: operator DWORD( VOID ) const { return dwGeTStatusBase(); } /******************************************************************** Debugging TStatus members ********************************************************************/ TStatus:: TStatus( IN DWORD dwStatus ) : TStatusBase(dwStatus, kDbgWarning) { } TStatus:: ~TStatus( VOID ) { } /******************************************************************** Debugging TStatusB base members ********************************************************************/ TStatusBBase:: TStatusBBase( IN BOOL bStatus, IN UINT uDbgLevel ) : m_bStatus(bStatus), m_uDbgLevel(uDbgLevel), m_dwStatusSafe1(-1), m_dwStatusSafe2(-1), m_dwStatusSafe3(-1), m_uLine(0), m_pszFile(NULL) { } TStatusBBase:: ~TStatusBBase( VOID ) { } TStatusBBase& TStatusBBase:: pNoChk( VOID ) { m_pszFile = NULL; m_uLine = 0; return (TStatusBBase&)*this; } TStatusBBase& TStatusBBase:: pSetInfo( IN UINT uLine, IN LPCTSTR pszFile ) { m_uLine = uLine; m_pszFile = pszFile; return (TStatusBBase&)*this; } VOID TStatusBBase:: pConfig( IN UINT uDbgLevel, IN DWORD dwStatusSafe1, IN DWORD dwStatusSafe2, IN DWORD dwStatusSafe3 ) { m_uDbgLevel = uDbgLevel; m_dwStatusSafe1 = dwStatusSafe1; m_dwStatusSafe2 = dwStatusSafe2; m_dwStatusSafe3 = dwStatusSafe3; } BOOL TStatusBBase:: bGetStatus( VOID ) const { // // Assert if we are reading an UnInitalized variable. // if (m_bStatus == kUnInitializedValue) { DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatusB variable!***\n"))); DBG_BREAK(); } // // Return the error value. // return m_bStatus; } BOOL TStatusBBase:: operator=( IN BOOL bStatus ) { // // Do nothing if the file and line number are cleared. // This is the case when the NoChk method is used. // if (m_uLine && m_pszFile) { // // Check if we have an error, and it's not one of the two // accepted "safe" errors. // if (!bStatus) { // // Get the last error value. // DWORD LastError = GetLastError(); // // If the last error is not one of the safe values then display an error message // if (LastError != m_dwStatusSafe1 && LastError != m_dwStatusSafe2 && LastError != m_dwStatusSafe3) { // // Convert the last error value to a string. // TDebugResult Result(LastError); DBG_MSG(m_uDbgLevel, (_T("TStatusB failure, %d, %s\n%s %d\n"), LastError, Result.GetErrorString(), m_pszFile, m_uLine)); } // // Restore the last error, the message call may have destoyed the last // error value, we don't want the caller to loose this value. // SetLastError(LastError); } } return m_bStatus = bStatus; } TStatusBBase:: operator BOOL( VOID ) const { return bGetStatus(); } /******************************************************************** Debugging TStatusB members ********************************************************************/ TStatusB:: TStatusB( IN BOOL bStatus ) : TStatusBBase(bStatus, kDbgWarning) { } TStatusB:: ~TStatusB( VOID ) { } /******************************************************************** Debugging TStatusH base members ********************************************************************/ TStatusHBase:: TStatusHBase( IN HRESULT hrStatus, IN UINT uDbgLevel ) : m_hrStatus(hrStatus), m_uDbgLevel(uDbgLevel), m_hrStatusSafe1(-1), m_hrStatusSafe2(-1), m_hrStatusSafe3(-1), m_uLine(0), m_pszFile(NULL) { } TStatusHBase:: ~TStatusHBase( VOID ) { } TStatusHBase& TStatusHBase:: pNoChk( VOID ) { m_pszFile = NULL; m_uLine = 0; return (TStatusHBase&)*this; } TStatusHBase& TStatusHBase:: pSetInfo( IN UINT uLine, IN LPCTSTR pszFile ) { m_uLine = uLine; m_pszFile = pszFile; return (TStatusHBase&)*this; } VOID TStatusHBase:: pConfig( IN UINT uDbgLevel, IN DWORD hrStatusSafe1, IN DWORD hrStatusSafe2, IN DWORD hrStatusSafe3 ) { m_uDbgLevel = uDbgLevel; m_hrStatusSafe1 = hrStatusSafe1; m_hrStatusSafe2 = hrStatusSafe2; m_hrStatusSafe3 = hrStatusSafe3; } HRESULT TStatusHBase:: hrGetStatus( VOID ) const { // // Assert if we are reading an UnInitalized variable. // if (m_hrStatus == kUnInitializedValue) { DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatusH variable!***\n"))); DBG_BREAK(); } // // Return the error code. // return m_hrStatus; } HRESULT TStatusHBase:: operator=( IN HRESULT hrStatus ) { // // Do nothing if the file and line number are cleared. // This is the case when the NoChk method is used. // if (m_uLine && m_pszFile) { // // Check if we have an error, and it's not one of the two // accepted "safe" errors. // if (FAILED(hrStatus)) { // // Get the last error value. // DWORD LastError = GetLastError(); // // If the last error is not one of the safe values then display an error message // if (hrStatus != m_hrStatusSafe1 && hrStatus != m_hrStatusSafe2 && hrStatus != m_hrStatusSafe3) { TDebugResult Result( HRESULT_FACILITY(hrStatus) == FACILITY_WIN32 ? HRESULT_CODE(hrStatus) : hrStatus); DBG_MSG(m_uDbgLevel, (_T("TStatusH failure, %x, %s\n%s %d\n"), hrStatus, Result.GetErrorString(), m_pszFile, m_uLine)); } // // Restore the last error, the message call may have destoyed the last // error value, we don't want the caller to loose this value. // SetLastError(LastError); } } return m_hrStatus = hrStatus; } TStatusHBase:: operator HRESULT( VOID ) const { return hrGetStatus(); } /******************************************************************** Debugging TStatusH members ********************************************************************/ TStatusH:: TStatusH( IN HRESULT hrStatus ) : TStatusHBase(hrStatus, kDbgWarning) { } TStatusH:: ~TStatusH( VOID ) { } #endif