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>
42 #include <freetype/internal/ftdebug.h>
43 #include <freetype/ftmodule.h>
46 /*************************************************************************/
48 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
49 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
50 /* messages during execution. */
53 #define FT_COMPONENT trace_init
56 #define FT_USE_MODULE( x ) extern const FT_Module_Class* x;
59 FT_USE_MODULE(fond_driver_class
)
61 #include <freetype/config/ftmodule.h>
64 #define FT_USE_MODULE( x ) (const FT_Module_Class*)&x,
67 const FT_Module_Class
* ft_default_modules
[] =
70 FT_USE_MODULE(fond_driver_class
)
72 #include <freetype/config/ftmodule.h>
77 /*************************************************************************/
80 /* FT_Add_Default_Modules */
83 /* Adds the set of default drivers to a given library object. */
84 /* This is only useful when you create a library object with */
85 /* FT_New_Library() (usually to plug a custom memory manager). */
88 /* library :: A handle to a new library object. */
90 FT_EXPORT_FUNC( void ) FT_Add_Default_Modules( FT_Library library
)
93 const FT_Module_Class
** cur
;
96 /* test for valid `library' delayed to FT_Add_Module() */
98 cur
= ft_default_modules
;
101 error
= FT_Add_Module( library
, *cur
);
102 /* notify errors, but don't stop */
105 FT_ERROR(( "FT_Add_Default_Module: Cannot install `%s', error = %x\n",
106 (*cur
)->module_name
, error
));
113 /*************************************************************************/
116 /* FT_Init_FreeType */
119 /* Initializes a new FreeType library object. The set of drivers */
120 /* that are registered by this function is determined at build time. */
123 /* library :: A handle to a new library object. */
126 /* FreeType error code. 0 means success. */
128 FT_EXPORT_FUNC( FT_Error
) FT_Init_FreeType( FT_Library
* library
)
134 /* First of all, allocate a new system object -- this function is part */
135 /* of the system-specific component, i.e. `ftsystem.c'. */
137 memory
= FT_New_Memory();
140 FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
141 return FT_Err_Unimplemented_Feature
;
144 /* build a library out of it, then fill it with the set of */
145 /* default drivers. */
147 error
= FT_New_Library( memory
, library
);
149 FT_Add_Default_Modules( *library
);