mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Initial import into SourceForge CVS
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14685 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
191
library/debug.h
Normal file
191
library/debug.h
Normal file
@ -0,0 +1,191 @@
|
||||
/*
|
||||
* $Id: debug.h,v 1.1.1.1 2004-07-26 16:30:26 obarthel Exp $
|
||||
*
|
||||
* :ts=8
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _DEBUG_H
|
||||
#define _DEBUG_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* IMPORTANT: If DEBUG is redefined, it must happen only here. This
|
||||
* will cause all modules to depend upon it to be rebuilt
|
||||
* by the smakefile (that is, provided the smakefile has
|
||||
* all the necessary dependency lines in place).
|
||||
*/
|
||||
|
||||
/*#define DEBUG*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define PUSH_REPORTS() PUSHDEBUGLEVEL(1)
|
||||
#define PUSH_CALLS() PUSHDEBUGLEVEL(2)
|
||||
#define PUSH_ALL() PUSHDEBUGLEVEL(2)
|
||||
#define POP() POPDEBUGLEVEL()
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(DEBUG)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void kprintf(const char *format,...);
|
||||
extern void abort(void);
|
||||
extern char * __program_name;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void _SHOWVALUE(unsigned long value,int size,const char *name,const char *file,int line);
|
||||
void _SHOWPOINTER(const void *p,const char *name,const char *file,int line);
|
||||
void _SHOWSTRING(const char *string,const char *name,const char *file,int line);
|
||||
void _SHOWMSG(const char *msg,const char *file,int line);
|
||||
void _ENTER(const char *file,int line,const char *function);
|
||||
void _LEAVE(const char *file,int line,const char *function);
|
||||
void _RETURN(const char *file,int line,const char *function,unsigned long result);
|
||||
void _DPRINTF_HEADER(const char *file,int line);
|
||||
void _DPRINTF(const char *format,...);
|
||||
void _DLOG(const char *format,...);
|
||||
int _SETDEBUGLEVEL(int level);
|
||||
void _PUSHDEBUGLEVEL(int level);
|
||||
void _POPDEBUGLEVEL(void);
|
||||
int _GETDEBUGLEVEL(void);
|
||||
void _SETPROGRAMNAME(char *name);
|
||||
|
||||
#if defined(__SASC)
|
||||
#define ENTER() _ENTER(__FILE__,__LINE__,__FUNC__)
|
||||
#define LEAVE() _LEAVE(__FILE__,__LINE__,__FUNC__)
|
||||
#define RETURN(r) _RETURN(__FILE__,__LINE__,__FUNC__,(unsigned long)r)
|
||||
#define SHOWVALUE(v) _SHOWVALUE((unsigned long)v,sizeof(v),#v,__FILE__,__LINE__)
|
||||
#define SHOWPOINTER(p) _SHOWPOINTER(p,#p,__FILE__,__LINE__)
|
||||
#define SHOWSTRING(s) _SHOWSTRING(s,#s,__FILE__,__LINE__)
|
||||
#define SHOWMSG(s) _SHOWMSG(s,__FILE__,__LINE__)
|
||||
#define D(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DPRINTF s; } while(0)
|
||||
#define PRINTHEADER() _DPRINTF_HEADER(__FILE__,__LINE__)
|
||||
#define PRINTF(s) _DLOG s
|
||||
#define LOG(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DLOG("<%s()>:",__FUNC__); _DLOG s; } while(0)
|
||||
#define SETDEBUGLEVEL(l) _SETDEBUGLEVEL(l)
|
||||
#define PUSHDEBUGLEVEL(l) _PUSHDEBUGLEVEL(l)
|
||||
#define POPDEBUGLEVEL() _POPDEBUGLEVEL()
|
||||
#define SETPROGRAMNAME(n) _SETPROGRAMNAME(n)
|
||||
#define GETDEBUGLEVEL() _GETDEBUGLEVEL()
|
||||
#elif defined(__GNUC__)
|
||||
#define ENTER() _ENTER(__FILE__,__LINE__,__FUNCTION__)
|
||||
#define LEAVE() _LEAVE(__FILE__,__LINE__,__FUNCTION__)
|
||||
#define RETURN(r) _RETURN(__FILE__,__LINE__,__FUNCTION__,(unsigned long)r)
|
||||
#define SHOWVALUE(v) _SHOWVALUE((unsigned long)v,sizeof(v),#v,__FILE__,__LINE__)
|
||||
#define SHOWPOINTER(p) _SHOWPOINTER(p,#p,__FILE__,__LINE__)
|
||||
#define SHOWSTRING(s) _SHOWSTRING(s,#s,__FILE__,__LINE__)
|
||||
#define SHOWMSG(s) _SHOWMSG(s,__FILE__,__LINE__)
|
||||
#define D(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DPRINTF s; } while(0)
|
||||
#define PRINTHEADER() _DPRINTF_HEADER(__FILE__,__LINE__)
|
||||
#define PRINTF(s) _DLOG s
|
||||
#define LOG(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DLOG("<%s()>:",__FUNCTION__); _DLOG s; } while(0)
|
||||
#define SETDEBUGLEVEL(l) _SETDEBUGLEVEL(l)
|
||||
#define PUSHDEBUGLEVEL(l) _PUSHDEBUGLEVEL(l)
|
||||
#define POPDEBUGLEVEL() _POPDEBUGLEVEL()
|
||||
#define SETPROGRAMNAME(n) _SETPROGRAMNAME(n)
|
||||
#define GETDEBUGLEVEL() _GETDEBUGLEVEL()
|
||||
#else
|
||||
#define __FUNC__ ""
|
||||
#define ENTER() _ENTER(__FILE__,__LINE__,__FUNC__)
|
||||
#define LEAVE() _LEAVE(__FILE__,__LINE__,__FUNC__)
|
||||
#define RETURN(r) _RETURN(__FILE__,__LINE__,__FUNC__,(unsigned long)r)
|
||||
#define SHOWVALUE(v) _SHOWVALUE((unsigned long)v,sizeof(v),#v,__FILE__,__LINE__)
|
||||
#define SHOWPOINTER(p) _SHOWPOINTER(p,#p,__FILE__,__LINE__)
|
||||
#define SHOWSTRING(s) _SHOWSTRING(s,#s,__FILE__,__LINE__)
|
||||
#define SHOWMSG(s) _SHOWMSG(s,__FILE__,__LINE__)
|
||||
#define D(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DPRINTF s; } while(0)
|
||||
#define PRINTHEADER() _DPRINTF_HEADER(__FILE__,__LINE__)
|
||||
#define PRINTF(s) _DLOG s
|
||||
#define LOG(s) do { _DPRINTF_HEADER(__FILE__,__LINE__); _DLOG("<%s()>:",__FUNC__); _DLOG s; } while(0)
|
||||
#define SETDEBUGLEVEL(l) _SETDEBUGLEVEL(l)
|
||||
#define PUSHDEBUGLEVEL(l) _PUSHDEBUGLEVEL(l)
|
||||
#define POPDEBUGLEVEL() _POPDEBUGLEVEL()
|
||||
#define SETPROGRAMNAME(n) _SETPROGRAMNAME(n)
|
||||
#define GETDEBUGLEVEL() _GETDEBUGLEVEL()
|
||||
#endif
|
||||
|
||||
#undef DEBUG
|
||||
#define DEBUG 1
|
||||
|
||||
#define assert(expression) \
|
||||
((void) \
|
||||
((expression) ? 0 : \
|
||||
( \
|
||||
*(char *)0 = 0, /* Enforcer hit */ \
|
||||
_SETDEBUGLEVEL(2), \
|
||||
kprintf("[%s] " \
|
||||
"%s:%ld: failed assertion '%s'\n", \
|
||||
__program_name, \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
#expression), \
|
||||
abort(), \
|
||||
0 \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
#else
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef NDEBUG
|
||||
#define assert(expression) ((void)0)
|
||||
#else
|
||||
#include <assert.h>
|
||||
#endif /* NDEBUG */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define ENTER() ((void)0)
|
||||
#define LEAVE() ((void)0)
|
||||
#define RETURN(r) ((void)0)
|
||||
#define SHOWVALUE(v) ((void)0)
|
||||
#define SHOWPOINTER(p) ((void)0)
|
||||
#define SHOWSTRING(s) ((void)0)
|
||||
#define SHOWMSG(s) ((void)0)
|
||||
#define D(s) ((void)0)
|
||||
#define PRINTHEADER() ((void)0)
|
||||
#define PRINTF(s) ((void)0)
|
||||
#define LOG(s) ((void)0)
|
||||
#define SETDEBUGLEVEL(l) ((void)0)
|
||||
#define PUSHDEBUGLEVEL(l) ((void)0)
|
||||
#define POPDEBUGLEVEL() ((void)0)
|
||||
#define SETPROGRAMNAME(n) ((void)0)
|
||||
#define GETDEBUGLEVEL() (0)
|
||||
|
||||
#define DEBUG 0
|
||||
#endif /* DEBUG */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _DEBUG_H */
|
||||
Reference in New Issue
Block a user