/* Debug.c * * Debug printf and assertion functions */ #include <windows.h> #include <stdarg.h> #include <stdio.h> #include "debug.h" #ifdef _DEBUG DWORD ModuleDebugLevel = 1; // 0 to turn it off, but valid level go up to 4 DWORD ModuleDebugStamp = 0; // Turn on to print __FILE__.__LINE__ /* _Assert(fExpr, szFile, iLine) * * If <fExpr> is TRUE, then do nothing. If <fExpr> is FALSE, then display * an "assertion failed" message box allowing the user to abort the program, * enter the debugger (the "Retry" button), or igore the error. * * <szFile> is the name of the source file; <iLine> is the line number * containing the _Assert() call. */ #ifdef I386 #pragma optimize("", off) #endif BOOL FAR PASCAL _Assert( BOOL fExpr, TCHAR * szFile, //LPSTR szFile, int iLine, TCHAR * szExpr) // LPSTR szExpr) { static TCHAR achTitle[256]; int id; /* check if assertion failed */ if (fExpr) return fExpr; /* display error message */ wsprintf(achTitle, TEXT("AssertFailed: %d:%s\n"), iLine, (LPSTR) szFile); id = MessageBox(NULL, szExpr, achTitle, MB_SYSTEMMODAL | MB_ICONHAND | MB_ABORTRETRYIGNORE); /* abort, debug, or ignore */ switch (id) { case IDABORT: /* kill this application */ ExitProcess(1); break; case IDRETRY: /* break into the debugger */ DebugBreak(); break; case IDIGNORE: /* ignore the assertion failure */ break; } return FALSE; } #ifdef I386 #pragma optimize("", on) #endif DWORD dbgSetDebugLevel(int dbgLevel) { DWORD oldlevel = ModuleDebugLevel; ModuleDebugLevel = dbgLevel; return(oldlevel); } void PlaceStamp( TCHAR * lpszFile, // LPSTR lpszFile, int iLineNum) { TCHAR szBuf[256]; int i; TCHAR * lpszFilename = lpszFile; if (ModuleDebugLevel == 0) return; if(ModuleDebugStamp) { for (i=0; i < lstrlen(lpszFile); i++) if (*(lpszFile+i) == '\\') lpszFilename = (lpszFile+i); if(wsprintf(szBuf, TEXT("MsYuv %12s %4d "), lpszFilename, iLineNum) > 0) OutputDebugString(szBuf); } else { OutputDebugString(TEXT("MsYuv..")); } } void dbgPrintf(TCHAR * szFormat, ...) { TCHAR szBuf[256]; va_list va; if (ModuleDebugLevel == 0) return; va_start(va, szFormat); wvsprintf( szBuf, szFormat, va); va_end(va); OutputDebugString(szBuf); } #endif // _DEBUG