| /***************************************************************************/ |
| /* */ |
| /* ftsystem.h */ |
| /* */ |
| /* FreeType low-level system interface definition (specification). */ |
| /* */ |
| /* Copyright 1996-2001, 2002 by */ |
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
| /* */ |
| /* This file is part of the FreeType project, and may only be used, */ |
| /* modified, and distributed under the terms of the FreeType project */ |
| /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
| /* this file you indicate that you have read the license and */ |
| /* understand and accept it fully. */ |
| /* */ |
| /***************************************************************************/ |
| |
| |
| #ifndef __FTSYSTEM_H__ |
| #define __FTSYSTEM_H__ |
| |
| |
| #include <ft2build.h> |
| |
| |
| FT_BEGIN_HEADER |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Section> */ |
| /* system_interface */ |
| /* */ |
| /* <Title> */ |
| /* System Interface */ |
| /* */ |
| /* <Abstract> */ |
| /* How FreeType manages memory and i/o. */ |
| /* */ |
| /* <Description> */ |
| /* This section contains various definitions related to memory */ |
| /* management and i/o access. You need to understand this */ |
| /* information if you want to use a custom memory manager or you own */ |
| /* input i/o streams. */ |
| /* */ |
| /*************************************************************************/ |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* M E M O R Y M A N A G E M E N T */ |
| /* */ |
| /*************************************************************************/ |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @type: */ |
| /* FT_Memory */ |
| /* */ |
| /* @description: */ |
| /* A handle to a given memory manager object, defined with a */ |
| /* @FT_MemoryRec structure. */ |
| /* */ |
| typedef struct FT_MemoryRec_* FT_Memory; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @functype: */ |
| /* FT_Alloc_Func */ |
| /* */ |
| /* @description: */ |
| /* A function used to allocate `size' bytes from `memory'. */ |
| /* */ |
| /* @input: */ |
| /* memory :: A handle to the source memory manager. */ |
| /* */ |
| /* size :: The size in bytes to allocate. */ |
| /* */ |
| /* @return: */ |
| /* Address of new memory block. 0 in case of failure. */ |
| /* */ |
| typedef void* |
| (*FT_Alloc_Func)( FT_Memory memory, |
| long size ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @functype: */ |
| /* FT_Free_Func */ |
| /* */ |
| /* @description: */ |
| /* A function used to release a given block of memory. */ |
| /* */ |
| /* @input: */ |
| /* memory :: A handle to the source memory manager. */ |
| /* */ |
| /* block :: The address of the target memory block. */ |
| /* */ |
| typedef void |
| (*FT_Free_Func)( FT_Memory memory, |
| void* block ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @functype: */ |
| /* FT_Realloc_Func */ |
| /* */ |
| /* @description: */ |
| /* a function used to re-allocate a given block of memory. */ |
| /* */ |
| /* @input: */ |
| /* memory :: A handle to the source memory manager. */ |
| /* */ |
| /* cur_size :: The block's current size in bytes. */ |
| /* */ |
| /* new_size :: The block's requested new size. */ |
| /* */ |
| /* block :: The block's current address. */ |
| /* */ |
| /* @return: */ |
| /* New block address. 0 in case of memory shortage. */ |
| /* */ |
| /* @note: */ |
| /* In case of error, the old block must still be available. */ |
| /* */ |
| typedef void* |
| (*FT_Realloc_Func)( FT_Memory memory, |
| long cur_size, |
| long new_size, |
| void* block ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @struct: */ |
| /* FT_MemoryRec */ |
| /* */ |
| /* @description: */ |
| /* A structure used to describe a given memory manager to FreeType 2. */ |
| /* */ |
| /* @fields: */ |
| /* user :: A generic typeless pointer for user data. */ |
| /* */ |
| /* alloc :: A pointer type to an allocation function. */ |
| /* */ |
| /* free :: A pointer type to an memory freeing function. */ |
| /* */ |
| /* realloc :: A pointer type to a reallocation function. */ |
| /* */ |
| struct FT_MemoryRec_ |
| { |
| void* user; |
| FT_Alloc_Func alloc; |
| FT_Free_Func free; |
| FT_Realloc_Func realloc; |
| }; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* I / O M A N A G E M E N T */ |
| /* */ |
| /*************************************************************************/ |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @type: */ |
| /* FT_Stream */ |
| /* */ |
| /* @description: */ |
| /* A handle to an input stream. */ |
| /* */ |
| typedef struct FT_StreamRec_* FT_Stream; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @struct: */ |
| /* FT_StreamDesc */ |
| /* */ |
| /* @description: */ |
| /* A union type used to store either a long or a pointer. This is */ |
| /* used to store a file descriptor or a FILE* in an input stream. */ |
| /* */ |
| typedef union FT_StreamDesc_ |
| { |
| long value; |
| void* pointer; |
| |
| } FT_StreamDesc; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @functype: */ |
| /* FT_Stream_IoFunc */ |
| /* */ |
| /* @description: */ |
| /* A function used to seek and read data from a given input stream. */ |
| /* */ |
| /* @input: */ |
| /* stream :: A handle to the source stream. */ |
| /* */ |
| /* offset :: The offset of read in stream (always from start). */ |
| /* */ |
| /* buffer :: The address of the read buffer. */ |
| /* */ |
| /* count :: The number of bytes to read from the stream. */ |
| /* */ |
| /* @return: */ |
| /* The number of bytes effectively read by the stream. */ |
| /* */ |
| /* @note: */ |
| /* This function might be called to perform a seek or skip operation */ |
| /* with a `count' of 0. */ |
| /* */ |
| typedef unsigned long |
| (*FT_Stream_IoFunc)( FT_Stream stream, |
| unsigned long offset, |
| unsigned char* buffer, |
| unsigned long count ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @functype: */ |
| /* FT_Stream_CloseFunc */ |
| /* */ |
| /* @description: */ |
| /* A function used to close a given input stream. */ |
| /* */ |
| /* @input: */ |
| /* stream :: A handle to the target stream. */ |
| /* */ |
| typedef void |
| (*FT_Stream_CloseFunc)( FT_Stream stream ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @struct: */ |
| /* FT_StreamRec */ |
| /* */ |
| /* @description: */ |
| /* A structure used to describe an input stream. */ |
| /* */ |
| /* @input: */ |
| /* base :: For memory-based streams, this is the address of the */ |
| /* first stream byte in memory. This field should */ |
| /* always be set to NULL for disk-based streams. */ |
| /* */ |
| /* size :: The stream size in bytes. */ |
| /* */ |
| /* pos :: The current position within the stream. */ |
| /* */ |
| /* descriptor :: This field is a union that can hold an integer or a */ |
| /* pointer. It is used by stream implementations to */ |
| /* store file descriptors or FILE* pointers. */ |
| /* */ |
| /* pathname :: This field is completely ignored by FreeType. */ |
| /* However, it is often useful during debugging to use */ |
| /* it to store the stream's filename (where available). */ |
| /* */ |
| /* read :: The stream's input function. */ |
| /* */ |
| /* close :: The stream;s close function. */ |
| /* */ |
| /* memory :: The memory manager to use to preload frames. This is */ |
| /* set internally by FreeType and shouldn't be touched */ |
| /* by stream implementations. */ |
| /* */ |
| /* cursor :: This field is set and used internally by FreeType */ |
| /* when parsing frames. */ |
| /* */ |
| /* limit :: This field is set and used internally by FreeType */ |
| /* when parsing frames. */ |
| /* */ |
| struct FT_StreamRec_ |
| { |
| unsigned char* base; |
| unsigned long size; |
| unsigned long pos; |
| |
| FT_StreamDesc descriptor; |
| FT_StreamDesc pathname; |
| FT_Stream_IoFunc read; |
| FT_Stream_CloseFunc close; |
| |
| FT_Memory memory; |
| unsigned char* cursor; |
| unsigned char* limit; |
| }; |
| |
| |
| /* */ |
| |
| |
| FT_END_HEADER |
| |
| #endif /* __FTSYSTEM_H__ */ |
| |
| |
| /* END */ |