ref: f948758609d3a22aeec5050935429f375575fe5f
dir: /demos/src/fttry.c/
/****************************************************************************/ /* */ /* The FreeType project -- a free and portable quality TrueType renderer. */ /* */ /* Copyright 1996-1998 by */ /* D. Turner, R.Wilhelm, and W. Lemberg */ /* */ /* ftlint: a simple TrueType instruction tester. */ /* */ /* NOTE: This is just a test program that is used to show off and */ /* debug the current engine. */ /* */ /****************************************************************************/ #include "freetype.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #define gettext( x ) ( x ) FT_Error error; FT_Library library; FT_Face face; unsigned int num_glyphs; int ptsize; int Fail; int Num; static void Usage( char* name ) { printf( "fttry: simple TrueType instruction tester -- part of the FreeType project\n" ); printf( "--------------------------------------------------------------------------\n" ); printf( "\n" ); printf( "Usage: %s ppem glyph fontname [fontname2..]\n\n", name ); printf( " or %s -u glyph fontname [fontname2..]\n", name ); printf( " to load an unscaled glyph\n\n" ); exit( 1 ); } static void Panic( const char* message ) { fprintf( stderr, "%s\n error code = 0x%04x\n", message, error ); exit(1); } int main( int argc, char** argv ) { int i, file_index, glyph_index; char filename[128 + 4]; char alt_filename[128 + 4]; char* execname; char* fname; int load_unscaled = 0; execname = argv[0]; if ( argc < 3 ) Usage( execname ); if ( argv[1][0] == '-' && argv[1][1] == 'u' ) { load_unscaled = 1; } else { if ( sscanf( argv[1], "%d", &ptsize ) != 1 ) Usage( execname ); } argc--; argv++; if ( sscanf( argv[1], "%d", &glyph_index ) != 1 ) Usage( execname ); error = FT_Init_FreeType( &library ); if (error) Panic( "Could not create library object" ); /* Now check all files */ for ( file_index = 2; file_index < argc; file_index++ ) { fname = argv[file_index]; i = strlen( fname ); while ( i > 0 && fname[i] != '\\' && fname[i] != '/' ) { if ( fname[i] == '.' ) i = 0; i--; } filename[128] = '\0'; alt_filename[128] = '\0'; strncpy( filename, fname, 128 ); strncpy( alt_filename, fname, 128 ); if ( i >= 0 ) { strncpy( filename + strlen( filename ), ".ttf", 4 ); strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 ); } i = strlen( filename ); fname = filename; while ( i >= 0 ) if ( filename[i] == '/' || filename[i] == '\\' ) { fname = filename + i + 1; i = -1; } else i--; printf( "%s: ", fname ); /* Load face */ error = FT_New_Face( library, filename, 0, &face ); if (error) Panic( "Could not create face object" ); num_glyphs = face->num_glyphs; error = FT_Set_Char_Size( face, ptsize << 6, 0, 0, 0 ); if (error) Panic( "Could not set character size" ); error = FT_Load_Glyph( face, glyph_index, load_unscaled ? FT_LOAD_NO_SCALE : FT_LOAD_DEFAULT ); if ( error == 0 ) printf( "OK.\n" ); else printf( "Fail with error 0x%04x\n", error ); FT_Done_Face( face ); } FT_Done_FreeType(library); exit( 0 ); /* for safety reasons */ return 0; /* never reached */ } /* End */