00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019   
00020   
00021   
00022   
00023   
00024   
00025   
00026   
00027   
00028   
00029   
00030   
00031   
00032   
00033   
00034   
00035   
00036   
00037   
00038   
00039   
00040   
00041   
00042 
00043 
00044 #include <ft2build.h>
00045 #include FT_FREETYPE_H
00046 #include FT_INTERNAL_DEBUG_H
00047 
00048 
00049 #ifdef FT_DEBUG_LEVEL_ERROR
00050 
00051   
00052 
00053   FT_BASE_DEF( void )
00054   FT_Message( const char*  fmt, ... )
00055   {
00056     va_list  ap;
00057 
00058 
00059     va_start( ap, fmt );
00060     vfprintf( stderr, fmt, ap );
00061     va_end( ap );
00062   }
00063 
00064 
00065   
00066 
00067   FT_BASE_DEF( void )
00068   FT_Panic( const char*  fmt, ... )
00069   {
00070     va_list  ap;
00071 
00072 
00073     va_start( ap, fmt );
00074     vfprintf( stderr, fmt, ap );
00075     va_end( ap );
00076 
00077     exit( EXIT_FAILURE );
00078   }
00079 
00080 #endif 
00081 
00082 
00083 
00084 #ifdef FT_DEBUG_LEVEL_TRACE
00085 
00086   
00087   int  ft_trace_levels[trace_count];
00088 
00089 
00090   
00091 #define FT_TRACE_DEF( x )  #x ,
00092 
00093   static const char*  ft_trace_toggles[trace_count + 1] =
00094   {
00095 #include FT_INTERNAL_TRACE_H
00096     NULL
00097   };
00098 
00099 #undef FT_TRACE_DEF
00100 
00101 
00102   
00103 
00104   FT_BASE_DEF( FT_Int )
00105   FT_Trace_Get_Count( void )
00106   {
00107     return trace_count;
00108   }
00109 
00110 
00111   
00112 
00113   FT_BASE_DEF( const char * )
00114   FT_Trace_Get_Name( FT_Int  idx )
00115   {
00116     int  max = FT_Trace_Get_Count();
00117 
00118 
00119     if ( idx < max )
00120       return ft_trace_toggles[idx];
00121     else
00122       return NULL;
00123   }
00124 
00125 
00126   
00127   
00128   
00129   
00130   
00131   
00132   
00133   
00134   
00135   
00136   
00137   
00138   
00139   
00140   
00141   
00142   
00143   
00144   FT_BASE_DEF( void )
00145   ft_debug_init( void )
00146   {
00147     const char*  ft2_debug = getenv( "FT2_DEBUG" );
00148 
00149 
00150     if ( ft2_debug )
00151     {
00152       const char*  p = ft2_debug;
00153       const char*  q;
00154 
00155 
00156       for ( ; *p; p++ )
00157       {
00158         
00159         if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
00160           continue;
00161 
00162         
00163         q = p;
00164         while ( *p && *p != ':' )
00165           p++;
00166 
00167         if ( *p == ':' && p > q )
00168         {
00169           FT_Int  n, i, len = (FT_Int)( p - q );
00170           FT_Int  level = -1, found = -1;
00171 
00172 
00173           for ( n = 0; n < trace_count; n++ )
00174           {
00175             const char*  toggle = ft_trace_toggles[n];
00176 
00177 
00178             for ( i = 0; i < len; i++ )
00179             {
00180               if ( toggle[i] != q[i] )
00181                 break;
00182             }
00183 
00184             if ( i == len && toggle[i] == 0 )
00185             {
00186               found = n;
00187               break;
00188             }
00189           }
00190 
00191           
00192           p++;
00193           if ( *p )
00194           {
00195             level = *p++ - '0';
00196             if ( level < 0 || level > 7 )
00197               level = -1;
00198           }
00199 
00200           if ( found >= 0 && level >= 0 )
00201           {
00202             if ( found == trace_any )
00203             {
00204               
00205               for ( n = 0; n < trace_count; n++ )
00206                 ft_trace_levels[n] = level;
00207             }
00208             else
00209               ft_trace_levels[found] = level;
00210           }
00211         }
00212       }
00213     }
00214   }
00215 
00216 
00217 #else  
00218 
00219 
00220   FT_BASE_DEF( void )
00221   ft_debug_init( void )
00222   {
00223     
00224   }
00225 
00226 
00227   FT_BASE_DEF( FT_Int )
00228   FT_Trace_Get_Count( void )
00229   {
00230     return 0;
00231   }
00232 
00233 
00234   FT_BASE_DEF( const char * )
00235   FT_Trace_Get_Name( FT_Int  idx )
00236   {
00237     FT_UNUSED( idx );
00238 
00239     return NULL;
00240   }
00241 
00242 
00243 #endif 
00244 
00245 
00246