source: trunk/poppler/freetype-2.1.10/include/freetype/ftsysio.h @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 5.5 KB
Line 
1#ifndef __FT_SYSTEM_IO_H__
2#define __FT_SYSTEM_IO_H__
3
4 /************************************************************************/
5 /************************************************************************/
6 /*****                                                              *****/
7 /*****    NOTE: THE CONTENT OF THIS FILE IS NOT CURRENTLY USED      *****/
8 /*****          IN NORMAL BUILDS.  CONSIDER IT EXPERIMENTAL.        *****/
9 /*****                                                              *****/
10 /************************************************************************/
11 /************************************************************************/
12
13
14 /********************************************************************
15  *
16  *  designing custom streams is a bit different now
17  *
18  *
19  *
20  *
21  *
22  *
23  *
24  *
25  *
26  *
27  *
28  *
29  *
30  *
31  *
32  *
33  *
34  *
35  *
36  *
37  *
38  *
39  *
40  *
41  */
42
43#include <ft2build.h>
44#include FT_INTERNAL_OBJECT_H
45
46FT_BEGIN_HEADER
47
48 /*@*******************************************************************
49  *
50  * @type: FT_Stream
51  *
52  * @description:
53  *   handle to an input stream object. These are also @FT_Object handles
54  */
55  typedef struct FT_StreamRec_*    FT_Stream;
56
57
58 /*@*******************************************************************
59  *
60  * @type: FT_Stream_Class
61  *
62  * @description:
63  *   opaque handle to a @FT_Stream_ClassRec class structure describing
64  *   the methods of input streams
65  */
66  typedef const struct FT_Stream_ClassRec_*   FT_Stream_Class;
67
68
69 /*@*******************************************************************
70  *
71  * @functype: FT_Stream_ReadFunc
72  *
73  * @description:
74  *   a method used to read bytes from an input stream into memory
75  *
76  * @input:
77  *   stream  :: target stream handle
78  *   buffer  :: target buffer address
79  *   size    :: number of bytes to read
80  *
81  * @return:
82  *   number of bytes effectively read. Must be <= 'size'.
83  */
84  typedef FT_ULong  (*FT_Stream_ReadFunc)( FT_Stream   stream,
85                                           FT_Byte*    buffer,
86                                           FT_ULong    size );
87
88
89 /*@*******************************************************************
90  *
91  * @functype: FT_Stream_SeekFunc
92  *
93  * @description:
94  *   a method used to seek to a new position within a stream
95  *
96  * @input:
97  *   stream  :: target stream handle
98  *   pos     :: new read position, from start of stream
99  *
100  * @return:
101  *   error code. 0 means success
102  */
103  typedef FT_Error  (*FT_Stream_SeekFunc)( FT_Stream   stream,
104                                           FT_ULong    pos );
105
106
107 /*@*******************************************************************
108  *
109  * @struct: FT_Stream_ClassRec
110  *
111  * @description:
112  *   a structure used to describe an input stream class
113  *
114  * @input:
115  *   clazz       :: root @FT_ClassRec fields
116  *   stream_read :: stream byte read method
117  *   stream_seek :: stream seek method
118  */
119  typedef struct FT_Stream_ClassRec_
120  {
121    FT_ClassRec          clazz;
122    FT_Stream_ReadFunc   stream_read;
123    FT_Stream_SeekFunc   stream_seek;
124
125  } FT_Stream_ClassRec;
126
127 /* */
128
129#define  FT_STREAM_CLASS(x)        ((FT_Stream_Class)(x))
130#define  FT_STREAM_CLASS__READ(x)  FT_STREAM_CLASS(x)->stream_read
131#define  FT_STREAM_CLASS__SEEK(x)  FT_STREAM_CLASS(x)->stream_seek;
132
133 /*@*******************************************************************
134  *
135  * @struct: FT_StreamRec
136  *
137  * @description:
138  *   the input stream object structure. See @FT_Stream_ClassRec for
139  *   its class descriptor
140  *
141  * @fields:
142  *   object      :: root @FT_ObjectRec fields
143  *   size        :: size of stream in bytes (0 if unknown)
144  *   pos         :: current position within stream
145  *   base        :: for memory-based streams, the address of the stream's
146  *                  first data byte in memory. NULL otherwise
147  *
148  *   cursor      :: the current cursor position within an input stream
149  *                  frame. Only valid within a FT_FRAME_ENTER .. FT_FRAME_EXIT
150  *                  block; NULL otherwise
151  *
152  *   limit       :: the current frame limit within a FT_FRAME_ENTER ..
153  *                  FT_FRAME_EXIT block. NULL otherwise
154  */
155  typedef struct FT_StreamRec_
156  {
157    FT_ObjectRec        object;
158    FT_ULong            size;
159    FT_ULong            pos;
160    const FT_Byte*      base;
161    const FT_Byte*      cursor;
162    const FT_Byte*      limit;
163
164  } FT_StreamRec;
165
166 /* some useful macros */
167#define  FT_STREAM(x)    ((FT_Stream)(x))
168#define  FT_STREAM_P(x)  ((FT_Stream*)(x))
169
170#define  FT_STREAM__READ(x)  FT_STREAM_CLASS__READ(FT_OBJECT__CLASS(x))
171#define  FT_STREAM__SEEK(x)  FT_STREAM_CLASS__SEEK(FT_OBJECT__CLASS(x))
172
173#define  FT_STREAM_IS_BASED(x)  ( FT_STREAM(x)->base != NULL )
174
175 /* */
176
177 /* create new memory-based stream */
178  FT_BASE( FT_Error )   ft_stream_new_memory( const FT_Byte*  stream_base,
179                                              FT_ULong        stream_size,
180                                              FT_Memory       memory,
181                                              FT_Stream      *astream );
182
183  FT_BASE( FT_Error )   ft_stream_new_iso( const char*  pathanme,
184                                           FT_Memory    memory,
185                                           FT_Stream   *astream );
186
187
188 /* handle to default stream class implementation for a given build */
189 /* this is used by "FT_New_Face"                                   */
190 /*                                                                 */
191  FT_APIVAR( FT_Type )   ft_stream_default_type;
192
193FT_END_HEADER
194
195#endif /* __FT_SYSTEM_STREAM_H__ */
Note: See TracBrowser for help on using the repository browser.