05-032-MendicantBias's picture
Upload 12635 files
1d3d9a5 verified
raw
history blame
5.46 kB
#ifndef DEBUG_H
#define DEBUG_H
/**********************************************************************************
** ENVIROMENT VARIABILE
**********************************************************************************/
//#define ENABLE_DEBUG
/**********************************************************************************
** GLOBAL INCLUDE
**********************************************************************************/
/**********************************************************************************
** DEFINE
**********************************************************************************/
#define _DEBUG_MAX_INDENT_LEVEL 12
/**********************************************************************************
** MACRO
**********************************************************************************/
#ifdef ENABLE_DEBUG
///----------------------------------------------------------------
/// GLOBAL VARIABLES
///----------------------------------------------------------------
//Variable prototypes for debug
#define DEBUG_VARS_PROTOTYPES() \
extern FILE *_debug_file; \
extern int _debug_indent_level, _debug_show_level
//Global variables for debug
#define DEBUG_VARS() \
FILE *_debug_file = NULL; \
int _debug_indent_level = 0, _debug_show_level = 0
//Change the show level
#define DSHOW( level ) \
_debug_show_level = (level)
///----------------------------------------------------------------
/// DEBUG FILE MACROS
///----------------------------------------------------------------
//Open file and start debugging
#define DSTART( user__debug_show_level ) \
_debug_file = fopen( "debug.log", "w+"), _debug_indent_level = 0, _debug_show_level = user__debug_show_level , fprintf(_debug_file, "Start Debug!\n")
//Stop debugging and close file
#define DSTOP() \
((_debug_file != NULL)?fprintf(_debug_file, "\nDebug has Ended!\n"), fflush(_debug_file), fclose(_debug_file), _debug_file = NULL:(0))
///----------------------------------------------------------------
/// DEBUG PRINT MACROS
///----------------------------------------------------------------
//Print a given number of tab characters
#define DTAB(n) \
(((_debug_file != NULL) && (_debug_indent_level >= _debug_show_level))?(fprintf(_debug_file,"%.*s", n, "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t")):(0));
//Print a number of tab equal to indent level than print user defined string
#define DPRINT( ... ) \
(((_debug_file != NULL) && (_debug_indent_level >= _debug_show_level))?(fprintf(_debug_file,"%.*s", _debug_indent_level, "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"), fprintf(_debug_file, __VA_ARGS__ )):(0))
//print user defined string
#define DPRINT_NOTAB( ... ) \
(((_debug_file != NULL) && (_debug_indent_level >= _debug_show_level))?(fprintf(_debug_file, __VA_ARGS__ )):(0))
///----------------------------------------------------------------
/// FUNCTION TRACE MACROS
///----------------------------------------------------------------
//Enter Function and increase indent level. No argument print version
#define DENTER() \
DPRINT( "-->> \"%s\" |\n", __FUNCTION__), (_debug_indent_level<_DEBUG_MAX_INDENT_LEVEL)?(++_debug_indent_level):(_DEBUG_MAX_INDENT_LEVEL)
//Return from function and decrease indent level. No argument version
#define DRETURN() \
(_debug_indent_level>0)?(--_debug_indent_level):(0), DPRINT( "<<-- \"%s\" |\n", __FUNCTION__)
//Enter Function and increase indent level. No argument print version
#define DENTER_ARG( ... ) \
DPRINT( "-->> \"%s\" | ", __FUNCTION__), DPRINT_NOTAB( __VA_ARGS__ ), (_debug_indent_level<_DEBUG_MAX_INDENT_LEVEL)?(++_debug_indent_level):(_DEBUG_MAX_INDENT_LEVEL)
//Return from function and decrease indent level. No argument version
#define DRETURN_ARG( ... ) \
(_debug_indent_level>0)?(--_debug_indent_level):(0), DPRINT( "<<-- \"%s\" | ", __FUNCTION__), DPRINT_NOTAB( __VA_ARGS__ )
#else
#define DEBUG_VARS_PROTOTYPES()
#define DEBUG_VARS()
#define DSHOW( ... )
#define DSTART( ... )
#define DSTOP()
#define DTAB( ... )
#define DPRINT( ... )
#define DPRINT_NOTAB( ... )
#define DENTER( ... )
#define DRETURN( ... )
#define DENTER_ARG( ... )
#define DRETURN_ARG( ... )
#endif
/**********************************************************************************
** TYPEDEF
**********************************************************************************/
/**********************************************************************************
** PROTOTYPE: STRUCTURE
**********************************************************************************/
/**********************************************************************************
** PROTOTYPE: GLOBAL VARIABILE
**********************************************************************************/
#ifdef ENABLE_DEBUG
//Global variables prototype
DEBUG_VARS_PROTOTYPES();
#endif
/**********************************************************************************
** PROTOTYPE: FUNCTION
**********************************************************************************/
#else
#warning "multiple inclusion of the header file"
#endif