111 lines
3.1 KiB
C++
111 lines
3.1 KiB
C++
|
//=--------------------------------------------------------------------------=
|
||
|
// Debug.Cpp
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// Copyright 1995-1997 Microsoft Corporation. All Rights Reserved.
|
||
|
//
|
||
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
||
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
||
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
||
|
// PARTICULAR PURPOSE.
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
//
|
||
|
// contains various methods that will only really see any use in DEBUG builds
|
||
|
//
|
||
|
|
||
|
#include "header.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// Private Constants
|
||
|
//---------------------------------------------------------------------------=
|
||
|
//
|
||
|
static const char szFormat[] = "%s\nFile %s, Line %d";
|
||
|
static const char szFormat2[] = "%s\n%s\nFile %s, Line %d";
|
||
|
|
||
|
#define _SERVERNAME_ "ActiveX Framework"
|
||
|
|
||
|
static const char szTitle[] = _SERVERNAME_ " Assertion (Abort = UAE, Retry = INT 3, Ignore = Continue)";
|
||
|
|
||
|
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// Local functions
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
int NEAR _IdMsgBox(LPSTR pszText, LPCSTR pszTitle, UINT mbFlags);
|
||
|
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// DisplayAssert
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// Display an assert message box with the given pszMsg, pszAssert, source
|
||
|
// file name, and line number. The resulting message box has Abort, Retry,
|
||
|
// Ignore buttons with Abort as the default. Abort does a FatalAppExit;
|
||
|
// Retry does an int 3 then returns; Ignore just returns.
|
||
|
//
|
||
|
VOID DisplayAssert
|
||
|
(
|
||
|
LPSTR pszMsg,
|
||
|
LPSTR pszAssert,
|
||
|
LPSTR pszFile,
|
||
|
UINT line
|
||
|
)
|
||
|
{
|
||
|
char szMsg[250];
|
||
|
LPSTR lpszText;
|
||
|
|
||
|
lpszText = pszMsg; // Assume no file & line # info
|
||
|
|
||
|
// If C file assert, where you've got a file name and a line #
|
||
|
//
|
||
|
if (pszFile) {
|
||
|
|
||
|
// Then format the assert nicely
|
||
|
//
|
||
|
wsprintf(szMsg, szFormat, (pszMsg&&*pszMsg) ? pszMsg : pszAssert, pszFile, line);
|
||
|
lpszText = szMsg;
|
||
|
}
|
||
|
|
||
|
// Put up a dialog box
|
||
|
//
|
||
|
switch (_IdMsgBox(lpszText, szTitle, MB_ICONHAND|MB_ABORTRETRYIGNORE|MB_SYSTEMMODAL)) {
|
||
|
case IDABORT:
|
||
|
FatalAppExit(0, lpszText);
|
||
|
return;
|
||
|
|
||
|
case IDRETRY:
|
||
|
// call the win32 api to break us.
|
||
|
//
|
||
|
#ifdef _DEBUG
|
||
|
DebugBreak();
|
||
|
#endif
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
//=---------------------------------------------------------------------------=
|
||
|
// Beefed-up version of WinMessageBox.
|
||
|
//=---------------------------------------------------------------------------=
|
||
|
//
|
||
|
int NEAR _IdMsgBox
|
||
|
(
|
||
|
LPSTR pszText,
|
||
|
LPCSTR pszTitle,
|
||
|
UINT mbFlags
|
||
|
)
|
||
|
{
|
||
|
HWND hwndActive;
|
||
|
int id;
|
||
|
|
||
|
hwndActive = GetActiveWindow();
|
||
|
|
||
|
id = MessageBox(hwndActive, pszText, pszTitle, mbFlags);
|
||
|
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
#endif // DEBUG
|