Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

193 lines
4.6 KiB

/* Copyright (c) 1992 Microsoft Corporation */
/*
* debug.c
*
* debugging menu support
*
* Debug level info is in WIN.INI in the [debug] section:
*
* [debug]
* App=0 level for App
*
*/
#include "mcihwnd.h"
#include <stdarg.h>
// mcihwnd pulls in the other needed files
#if DBG
char aszAppName[] = "MciHwnd";
int __iDebugLevel = 1;
/***************************************************************************
@doc INTERNAL
@api void | dDbgOut | This function sends output to the current
debug output device.
@parm LPSTR | lpszFormat | Pointer to a printf style format string.
@parm ??? | ... | Args.
@rdesc There is no return value.
****************************************************************************/
void dDbgOut(LPSTR lpszFormat, ...)
{
int i;
char buf[256];
va_list va;
sprintf(buf, "%s: ", aszAppName);
OutputDebugString(buf);
va_start(va, lpszFormat);
i = vsprintf(buf, lpszFormat, va);
va_end(va);
OutputDebugString(buf);
OutputDebugString("\n");
}
/***************************************************************************
@doc INTERNAL
@api int | dGetDebugLevel | This function gets the current debug level
for a module.
@parm LPSTR | lpszModule | The name of the module.
@rdesc The return value is the current debug level.
@comm The information is kept in the [debug] section of WIN.INI
****************************************************************************/
int dGetDebugLevel(LPSTR lpszAppName)
{
return GetProfileInt("MMDEBUG", lpszAppName, 3);
}
/***************************************************************************
@doc INTERNAL
@api int | dDbgSaveLevel | This function saves the current debug level
for a module.
@parm LPSTR | lpszModule | The name of the module.
@parm int | iLevel | The value to save.
@rdesc There is no return value.
@comm The information is kept in the [debug] section of WIN.INI
****************************************************************************/
void dDbgSaveLevel(LPSTR lpszAppName, int iLevel)
{
char buf[80];
sprintf(buf, "%d", iLevel);
WriteProfileString("MMDEBUG", lpszAppName, buf);
}
/***************************************************************************
@doc INTERNAL
@api void | dDbgAssert | This function shows an assert message box.
@parm LPSTR | exp | Pointer to the expression string.
@parm LPSTR | file | Pointer to the file name.
@parm int | line | The line number.
@rdesc There is no return value.
@comm We try to use the current active window as the parent. If
this fails we use the desktop window. The box is system
modal to avoid any trouble.
****************************************************************************/
void dDbgAssert(LPSTR exp, LPSTR file, int line)
{
char bufTmp[256];
int iResponse;
HWND hWnd;
sprintf(bufTmp,
"Expression: %s\nFile: %s, Line: %d\n\nAbort: Exit Process\nRetry: Enter Debugger\nIgnore: Continue",
exp, file, line);
// try to use the active window, but NULL is ok if there
// isn't one. Use the debug console as well
dprintf(bufTmp);
hWnd = GetActiveWindow();
iResponse = MessageBox(hWnd,
bufTmp,
"Assertion Failure",
MB_TASKMODAL
| MB_ICONEXCLAMATION
| MB_DEFBUTTON3
| MB_ABORTRETRYIGNORE);
switch (iResponse) {
case 0:
dprintf1("Assert message box failed");
dprintf2(" Expression: %s", exp);
dprintf2(" File: %s, Line: %d", file, line);
break;
case IDABORT:
ExitProcess(1);
break;
case IDRETRY:
DebugBreak();
break;
case IDIGNORE:
break;
}
}
#endif
#if DBG
/***************************************************************************
@doc INTERNAL
@api void | winmmDbgOut | This function sends output to the current
debug output device.
@parm LPSTR | lpszFormat | Pointer to a printf style format string.
@parm ??? | ... | Args.
@rdesc There is no return value.
****************************************************************************/
void winmmDbgOut(LPSTR lpszFormat, ...)
{
char buf[256];
UINT n;
va_list va;
n = wsprintf(buf, "MciHwnd: ");
va_start(va, lpszFormat);
n += vsprintf(buf+n, lpszFormat, va);
va_end(va);
buf[n++] = '\n';
buf[n] = 0;
OutputDebugString(buf);
}
#endif