110 lines
2.1 KiB
C++
110 lines
2.1 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 2000
|
|
//
|
|
// File: print.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
|
|
#include <stdio.h>
|
|
#include "print.h"
|
|
|
|
CPrint::CPrint(
|
|
BOOL bVerbose,
|
|
LPCWSTR pszLogFile // optional. Default is NULL.
|
|
) : m_bVerbose(bVerbose),
|
|
m_pfLog(NULL)
|
|
{
|
|
if (NULL != pszLogFile)
|
|
{
|
|
//
|
|
// Open the log file.
|
|
//
|
|
m_pfLog = _wfopen(pszLogFile, L"w");
|
|
if (NULL == m_pfLog)
|
|
{
|
|
fwprintf(stderr, L"Unable to open log file \"%s\"\n", pszLogFile);
|
|
fprintf(stderr, _strerror("Reason: "));
|
|
fwprintf(stderr, L"Output will go to stderr\n");
|
|
}
|
|
}
|
|
if (NULL == m_pfLog)
|
|
{
|
|
//
|
|
// If no log file is specified or if we failed to open the specified
|
|
// log file, default to stderr.
|
|
//
|
|
m_pfLog = stderr;
|
|
}
|
|
}
|
|
|
|
|
|
CPrint::~CPrint(
|
|
void
|
|
)
|
|
{
|
|
if (NULL != m_pfLog && stderr != m_pfLog)
|
|
{
|
|
fclose(m_pfLog);
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// Some simple printing functions that handle verbose vs. non-verbose mode.
|
|
// The output is directed at whatever stream m_pfLog refers to.
|
|
// If the user specified a log file on the command line, and that file
|
|
// could be opened, all output goes to that file. Otherwise, it
|
|
// defaults to stderr.
|
|
//
|
|
void
|
|
CPrint::_Print(
|
|
LPCWSTR pszFmt,
|
|
va_list args
|
|
) const
|
|
{
|
|
TraceAssert(NULL != m_pfLog);
|
|
TraceAssert(NULL != pszFmt);
|
|
vfwprintf(m_pfLog, pszFmt, args);
|
|
}
|
|
|
|
//
|
|
// Output regardless of "verbose" mode.
|
|
//
|
|
void
|
|
CPrint::PrintAlways(
|
|
LPCWSTR pszFmt,
|
|
...
|
|
) const
|
|
{
|
|
va_list args;
|
|
va_start(args, pszFmt);
|
|
_Print(pszFmt, args);
|
|
va_end(args);
|
|
}
|
|
|
|
|
|
//
|
|
// Output only in "verbose" mode.
|
|
// Verbose is turned on with the -v cmd line switch.
|
|
//
|
|
void
|
|
CPrint::PrintVerbose(
|
|
LPCWSTR pszFmt,
|
|
...
|
|
) const
|
|
{
|
|
if (m_bVerbose)
|
|
{
|
|
va_list args;
|
|
va_start(args, pszFmt);
|
|
_Print(pszFmt, args);
|
|
va_end(args);
|
|
}
|
|
}
|
|
|