1599 lines
54 KiB
C++
1599 lines
54 KiB
C++
//===========================================================================//
|
|
// Purpose : Method definitions for the TIO_PrintHandler class.
|
|
//
|
|
// Public methods include:
|
|
// - NewInstance, DeleteInstance, GetInstance, HasInstance
|
|
// - Info, Warning, Error, Fatal, Trace, Internal, Direct
|
|
// - Write
|
|
// - WriteBanner
|
|
// - WriteCenter
|
|
// - WriteVersion
|
|
// - WriteHelp
|
|
// - SetStdioOutput
|
|
// - SetCustomOutput
|
|
// - SetLogFileOutput
|
|
// - SetUserFileOutput
|
|
// - AddInfoAcceptRegExp
|
|
// - AddInfoRejectRegExp
|
|
// - AddWarningAcceptRegExp
|
|
// - AddWarningRejectRegExp
|
|
// - AddErrorAcceptRegExp
|
|
// - AddErrorRejectRegExp
|
|
// - AddTraceAcceptRegExp
|
|
// - AddTraceRejectRegExp
|
|
// - FindUserName
|
|
// - FindHostName
|
|
// - FindWorkingDir
|
|
// - EnableOutput, DisableOutput
|
|
// - IsOutputEnabled
|
|
// - IsWithinMaxWarningCount
|
|
// - IsWithinMaxErrorCount
|
|
// - IsWithinMaxCount
|
|
// - IsValidMaxWarningCount
|
|
// - IsValidMaxErrorCount
|
|
// - IsValidNew
|
|
//
|
|
// Protected methods include:
|
|
// - TIO_PrintHandler_c, ~TIO_PrintHandler_c
|
|
//
|
|
// Private methods include:
|
|
// - WriteMessage_
|
|
// - FormatMessage_
|
|
// - PrefixMessage_
|
|
// - OutputMessage_
|
|
// - ApplySystemCommand_
|
|
//
|
|
//===========================================================================//
|
|
|
|
#include <cstdio>
|
|
#include <cstdarg>
|
|
#include <cstring>
|
|
#include <string>
|
|
using namespace std;
|
|
|
|
#if defined( SUN8 ) || defined( SUN10 )
|
|
#include <time.h>
|
|
#endif
|
|
|
|
#include "TC_Typedefs.h"
|
|
#include "TC_StringUtils.h"
|
|
#include "TC_Name.h"
|
|
#include "TCT_NameList.h"
|
|
|
|
#include "TIO_Typedefs.h"
|
|
#include "TIO_StringText.h"
|
|
#include "TIO_SkinHandler.h"
|
|
#include "TIO_PrintHandler.h"
|
|
|
|
// Initialize the user message "singleton" class, as needed
|
|
TIO_PrintHandler_c* TIO_PrintHandler_c::pinstance_ = 0;
|
|
|
|
//===========================================================================//
|
|
// Method : TIO_PrintHandler_c
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
TIO_PrintHandler_c::TIO_PrintHandler_c(
|
|
void )
|
|
{
|
|
this->outputs_.isStdioEnabled = false;
|
|
this->outputs_.isCustomEnabled = false;
|
|
this->outputs_.isLogFileEnabled = false;
|
|
this->outputs_.isUserFileEnabled = false;
|
|
|
|
this->display_.pinfoAcceptList = 0;
|
|
this->display_.pinfoRejectList = 0;
|
|
this->display_.pwarningAcceptList = 0;
|
|
this->display_.pwarningRejectList = 0;
|
|
this->display_.perrorAcceptList = 0;
|
|
this->display_.perrorRejectList = 0;
|
|
this->display_.ptraceAcceptList = 0;
|
|
this->display_.ptraceRejectList = 0;
|
|
|
|
this->counts_.warningCount = 0;
|
|
this->counts_.errorCount = 0;
|
|
this->counts_.internalCount = 0;
|
|
|
|
this->counts_.maxWarningCount = UINT_MAX;
|
|
this->counts_.maxErrorCount = 1;
|
|
|
|
this->counts_.isMaxWarningEnabled = true;
|
|
this->counts_.isMaxErrorEnabled = true;
|
|
|
|
this->formats_.timeStampsEnabled = false;
|
|
this->formats_.srPrefix = "";
|
|
|
|
pinstance_ = 0;
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : ~TIO_PrintHandler_c
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
TIO_PrintHandler_c::~TIO_PrintHandler_c(
|
|
void )
|
|
{
|
|
TCT_NameList_c< TC_Name_c >* pinfoAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* pinfoRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoRejectList );
|
|
TCT_NameList_c< TC_Name_c >* pwarningAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* pwarningRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningRejectList );
|
|
TCT_NameList_c< TC_Name_c >* perrorAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* perrorRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorRejectList );
|
|
TCT_NameList_c< TC_Name_c >* ptraceAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* ptraceRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceRejectList );
|
|
|
|
delete pinfoAcceptList;
|
|
delete pinfoRejectList;
|
|
delete pwarningAcceptList;
|
|
delete pwarningRejectList;
|
|
delete perrorAcceptList;
|
|
delete perrorRejectList;
|
|
delete ptraceAcceptList;
|
|
delete ptraceRejectList;
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : NewInstance
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::NewInstance(
|
|
void )
|
|
{
|
|
pinstance_ = new TC_NOTHROW TIO_PrintHandler_c;
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : DeleteInstance
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::DeleteInstance(
|
|
void )
|
|
{
|
|
if( pinstance_ )
|
|
{
|
|
delete pinstance_;
|
|
pinstance_ = 0;
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : GetInstance
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
TIO_PrintHandler_c& TIO_PrintHandler_c::GetInstance(
|
|
bool newInstance )
|
|
{
|
|
if( !pinstance_ )
|
|
{
|
|
if( newInstance )
|
|
{
|
|
NewInstance( );
|
|
|
|
if( pinstance_ )
|
|
{
|
|
pinstance_->SetStdioOutput( stdout );
|
|
}
|
|
}
|
|
}
|
|
return( *pinstance_ );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : HasInstance
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::HasInstance(
|
|
void )
|
|
{
|
|
return( pinstance_ ? true : false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Info
|
|
// Purpose : Format and print the given info message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Info(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Info( TIO_PRINT_INFO, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Info(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
string srText( TIO_PSZ_STR( pszText ));
|
|
if(( srText.length( ) > 1 ) && ( srText[srText.length( )-1] == '\n' ))
|
|
{
|
|
srText = srText.substr( 0, srText.length( )-1 );
|
|
}
|
|
|
|
TCT_NameList_c< TC_Name_c >* pinfoAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* pinfoRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoRejectList );
|
|
|
|
mode = ( !pinfoAcceptList ? mode : TIO_PRINT_UNDEFINED );
|
|
if( pinfoAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( pinfoAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_INFO;
|
|
}
|
|
}
|
|
if( pinfoRejectList && ( mode == TIO_PRINT_INFO ))
|
|
{
|
|
if( pinfoRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
|
|
if( mode != TIO_PRINT_UNDEFINED )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Warning
|
|
// Purpose : Format and print a (recoverable) warning message. The
|
|
// max warning count is checked to determine a return value
|
|
// (ie. do we continue or abort after this warning message).
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Warning(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
bool isValid = this->Warning( TIO_PRINT_WARNING, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Warning(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
bool isValid = true;
|
|
|
|
string srText( TIO_PSZ_STR( pszText ));
|
|
if(( srText.length( ) > 1 ) && ( srText[srText.length( )-1] == '\n' ))
|
|
{
|
|
srText = srText.substr( 0, srText.length( )-1 );
|
|
}
|
|
|
|
TCT_NameList_c< TC_Name_c >* pwarningAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* pwarningRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningRejectList );
|
|
TCT_NameList_c< TC_Name_c >* perrorAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* perrorRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorRejectList );
|
|
|
|
mode = ( !pwarningAcceptList && !perrorAcceptList ? mode : TIO_PRINT_UNDEFINED );
|
|
if( pwarningAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( pwarningAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_WARNING;
|
|
}
|
|
}
|
|
if( pwarningRejectList && ( mode == TIO_PRINT_WARNING ))
|
|
{
|
|
if( pwarningRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
if( perrorAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( perrorAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_ERROR;
|
|
}
|
|
}
|
|
if( perrorRejectList && ( mode == TIO_PRINT_ERROR ))
|
|
{
|
|
if( perrorRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
|
|
if( mode != TIO_PRINT_UNDEFINED )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
|
|
if( mode == TIO_PRINT_ERROR )
|
|
{
|
|
// Update current error count and test against the max error count
|
|
isValid = this->IsValidMaxErrorCount( );
|
|
}
|
|
if( mode == TIO_PRINT_WARNING )
|
|
{
|
|
// Update current warning count and test against the max warning count
|
|
isValid = this->IsValidMaxWarningCount( );
|
|
}
|
|
}
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Error
|
|
// Purpose : Format and print a (non-recoverable) error message. The
|
|
// max error count is checked to determine a return value
|
|
// (ie. do we continue or abort after this error message).
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Error(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
bool isValid = this->Error( TIO_PRINT_ERROR, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Error(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
bool isValid = true;
|
|
|
|
string srText( TIO_PSZ_STR( pszText ));
|
|
if(( srText.length( ) > 1 ) && ( srText[srText.length( )-1] == '\n' ))
|
|
{
|
|
srText = srText.substr( 0, srText.length( )-1 );
|
|
}
|
|
|
|
TCT_NameList_c< TC_Name_c >* perrorAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* perrorRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorRejectList );
|
|
TCT_NameList_c< TC_Name_c >* pwarningAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* pwarningRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningRejectList );
|
|
|
|
mode = ( !perrorAcceptList && !pwarningAcceptList ? mode : TIO_PRINT_UNDEFINED );
|
|
if( perrorAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( perrorAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_ERROR;
|
|
}
|
|
}
|
|
if( perrorRejectList && ( mode == TIO_PRINT_ERROR ))
|
|
{
|
|
if( perrorRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
if( pwarningAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( pwarningAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_WARNING;
|
|
}
|
|
}
|
|
if( pwarningRejectList && ( mode == TIO_PRINT_WARNING ))
|
|
{
|
|
if( pwarningRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
|
|
if( mode != TIO_PRINT_UNDEFINED )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
|
|
if( mode == TIO_PRINT_ERROR )
|
|
{
|
|
// Update current error count and test against the max error count
|
|
isValid = this->IsValidMaxErrorCount( );
|
|
}
|
|
if( mode == TIO_PRINT_WARNING )
|
|
{
|
|
// Update current warning count and test against the max warning count
|
|
isValid = this->IsValidMaxWarningCount( );
|
|
}
|
|
}
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Fatal
|
|
// Purpose : Format and print a (program-specified) fatal message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
// 08/10/12 jeffr : Changed return "void" to "bool" (will always be false)
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Fatal(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Fatal( TIO_PRINT_FATAL, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
return( false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Fatal(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
|
|
return( false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Trace
|
|
// Purpose : Format and print a (user-specified) trace message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
// 08/10/12 jeffr : Replaced "(int)" cast with original "static_cast< int >"
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Trace(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Trace( TIO_PRINT_TRACE, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Trace(
|
|
FILE* pfile,
|
|
size_t lenSpace,
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
FILE* pstream = this->outputs_.stdioOutput.GetStream( );
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pfile );
|
|
}
|
|
|
|
static char szText[TIO_FORMAT_STRING_LEN_MAX];
|
|
if( lenSpace > 0 )
|
|
{
|
|
sprintf( szText, "%*s%s",
|
|
static_cast< int >( lenSpace ), lenSpace ? " " : "", pszText );
|
|
pszText = szText;
|
|
}
|
|
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Trace( TIO_PRINT_TRACE, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pstream );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Trace(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
string srText( TIO_PSZ_STR( pszText ));
|
|
if(( srText.length( ) > 1 ) && ( srText[srText.length( )-1] == '\n' ))
|
|
{
|
|
srText = srText.substr( 0, srText.length( )-1 );
|
|
}
|
|
|
|
TCT_NameList_c< TC_Name_c >* ptraceAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceAcceptList );
|
|
TCT_NameList_c< TC_Name_c >* ptraceRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceRejectList );
|
|
|
|
mode = ( ptraceRejectList ? mode : TIO_PRINT_UNDEFINED );
|
|
if( ptraceAcceptList && ( mode == TIO_PRINT_UNDEFINED ))
|
|
{
|
|
if( ptraceAcceptList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_TRACE;
|
|
}
|
|
}
|
|
if( ptraceRejectList && ( mode == TIO_PRINT_TRACE ))
|
|
{
|
|
if( ptraceRejectList->MatchRegExp( srText ))
|
|
{
|
|
mode = TIO_PRINT_UNDEFINED;
|
|
}
|
|
}
|
|
|
|
if( mode != TIO_PRINT_UNDEFINED )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Internal
|
|
// Purpose : Format and print an (programming error) internal
|
|
// message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Internal(
|
|
const char* pszSource,
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Internal( TIO_PRINT_INTERNAL, pszSource, pszText, vaArgs );
|
|
|
|
// Update current internal count
|
|
++this->counts_.internalCount;
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
return( false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::Internal(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszSource,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs, pszSource );
|
|
|
|
return( false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Direct
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Direct(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->Direct( TIO_PRINT_DIRECT, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Direct(
|
|
TIO_PrintMode_t mode,
|
|
const char* pszText,
|
|
va_list vaArgs )
|
|
{
|
|
this->WriteMessage_( mode, pszText, vaArgs );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : Write
|
|
// Purpose : Format and print a (user-specified) message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
// 08/10/12 jeffr : Replaced "(int)" cast with original "static_cast< int >"
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Write(
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->WriteMessage_( TIO_PRINT_DIRECT, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Write(
|
|
size_t lenSpace,
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
static char szText[TIO_FORMAT_STRING_LEN_MAX];
|
|
if( lenSpace > 0 )
|
|
{
|
|
sprintf( szText, "%*s%s",
|
|
static_cast< int >( lenSpace ), lenSpace ? " " : "", pszText );
|
|
pszText = szText;
|
|
}
|
|
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->WriteMessage_( TIO_PRINT_DIRECT, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::Write(
|
|
FILE* pfile,
|
|
size_t lenSpace,
|
|
const char* pszText,
|
|
... )
|
|
{
|
|
FILE* pstream = this->outputs_.stdioOutput.GetStream( );
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pfile );
|
|
}
|
|
|
|
static char szText[TIO_FORMAT_STRING_LEN_MAX];
|
|
if( lenSpace > 0 )
|
|
{
|
|
sprintf( szText, "%*s%s",
|
|
static_cast< int >( lenSpace ), lenSpace ? " " : "", pszText );
|
|
pszText = szText;
|
|
}
|
|
|
|
va_list vaArgs; // Make a variable argument list
|
|
va_start( vaArgs, pszText ); // Initialize variable argument list
|
|
|
|
this->WriteMessage_( TIO_PRINT_DIRECT, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pstream );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : WriteBanner
|
|
// Purpose : Format and print a (program) banner message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::WriteBanner(
|
|
FILE* pfile,
|
|
size_t lenSpace )
|
|
{
|
|
static char szSep[TIO_FORMAT_STRING_LEN_MAX];
|
|
static size_t lenSep = TIO_FORMAT_BANNER_LEN_DEF;
|
|
|
|
TIO_SkinHandler_c& skinHandler = TIO_SkinHandler_c::GetInstance( );
|
|
const char* pszProgramTitle = skinHandler.GetProgramTitle( );
|
|
const char* pszCopyright = skinHandler.GetCopyright( );
|
|
|
|
TC_FormatStringFilled( '_', szSep, lenSep );
|
|
|
|
this->WriteCenter( pfile, lenSpace, szSep, lenSep );
|
|
|
|
this->WriteCenter( pfile, lenSpace, pszProgramTitle, lenSep );
|
|
this->WriteCenter( pfile, lenSpace, TIO_SZ_BUILD_VERSION, lenSep );
|
|
this->WriteCenter( pfile, lenSpace, pszCopyright, lenSep );
|
|
|
|
this->WriteCenter( pfile, lenSpace, szSep, lenSep );
|
|
}
|
|
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::WriteBanner(
|
|
void )
|
|
{
|
|
FILE* pfile = 0;
|
|
size_t spaceLen = 0;
|
|
|
|
this->WriteBanner( pfile, spaceLen );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : WriteCenter
|
|
// Purpose : Format and print a (user-specified) center message.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
// 08/10/12 jeffr : Replaced "(int)" cast with original "static_cast< int >"
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::WriteCenter(
|
|
FILE* pfile,
|
|
size_t lenSpace,
|
|
const char* pszText,
|
|
size_t lenText,
|
|
const char* pszPrefix,
|
|
const char* pszPostfix )
|
|
{
|
|
FILE* pstream = this->outputs_.stdioOutput.GetStream( );
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pfile );
|
|
}
|
|
|
|
static char szText[TIO_FORMAT_STRING_LEN_MAX];
|
|
if( lenSpace > 0 )
|
|
{
|
|
sprintf( szText, "%*s%s",
|
|
static_cast< int >( lenSpace ), lenSpace ? " " : "", pszText );
|
|
pszText = szText;
|
|
}
|
|
|
|
static char szCenteredText[TIO_FORMAT_STRING_LEN_MAX];
|
|
TC_FormatStringCentered( pszText, lenText,
|
|
szCenteredText, TIO_FORMAT_STRING_LEN_MAX );
|
|
if( pszPrefix )
|
|
{
|
|
TC_AddStringPrefix( szCenteredText, pszPrefix );
|
|
}
|
|
if( pszPostfix )
|
|
{
|
|
TC_AddStringPostfix( szCenteredText, pszPostfix );
|
|
}
|
|
pszText = szCenteredText;
|
|
|
|
va_list vaArgs; // Make a variable argument list
|
|
|
|
#if defined( SUN8 ) || defined( SUN10 ) || defined( WIN32 ) || defined( _WIN32 )
|
|
vaArgs = 0;
|
|
#endif
|
|
|
|
this->WriteMessage_( TIO_PRINT_RETURN, pszText, vaArgs );
|
|
|
|
va_end( vaArgs ); // Reset variable argument list
|
|
|
|
if( pfile )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pstream );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : WriteVersion
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::WriteVersion(
|
|
void )
|
|
{
|
|
TIO_SkinHandler_c& skinHandler = TIO_SkinHandler_c::GetInstance( );
|
|
const char* pszProgramName = skinHandler.GetProgramName( );
|
|
|
|
this->Write( "%s\n" \
|
|
"%s, built %s\n",
|
|
TIO_PSZ_STR( pszProgramName ),
|
|
TIO_SZ_BUILD_VERSION,
|
|
TIO_SZ_BUILD_TIME_STAMP );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : WriteHelp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::WriteHelp(
|
|
void )
|
|
{
|
|
TIO_SkinHandler_c& skinHandler = TIO_SkinHandler_c::GetInstance( );
|
|
const char* pszBinaryName = skinHandler.GetBinaryName( );
|
|
|
|
this->Write( TIO_SZ_PROGRAM_HELP, pszBinaryName );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : SetStdioOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::SetStdioOutput(
|
|
FILE* pstream )
|
|
{
|
|
this->outputs_.stdioOutput.SetStream( pstream );
|
|
|
|
bool isEnabled = this->outputs_.stdioOutput.IsEnabled( );
|
|
this->outputs_.isStdioEnabled = isEnabled;
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : SetCustomOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::SetCustomOutput(
|
|
TIO_PFX_CustomHandler_t pfxCustomHandler )
|
|
{
|
|
this->outputs_.customOutput.SetHandler( pfxCustomHandler );
|
|
|
|
bool isEnabled = this->outputs_.customOutput.IsEnabled( );
|
|
this->outputs_.isCustomEnabled = isEnabled;
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : SetLogFileOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::SetLogFileOutput(
|
|
const char* pszLogFileName,
|
|
TIO_FileOpenMode_t fileOpenMode )
|
|
{
|
|
if( pszLogFileName )
|
|
{
|
|
this->outputs_.logFileOutput.Open( pszLogFileName, fileOpenMode );
|
|
}
|
|
else
|
|
{
|
|
this->outputs_.logFileOutput.Close( );
|
|
}
|
|
|
|
bool isEnabled = this->outputs_.logFileOutput.IsEnabled( );
|
|
this->outputs_.isLogFileEnabled = isEnabled;
|
|
|
|
return( this->outputs_.logFileOutput.IsValid( ));
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : SetUserFileOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::SetUserFileOutput(
|
|
const char* pszUserFileName,
|
|
TIO_FileOpenMode_t fileOpenMode )
|
|
{
|
|
if( pszUserFileName )
|
|
{
|
|
this->outputs_.userFileOutput.Open( pszUserFileName, fileOpenMode );
|
|
}
|
|
else
|
|
{
|
|
this->outputs_.userFileOutput.Close( );
|
|
}
|
|
|
|
bool isEnabled = this->outputs_.userFileOutput.IsEnabled( );
|
|
this->outputs_.isUserFileEnabled = isEnabled;
|
|
|
|
return( this->outputs_.userFileOutput.IsValid( ));
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddInfoAcceptRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddInfoAcceptRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.pinfoAcceptList )
|
|
{
|
|
this->display_.pinfoAcceptList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_INFO_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* pinfoAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoAcceptList );
|
|
pinfoAcceptList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddInfoRejectRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddInfoRejectRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.pinfoRejectList )
|
|
{
|
|
this->display_.pinfoRejectList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_INFO_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* pinfoRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pinfoRejectList );
|
|
pinfoRejectList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddWarningAcceptRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddWarningAcceptRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.pwarningAcceptList )
|
|
{
|
|
this->display_.pwarningAcceptList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_WARNING_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* pwarningAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningAcceptList );
|
|
pwarningAcceptList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddWarningRejectRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddWarningRejectRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.pwarningRejectList )
|
|
{
|
|
this->display_.pwarningRejectList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_WARNING_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* pwarningRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.pwarningRejectList );
|
|
pwarningRejectList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddErrorAcceptRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddErrorAcceptRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.perrorAcceptList )
|
|
{
|
|
this->display_.perrorAcceptList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_ERROR_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* perrorAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorAcceptList );
|
|
perrorAcceptList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddErrorRejectRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddErrorRejectRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.perrorRejectList )
|
|
{
|
|
this->display_.perrorRejectList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_ERROR_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* perrorRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.perrorRejectList );
|
|
perrorRejectList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddTraceAcceptRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddTraceAcceptRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.ptraceAcceptList )
|
|
{
|
|
this->display_.ptraceAcceptList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_TRACE_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* ptraceAcceptList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceAcceptList );
|
|
ptraceAcceptList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : AddTraceRejectRegExp
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::AddTraceRejectRegExp(
|
|
const char* pszRegExp )
|
|
{
|
|
if( !this->display_.ptraceRejectList )
|
|
{
|
|
this->display_.ptraceRejectList = new TC_NOTHROW TCT_NameList_c< TC_Name_c >( TIO_DISPLAY_TRACE_LIST_DEF_CAPACITY );
|
|
}
|
|
TCT_NameList_c< TC_Name_c >* ptraceRejectList = static_cast< TCT_NameList_c< TC_Name_c >* >( this->display_.ptraceRejectList );
|
|
ptraceRejectList->Add( pszRegExp );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : FindUserName
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::FindUserName(
|
|
string* psrUserName ) const
|
|
{
|
|
const char* pszUserNameCmd = "";
|
|
#if defined( SUN8 ) || defined( SUN10 ) || defined( LINUX_I686 ) || defined( LINUX_X86_64 )
|
|
pszUserNameCmd = "whoami";
|
|
#elif defined( WIN32 ) || defined( _WIN32 )
|
|
pszUserNameCmd = "echo %USERNAME%";
|
|
#endif
|
|
this->ApplySystemCommand_( pszUserNameCmd,
|
|
TIO_COMMAND_USERNAME_LEN,
|
|
psrUserName );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : FindHostName
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::FindHostName(
|
|
string* psrHostName ) const
|
|
{
|
|
const char* pszHostNameCmd = "";
|
|
#if defined( SUN8 ) || defined( SUN10 ) || defined( LINUX_I686 ) || defined( LINUX_X86_64 )
|
|
pszHostNameCmd = "hostname",
|
|
#elif defined( WIN32 ) || defined( _WIN32 )
|
|
pszHostNameCmd = "hostname",
|
|
#endif
|
|
this->ApplySystemCommand_( pszHostNameCmd,
|
|
TIO_COMMAND_HOSTNAME_LEN,
|
|
psrHostName );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : FindWorkingDir
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::FindWorkingDir(
|
|
string* psrWorkingDir ) const
|
|
{
|
|
this->ApplySystemCommand_( "pwd",
|
|
TIO_COMMAND_WORKINGDIR_LEN,
|
|
psrWorkingDir );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : EnableOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::EnableOutput(
|
|
int outputMask )
|
|
{
|
|
if( outputMask & TIO_PRINT_OUTPUT_STDIO )
|
|
{
|
|
this->EnableStdioOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_CUSTOM )
|
|
{
|
|
this->EnableCustomOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_LOG_FILE )
|
|
{
|
|
this->EnableLogFileOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_USER_FILE )
|
|
{
|
|
this->EnableUserFileOutput( );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : DisableOutput
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::DisableOutput(
|
|
int outputMask )
|
|
{
|
|
if( outputMask & TIO_PRINT_OUTPUT_STDIO )
|
|
{
|
|
this->DisableStdioOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_CUSTOM )
|
|
{
|
|
this->DisableCustomOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_LOG_FILE )
|
|
{
|
|
this->DisableLogFileOutput( );
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_USER_FILE )
|
|
{
|
|
this->DisableUserFileOutput( );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsOutputEnabled
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsOutputEnabled(
|
|
int outputMask )
|
|
{
|
|
bool isOutputEnabled = false;
|
|
|
|
if( outputMask & TIO_PRINT_OUTPUT_STDIO )
|
|
{
|
|
isOutputEnabled = ( isOutputEnabled ?
|
|
true : this->IsStdioOutputEnabled( ));
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_CUSTOM )
|
|
{
|
|
isOutputEnabled = ( isOutputEnabled ?
|
|
true : this->IsCustomOutputEnabled( ));
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_LOG_FILE )
|
|
{
|
|
isOutputEnabled = ( isOutputEnabled ?
|
|
true : this->IsLogFileOutputEnabled( ));
|
|
}
|
|
if( outputMask & TIO_PRINT_OUTPUT_USER_FILE )
|
|
{
|
|
isOutputEnabled = ( isOutputEnabled ?
|
|
true : this->IsUserFileOutputEnabled( ));
|
|
}
|
|
return( isOutputEnabled );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsWithinMaxWarningCount
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsWithinMaxWarningCount(
|
|
void ) const
|
|
{
|
|
bool isWithin = true;
|
|
|
|
if( this->counts_.isMaxWarningEnabled &&
|
|
this->counts_.maxWarningCount <= this->counts_.warningCount )
|
|
{
|
|
isWithin = false;
|
|
}
|
|
return( isWithin );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsWithinMaxErrorCount
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsWithinMaxErrorCount(
|
|
void ) const
|
|
{
|
|
bool isWithin = true;
|
|
|
|
if( this->counts_.isMaxErrorEnabled &&
|
|
this->counts_.maxErrorCount <= this->counts_.errorCount )
|
|
{
|
|
isWithin = false;
|
|
}
|
|
return( isWithin );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsWithinMaxCount
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsWithinMaxCount(
|
|
void ) const
|
|
{
|
|
bool isWithin = true;
|
|
|
|
if( !this->IsWithinMaxErrorCount( ) ||
|
|
!this->IsWithinMaxWarningCount( ))
|
|
{
|
|
isWithin = false;
|
|
}
|
|
return( isWithin );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsValidMaxWarningCount
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsValidMaxWarningCount(
|
|
void )
|
|
{
|
|
bool isValid = true;
|
|
|
|
++this->counts_.warningCount;
|
|
if( !this->IsWithinMaxWarningCount( ))
|
|
{
|
|
this->counts_.isMaxErrorEnabled = false;
|
|
this->Fatal( "Exceeded maximum warning count (%u).\n",
|
|
this->counts_.maxWarningCount );
|
|
this->counts_.isMaxErrorEnabled = true;
|
|
|
|
isValid = false;
|
|
}
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsValidMaxErrorCount
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsValidMaxErrorCount(
|
|
void )
|
|
{
|
|
bool isValid = true;
|
|
|
|
++this->counts_.errorCount;
|
|
if( !this->IsWithinMaxErrorCount( ))
|
|
{
|
|
this->counts_.isMaxErrorEnabled = false;
|
|
this->Fatal( "Exceeded maximum error count (%u).\n",
|
|
this->counts_.maxErrorCount );
|
|
this->counts_.isMaxErrorEnabled = true;
|
|
|
|
isValid = false;
|
|
}
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : IsValidNew
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::IsValidNew(
|
|
const void* pvoid,
|
|
size_t allocLen,
|
|
const char* pszSource )
|
|
{
|
|
if( !pvoid && pszSource )
|
|
{
|
|
this->Internal( pszSource,
|
|
"Failed to allocate %u bytes memory!\n",
|
|
allocLen );
|
|
}
|
|
return( pvoid ? true : false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : WriteMessage_
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::WriteMessage_(
|
|
TIO_PrintMode_t mode, // Defines print severity level mode
|
|
const char* pszText, // Ptr to message text string
|
|
va_list vaArgs, // Define optional variable arguments
|
|
const char* pszSource ) // Ptr to optional source string
|
|
{
|
|
static char szMessage[TIO_FORMAT_STRING_LEN_MAX];
|
|
|
|
// Extract and format message based on optional variable argument list
|
|
bool isValid = this->FormatMessage_( pszText, vaArgs, szMessage );
|
|
|
|
// Write message to zero or more enabled output streams
|
|
if( isValid )
|
|
{
|
|
this->OutputMessage_( mode, szMessage, pszSource );
|
|
}
|
|
return( isValid );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : FormatMessage_
|
|
// Purpose : Format and return a message string based on the given
|
|
// message text string and optional variable argument list.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::FormatMessage_(
|
|
const char* pszText, // Ptr to message text string
|
|
va_list vaArgs, // Define optional variable arguments
|
|
char* pszMessage ) // Ptr to returned message string
|
|
{
|
|
if( pszMessage )
|
|
{
|
|
// Extract and format based on variable argument list
|
|
vsprintf( pszMessage, pszText, vaArgs );
|
|
}
|
|
return( pszMessage && *pszMessage ? true : false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : PrefixMessage_
|
|
// Purpose : Prefix and return a message string based on the given
|
|
// message text string and print severity level mode.
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
bool TIO_PrintHandler_c::PrefixMessage_(
|
|
TIO_PrintMode_t mode, // Defines print severity level mode
|
|
const char* pszText, // Ptr to message text string
|
|
const char* pszSource, // Ptr to optional source string
|
|
char* pszMessage ) // Ptr to returned message string
|
|
{
|
|
if( pszMessage )
|
|
{
|
|
const char* pszPrefix = TIO_SR_STR( this->formats_.srPrefix );
|
|
|
|
pszText = TIO_PSZ_STR( pszText );
|
|
pszSource = TIO_PSZ_STR( pszSource );
|
|
|
|
unsigned long warningCount = this->counts_.warningCount + 1;
|
|
unsigned long errorCount = this->counts_.errorCount + 1;
|
|
unsigned long internalCount = this->counts_.internalCount + 1;
|
|
|
|
switch( mode )
|
|
{
|
|
case TIO_PRINT_INFO:
|
|
|
|
if( this->formats_.timeStampsEnabled )
|
|
{
|
|
static char szTimeStamp[TIO_FORMAT_STRING_LEN_DATE_TIME];
|
|
size_t lenTimeStamp = sizeof( szTimeStamp );
|
|
TC_FormatStringDateTimeStamp( szTimeStamp, lenTimeStamp, "[", "] " );
|
|
|
|
sprintf( pszMessage, "%s%s%s", szTimeStamp, pszPrefix, pszText );
|
|
}
|
|
else
|
|
{
|
|
sprintf( pszMessage, "%s%s", pszPrefix, pszText );
|
|
}
|
|
break;
|
|
|
|
case TIO_PRINT_WARNING:
|
|
|
|
sprintf( pszMessage, "%sWARNING(%lu): %s", pszPrefix, warningCount, pszText );
|
|
break;
|
|
|
|
case TIO_PRINT_ERROR:
|
|
|
|
sprintf( pszMessage, "%sERROR(%lu): %s", pszPrefix, errorCount, pszText );
|
|
break;
|
|
|
|
case TIO_PRINT_FATAL:
|
|
|
|
sprintf( pszMessage, "%sFATAL: %s", pszPrefix, pszText );
|
|
break;
|
|
|
|
case TIO_PRINT_TRACE:
|
|
|
|
if( this->formats_.timeStampsEnabled )
|
|
{
|
|
static char szTimeStamp[TIO_FORMAT_STRING_LEN_DATE_TIME];
|
|
size_t lenTimeStamp = sizeof( szTimeStamp );
|
|
TC_FormatStringDateTimeStamp( szTimeStamp, lenTimeStamp, "[", "] " );
|
|
|
|
sprintf( pszMessage, "%sTRACE: %s%s", pszPrefix, szTimeStamp, pszText );
|
|
}
|
|
else
|
|
{
|
|
sprintf( pszMessage, "%sTRACE: %s", pszPrefix, pszText );
|
|
}
|
|
break;
|
|
|
|
case TIO_PRINT_INTERNAL:
|
|
|
|
sprintf( pszMessage, "INTERNAL(%lu) @ %s\n"
|
|
" %s", internalCount, pszSource, pszText );
|
|
break;
|
|
|
|
case TIO_PRINT_DIRECT:
|
|
|
|
sprintf( pszMessage, "%s", pszText );
|
|
break;
|
|
|
|
case TIO_PRINT_RETURN:
|
|
|
|
sprintf( pszMessage, "%s\n", pszText );
|
|
break;
|
|
|
|
default:
|
|
|
|
sprintf( pszMessage, "%s", pszText );
|
|
break;
|
|
}
|
|
}
|
|
return( pszMessage && *pszMessage ? true : false );
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : OutputMessage_
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::OutputMessage_(
|
|
TIO_PrintMode_t mode, // Defines print severity level mode
|
|
const char* pszText, // Ptr to message text string
|
|
const char* pszSource ) // Ptr to optional source string
|
|
{
|
|
static char szMessage[TIO_FORMAT_STRING_LEN_MAX];
|
|
|
|
// Format and print message based on enabled output options
|
|
if( this->outputs_.stdioOutput.IsEnabled( ))
|
|
{
|
|
this->PrefixMessage_( mode, pszText, pszSource, szMessage );
|
|
this->outputs_.stdioOutput.Write( szMessage );
|
|
this->outputs_.stdioOutput.Flush( );
|
|
}
|
|
|
|
if( this->outputs_.customOutput.IsEnabled( ))
|
|
{
|
|
this->outputs_.customOutput.Write( mode, pszText, pszSource );
|
|
}
|
|
|
|
if( this->outputs_.logFileOutput.IsEnabled( ))
|
|
{
|
|
this->PrefixMessage_( mode, pszText, pszSource, szMessage );
|
|
this->outputs_.logFileOutput.Write( szMessage );
|
|
this->outputs_.logFileOutput.Flush( );
|
|
}
|
|
|
|
if( this->outputs_.userFileOutput.IsEnabled( ))
|
|
{
|
|
this->PrefixMessage_( mode, pszText, pszSource, szMessage );
|
|
this->outputs_.userFileOutput.Write( szMessage );
|
|
}
|
|
}
|
|
|
|
//===========================================================================//
|
|
// Method : ApplySystemCommand_
|
|
// Author : Jeff Rudolph
|
|
//---------------------------------------------------------------------------//
|
|
// Version history
|
|
// 05/01/12 jeffr : Original
|
|
//===========================================================================//
|
|
void TIO_PrintHandler_c::ApplySystemCommand_(
|
|
const char* pszCommand,
|
|
size_t lenCommandStdout,
|
|
string* psrCommandStdout ) const
|
|
{
|
|
if( psrCommandStdout )
|
|
{
|
|
*psrCommandStdout = "";
|
|
|
|
#if defined( SUN8 ) || defined( SUN10 ) || defined( LINUX_I686 ) || defined( LINUX_X86_64 ) || defined( WIN32 ) || defined( _WIN32 )
|
|
|
|
TIO_SkinHandler_c& skinHandler = TIO_SkinHandler_c::GetInstance( );
|
|
const char* pszBinaryName = skinHandler.GetBinaryName( );
|
|
|
|
string srCommandStdout;
|
|
srCommandStdout += "./.";
|
|
srCommandStdout += pszBinaryName;
|
|
srCommandStdout += ".";
|
|
srCommandStdout += pszCommand;
|
|
|
|
string srCommand;
|
|
srCommand += pszCommand;
|
|
srCommand += " > ";
|
|
srCommand += srCommandStdout;
|
|
|
|
if( system( srCommand.data( )) >= 0 )
|
|
{
|
|
TIO_FileHandler_c fileIO( srCommandStdout, TIO_FILE_OPEN_READ );
|
|
if( fileIO.IsValid( ))
|
|
{
|
|
char* pszCommandStdout = new TC_NOTHROW char[lenCommandStdout];
|
|
fileIO.Read( pszCommandStdout, lenCommandStdout-1 );
|
|
|
|
pszCommandStdout[strlen( pszCommandStdout )-1] = 0;
|
|
*psrCommandStdout = pszCommandStdout;
|
|
|
|
fileIO.Close( );
|
|
delete[] pszCommandStdout;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|