DEBUG.C

//******************************************************************************************* 
//
// Filename : debug.c
//
//Debug routines
//
// Copyright 1994 - 1998 Microsoft Corporation. All rights reserved
//
//*******************************************************************************************

#include "pch.h"

#include "debug.h"

#define DEBUG_BREAK __try { _asm { int 3 } } __except (EXCEPTION_EXECUTE_HANDLER) {;}

#ifdef DEBUG

UINT g_fDebugMask = 0x00ff;

UINT WINAPI SetDebugMask(UINT mask)
{
UINT wOld = g_fDebugMask;
g_fDebugMask = mask;

return wOld;
}

UINT WINAPI GetDebugMask()
{
return g_fDebugMask;
}

void WINAPI AssertFailed(LPCSTR pszFile, int line)
{
LPCSTR psz;
char ach[256];
static char szAssertFailed[] = "Assertion failed in %s on line %d\r\n";

// Strip off path info from filename string, if present.
//
if (g_fDebugMask & DM_ASSERT)
{
for (psz = pszFile + lstrlen(pszFile); psz != pszFile; psz=AnsiPrev(pszFile, psz))
{
if ((AnsiPrev(pszFile, psz)!= (psz-2)) && *(psz - 1) == '\\')
break;
}
wsprintf(ach, szAssertFailed, psz, line);
OutputDebugString(ach);

DEBUG_BREAK
}
}

void _cdecl _AssertMsg(BOOL f, LPCSTR pszMsg, ...)
{
char ach[256];

if (!f && (g_fDebugMask & DM_ASSERT))
{
wvsprintf(ach, pszMsg, (LPVOID)(&pszMsg + 1));
lstrcat(ach, "\r\n");
OutputDebugString(ach);
DEBUG_BREAK
}
}

void _cdecl _DebugMsg(UINT mask, LPCSTR pszMsg, ...)
{
char ach[2*MAX_PATH+40]; // Handles 2*largest path + slop for message

if (g_fDebugMask & mask)
{
wvsprintf(ach, pszMsg, (LPVOID)(&pszMsg + 1));
lstrcat(ach, "\r\n");
OutputDebugString(ach);
}
}

#endif // DEBUG