source: trunk/poppler/freetype2/include/freetype/ftsystem.h @ 251

Last change on this file since 251 was 251, checked in by Eugene Romanenko, 13 years ago

PDF plugin: freetype library updated to version 2.3.5

File size: 10.2 KB
Line 
1/***************************************************************************/
2/*                                                                         */
3/*  ftsystem.h                                                             */
4/*                                                                         */
5/*    FreeType low-level system interface definition (specification).      */
6/*                                                                         */
7/*  Copyright 1996-2001, 2002, 2005 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
26FT_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.
244   *
245   */
246  typedef unsigned long
247  (*FT_Stream_IoFunc)( FT_Stream       stream,
248                       unsigned long   offset,
249                       unsigned char*  buffer,
250                       unsigned long   count );
251
252
253  /*************************************************************************
254   *
255   * @functype:
256   *   FT_Stream_CloseFunc
257   *
258   * @description:
259   *   A function used to close a given input stream.
260   *
261   * @input:
262   *  stream ::
263   *     A handle to the target stream.
264   *
265   */
266  typedef void
267  (*FT_Stream_CloseFunc)( FT_Stream  stream );
268
269
270  /*************************************************************************
271   *
272   * @struct:
273   *   FT_StreamRec
274   *
275   * @description:
276   *   A structure used to describe an input stream.
277   *
278   * @input:
279   *   base ::
280   *     For memory-based streams, this is the address of the first stream
281   *     byte in memory.  This field should always be set to NULL for
282   *     disk-based streams.
283   *
284   *   size ::
285   *     The stream size in bytes.
286   *
287   *   pos ::
288   *     The current position within the stream.
289   *
290   *   descriptor ::
291   *     This field is a union that can hold an integer or a pointer.  It is
292   *     used by stream implementations to store file descriptors or `FILE*'
293   *     pointers.
294   *
295   *   pathname ::
296   *     This field is completely ignored by FreeType.  However, it is often
297   *     useful during debugging to use it to store the stream's filename
298   *     (where available).
299   *
300   *   read ::
301   *     The stream's input function.
302   *
303   *   close ::
304   *     The stream;s close function.
305   *
306   *   memory ::
307   *     The memory manager to use to preload frames.  This is set
308   *     internally by FreeType and shouldn't be touched by stream
309   *     implementations.
310   *
311   *   cursor ::
312   *     This field is set and used internally by FreeType when parsing
313   *     frames.
314   *
315   *   limit ::
316   *     This field is set and used internally by FreeType when parsing
317   *     frames.
318   *
319   */
320  typedef struct  FT_StreamRec_
321  {
322    unsigned char*       base;
323    unsigned long        size;
324    unsigned long        pos;
325
326    FT_StreamDesc        descriptor;
327    FT_StreamDesc        pathname;
328    FT_Stream_IoFunc     read;
329    FT_Stream_CloseFunc  close;
330
331    FT_Memory            memory;
332    unsigned char*       cursor;
333    unsigned char*       limit;
334
335  } FT_StreamRec;
336
337
338  /* */
339
340
341FT_END_HEADER
342
343#endif /* __FTSYSTEM_H__ */
344
345
346/* END */
Note: See TracBrowser for help on using the repository browser.