133 lines
2.3 KiB
C
133 lines
2.3 KiB
C
|
/* 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
|