1 /***************************************************************************/
5 /* FreeType initialization layer (body). */
7 /* Copyright 1996-2000 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */
16 /***************************************************************************/
18 /*************************************************************************/
20 /* The purpose of this file is to implement the following two */
23 /* FT_Add_Default_Modules(): */
24 /* This function is used to add the set of default modules to a */
25 /* fresh new library object. The set is taken from the header file */
26 /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */
27 /* Build System' for more information. */
29 /* FT_Init_FreeType(): */
30 /* This function creates a system object for the current platform, */
31 /* builds a library out of it, then calls FT_Default_Drivers(). */
33 /* Note that even if FT_Init_FreeType() uses the implementation of the */
34 /* system object defined at build time, client applications are still */
35 /* able to provide their own `ftsystem.c'. */
37 /*************************************************************************/
40 #include <freetype/config/ftconfig.h>
41 #include <freetype/internal/ftobjs.h>
43 #include <freetype/internal/ftdebug.h>
44 #include <freetype/ftmodule.h>
47 /*************************************************************************/
49 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
50 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
51 /* messages during execution. */
54 #define FT_COMPONENT trace_init
57 #define FT_USE_MODULE( x ) extern const FT_Module_Class* x;
60 FT_USE_MODULE(fond_driver_class)
62 #include <freetype/config/ftmodule.h>
65 #define FT_USE_MODULE( x ) (const FT_Module_Class*)&x,
68 const FT_Module_Class* ft_default_modules[] =
71 FT_USE_MODULE(fond_driver_class)
73 #include <freetype/config/ftmodule.h>
78 /*************************************************************************/
81 /* FT_Add_Default_Modules */
84 /* Adds the set of default drivers to a given library object. */
85 /* This is only useful when you create a library object with */
86 /* FT_New_Library() (usually to plug a custom memory manager). */
89 /* library :: A handle to a new library object. */
91 FT_EXPORT_FUNC( void ) FT_Add_Default_Modules( FT_Library library )
94 const FT_Module_Class** cur;
97 /* test for valid `library' delayed to FT_Add_Module() */
99 cur = ft_default_modules;
102 error = FT_Add_Module( library, *cur );
103 /* notify errors, but don't stop */
106 FT_ERROR(( "FT_Add_Default_Module: Cannot install `%s', error = %x\n",
107 (*cur)->module_name, error ));
114 /*************************************************************************/
117 /* FT_Init_FreeType */
120 /* Initializes a new FreeType library object. The set of drivers */
121 /* that are registered by this function is determined at build time. */
124 /* library :: A handle to a new library object. */
127 /* FreeType error code. 0 means success. */
129 FT_EXPORT_FUNC( FT_Error ) FT_Init_FreeType( FT_Library* library )
135 /* First of all, allocate a new system object -- this function is part */
136 /* of the system-specific component, i.e. `ftsystem.c'. */
138 memory = FT_New_Memory();
141 FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
142 return FT_Err_Unimplemented_Feature;
145 /* build a library out of it, then fill it with the set of */
146 /* default drivers. */
148 error = FT_New_Library( memory, library );
150 FT_Add_Default_Modules( *library );