1 /***************************************************************************/
5 /* FreeType low-level system interface definition (specification). */
7 /* Copyright 1996-2001, 2002, 2005, 2010 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 /***************************************************************************/
19 #ifndef __FTSYSTEM_H__
20 #define __FTSYSTEM_H__
29 /*************************************************************************/
32 /* system_interface */
35 /* System Interface */
38 /* How FreeType manages memory and i/o. */
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 */
46 /*************************************************************************/
49 /*************************************************************************/
51 /* M E M O R Y M A N A G E M E N T */
53 /*************************************************************************/
56 /*************************************************************************
62 * A handle to a given memory manager object, defined with an
63 * @FT_MemoryRec structure.
66 typedef struct FT_MemoryRec_* FT_Memory;
69 /*************************************************************************
75 * A function used to allocate `size' bytes from `memory'.
79 * A handle to the source memory manager.
82 * The size in bytes to allocate.
85 * Address of new memory block. 0~in case of failure.
89 (*FT_Alloc_Func)( FT_Memory memory,
93 /*************************************************************************
99 * A function used to release a given block of memory.
103 * A handle to the source memory manager.
106 * The address of the target memory block.
110 (*FT_Free_Func)( FT_Memory memory,
114 /*************************************************************************
120 * A function used to re-allocate a given block of memory.
124 * A handle to the source memory manager.
127 * The block's current size in bytes.
130 * The block's requested new size.
133 * The block's current address.
136 * New block address. 0~in case of memory shortage.
139 * In case of error, the old block must still be available.
143 (*FT_Realloc_Func)( FT_Memory memory,
149 /*************************************************************************
155 * A structure used to describe a given memory manager to FreeType~2.
159 * A generic typeless pointer for user data.
162 * A pointer type to an allocation function.
165 * A pointer type to an memory freeing function.
168 * A pointer type to a reallocation function.
176 FT_Realloc_Func realloc;
180 /*************************************************************************/
182 /* I / O M A N A G E M E N T */
184 /*************************************************************************/
187 /*************************************************************************
193 * A handle to an input stream.
196 typedef struct FT_StreamRec_* FT_Stream;
199 /*************************************************************************
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.
209 typedef union FT_StreamDesc_
217 /*************************************************************************
223 * A function used to seek and read data from a given input stream.
227 * A handle to the source stream.
230 * The offset of read in stream (always from start).
233 * The address of the read buffer.
236 * The number of bytes to read from the stream.
239 * The number of bytes effectively read by the stream.
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
247 typedef unsigned long
248 (*FT_Stream_IoFunc)( FT_Stream stream,
249 unsigned long offset,
250 unsigned char* buffer,
251 unsigned long count );
254 /*************************************************************************
257 * FT_Stream_CloseFunc
260 * A function used to close a given input stream.
264 * A handle to the target stream.
268 (*FT_Stream_CloseFunc)( FT_Stream stream );
271 /*************************************************************************
277 * A structure used to describe an input stream.
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.
286 * The stream size in bytes.
289 * The current position within the stream.
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*'
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
302 * The stream's input function.
305 * The stream's close function.
308 * The memory manager to use to preload frames. This is set
309 * internally by FreeType and shouldn't be touched by stream
313 * This field is set and used internally by FreeType when parsing
317 * This field is set and used internally by FreeType when parsing
321 typedef struct FT_StreamRec_
327 FT_StreamDesc descriptor;
328 FT_StreamDesc pathname;
329 FT_Stream_IoFunc read;
330 FT_Stream_CloseFunc close;
333 unsigned char* cursor;
334 unsigned char* limit;
344 #endif /* __FTSYSTEM_H__ */