ReactOS 0.4.16-dev-2354-g16de117
ftinit.c
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * ftinit.c
4 *
5 * FreeType initialization layer (body).
6 *
7 * Copyright (C) 1996-2020 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
44#include <freetype/ftmodapi.h>
45
46
47 /**************************************************************************
48 *
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.
52 */
53#undef FT_COMPONENT
54#define FT_COMPONENT init
55
56
57#undef FT_USE_MODULE
58#ifdef __cplusplus
59#define FT_USE_MODULE( type, x ) extern "C" const type x;
60#else
61#define FT_USE_MODULE( type, x ) extern const type x;
62#endif
63
64#include FT_CONFIG_MODULES_H
65
66#undef FT_USE_MODULE
67#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x),
68
69 static
71 {
72#include FT_CONFIG_MODULES_H
73 0
74 };
75
76
77 /* documentation is in ftmodapi.h */
78
79 FT_EXPORT_DEF( void )
81 {
83 const FT_Module_Class* const* cur;
84
85
86 /* GCC 4.6 warns the type difference:
87 * FT_Module_Class** != const FT_Module_Class* const*
88 */
89 cur = (const FT_Module_Class* const*)ft_default_modules;
90
91 /* test for valid `library' delayed to FT_Add_Module() */
92 while ( *cur )
93 {
95 /* notify errors, but don't stop */
96 if ( error )
97 FT_TRACE0(( "FT_Add_Default_Module:"
98 " Cannot install `%s', error = 0x%x\n",
99 (*cur)->module_name, error ));
100 cur++;
101 }
102 }
103
104
105#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
106
107#define MAX_LENGTH 128
108
109 /* documentation is in ftmodapi.h */
110
111 FT_EXPORT_DEF( void )
113 {
114 const char* env;
115 const char* p;
116 const char* q;
117
118 char module_name[MAX_LENGTH + 1];
119 char property_name[MAX_LENGTH + 1];
120 char property_value[MAX_LENGTH + 1];
121
122 int i;
123
124
125 env = ft_getenv( "FREETYPE_PROPERTIES" );
126 if ( !env )
127 return;
128
129 for ( p = env; *p; p++ )
130 {
131 /* skip leading whitespace and separators */
132 if ( *p == ' ' || *p == '\t' )
133 continue;
134
135 /* read module name, followed by `:' */
136 q = p;
137 for ( i = 0; i < MAX_LENGTH; i++ )
138 {
139 if ( !*p || *p == ':' )
140 break;
141 module_name[i] = *p++;
142 }
143 module_name[i] = '\0';
144
145 if ( !*p || *p != ':' || p == q )
146 break;
147
148 /* read property name, followed by `=' */
149 q = ++p;
150 for ( i = 0; i < MAX_LENGTH; i++ )
151 {
152 if ( !*p || *p == '=' )
153 break;
154 property_name[i] = *p++;
155 }
156 property_name[i] = '\0';
157
158 if ( !*p || *p != '=' || p == q )
159 break;
160
161 /* read property value, followed by whitespace (if any) */
162 q = ++p;
163 for ( i = 0; i < MAX_LENGTH; i++ )
164 {
165 if ( !*p || *p == ' ' || *p == '\t' )
166 break;
167 property_value[i] = *p++;
168 }
169 property_value[i] = '\0';
170
171 if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
172 break;
173
174 /* we completely ignore errors */
175 ft_property_string_set( library,
177 property_name,
178 property_value );
179
180 if ( !*p )
181 break;
182 }
183 }
184
185#else
186
187 FT_EXPORT_DEF( void )
189 {
191 }
192
193#endif
194
195
196 /* documentation is in freetype.h */
197
200 {
203
204
205 /* check of `alibrary' delayed to `FT_New_Library' */
206
207 /* First of all, allocate a new system object -- this function is part */
208 /* of the system-specific component, i.e. `ftsystem.c'. */
209
211 if ( !memory )
212 {
213 FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
214 return FT_THROW( Unimplemented_Feature );
215 }
216
217 /* build a library out of it, then fill it with the set of */
218 /* default drivers. */
219
220 error = FT_New_Library( memory, alibrary );
221 if ( error )
223 else
224 FT_Add_Default_Modules( *alibrary );
225
226 FT_Set_Default_Properties( *alibrary );
227
228 return error;
229 }
230
231
232 /* documentation is in freetype.h */
233
236 {
238
239
240 if ( !library )
241 return FT_THROW( Invalid_Library_Handle );
242
244
245 /* Discard the library object */
247
248 /* discard memory manager */
250
251 return FT_Err_Ok;
252 }
253
254
255/* END */
FT_Library library
Definition: cffdrivr.c:660
#define FT_EXPORT_DEF(x)
static LPCWSTR LPCWSTR module_name
Definition: db.cpp:171
static LPCWSTR LPCWSTR LPCWSTR env
Definition: db.cpp:171
return FT_Err_Ok
Definition: ftbbox.c:526
#define FT_TRACE0(varformat)
Definition: ftdebug.h:187
#define FT_ERROR(varformat)
Definition: ftdebug.h:211
#define FT_THROW(e)
Definition: ftdebug.h:243
FT_Set_Default_Properties(FT_Library library)
Definition: ftinit.c:188
static const FT_Module_Class *const ft_default_modules[]
Definition: ftinit.c:70
FT_Add_Default_Modules(FT_Library library)
Definition: ftinit.c:80
FT_Done_FreeType(FT_Library library)
Definition: ftinit.c:235
FT_Init_FreeType(FT_Library *alibrary)
Definition: ftinit.c:199
FT_Add_Module(FT_Library library, const FT_Module_Class *clazz)
Definition: ftobjs.c:4871
FT_Done_Library(FT_Library library)
Definition: ftobjs.c:5353
FT_New_Library(FT_Memory memory, FT_Library *alibrary)
Definition: ftobjs.c:5285
FT_New_Memory(void)
Definition: ftsystem.c:300
FT_Done_Memory(FT_Memory memory)
Definition: ftsystem.c:324
#define ft_getenv
Definition: ftstdlib.h:146
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:64
int FT_Error
Definition: fttypes.h:299
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
#define error(str)
Definition: mkdosfs.c:1605
static char memory[1024 *256]
Definition: process.c:122
#define FT_UNUSED(arg)
FT_Memory memory
Definition: ftobjs.h:895