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