mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
- Replaced ISO Latin 1 code #160 with a plain blank space (ASCII code #32) where necessary git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15305 87f5fb63-7c3d-0410-a384-fd976d0f7a62
200 lines
7.8 KiB
C
200 lines
7.8 KiB
C
/*
|
|
* $Id: debug.h,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
|
*
|
|
* :ts=8
|
|
*
|
|
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
|
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
|
* 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)
|
|
|
|
/****************************************************************************/
|
|
|
|
#ifndef _STDLIB_H
|
|
#include <stdlib.h>
|
|
#endif /* _STDLIB_H */
|
|
|
|
#ifndef _DOS_H
|
|
#include <dos.h>
|
|
#endif /* _DOS_H */
|
|
|
|
/****************************************************************************/
|
|
|
|
extern void kprintf(const char *format,...);
|
|
|
|
/****************************************************************************/
|
|
|
|
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 */
|