1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ftdebug.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Debugging and logging component (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 1996-2002, 2004, 2006-2009, 2013 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* IMPORTANT: A description of FreeType's debugging support can be */ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* found in `docs/DEBUG.TXT'. Read it if you need to use or */ 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand this code. */ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __FTDEBUG_H__ 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __FTDEBUG_H__ 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../ft2build.h" 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../config/ftconfig.h" 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../freetype.h" 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */ 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is already defined; this simplifies the following #ifdefs */ 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_TRACE 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#undef FT_DEBUG_LEVEL_ERROR 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEBUG_LEVEL_ERROR 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define the trace enums as well as the trace levels array when they */ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* are needed. */ 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_TRACE 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE_DEF( x ) trace_ ## x , 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* defining the enumeration */ 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef enum FT_Trace_ 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fttrace.h" 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov trace_count 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_Trace; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* defining the array of trace levels, provided by `src/base/ftdebug.c' */ 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov extern int ft_trace_levels[trace_count]; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#undef FT_TRACE_DEF 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_DEBUG_LEVEL_TRACE */ 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define the FT_TRACE macro */ 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* IMPORTANT! */ 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Each component must define the macro FT_COMPONENT to a valid FT_Trace */ 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* value before using any TRACE macro. */ 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_TRACE 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE( level, varformat ) \ 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov do \ 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( ft_trace_levels[FT_COMPONENT] >= level ) \ 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Message varformat; \ 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } while ( 0 ) 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* !FT_DEBUG_LEVEL_TRACE */ 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE( level, varformat ) do { } while ( 0 ) /* nothing */ 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* !FT_DEBUG_LEVEL_TRACE */ 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Trace_Get_Count */ 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Return the number of available trace components. */ 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The number of trace components. 0 if FreeType 2 is not built with */ 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEBUG_LEVEL_TRACE definition. */ 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This function may be useful if you want to access elements of */ 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the internal `ft_trace_levels' array by an index. */ 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Int ) 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Trace_Get_Count( void ); 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Trace_Get_Name */ 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Return the name of a trace component. */ 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The index of the trace component. */ 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The name of the trace component. This is a statically allocated */ 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* C string, so do not free it after use. NULL if FreeType 2 is not */ 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* built with FT_DEBUG_LEVEL_TRACE definition. */ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Use @FT_Trace_Get_Count to get the number of available trace */ 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* components. */ 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This function may be useful if you want to control FreeType 2's */ 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* debug level in your application. */ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( const char * ) 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Trace_Get_Name( FT_Int idx ); 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* You need two opening and closing parentheses! */ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Example: FT_TRACE0(( "Value is %i", foo )) */ 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Output of the FT_TRACEX macros is sent to stderr. */ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE0( varformat ) FT_TRACE( 0, varformat ) 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE1( varformat ) FT_TRACE( 1, varformat ) 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE2( varformat ) FT_TRACE( 2, varformat ) 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE3( varformat ) FT_TRACE( 3, varformat ) 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE4( varformat ) FT_TRACE( 4, varformat ) 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE5( varformat ) FT_TRACE( 5, varformat ) 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE6( varformat ) FT_TRACE( 6, varformat ) 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_TRACE7( varformat ) FT_TRACE( 7, varformat ) 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define the FT_ERROR macro. */ 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Output of this macro is sent to stderr. */ 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_ERROR 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_ERROR( varformat ) FT_Message varformat 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* !FT_DEBUG_LEVEL_ERROR */ 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_ERROR( varformat ) do { } while ( 0 ) /* nothing */ 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* !FT_DEBUG_LEVEL_ERROR */ 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw' */ 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* makes it possible to easily set a breakpoint at this function. */ 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_ERROR 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_ASSERT( condition ) \ 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov do \ 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( !( condition ) ) \ 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Panic( "assertion failed on line %d of file %s\n", \ 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov __LINE__, __FILE__ ); \ 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } while ( 0 ) 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_THROW( e ) \ 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( FT_Throw( FT_ERR_CAT( FT_ERR_PREFIX, e ), \ 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov __LINE__, \ 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov __FILE__ ) | \ 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ERR_CAT( FT_ERR_PREFIX, e ) ) 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* !FT_DEBUG_LEVEL_ERROR */ 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_ASSERT( condition ) do { } while ( 0 ) 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_THROW( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* !FT_DEBUG_LEVEL_ERROR */ 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define `FT_Message' and `FT_Panic' when needed. */ 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_DEBUG_LEVEL_ERROR 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "stdio.h" /* for vfprintf() */ 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* print a message */ 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Message( const char* fmt, 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ... ); 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* print a message and exit */ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Panic( const char* fmt, 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ... ); 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* report file name and line number of an error */ 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( int ) 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Throw( FT_Error error, 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int line, 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* file ); 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_DEBUG_LEVEL_ERROR */ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_debug_init( void ); 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __FTDEBUG_H__ */ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 256