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