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.
76 lines
1.5 KiB
76 lines
1.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: cedebug.cpp
|
|
//
|
|
// Contents: Debug support
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include <pch.cpp>
|
|
|
|
#pragma hdrstop
|
|
|
|
#include "celib.h"
|
|
#include <stdarg.h>
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: ceDbgPrintf
|
|
//
|
|
// Synopsis: outputs debug info to stdout and debugger
|
|
//
|
|
// Returns: number of chars output
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
int WINAPIV
|
|
ceDbgPrintf(
|
|
IN BOOL fDebug,
|
|
IN LPCSTR lpFmt,
|
|
...)
|
|
{
|
|
va_list arglist;
|
|
CHAR ach[4096];
|
|
int cch = 0;
|
|
HANDLE hStdOut;
|
|
DWORD dwErr;
|
|
|
|
dwErr = GetLastError();
|
|
if (fDebug)
|
|
{
|
|
__try
|
|
{
|
|
va_start(arglist, lpFmt);
|
|
cch = _vsnprintf(ach, sizeof(ach), lpFmt, arglist);
|
|
ach[ARRAYSIZE(ach)-1] = L'\0';
|
|
va_end(arglist);
|
|
|
|
if (0 > cch)
|
|
{
|
|
strcpy(&ach[sizeof(ach) - 5], "...\n");
|
|
}
|
|
|
|
if (!IsDebuggerPresent())
|
|
{
|
|
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
if (hStdOut != INVALID_HANDLE_VALUE)
|
|
{
|
|
fputs(ach, stdout);
|
|
fflush(stdout);
|
|
}
|
|
}
|
|
OutputDebugStringA(ach);
|
|
}
|
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
|
{
|
|
// return failure
|
|
cch = 0;
|
|
}
|
|
}
|
|
SetLastError(dwErr);
|
|
return(cch);
|
|
}
|