/******************************************************************* * * ttdebug.h * * Debugging and Logging component (specification) * * Copyright 1996-1999 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used * modified and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * * * This component contains various macros and functions used to * ease the debugging of the FreeType engine. Its main purpose * is in assertion checking, tracing, and error detection. * * There are now three debugging modes: * * - trace mode: * * Error and trace messages are sent to the log file * (which can be the standard error output). Define * DEBUG_LEVEL_TRACE to enable this mode. * * - error mode: * * Only error messages are generated. Define * DEBUG_LEVEL_ERROR to enable this mode. * * - release mode: * * Error messages are neither sent nor generated. The code is * free from any debugging parts. * ******************************************************************/ #ifndef TTDEBUG_H #define TTDEBUG_H #include "ttconfig.h" #include "tttypes.h" #ifdef __cplusplus extern "C" { #endif #if defined( DEBUG_LEVEL_TRACE ) typedef enum Trace_Component_ { trace_any = 0, trace_api, trace_interp, trace_load, trace_gload, trace_memory, trace_file, trace_mutex, trace_cache, trace_calc, trace_cmap, trace_extend, trace_objs, trace_raster, trace_bitmap, trace_max } Trace_Component; /* Here we define an array to hold the trace levels per component. */ /* Since it is globally defined, all array members are set to 0. */ /* You should set the values in this array either in your program */ /* or with your debugger. */ /* */ /* Currently, up to eight levels (PTRACE0-PTRACE7, see below) are */ /* used in some parts of the engine. */ /* */ /* For example, to have all tracing messages in the raster */ /* component, say */ /* */ /* #define DEBUG_LEVEL_TRACE */ /* #include "ttdebug.h" */ /* */ /* ... */ /* set_tt_trace_levels( trace_raster, 7 ) */ /* */ /* in your code before initializing the FreeType engine. */ /* */ /* Maybe it is better to define DEBUG_LEVEL_TRACE in ttconfig.h... */ extern char tt_trace_levels[trace_max]; /* IMPORTANT: */ /* */ /* Each component must define the macro TT_COMPONENT */ /* to a valid Trace_Component value before using any */ /* PTRACEx macro. */ /* */ #define PTRACE( level, varformat ) \ if ( tt_trace_levels[TT_COMPONENT] >= level ) TT_Message##varformat #elif defined( DEBUG_LEVEL_ERROR ) #define PTRACE( level, varformat ) /* nothing */ #else /* RELEASE MODE */ #define TT_Assert( condition, action ) /* nothing */ #define PTRACE( level, varformat ) /* nothing */ #define PERROR( varformat ) /* nothing */ #define PANIC( varformat ) /* nothing */ #endif /************************************************************************/ /* */ /* Define macros and fuctions that are common to the debug and trace */ /* modes. */ /* */ #if defined( DEBUG_LEVEL_TRACE ) || defined( DEBUG_LEVEL_ERROR ) #define TT_Assert( condition, action ) if ( !(condition) ) ( action ) void TT_Message( const String* fmt, ... ); void TT_Panic ( const String* fmt, ... ); /* print a message and exit */ const String* Cur_U_Line( void* exec ); #define PERROR( varformat ) TT_Message##varformat #define PANIC( varformat ) TT_Panic##varformat #endif #if defined( DEBUG_LEVEL_TRACE ) void set_tt_trace_levels( int index, char value ); #endif #define PTRACE0( varformat ) PTRACE( 0, varformat ) #define PTRACE1( varformat ) PTRACE( 1, varformat ) #define PTRACE2( varformat ) PTRACE( 2, varformat ) #define PTRACE3( varformat ) PTRACE( 3, varformat ) #define PTRACE4( varformat ) PTRACE( 4, varformat ) #define PTRACE5( varformat ) PTRACE( 5, varformat ) #define PTRACE6( varformat ) PTRACE( 6, varformat ) #define PTRACE7( varformat ) PTRACE( 7, varformat ) #ifdef __cplusplus } #endif #endif /* TTDEBUG_H */