diff options
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/test/fdebug.c')
-rw-r--r-- | Build/source/libs/freetype/freetype-1.5/test/fdebug.c | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/test/fdebug.c b/Build/source/libs/freetype/freetype-1.5/test/fdebug.c new file mode 100644 index 00000000000..f2abd1ec904 --- /dev/null +++ b/Build/source/libs/freetype/freetype-1.5/test/fdebug.c @@ -0,0 +1,286 @@ +/****************************************************************************} +{* *} +{* The FreeType project - a Free and Portable Quality TrueType Renderer. *} +{* *} +{* Copyright 1996-2001 by *} +{* D. Turner, R.Wilhelm, and W. Lemberg *} +{* *} +{* fdebug : A very simple TrueType bytecode debugger. *} +{* *} +{* NOTE : You must compile the interpreter with the DEBUG_INTERPRETER *} +{* macro defined in order to link this program! *} +{* *} +{****************************************************************************/ + +#include <math.h> /* libc ANSI */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "freetype.h" +#include "tttypes.h" +#include "ttdebug.h" +#include "ttobjs.h" + + +#ifdef UNIX +#ifndef HAVE_POSIX_TERMIOS +#include <sys/ioctl.h> +#include <termio.h> +#else +#ifndef HAVE_TCGETATTR +#define HAVE_TCGETATTR +#endif /* HAVE_TCGETATTR */ +#ifndef HAVE_TCSETATTR +#define HAVE_TCSETATTR +#endif /* HAVE_TCSETATTR */ +#include <termios.h> +#endif /* HAVE_POSIX_TERMIOS */ +#endif + + /* MAGIC: This variable is only defined in ttinterp.c if the */ + /* macro DEBUG_INTERPRETER is set. It specifies the code */ + /* range to debug. By default, it is TT_CodeRange_Glyph. */ + /* */ + extern + int debug_coderange; + + +#define Font_Buff_Size 256000 /* this buffer holds all */ + /* font specific data. */ + + TT_Engine engine; + TT_Face face; + TT_Instance instance; + TT_Glyph glyph; + TT_Error error; + + TT_Face_Properties properties; + + int num_glyphs; + int ptsize; + + Int Fail; + Int Num; + int mode = 2; + unsigned char autorun; + +/********************************************************************* + * + * Usage : print usage message + * + *********************************************************************/ + + static + void Usage( const char* execname ) + { + TT_Message( "fdebug: a simple TrueType bytecode debugger - part of the FreeType project\n" ); + TT_Message( "--------------------------------------------------------------------------\n\n"); + TT_Message( "Usage: %s glyphnum ppem fontname[.ttf]\n", execname ); + TT_Message( " or %s --cvt ppem fontname[.ttf]\n", execname ); + TT_Message( " or %s --font fontname[.ttf]\n\n", execname ); + exit( EXIT_FAILURE ); + } + + +/********************************************************************* + * + * Init_Keyboard : set the input file descriptor to char-by-char + * mode on Unix.. + * + *********************************************************************/ + +#ifdef UNIX + + struct termios old_termio; + + static + void Init_Keyboard( void ) + { + struct termios termio; + + +#ifndef HAVE_TCGETATTR + ioctl( 0, TCGETS, &old_termio ); +#else + tcgetattr( 0, &old_termio ); +#endif + + termio = old_termio; + + termio.c_lflag &= ~(ICANON+ECHO+ECHOE+ECHOK+ECHONL+ECHOKE); + +#ifndef HAVE_TCSETATTR + ioctl( 0, TCSETS, &termio ); +#else + tcsetattr( 0, TCSANOW, &termio ); +#endif + } + + static + void Reset_Keyboard( voi ) + { +#ifndef HAVE_TCSETATTR + ioctl( 0, TCSETS, &old_termio ); +#else + tcsetattr( 0, TCSANOW, &old_termio ); +#endif + + } + +#else + + static + void Init_Keyboard( void ) + { + } + + static + void Reset_Keyboard( voi ) + { + } + +#endif + + static + void Print_Banner( void ) + { + TT_Message( "fdebug - a simple TrueType bytecode debugger for FreeType\n" ); + TT_Message( "------------------------------------------------------------\n" ); + TT_Message( "type '?' for help - copyright 1996-2000 the FreeType Project\n\n" ); + } + + + static + void Error( const char* message, + const char* filename ) + { + static char tempstr[256]; + + sprintf( tempstr, "ERROR (%s): %s\n", filename, message ); + TT_Message( tempstr ); + + sprintf( tempstr, " code = 0x%04lx\n", error ); + TT_Message( tempstr ); + + Reset_Keyboard(); + exit( EXIT_FAILURE ); + } + + + static + void Init_Face( const char* filename ) + { + error = TT_Init_FreeType(&engine); + if (error) Error( "could not initialise FreeType", filename ); + + /* open face object */ + error = TT_Open_Face( engine, filename, &face ); + if (error) Error( "could not find or open file", filename ); + + /* get properties */ + TT_Get_Face_Properties( face, &properties ); + num_glyphs = properties.num_Glyphs; + + /* create instance */ + error = TT_New_Instance( face, &instance ); + if (error) Error( "could not create instance", filename ); + + error = TT_New_Glyph( face, &glyph ); + if (error) Error( "could not create glyph container", filename ); + + TT_Set_Instance_Resolutions( instance, 96, 96 ); + + error = TT_Set_Instance_CharSize( instance, ptsize << 6 ); + if (error) Error( "could not set text size", filename ); + } + + + int main( int argc, char** argv ) + { + int i; + char filename[128+4]; + char* execname; + + + execname = argv[0]; + if ( argc < 2 ) + Usage( execname ); + + if ( strcmp( argv[1], "--font" ) == 0 ) + { + debug_coderange = TT_CodeRange_Font; + mode = 0; + argc--; + argv++; + } + else if ( strcmp( argv[1], "--cvt" ) == 0 ) + { + debug_coderange = TT_CodeRange_Cvt; + argv++; + argc--; + mode = 1; + } + else if ( sscanf( argv[1], "%d", &Num ) == 1 ) + { + mode = 2; + argv++; + argc--; + } + else + Usage( execname ); + + /* read the point size for cvt and glyph modes */ + if (mode > 0) + { + if ( sscanf( argv[1], "%d", &ptsize ) != 1 ) + Usage( execname ); + argc--; + argv++; + } + + if ( argc != 2 ) + Usage(execname); + + i = strlen( argv[1] ); + while ( i > 0 && argv[1][i] != '\\' ) + { + if ( argv[1][i] == '.' ) + i = 0; + i--; + } + + filename[128] = 0; + + strncpy( filename, argv[1], 128 ); + if ( i >= 0 ) + strncpy( filename + strlen(filename), ".ttf", 4 ); + + Init_Keyboard(); + + if (mode == 2) + { + Init_Face( filename ); + Print_Banner(); + + error = TT_Load_Glyph( instance, glyph, Num, TTLOAD_DEFAULT ); + if (error) Error( "Error during bytecode execution", filename ); + } + else + { + Print_Banner(); + Init_Face( filename ); + } + + TT_Close_Face( face ); + TT_Done_FreeType(engine); + + Reset_Keyboard(); + + exit( EXIT_SUCCESS ); /* for safety reasons */ + + return 0; /* never reached */ + } + + +/* End */ |