OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* ftsystem.h */ | |
4 /* */ | |
5 /* FreeType low-level system interface definition (specification). */ | |
6 /* */ | |
7 /* Copyright 1996-2001, 2002, 2005, 2010 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 #ifndef __FTSYSTEM_H__ | |
20 #define __FTSYSTEM_H__ | |
21 | |
22 | |
23 #include <ft2build.h> | |
24 | |
25 | |
26 FT_BEGIN_HEADER | |
27 | |
28 | |
29 /*************************************************************************/ | |
30 /* */ | |
31 /* <Section> */ | |
32 /* system_interface */ | |
33 /* */ | |
34 /* <Title> */ | |
35 /* System Interface */ | |
36 /* */ | |
37 /* <Abstract> */ | |
38 /* How FreeType manages memory and i/o. */ | |
39 /* */ | |
40 /* <Description> */ | |
41 /* This section contains various definitions related to memory */ | |
42 /* management and i/o access. You need to understand this */ | |
43 /* information if you want to use a custom memory manager or you own */ | |
44 /* i/o streams. */ | |
45 /* */ | |
46 /*************************************************************************/ | |
47 | |
48 | |
49 /*************************************************************************/ | |
50 /* */ | |
51 /* M E M O R Y M A N A G E M E N T */ | |
52 /* */ | |
53 /*************************************************************************/ | |
54 | |
55 | |
56 /************************************************************************* | |
57 * | |
58 * @type: | |
59 * FT_Memory | |
60 * | |
61 * @description: | |
62 * A handle to a given memory manager object, defined with an | |
63 * @FT_MemoryRec structure. | |
64 * | |
65 */ | |
66 typedef struct FT_MemoryRec_* FT_Memory; | |
67 | |
68 | |
69 /************************************************************************* | |
70 * | |
71 * @functype: | |
72 * FT_Alloc_Func | |
73 * | |
74 * @description: | |
75 * A function used to allocate `size' bytes from `memory'. | |
76 * | |
77 * @input: | |
78 * memory :: | |
79 * A handle to the source memory manager. | |
80 * | |
81 * size :: | |
82 * The size in bytes to allocate. | |
83 * | |
84 * @return: | |
85 * Address of new memory block. 0~in case of failure. | |
86 * | |
87 */ | |
88 typedef void* | |
89 (*FT_Alloc_Func)( FT_Memory memory, | |
90 long size ); | |
91 | |
92 | |
93 /************************************************************************* | |
94 * | |
95 * @functype: | |
96 * FT_Free_Func | |
97 * | |
98 * @description: | |
99 * A function used to release a given block of memory. | |
100 * | |
101 * @input: | |
102 * memory :: | |
103 * A handle to the source memory manager. | |
104 * | |
105 * block :: | |
106 * The address of the target memory block. | |
107 * | |
108 */ | |
109 typedef void | |
110 (*FT_Free_Func)( FT_Memory memory, | |
111 void* block ); | |
112 | |
113 | |
114 /************************************************************************* | |
115 * | |
116 * @functype: | |
117 * FT_Realloc_Func | |
118 * | |
119 * @description: | |
120 * A function used to re-allocate a given block of memory. | |
121 * | |
122 * @input: | |
123 * memory :: | |
124 * A handle to the source memory manager. | |
125 * | |
126 * cur_size :: | |
127 * The block's current size in bytes. | |
128 * | |
129 * new_size :: | |
130 * The block's requested new size. | |
131 * | |
132 * block :: | |
133 * The block's current address. | |
134 * | |
135 * @return: | |
136 * New block address. 0~in case of memory shortage. | |
137 * | |
138 * @note: | |
139 * In case of error, the old block must still be available. | |
140 * | |
141 */ | |
142 typedef void* | |
143 (*FT_Realloc_Func)( FT_Memory memory, | |
144 long cur_size, | |
145 long new_size, | |
146 void* block ); | |
147 | |
148 | |
149 /************************************************************************* | |
150 * | |
151 * @struct: | |
152 * FT_MemoryRec | |
153 * | |
154 * @description: | |
155 * A structure used to describe a given memory manager to FreeType~2. | |
156 * | |
157 * @fields: | |
158 * user :: | |
159 * A generic typeless pointer for user data. | |
160 * | |
161 * alloc :: | |
162 * A pointer type to an allocation function. | |
163 * | |
164 * free :: | |
165 * A pointer type to an memory freeing function. | |
166 * | |
167 * realloc :: | |
168 * A pointer type to a reallocation function. | |
169 * | |
170 */ | |
171 struct FT_MemoryRec_ | |
172 { | |
173 void* user; | |
174 FT_Alloc_Func alloc; | |
175 FT_Free_Func free; | |
176 FT_Realloc_Func realloc; | |
177 }; | |
178 | |
179 | |
180 /*************************************************************************/ | |
181 /* */ | |
182 /* I / O M A N A G E M E N T */ | |
183 /* */ | |
184 /*************************************************************************/ | |
185 | |
186 | |
187 /************************************************************************* | |
188 * | |
189 * @type: | |
190 * FT_Stream | |
191 * | |
192 * @description: | |
193 * A handle to an input stream. | |
194 * | |
195 */ | |
196 typedef struct FT_StreamRec_* FT_Stream; | |
197 | |
198 | |
199 /************************************************************************* | |
200 * | |
201 * @struct: | |
202 * FT_StreamDesc | |
203 * | |
204 * @description: | |
205 * A union type used to store either a long or a pointer. This is used | |
206 * to store a file descriptor or a `FILE*' in an input stream. | |
207 * | |
208 */ | |
209 typedef union FT_StreamDesc_ | |
210 { | |
211 long value; | |
212 void* pointer; | |
213 | |
214 } FT_StreamDesc; | |
215 | |
216 | |
217 /************************************************************************* | |
218 * | |
219 * @functype: | |
220 * FT_Stream_IoFunc | |
221 * | |
222 * @description: | |
223 * A function used to seek and read data from a given input stream. | |
224 * | |
225 * @input: | |
226 * stream :: | |
227 * A handle to the source stream. | |
228 * | |
229 * offset :: | |
230 * The offset of read in stream (always from start). | |
231 * | |
232 * buffer :: | |
233 * The address of the read buffer. | |
234 * | |
235 * count :: | |
236 * The number of bytes to read from the stream. | |
237 * | |
238 * @return: | |
239 * The number of bytes effectively read by the stream. | |
240 * | |
241 * @note: | |
242 * This function might be called to perform a seek or skip operation | |
243 * with a `count' of~0. A non-zero return value then indicates an | |
244 * error. | |
245 * | |
246 */ | |
247 typedef unsigned long | |
248 (*FT_Stream_IoFunc)( FT_Stream stream, | |
249 unsigned long offset, | |
250 unsigned char* buffer, | |
251 unsigned long count ); | |
252 | |
253 | |
254 /************************************************************************* | |
255 * | |
256 * @functype: | |
257 * FT_Stream_CloseFunc | |
258 * | |
259 * @description: | |
260 * A function used to close a given input stream. | |
261 * | |
262 * @input: | |
263 * stream :: | |
264 * A handle to the target stream. | |
265 * | |
266 */ | |
267 typedef void | |
268 (*FT_Stream_CloseFunc)( FT_Stream stream ); | |
269 | |
270 | |
271 /************************************************************************* | |
272 * | |
273 * @struct: | |
274 * FT_StreamRec | |
275 * | |
276 * @description: | |
277 * A structure used to describe an input stream. | |
278 * | |
279 * @input: | |
280 * base :: | |
281 * For memory-based streams, this is the address of the first stream | |
282 * byte in memory. This field should always be set to NULL for | |
283 * disk-based streams. | |
284 * | |
285 * size :: | |
286 * The stream size in bytes. | |
287 * | |
288 * pos :: | |
289 * The current position within the stream. | |
290 * | |
291 * descriptor :: | |
292 * This field is a union that can hold an integer or a pointer. It is | |
293 * used by stream implementations to store file descriptors or `FILE*' | |
294 * pointers. | |
295 * | |
296 * pathname :: | |
297 * This field is completely ignored by FreeType. However, it is often | |
298 * useful during debugging to use it to store the stream's filename | |
299 * (where available). | |
300 * | |
301 * read :: | |
302 * The stream's input function. | |
303 * | |
304 * close :: | |
305 * The stream's close function. | |
306 * | |
307 * memory :: | |
308 * The memory manager to use to preload frames. This is set | |
309 * internally by FreeType and shouldn't be touched by stream | |
310 * implementations. | |
311 * | |
312 * cursor :: | |
313 * This field is set and used internally by FreeType when parsing | |
314 * frames. | |
315 * | |
316 * limit :: | |
317 * This field is set and used internally by FreeType when parsing | |
318 * frames. | |
319 * | |
320 */ | |
321 typedef struct FT_StreamRec_ | |
322 { | |
323 unsigned char* base; | |
324 unsigned long size; | |
325 unsigned long pos; | |
326 | |
327 FT_StreamDesc descriptor; | |
328 FT_StreamDesc pathname; | |
329 FT_Stream_IoFunc read; | |
330 FT_Stream_CloseFunc close; | |
331 | |
332 FT_Memory memory; | |
333 unsigned char* cursor; | |
334 unsigned char* limit; | |
335 | |
336 } FT_StreamRec; | |
337 | |
338 /* */ | |
339 | |
340 | |
341 FT_END_HEADER | |
342 | |
343 #endif /* __FTSYSTEM_H__ */ | |
344 | |
345 | |
346 /* END */ | |
OLD | NEW |