|
|
|
@ -1,53 +1,53 @@ |
|
|
|
|
/***************************************************************************/ |
|
|
|
|
/* */ |
|
|
|
|
/* ftdebug.c */ |
|
|
|
|
/* */ |
|
|
|
|
/* Debugging and logging component for WinCE (body). */ |
|
|
|
|
/* */ |
|
|
|
|
/* Copyright 1996-2018 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). */ |
|
|
|
|
/* */ |
|
|
|
|
/* - error mode */ |
|
|
|
|
/* */ |
|
|
|
|
/* Only error messages are generated. */ |
|
|
|
|
/* */ |
|
|
|
|
/* - release mode: */ |
|
|
|
|
/* */ |
|
|
|
|
/* No error message is sent or generated. The code is free from any */ |
|
|
|
|
/* debugging parts. */ |
|
|
|
|
/* */ |
|
|
|
|
/*************************************************************************/ |
|
|
|
|
/****************************************************************************
|
|
|
|
|
* |
|
|
|
|
* ftdebug.c |
|
|
|
|
* |
|
|
|
|
* Debugging and logging component for WinCE (body). |
|
|
|
|
* |
|
|
|
|
* Copyright 1996-2018 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). |
|
|
|
|
* |
|
|
|
|
* - error mode |
|
|
|
|
* |
|
|
|
|
* Only error messages are generated. |
|
|
|
|
* |
|
|
|
|
* - release mode: |
|
|
|
|
* |
|
|
|
|
* No error message is sent or generated. The code is free from any |
|
|
|
|
* debugging parts. |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <ft2build.h> |
|
|
|
|
#include FT_FREETYPE_H |
|
|
|
|
#include FT_INTERNAL_DEBUG_H |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_ERROR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdarg.h> |
|
|
|
|
#include <stdlib.h> |
|
|
|
|
#include <string.h> |
|
|
|
@ -55,14 +55,15 @@ |
|
|
|
|
#include <windows.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
static void |
|
|
|
|
OutputDebugStringEx( const char* str ) |
|
|
|
|
{ |
|
|
|
|
static WCHAR buf[8192]; |
|
|
|
|
|
|
|
|
|
int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf, |
|
|
|
|
sizeof ( buf ) / sizeof ( *buf ) ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf, |
|
|
|
|
sizeof ( buf ) / sizeof ( *buf ) ); |
|
|
|
|
if ( !sz ) |
|
|
|
|
lstrcpyW( buf, L"OutputDebugStringEx: MultiByteToWideChar failed" ); |
|
|
|
|
|
|
|
|
@ -70,6 +71,8 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Message( const char* fmt, |
|
|
|
|
... ) |
|
|
|
@ -87,6 +90,8 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Panic( const char* fmt, |
|
|
|
|
... ) |
|
|
|
@ -111,18 +116,38 @@ |
|
|
|
|
int line, |
|
|
|
|
const char* file ) |
|
|
|
|
{ |
|
|
|
|
#if 0 |
|
|
|
|
/* activating the code in this block makes FreeType very chatty */ |
|
|
|
|
fprintf( stderr, |
|
|
|
|
"%s:%d: error 0x%02x: %s\n", |
|
|
|
|
file, |
|
|
|
|
line, |
|
|
|
|
error, |
|
|
|
|
FT_Error_String( error ) ); |
|
|
|
|
#else |
|
|
|
|
FT_UNUSED( error ); |
|
|
|
|
FT_UNUSED( line ); |
|
|
|
|
FT_UNUSED( file ); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* FT_DEBUG_LEVEL_ERROR */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE |
|
|
|
|
|
|
|
|
|
/* array of trace levels, initialized to 0; */ |
|
|
|
|
/* this gets adjusted at run-time */ |
|
|
|
|
static int ft_trace_levels_enabled[trace_count]; |
|
|
|
|
|
|
|
|
|
/* array of trace levels, initialized to 0 */ |
|
|
|
|
int ft_trace_levels[trace_count]; |
|
|
|
|
/* array of trace levels, always initialized to 0 */ |
|
|
|
|
static int ft_trace_levels_disabled[trace_count]; |
|
|
|
|
|
|
|
|
|
/* a pointer to either `ft_trace_levels_enabled' */ |
|
|
|
|
/* or `ft_trace_levels_disabled' */ |
|
|
|
|
int* ft_trace_levels; |
|
|
|
|
|
|
|
|
|
/* define array of trace toggle names */ |
|
|
|
|
#define FT_TRACE_DEF( x ) #x , |
|
|
|
@ -136,24 +161,66 @@ |
|
|
|
|
#undef FT_TRACE_DEF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/ |
|
|
|
|
/* */ |
|
|
|
|
/* Initialize the tracing sub-system. This is done by retrieving the */ |
|
|
|
|
/* value of the "FT2_DEBUG" environment variable. It must be a list of */ |
|
|
|
|
/* toggles, separated by spaces, `;' or `,'. Example: */ |
|
|
|
|
/* */ |
|
|
|
|
/* "any:3 memory:6 stream:5" */ |
|
|
|
|
/* */ |
|
|
|
|
/* This will request that all levels be set to 3, except the trace level */ |
|
|
|
|
/* for the memory and stream components which are set to 6 and 5, */ |
|
|
|
|
/* respectively. */ |
|
|
|
|
/* */ |
|
|
|
|
/* See the file `include/freetype/internal/fttrace.h' for details of the */ |
|
|
|
|
/* available toggle names. */ |
|
|
|
|
/* */ |
|
|
|
|
/* The level must be between 0 and 6; 0 means quiet (except for serious */ |
|
|
|
|
/* runtime errors), and 6 means _very_ verbose. */ |
|
|
|
|
/* */ |
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( FT_Int ) |
|
|
|
|
FT_Trace_Get_Count( void ) |
|
|
|
|
{ |
|
|
|
|
return trace_count; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( const char * ) |
|
|
|
|
FT_Trace_Get_Name( FT_Int idx ) |
|
|
|
|
{ |
|
|
|
|
int max = FT_Trace_Get_Count(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( idx < max ) |
|
|
|
|
return ft_trace_toggles[idx]; |
|
|
|
|
else |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Trace_Disable( void ) |
|
|
|
|
{ |
|
|
|
|
ft_trace_levels = ft_trace_levels_disabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Trace_Enable( void ) |
|
|
|
|
{ |
|
|
|
|
ft_trace_levels = ft_trace_levels_enabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
|
* |
|
|
|
|
* Initialize the tracing sub-system. This is done by retrieving the |
|
|
|
|
* value of the `FT2_DEBUG' environment variable. It must be a list of |
|
|
|
|
* toggles, separated by spaces, `;', or `,'. Example: |
|
|
|
|
* |
|
|
|
|
* export FT2_DEBUG="any:3 memory:7 stream:5" |
|
|
|
|
* |
|
|
|
|
* This requests that all levels be set to 3, except the trace level for |
|
|
|
|
* the memory and stream components which are set to 7 and 5, |
|
|
|
|
* respectively. |
|
|
|
|
* |
|
|
|
|
* See the file `include/freetype/internal/fttrace.h' for details of |
|
|
|
|
* the available toggle names. |
|
|
|
|
* |
|
|
|
|
* The level must be between 0 and 7; 0 means quiet (except for serious |
|
|
|
|
* runtime errors), and 7 means _very_ verbose. |
|
|
|
|
*/ |
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
ft_debug_init( void ) |
|
|
|
|
{ |
|
|
|
@ -189,8 +256,8 @@ |
|
|
|
|
|
|
|
|
|
if ( *p == ':' && p > q ) |
|
|
|
|
{ |
|
|
|
|
int n, i, len = (int)( p - q ); |
|
|
|
|
int level = -1, found = -1; |
|
|
|
|
FT_Int n, i, len = (FT_Int)( p - q ); |
|
|
|
|
FT_Int level = -1, found = -1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for ( n = 0; n < trace_count; n++ ) |
|
|
|
@ -224,16 +291,18 @@ |
|
|
|
|
{ |
|
|
|
|
if ( found == trace_any ) |
|
|
|
|
{ |
|
|
|
|
/* special case for "any" */ |
|
|
|
|
/* special case for `any' */ |
|
|
|
|
for ( n = 0; n < trace_count; n++ ) |
|
|
|
|
ft_trace_levels[n] = level; |
|
|
|
|
ft_trace_levels_enabled[n] = level; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
ft_trace_levels[found] = level; |
|
|
|
|
ft_trace_levels_enabled[found] = level; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ft_trace_levels = ft_trace_levels_enabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -247,9 +316,39 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* !FT_DEBUG_LEVEL_TRACE */ |
|
|
|
|
FT_BASE_DEF( FT_Int ) |
|
|
|
|
FT_Trace_Get_Count( void ) |
|
|
|
|
{ |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* FT_DEBUG_LEVEL_ERROR */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( const char * ) |
|
|
|
|
FT_Trace_Get_Name( FT_Int idx ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( idx ); |
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Trace_Disable( void ) |
|
|
|
|
{ |
|
|
|
|
/* nothing */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* documentation is in ftdebug.h */ |
|
|
|
|
|
|
|
|
|
FT_BASE_DEF( void ) |
|
|
|
|
FT_Trace_Enable( void ) |
|
|
|
|
{ |
|
|
|
|
/* nothing */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* !FT_DEBUG_LEVEL_TRACE */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* END */ |
|
|
|
|