[8003] | 1 | /* $Id: kAssert.c,v 1.1 2002-02-24 02:47:23 bird Exp $
|
---|
| 2 | *
|
---|
| 3 | * kAssert - Assertion helper functions.
|
---|
| 4 | *
|
---|
| 5 | * Copyright (c) 2001 knut st. osmundsen (knut.stange.osmundsen@mynd.no)
|
---|
| 6 | *
|
---|
| 7 | * GPL
|
---|
| 8 | *
|
---|
| 9 | */
|
---|
| 10 | #ifndef NOFILEID
|
---|
| 11 | static const char szFileId[] = "$Id: kAssert.c,v 1.1 2002-02-24 02:47:23 bird Exp $";
|
---|
| 12 | #endif
|
---|
| 13 |
|
---|
| 14 |
|
---|
| 15 | /*******************************************************************************
|
---|
| 16 | * Header Files *
|
---|
| 17 | *******************************************************************************/
|
---|
| 18 | #define INCL_BASE
|
---|
| 19 | #include <os2.h>
|
---|
| 20 |
|
---|
| 21 | #include <stdio.h>
|
---|
| 22 | #include "kTypes.h"
|
---|
| 23 |
|
---|
| 24 |
|
---|
| 25 | /**
|
---|
| 26 | * This function will display and log assertions which failes.
|
---|
| 27 | * @returns TRUE: issue breakpoint instruction
|
---|
| 28 | * FALSE: continue execution.
|
---|
| 29 | * @param pszExpr
|
---|
| 30 | * @param pszFilename Name of the file the kASSERT macro is called from.
|
---|
| 31 | * @param uLine Line number (within pszFilename) of the kASSERT macro call.
|
---|
| 32 | * @param pszFunction Name of the function the kASSERT macro is called from.
|
---|
| 33 | * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)
|
---|
| 34 | */
|
---|
| 35 | KBOOL KLIBCALL kAssertMsg(const char *pszExpr, const char *pszFilename, unsigned uLine, const char *pszFunction)
|
---|
| 36 | {
|
---|
| 37 | PTIB ptib;
|
---|
| 38 | PPIB ppib;
|
---|
| 39 | KBOOL fRc = TRUE;
|
---|
| 40 |
|
---|
| 41 | DosGetInfoBlocks(&ptib, &ppib);
|
---|
| 42 | if (ppib->pib_ultype != 3) /* !PM */
|
---|
| 43 | {
|
---|
| 44 | fprintf(stderr,
|
---|
| 45 | "\n"
|
---|
| 46 | "Assertion Failed: %.640s\n"
|
---|
| 47 | "File: %.260s\n"
|
---|
| 48 | "Line: %d\n"
|
---|
| 49 | "Function: %.128s\n",
|
---|
| 50 | pszExpr, pszFilename, uLine, pszFunction);
|
---|
| 51 | }
|
---|
| 52 | else
|
---|
| 53 | {
|
---|
| 54 | char szTitle[42];
|
---|
| 55 | char szMsg[1024];
|
---|
| 56 | HAB hab;
|
---|
| 57 | HMQ hmq;
|
---|
| 58 | hab = WinInitialize(0);
|
---|
| 59 | hmq = WinCreateMsgQueue(hab, 0);
|
---|
| 60 |
|
---|
| 61 | /*
|
---|
| 62 | * Format a title.
|
---|
| 63 | */
|
---|
| 64 | if (DosQueryModuleName(ppib->pib_hmte, sizeof(szTitle), &szTitle[0]))
|
---|
| 65 | sprintf(szTitle, "Process 0x%x(%d)", ppib->pib_ulpid, ppib->pib_ulpid);
|
---|
| 66 |
|
---|
| 67 | /*
|
---|
| 68 | * Format the message.
|
---|
| 69 | */
|
---|
| 70 | sprintf(szMsg,
|
---|
| 71 | "\n"
|
---|
| 72 | "Assertion Failed: %.640s\n"
|
---|
| 73 | "File: %.260s\n"
|
---|
| 74 | "Line: %d\n"
|
---|
| 75 | "Function: %.128s\n",
|
---|
| 76 | pszExpr, pszFilename, uLine, pszFunction);
|
---|
| 77 |
|
---|
| 78 | fRc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, szTitle, szMsg, 0,
|
---|
| 79 | MB_ABORTRETRYIGNORE | MB_MOVEABLE | MB_APPLMODAL) != MBID_IGNORE;
|
---|
| 80 |
|
---|
| 81 | WinDestroyMsgQueue(hmq);
|
---|
| 82 | WinTerminate(hab);
|
---|
| 83 | }
|
---|
| 84 | return fRc;
|
---|
| 85 | }
|
---|
| 86 |
|
---|
| 87 |
|
---|