/***************************************************************************/ /* */ /* ftinit.c */ /* */ /* FreeType initialisation layer (body). */ /* */ /* Copyright 1996-1999 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. */ /* */ /***************************************************************************/ /************************************************************************** * * The purpose of this file is to implement the three following * functions: * * FT_Default_Drivers: * This function is used to add the set of default drivers * to a fresh new library object. The set is computed at compile * time from the Makefiles inclusions in Makefile.lib. See the * document "FreeType Internals" for more info. * * * FT_Init_FreeType: * This function creates a system object for the current platform, * builds a library out of it, then calls FT_Default_Drivers * * * FT_Done_FreeType: * This function simply finalise the library and the corresponding * system object. * * * Note that even if FT_Init_FreeType uses the implementation of the * system object defined at build time, client applications are still * able to provide their own "ftsystem.c" * * * * * ************************************************************************/ #include #include #include #include #undef FT_COMPONENT #define FT_COMPONENT trace_init /*************************************************************************/ /* */ /* The macros FT_SUPPORT_xxxx are defined by Makefile.lib when this file */ /* is compiled. They come from a make variable called FTINIT_MACROS */ /* which is updated by each driver Makefile. */ /* */ /* This means that when a driver isn't part of the build, ftinit.o */ /* won't try to reference it. */ /* */ /*************************************************************************/ #define FTINIT_DRIVER_CHAIN #define FT_INIT_LAST_DRIVER_CHAIN ((FT_DriverChain*) 0) /* Include the SFNT driver interface if needed */ #ifdef FT_SUPPORT_SFNT #include "sfdriver.h" #endif /* Include the TrueType driver interface if needed */ #ifdef FT_SUPPORT_TRUETYPE #include "ttdriver.h" #endif /* Include the Type1 driver interface if needed */ #ifdef FT_SUPPORT_TYPE1 #include "t1driver.h" #endif /*************************************************************************/ /* */ /* */ /* FT_Default_Drivers */ /* */ /* */ /* Adds the set of default drivers to a given library object. */ /* */ /* */ /* library :: A handle to a new library object. */ /* */ EXPORT_FUNC void FT_Default_Drivers( FT_Library library ) { FT_Error error; const FT_DriverChain* chain = FT_INIT_LAST_DRIVER_CHAIN; while (chain) { error = FT_Add_Driver( library, chain->interface ); /* notify errors, but don't stop */ if (error) { FT_ERROR(( "FT.Default_Drivers: cannot install `%s', error = %x\n", chain->interface->driver_name, error )); } chain = chain->next; error = 0; /* clear error */ } } /*************************************************************************/ /* */ /* */ /* FT_Init_FreeType */ /* */ /* */ /* Initializes a new FreeType library object. The set of drivers */ /* that are registered by this function is determined at build time. */ /* */ /* */ /* library :: A handle to a new library object. */ /* */ /* */ /* Error code. 0 means success. */ /* */ EXPORT_FUNC FT_Error FT_Init_FreeType( FT_Library* library ) { FT_Error error; FT_Memory memory; /* First of all, allocate a new system object -this function is part */ /* of the system-specific component, i.e. ftsystem.c */ memory = FT_New_Memory(); if (!memory) { FT_ERROR(( "FT_Init_FreeType:" )); FT_ERROR(( " cannot find memory manager" )); return FT_Err_Unimplemented_Feature; } /* builds a library out of it, then fill it with the set of */ /* default drivers.. */ error = FT_New_Library( memory, library ); if ( !error ) FT_Default_Drivers(*library); return error; } /* END */