home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 August - Disc 3
/
chip_20018103_hu.iso
/
amiga
/
chiputil
/
wipeout.lha
/
source
/
assert.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-04-08
|
3KB
|
205 lines
/*
* $Id: assert.c 1.1 1998/04/08 16:45:44 olsen Exp $
*
* :ts=8
*/
/****************************************************************************/
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>
extern void kprintf(const char *,...);
/****************************************************************************/
static int _indent_level;
/****************************************************************************/
void
_INDENT(void)
{
int i;
for(i = 0 ; i < _indent_level ; i++)
kprintf(" ");
}
void
_SHOWVALUE(
unsigned long value,
int size,
const char *name,
const char *file,
int line)
{
char *fmt;
switch(size)
{
case 1:
fmt = "%s:%ld:%s = %ld, 0x%02lx";
break;
case 2:
fmt = "%s:%ld:%s = %ld, 0x%04lx";
break;
default:
fmt = "%s:%ld:%s = %ld, 0x%08lx";
break;
}
_INDENT();
kprintf(fmt,file,line,name,value,value);
if(size == 1 && value < 256)
{
if(value < ' ' || (value >= 127 && value < 160))
kprintf(", '\\x%02lx'",value);
else
kprintf(", '%lc'",value);
}
kprintf("\n");
}
/****************************************************************************/
void
_SHOWSTRING(
const char *string,
const char *name,
const char *file,
int line)
{
_INDENT();
kprintf("%s:%ld:%s = 0x%08lx \"%s\"\n",file,line,name,string,string);
}
/****************************************************************************/
void
_SHOWMSG(
const char *string,
const char *file,
int line)
{
_INDENT();
kprintf("%s:%ld:%s\n",file,line,string);
}
/****************************************************************************/
void
_ENTER(
const char *file,
int line,
const char *function)
{
_INDENT();
kprintf("%s:%ld:Entering %s\n",file,line,function);
_indent_level++;
}
void
_LEAVE(
const char *file,
int line,
const char *function)
{
_indent_level--;
_INDENT();
kprintf("%s:%ld: Leaving %s\n",file,line,function);
}
void
_RETURN(
const char *file,
int line,
const char *function,
unsigned long result)
{
_indent_level--;
_INDENT();
kprintf("%s:%ld: Leaving %s (result 0x%08lx, %ld)\n",file,line,function,result,result);
}
/****************************************************************************/
void
_ASSERT(
int x,
const char *xs,
const char *file,
int line,
const char *function)
{
#ifdef CONFIRM
STATIC BOOL ScrollMode = FALSE;
STATIC BOOL BatchMode = FALSE;
if(BatchMode == FALSE)
{
if(x == 0)
{
kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
file,
line,
xs,
function);
if(ScrollMode == FALSE)
{
ULONG Signals;
SetSignal(0,SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
kprintf(" ^C to continue, ^D to enter scroll mode, ^E to enter batch mode\r");
Signals = Wait(SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
if(Signals & SIGBREAKF_CTRL_D)
{
ScrollMode = TRUE;
kprintf("Ok, entering scroll mode\033[K\n");
}
else if (Signals & SIGBREAKF_CTRL_E)
{
BatchMode = TRUE;
kprintf("Ok, entering batch mode\033[K\n");
}
else
{
/* Continue */
kprintf("\033[K\r");
}
}
}
}
#else
if(x == 0)
{
_INDENT();
kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
file,
line,
xs,
function);
}
#endif /* CONFIRM */
}