ReactOS 0.4.16-dev-311-g9382aa2
ftinit.c
Go to the documentation of this file.
1/***************************************************************************/
2/* */
3/* ftinit.c */
4/* */
5/* FreeType initialization layer (body). */
6/* */
7/* Copyright 1996-2018 by */
8/* David Turner, Robert Wilhelm, and Werner Lemberg. */
9/* */
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. */
15/* */
16/***************************************************************************/
17
18 /*************************************************************************/
19 /* */
20 /* The purpose of this file is to implement the following two */
21 /* functions: */
22 /* */
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. */
28 /* */
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(). */
32 /* */
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'. */
36 /* */
37 /*************************************************************************/
38
39
40#include <ft2build.h>
41#include FT_CONFIG_CONFIG_H
42#include FT_INTERNAL_OBJECTS_H
43#include FT_INTERNAL_DEBUG_H
44#include FT_MODULE_H
45#include "basepic.h"
46
47
48 /*************************************************************************/
49 /* */
50 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
51 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
52 /* messages during execution. */
53 /* */
54#undef FT_COMPONENT
55#define FT_COMPONENT trace_init
56
57
58#ifndef FT_CONFIG_OPTION_PIC
59
60
61#undef FT_USE_MODULE
62#ifdef __cplusplus
63#define FT_USE_MODULE( type, x ) extern "C" const type x;
64#else
65#define FT_USE_MODULE( type, x ) extern const type x;
66#endif
67
68#include FT_CONFIG_MODULES_H
69
70#undef FT_USE_MODULE
71#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x),
72
73 static
75 {
76#include FT_CONFIG_MODULES_H
77 0
78 };
79
80
81#else /* FT_CONFIG_OPTION_PIC */
82
83
84#ifdef __cplusplus
85#define FT_EXTERNC extern "C"
86#else
87#define FT_EXTERNC extern
88#endif
89
90 /* declare the module's class creation/destruction functions */
91#undef FT_USE_MODULE
92#define FT_USE_MODULE( type, x ) \
93 FT_EXTERNC FT_Error \
94 FT_Create_Class_ ## x( FT_Library library, \
95 FT_Module_Class* *output_class ); \
96 FT_EXTERNC void \
97 FT_Destroy_Class_ ## x( FT_Library library, \
98 FT_Module_Class* clazz );
99
100#include FT_CONFIG_MODULES_H
101
102 /* count all module classes */
103#undef FT_USE_MODULE
104#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x,
105
106 enum
107 {
108#include FT_CONFIG_MODULES_H
109 FT_NUM_MODULE_CLASSES
110 };
111
112 /* destroy all module classes */
113#undef FT_USE_MODULE
114#define FT_USE_MODULE( type, x ) \
115 if ( classes[i] ) \
116 { \
117 FT_Destroy_Class_ ## x( library, classes[i] ); \
118 } \
119 i++;
120
121
122 FT_BASE_DEF( void )
123 ft_destroy_default_module_classes( FT_Library library )
124 {
125 FT_Module_Class* *classes;
127 FT_UInt i;
128 BasePIC* pic_container = (BasePIC*)library->pic_container.base;
129
130
131 if ( !pic_container->default_module_classes )
132 return;
133
135 classes = pic_container->default_module_classes;
136 i = 0;
137
138#include FT_CONFIG_MODULES_H
139
140 FT_FREE( classes );
141 pic_container->default_module_classes = NULL;
142 }
143
144
145 /* initialize all module classes and the pointer table */
146#undef FT_USE_MODULE
147#define FT_USE_MODULE( type, x ) \
148 error = FT_Create_Class_ ## x( library, &clazz ); \
149 if ( error ) \
150 goto Exit; \
151 classes[i++] = clazz;
152
153
155 ft_create_default_module_classes( FT_Library library )
156 {
159 FT_Module_Class* *classes = NULL;
160 FT_Module_Class* clazz;
161 FT_UInt i;
162 BasePIC* pic_container = (BasePIC*)library->pic_container.base;
163
164
166
167 pic_container->default_module_classes = NULL;
168
169 if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) *
170 ( FT_NUM_MODULE_CLASSES + 1 ) ) )
171 return error;
172
173 /* initialize all pointers to 0, especially the last one */
174 for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ )
175 classes[i] = NULL;
176 classes[FT_NUM_MODULE_CLASSES] = NULL;
177
178 i = 0;
179
180#include FT_CONFIG_MODULES_H
181
182 Exit:
183 if ( error )
184 ft_destroy_default_module_classes( library );
185 else
186 pic_container->default_module_classes = classes;
187
188 return error;
189 }
190
191
192#endif /* FT_CONFIG_OPTION_PIC */
193
194
195 /* documentation is in ftmodapi.h */
196
197 FT_EXPORT_DEF( void )
199 {
201 const FT_Module_Class* const* cur;
202
203
204 /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */
205#ifdef FT_CONFIG_OPTION_PIC
206 if ( !library )
207 return;
208#endif
209
210 /* GCC 4.6 warns the type difference:
211 * FT_Module_Class** != const FT_Module_Class* const*
212 */
214
215 /* test for valid `library' delayed to FT_Add_Module() */
216 while ( *cur )
217 {
219 /* notify errors, but don't stop */
220 if ( error )
221 FT_TRACE0(( "FT_Add_Default_Module:"
222 " Cannot install `%s', error = 0x%x\n",
223 (*cur)->module_name, error ));
224 cur++;
225 }
226 }
227
228
229#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
230
231#define MAX_LENGTH 128
232
233 /* documentation is in ftmodapi.h */
234
235 FT_EXPORT_DEF( void )
237 {
238 const char* env;
239 const char* p;
240 const char* q;
241
242 char module_name[MAX_LENGTH + 1];
243 char property_name[MAX_LENGTH + 1];
244 char property_value[MAX_LENGTH + 1];
245
246 int i;
247
248
249 env = ft_getenv( "FREETYPE_PROPERTIES" );
250 if ( !env )
251 return;
252
253 for ( p = env; *p; p++ )
254 {
255 /* skip leading whitespace and separators */
256 if ( *p == ' ' || *p == '\t' )
257 continue;
258
259 /* read module name, followed by `:' */
260 q = p;
261 for ( i = 0; i < MAX_LENGTH; i++ )
262 {
263 if ( !*p || *p == ':' )
264 break;
265 module_name[i] = *p++;
266 }
267 module_name[i] = '\0';
268
269 if ( !*p || *p != ':' || p == q )
270 break;
271
272 /* read property name, followed by `=' */
273 q = ++p;
274 for ( i = 0; i < MAX_LENGTH; i++ )
275 {
276 if ( !*p || *p == '=' )
277 break;
278 property_name[i] = *p++;
279 }
280 property_name[i] = '\0';
281
282 if ( !*p || *p != '=' || p == q )
283 break;
284
285 /* read property value, followed by whitespace (if any) */
286 q = ++p;
287 for ( i = 0; i < MAX_LENGTH; i++ )
288 {
289 if ( !*p || *p == ' ' || *p == '\t' )
290 break;
291 property_value[i] = *p++;
292 }
293 property_value[i] = '\0';
294
295 if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
296 break;
297
298 /* we completely ignore errors */
299 ft_property_string_set( library,
301 property_name,
302 property_value );
303 }
304 }
305
306#else
307
308 FT_EXPORT_DEF( void )
310 {
312 }
313
314#endif
315
316
317 /* documentation is in freetype.h */
318
321 {
324
325
326 /* check of `alibrary' delayed to `FT_New_Library' */
327
328 /* First of all, allocate a new system object -- this function is part */
329 /* of the system-specific component, i.e. `ftsystem.c'. */
330
332 if ( !memory )
333 {
334 FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
335 return FT_THROW( Unimplemented_Feature );
336 }
337
338 /* build a library out of it, then fill it with the set of */
339 /* default drivers. */
340
341 error = FT_New_Library( memory, alibrary );
342 if ( error )
344 else
345 FT_Add_Default_Modules( *alibrary );
346
347 FT_Set_Default_Properties( *alibrary );
348
349 return error;
350 }
351
352
353 /* documentation is in freetype.h */
354
357 {
359
360
361 if ( !library )
362 return FT_THROW( Invalid_Library_Handle );
363
365
366 /* Discard the library object */
368
369 /* discard memory manager */
371
372 return FT_Err_Ok;
373 }
374
375
376/* END */
#define FT_DEFAULT_MODULES_GET
Definition: basepic.h:30
FT_Library library
Definition: cffdrivr.c:654
static LPCWSTR LPCWSTR module_name
Definition: db.cpp:170
static LPCWSTR LPCWSTR LPCWSTR env
Definition: db.cpp:170
#define NULL
Definition: types.h:112
return FT_Err_Ok
Definition: ftbbox.c:511
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
#define FT_EXPORT_DEF(x)
Definition: ftconfig.h:483
#define FT_BASE_DEF(x)
Definition: ftconfig.h:419
#define FT_TRACE0(varformat)
Definition: ftdebug.h:157
#define FT_ERROR(varformat)
Definition: ftdebug.h:181
#define FT_THROW(e)
Definition: ftdebug.h:213
FT_Set_Default_Properties(FT_Library library)
Definition: ftinit.c:309
static const FT_Module_Class *const ft_default_modules[]
Definition: ftinit.c:74
FT_Add_Default_Modules(FT_Library library)
Definition: ftinit.c:198
FT_Done_FreeType(FT_Library library)
Definition: ftinit.c:356
FT_Init_FreeType(FT_Library *alibrary)
Definition: ftinit.c:320
#define FT_ALLOC(ptr, size)
Definition: ftmemory.h:303
#define FT_FREE(ptr)
Definition: ftmemory.h:329
FT_Add_Module(FT_Library library, const FT_Module_Class *clazz)
Definition: ftobjs.c:4724
FT_Done_Library(FT_Library library)
Definition: ftobjs.c:5220
FT_New_Library(FT_Memory memory, FT_Library *alibrary)
Definition: ftobjs.c:5138
FT_New_Memory(void)
Definition: ftsystem.c:287
FT_Done_Memory(FT_Memory memory)
Definition: ftsystem.c:311
#define ft_getenv
Definition: ftstdlib.h:146
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
int FT_Error
Definition: fttypes.h:300
unsigned int FT_UInt
Definition: fttypes.h:231
FxCollectionEntry * cur
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
if(dx< 0)
Definition: linetemp.h:194
#define error(str)
Definition: mkdosfs.c:1605
static char memory[1024 *256]
Definition: process.c:116
static void Exit(void)
Definition: sock.c:1330
FT_Memory memory
Definition: ftobjs.h:918