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