windows-nt/Source/XPSP1/NT/printscan/fax/setup/win9xupg/migrate/debug.c

200 lines
3.6 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
debug.c
Abstract:
This file implements the debug code for the
fax project. All components that require
debug prints, asserts, etc.
Author:
Wesley Witt (wesw) 22-Dec-1995
Minor modifications by Brian Dewey (t-briand) 4-Aug-1997
-- to work with the FAX migration DLL.
Environment:
User Mode
--*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <setupapi.h>
BOOL ConsoleDebugOutput = FALSE;
VOID
ConsoleDebugPrint(
LPTSTR buf
)
{
}
void
dprintf(
LPTSTR Format,
...
)
/*++
Routine Description:
Prints a debug string
Arguments:
format - printf() format string
... - Variable data
Return Value:
None.
--*/
{
TCHAR buf[1024];
DWORD len;
static TCHAR AppName[16];
va_list arg_ptr;
SYSTEMTIME CurrentTime;
if (AppName[0] == 0) {
if (GetModuleFileName( NULL, buf, sizeof(buf) )) {
_tsplitpath( buf, NULL, NULL, AppName, NULL );
}
}
va_start(arg_ptr, Format);
GetLocalTime( &CurrentTime );
_stprintf( buf, TEXT("%x %02d:%02d:%02d.%03d %s: "),
GetCurrentThreadId(),
CurrentTime.wHour,
CurrentTime.wMinute,
CurrentTime.wSecond,
CurrentTime.wMilliseconds,
AppName[0] ? AppName : TEXT("")
);
len = _tcslen( buf );
_vsntprintf(&buf[len], sizeof(buf)-len, Format, arg_ptr);
len = _tcslen( buf );
if (buf[len-1] != TEXT('\n')) {
buf[len] = TEXT('\r');
buf[len+1] = TEXT('\n');
buf[len+2] = 0;
}
OutputDebugString( buf );
#ifndef TEST_WIN95
SetupLogError(buf, LogSevInformation);
#else
// When testing win95, we write to the console instead of the
// setup log.
_ftprintf(stderr, buf);
#endif
_stprintf( buf, TEXT("%02d:%02d:%02d.%03d "),
CurrentTime.wHour,
CurrentTime.wMinute,
CurrentTime.wSecond,
CurrentTime.wMilliseconds
);
len = _tcslen( buf );
_vsntprintf(&buf[len], sizeof(buf)-len, Format, arg_ptr);
ConsoleDebugPrint( buf );
}
VOID
AssertError(
LPTSTR Expression,
LPTSTR File,
ULONG LineNumber
)
/*++
Routine Description:
Thie function is use together with the Assert MACRO.
It checks to see if an expression is FALSE. if the
expression is FALSE, then you end up here.
Arguments:
Expression - The text of the 'C' expression
File - The file that caused the assertion
LineNumber - The line number in the file.
Return Value:
None.
--*/
{
dprintf(
TEXT("Assertion error: [%s] %s @ %d\n"),
Expression,
File,
LineNumber
);
__try {
DebugBreak();
} __except (UnhandledExceptionFilter(GetExceptionInformation())) {
// Nothing to do in here.
}
}
// DebugSystemError
//
// Displays a system error message on the debug console.
//
// Parameters:
// dwSysErrorCode The system error code returned by GetLastError().
//
// Returns:
// Nothing.
//
// Side effects:
// Does a dprintf() of the message associated with an error code.
//
// Author:
// Brian Dewey (t-briand) 1997-7-25
void
DebugSystemError(DWORD dwSysErrorCode)
{
TCHAR szErrorMsg[MAX_PATH]; // Holds our message.
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM, // We're given a system error code.
NULL, // No string.
dwSysErrorCode, // The error code.
0, // Default language.
szErrorMsg, // The error message.
sizeof(szErrorMsg), // Size of our buffer.
NULL // No arguments.
);
dprintf(szErrorMsg);
}