/*++ 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 #include #include #include #include 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); }