windows-nt/Source/XPSP1/NT/printscan/fax/util/debug.c
2020-09-26 16:20:57 +08:00

177 lines
2.6 KiB
C

/*++
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
Environment:
User Mode
--*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include "faxreg.h"
#include "faxutil.h"
BOOL ConsoleDebugOutput = FALSE;
INT FaxDebugLevel = -1;
#if 0
VOID
ConsoleDebugPrint(
LPCTSTR buf
)
{
}
#endif
DWORD
GetDebugLevel(
VOID
)
{
DWORD rc;
DWORD err;
DWORD size;
DWORD type;
HKEY hkey;
err = RegOpenKey(HKEY_LOCAL_MACHINE,
REGKEY_FAXSERVER,
&hkey);
if (err != ERROR_SUCCESS)
return 0;
size = sizeof(DWORD);
err = RegQueryValueEx(hkey,
REGVAL_DBGLEVEL,
0,
&type,
(LPBYTE)&rc,
&size);
if (err != ERROR_SUCCESS || type != REG_DWORD)
rc = 0;
RegCloseKey(hkey);
return rc;
}
void
dprintf(
LPCTSTR Format,
...
)
/*++
Routine Description:
Prints a debug string
Arguments:
format - printf() format string
... - Variable data
Return Value:
None.
--*/
{
TCHAR buf[1024];
DWORD len;
va_list arg_ptr;
static BOOL bChecked = FALSE;
if (!bChecked) {
FaxDebugLevel = (INT) GetDebugLevel();
bChecked = TRUE;
}
if (FaxDebugLevel <= 0) {
return;
}
va_start(arg_ptr, Format);
_vsntprintf(buf, sizeof(buf), Format, arg_ptr);
ConsoleDebugPrint( buf );
len = _tcslen( buf );
if (buf[len-1] != TEXT('\n')) {
buf[len] = TEXT('\r');
buf[len+1] = TEXT('\n');
buf[len+2] = 0;
}
OutputDebugString( buf );
}
VOID
AssertError(
LPCTSTR Expression,
LPCTSTR 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.
}
}