rev |
line source |
nuclear@0
|
1 /***************************************************************************/
|
nuclear@0
|
2 /* */
|
nuclear@0
|
3 /* ftstream.h */
|
nuclear@0
|
4 /* */
|
nuclear@0
|
5 /* Stream handling (specification). */
|
nuclear@0
|
6 /* */
|
nuclear@0
|
7 /* Copyright 1996-2001, 2002, 2004, 2005, 2006 by */
|
nuclear@0
|
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
nuclear@0
|
9 /* */
|
nuclear@0
|
10 /* This file is part of the FreeType project, and may only be used, */
|
nuclear@0
|
11 /* modified, and distributed under the terms of the FreeType project */
|
nuclear@0
|
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
nuclear@0
|
13 /* this file you indicate that you have read the license and */
|
nuclear@0
|
14 /* understand and accept it fully. */
|
nuclear@0
|
15 /* */
|
nuclear@0
|
16 /***************************************************************************/
|
nuclear@0
|
17
|
nuclear@0
|
18
|
nuclear@0
|
19 #ifndef __FTSTREAM_H__
|
nuclear@0
|
20 #define __FTSTREAM_H__
|
nuclear@0
|
21
|
nuclear@0
|
22
|
nuclear@0
|
23 #include <ft2build.h>
|
nuclear@0
|
24 #include FT_SYSTEM_H
|
nuclear@0
|
25 #include FT_INTERNAL_OBJECTS_H
|
nuclear@0
|
26
|
nuclear@0
|
27
|
nuclear@0
|
28 FT_BEGIN_HEADER
|
nuclear@0
|
29
|
nuclear@0
|
30
|
nuclear@0
|
31 /* format of an 8-bit frame_op value: */
|
nuclear@0
|
32 /* */
|
nuclear@0
|
33 /* bit 76543210 */
|
nuclear@0
|
34 /* xxxxxxes */
|
nuclear@0
|
35 /* */
|
nuclear@0
|
36 /* s is set to 1 if the value is signed. */
|
nuclear@0
|
37 /* e is set to 1 if the value is little-endian. */
|
nuclear@0
|
38 /* xxx is a command. */
|
nuclear@0
|
39
|
nuclear@0
|
40 #define FT_FRAME_OP_SHIFT 2
|
nuclear@0
|
41 #define FT_FRAME_OP_SIGNED 1
|
nuclear@0
|
42 #define FT_FRAME_OP_LITTLE 2
|
nuclear@0
|
43 #define FT_FRAME_OP_COMMAND( x ) ( x >> FT_FRAME_OP_SHIFT )
|
nuclear@0
|
44
|
nuclear@0
|
45 #define FT_MAKE_FRAME_OP( command, little, sign ) \
|
nuclear@0
|
46 ( ( command << FT_FRAME_OP_SHIFT ) | ( little << 1 ) | sign )
|
nuclear@0
|
47
|
nuclear@0
|
48 #define FT_FRAME_OP_END 0
|
nuclear@0
|
49 #define FT_FRAME_OP_START 1 /* start a new frame */
|
nuclear@0
|
50 #define FT_FRAME_OP_BYTE 2 /* read 1-byte value */
|
nuclear@0
|
51 #define FT_FRAME_OP_SHORT 3 /* read 2-byte value */
|
nuclear@0
|
52 #define FT_FRAME_OP_LONG 4 /* read 4-byte value */
|
nuclear@0
|
53 #define FT_FRAME_OP_OFF3 5 /* read 3-byte value */
|
nuclear@0
|
54 #define FT_FRAME_OP_BYTES 6 /* read a bytes sequence */
|
nuclear@0
|
55
|
nuclear@0
|
56
|
nuclear@0
|
57 typedef enum FT_Frame_Op_
|
nuclear@0
|
58 {
|
nuclear@0
|
59 ft_frame_end = 0,
|
nuclear@0
|
60 ft_frame_start = FT_MAKE_FRAME_OP( FT_FRAME_OP_START, 0, 0 ),
|
nuclear@0
|
61
|
nuclear@0
|
62 ft_frame_byte = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 0 ),
|
nuclear@0
|
63 ft_frame_schar = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 1 ),
|
nuclear@0
|
64
|
nuclear@0
|
65 ft_frame_ushort_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 0 ),
|
nuclear@0
|
66 ft_frame_short_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 1 ),
|
nuclear@0
|
67 ft_frame_ushort_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 0 ),
|
nuclear@0
|
68 ft_frame_short_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 1 ),
|
nuclear@0
|
69
|
nuclear@0
|
70 ft_frame_ulong_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 0 ),
|
nuclear@0
|
71 ft_frame_long_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 1 ),
|
nuclear@0
|
72 ft_frame_ulong_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 0 ),
|
nuclear@0
|
73 ft_frame_long_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 1 ),
|
nuclear@0
|
74
|
nuclear@0
|
75 ft_frame_uoff3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ),
|
nuclear@0
|
76 ft_frame_off3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ),
|
nuclear@0
|
77 ft_frame_uoff3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ),
|
nuclear@0
|
78 ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ),
|
nuclear@0
|
79
|
nuclear@0
|
80 ft_frame_bytes = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 ),
|
nuclear@0
|
81 ft_frame_skip = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 1 )
|
nuclear@0
|
82
|
nuclear@0
|
83 } FT_Frame_Op;
|
nuclear@0
|
84
|
nuclear@0
|
85
|
nuclear@0
|
86 typedef struct FT_Frame_Field_
|
nuclear@0
|
87 {
|
nuclear@0
|
88 FT_Byte value;
|
nuclear@0
|
89 FT_Byte size;
|
nuclear@0
|
90 FT_UShort offset;
|
nuclear@0
|
91
|
nuclear@0
|
92 } FT_Frame_Field;
|
nuclear@0
|
93
|
nuclear@0
|
94
|
nuclear@0
|
95 /* Construct an FT_Frame_Field out of a structure type and a field name. */
|
nuclear@0
|
96 /* The structure type must be set in the FT_STRUCTURE macro before */
|
nuclear@0
|
97 /* calling the FT_FRAME_START() macro. */
|
nuclear@0
|
98 /* */
|
nuclear@0
|
99 #define FT_FIELD_SIZE( f ) \
|
nuclear@0
|
100 (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
|
nuclear@0
|
101
|
nuclear@0
|
102 #define FT_FIELD_SIZE_DELTA( f ) \
|
nuclear@0
|
103 (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
|
nuclear@0
|
104
|
nuclear@0
|
105 #define FT_FIELD_OFFSET( f ) \
|
nuclear@0
|
106 (FT_UShort)( offsetof( FT_STRUCTURE, f ) )
|
nuclear@0
|
107
|
nuclear@0
|
108 #define FT_FRAME_FIELD( frame_op, field ) \
|
nuclear@0
|
109 { \
|
nuclear@0
|
110 frame_op, \
|
nuclear@0
|
111 FT_FIELD_SIZE( field ), \
|
nuclear@0
|
112 FT_FIELD_OFFSET( field ) \
|
nuclear@0
|
113 }
|
nuclear@0
|
114
|
nuclear@0
|
115 #define FT_MAKE_EMPTY_FIELD( frame_op ) { frame_op, 0, 0 }
|
nuclear@0
|
116
|
nuclear@0
|
117 #define FT_FRAME_START( size ) { ft_frame_start, 0, size }
|
nuclear@0
|
118 #define FT_FRAME_END { ft_frame_end, 0, 0 }
|
nuclear@0
|
119
|
nuclear@0
|
120 #define FT_FRAME_LONG( f ) FT_FRAME_FIELD( ft_frame_long_be, f )
|
nuclear@0
|
121 #define FT_FRAME_ULONG( f ) FT_FRAME_FIELD( ft_frame_ulong_be, f )
|
nuclear@0
|
122 #define FT_FRAME_SHORT( f ) FT_FRAME_FIELD( ft_frame_short_be, f )
|
nuclear@0
|
123 #define FT_FRAME_USHORT( f ) FT_FRAME_FIELD( ft_frame_ushort_be, f )
|
nuclear@0
|
124 #define FT_FRAME_OFF3( f ) FT_FRAME_FIELD( ft_frame_off3_be, f )
|
nuclear@0
|
125 #define FT_FRAME_UOFF3( f ) FT_FRAME_FIELD( ft_frame_uoff3_be, f )
|
nuclear@0
|
126 #define FT_FRAME_BYTE( f ) FT_FRAME_FIELD( ft_frame_byte, f )
|
nuclear@0
|
127 #define FT_FRAME_CHAR( f ) FT_FRAME_FIELD( ft_frame_schar, f )
|
nuclear@0
|
128
|
nuclear@0
|
129 #define FT_FRAME_LONG_LE( f ) FT_FRAME_FIELD( ft_frame_long_le, f )
|
nuclear@0
|
130 #define FT_FRAME_ULONG_LE( f ) FT_FRAME_FIELD( ft_frame_ulong_le, f )
|
nuclear@0
|
131 #define FT_FRAME_SHORT_LE( f ) FT_FRAME_FIELD( ft_frame_short_le, f )
|
nuclear@0
|
132 #define FT_FRAME_USHORT_LE( f ) FT_FRAME_FIELD( ft_frame_ushort_le, f )
|
nuclear@0
|
133 #define FT_FRAME_OFF3_LE( f ) FT_FRAME_FIELD( ft_frame_off3_le, f )
|
nuclear@0
|
134 #define FT_FRAME_UOFF3_LE( f ) FT_FRAME_FIELD( ft_frame_uoff3_le, f )
|
nuclear@0
|
135
|
nuclear@0
|
136 #define FT_FRAME_SKIP_LONG { ft_frame_long_be, 0, 0 }
|
nuclear@0
|
137 #define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 }
|
nuclear@0
|
138 #define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 }
|
nuclear@0
|
139
|
nuclear@0
|
140 #define FT_FRAME_BYTES( field, count ) \
|
nuclear@0
|
141 { \
|
nuclear@0
|
142 ft_frame_bytes, \
|
nuclear@0
|
143 count, \
|
nuclear@0
|
144 FT_FIELD_OFFSET( field ) \
|
nuclear@0
|
145 }
|
nuclear@0
|
146
|
nuclear@0
|
147 #define FT_FRAME_SKIP_BYTES( count ) { ft_frame_skip, count, 0 }
|
nuclear@0
|
148
|
nuclear@0
|
149
|
nuclear@0
|
150 /*************************************************************************/
|
nuclear@0
|
151 /* */
|
nuclear@0
|
152 /* Integer extraction macros -- the `buffer' parameter must ALWAYS be of */
|
nuclear@0
|
153 /* type `char*' or equivalent (1-byte elements). */
|
nuclear@0
|
154 /* */
|
nuclear@0
|
155
|
nuclear@0
|
156 #define FT_BYTE_( p, i ) ( ((const FT_Byte*)(p))[(i)] )
|
nuclear@0
|
157 #define FT_INT8_( p, i ) ( ((const FT_Char*)(p))[(i)] )
|
nuclear@0
|
158
|
nuclear@0
|
159 #define FT_INT16( x ) ( (FT_Int16)(x) )
|
nuclear@0
|
160 #define FT_UINT16( x ) ( (FT_UInt16)(x) )
|
nuclear@0
|
161 #define FT_INT32( x ) ( (FT_Int32)(x) )
|
nuclear@0
|
162 #define FT_UINT32( x ) ( (FT_UInt32)(x) )
|
nuclear@0
|
163
|
nuclear@0
|
164 #define FT_BYTE_I16( p, i, s ) ( FT_INT16( FT_BYTE_( p, i ) ) << (s) )
|
nuclear@0
|
165 #define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
|
nuclear@0
|
166 #define FT_BYTE_I32( p, i, s ) ( FT_INT32( FT_BYTE_( p, i ) ) << (s) )
|
nuclear@0
|
167 #define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
|
nuclear@0
|
168
|
nuclear@0
|
169 #define FT_INT8_I16( p, i, s ) ( FT_INT16( FT_INT8_( p, i ) ) << (s) )
|
nuclear@0
|
170 #define FT_INT8_U16( p, i, s ) ( FT_UINT16( FT_INT8_( p, i ) ) << (s) )
|
nuclear@0
|
171 #define FT_INT8_I32( p, i, s ) ( FT_INT32( FT_INT8_( p, i ) ) << (s) )
|
nuclear@0
|
172 #define FT_INT8_U32( p, i, s ) ( FT_UINT32( FT_INT8_( p, i ) ) << (s) )
|
nuclear@0
|
173
|
nuclear@0
|
174
|
nuclear@0
|
175 #define FT_PEEK_SHORT( p ) FT_INT16( FT_INT8_I16( p, 0, 8) | \
|
nuclear@0
|
176 FT_BYTE_I16( p, 1, 0) )
|
nuclear@0
|
177
|
nuclear@0
|
178 #define FT_PEEK_USHORT( p ) FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \
|
nuclear@0
|
179 FT_BYTE_U16( p, 1, 0 ) )
|
nuclear@0
|
180
|
nuclear@0
|
181 #define FT_PEEK_LONG( p ) FT_INT32( FT_INT8_I32( p, 0, 24 ) | \
|
nuclear@0
|
182 FT_BYTE_I32( p, 1, 16 ) | \
|
nuclear@0
|
183 FT_BYTE_I32( p, 2, 8 ) | \
|
nuclear@0
|
184 FT_BYTE_I32( p, 3, 0 ) )
|
nuclear@0
|
185
|
nuclear@0
|
186 #define FT_PEEK_ULONG( p ) FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \
|
nuclear@0
|
187 FT_BYTE_U32( p, 1, 16 ) | \
|
nuclear@0
|
188 FT_BYTE_U32( p, 2, 8 ) | \
|
nuclear@0
|
189 FT_BYTE_U32( p, 3, 0 ) )
|
nuclear@0
|
190
|
nuclear@0
|
191 #define FT_PEEK_OFF3( p ) FT_INT32( FT_INT8_I32( p, 0, 16 ) | \
|
nuclear@0
|
192 FT_BYTE_I32( p, 1, 8 ) | \
|
nuclear@0
|
193 FT_BYTE_I32( p, 2, 0 ) )
|
nuclear@0
|
194
|
nuclear@0
|
195 #define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
|
nuclear@0
|
196 FT_BYTE_U32( p, 1, 8 ) | \
|
nuclear@0
|
197 FT_BYTE_U32( p, 2, 0 ) )
|
nuclear@0
|
198
|
nuclear@0
|
199 #define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_INT8_I16( p, 1, 8 ) | \
|
nuclear@0
|
200 FT_BYTE_I16( p, 0, 0 ) )
|
nuclear@0
|
201
|
nuclear@0
|
202 #define FT_PEEK_USHORT_LE( p ) FT_UINT16( FT_BYTE_U16( p, 1, 8 ) | \
|
nuclear@0
|
203 FT_BYTE_U16( p, 0, 0 ) )
|
nuclear@0
|
204
|
nuclear@0
|
205 #define FT_PEEK_LONG_LE( p ) FT_INT32( FT_INT8_I32( p, 3, 24 ) | \
|
nuclear@0
|
206 FT_BYTE_I32( p, 2, 16 ) | \
|
nuclear@0
|
207 FT_BYTE_I32( p, 1, 8 ) | \
|
nuclear@0
|
208 FT_BYTE_I32( p, 0, 0 ) )
|
nuclear@0
|
209
|
nuclear@0
|
210 #define FT_PEEK_ULONG_LE( p ) FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \
|
nuclear@0
|
211 FT_BYTE_U32( p, 2, 16 ) | \
|
nuclear@0
|
212 FT_BYTE_U32( p, 1, 8 ) | \
|
nuclear@0
|
213 FT_BYTE_U32( p, 0, 0 ) )
|
nuclear@0
|
214
|
nuclear@0
|
215 #define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_INT8_I32( p, 2, 16 ) | \
|
nuclear@0
|
216 FT_BYTE_I32( p, 1, 8 ) | \
|
nuclear@0
|
217 FT_BYTE_I32( p, 0, 0 ) )
|
nuclear@0
|
218
|
nuclear@0
|
219 #define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
|
nuclear@0
|
220 FT_BYTE_U32( p, 1, 8 ) | \
|
nuclear@0
|
221 FT_BYTE_U32( p, 0, 0 ) )
|
nuclear@0
|
222
|
nuclear@0
|
223
|
nuclear@0
|
224 #define FT_NEXT_CHAR( buffer ) \
|
nuclear@0
|
225 ( (signed char)*buffer++ )
|
nuclear@0
|
226
|
nuclear@0
|
227 #define FT_NEXT_BYTE( buffer ) \
|
nuclear@0
|
228 ( (unsigned char)*buffer++ )
|
nuclear@0
|
229
|
nuclear@0
|
230 #define FT_NEXT_SHORT( buffer ) \
|
nuclear@0
|
231 ( (short)( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) )
|
nuclear@0
|
232
|
nuclear@0
|
233 #define FT_NEXT_USHORT( buffer ) \
|
nuclear@0
|
234 ( (unsigned short)( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) )
|
nuclear@0
|
235
|
nuclear@0
|
236 #define FT_NEXT_OFF3( buffer ) \
|
nuclear@0
|
237 ( (long)( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) )
|
nuclear@0
|
238
|
nuclear@0
|
239 #define FT_NEXT_UOFF3( buffer ) \
|
nuclear@0
|
240 ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) )
|
nuclear@0
|
241
|
nuclear@0
|
242 #define FT_NEXT_LONG( buffer ) \
|
nuclear@0
|
243 ( (long)( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) )
|
nuclear@0
|
244
|
nuclear@0
|
245 #define FT_NEXT_ULONG( buffer ) \
|
nuclear@0
|
246 ( (unsigned long)( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) )
|
nuclear@0
|
247
|
nuclear@0
|
248
|
nuclear@0
|
249 #define FT_NEXT_SHORT_LE( buffer ) \
|
nuclear@0
|
250 ( (short)( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) )
|
nuclear@0
|
251
|
nuclear@0
|
252 #define FT_NEXT_USHORT_LE( buffer ) \
|
nuclear@0
|
253 ( (unsigned short)( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) )
|
nuclear@0
|
254
|
nuclear@0
|
255 #define FT_NEXT_OFF3_LE( buffer ) \
|
nuclear@0
|
256 ( (long)( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) )
|
nuclear@0
|
257
|
nuclear@0
|
258 #define FT_NEXT_UOFF3_LE( buffer ) \
|
nuclear@0
|
259 ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) )
|
nuclear@0
|
260
|
nuclear@0
|
261 #define FT_NEXT_LONG_LE( buffer ) \
|
nuclear@0
|
262 ( (long)( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) )
|
nuclear@0
|
263
|
nuclear@0
|
264 #define FT_NEXT_ULONG_LE( buffer ) \
|
nuclear@0
|
265 ( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
|
nuclear@0
|
266
|
nuclear@0
|
267
|
nuclear@0
|
268 /*************************************************************************/
|
nuclear@0
|
269 /* */
|
nuclear@0
|
270 /* Each GET_xxxx() macro uses an implicit `stream' variable. */
|
nuclear@0
|
271 /* */
|
nuclear@0
|
272 #if 0
|
nuclear@0
|
273 #define FT_GET_MACRO( type ) FT_NEXT_ ## type ( stream->cursor )
|
nuclear@0
|
274
|
nuclear@0
|
275 #define FT_GET_CHAR() FT_GET_MACRO( CHAR )
|
nuclear@0
|
276 #define FT_GET_BYTE() FT_GET_MACRO( BYTE )
|
nuclear@0
|
277 #define FT_GET_SHORT() FT_GET_MACRO( SHORT )
|
nuclear@0
|
278 #define FT_GET_USHORT() FT_GET_MACRO( USHORT )
|
nuclear@0
|
279 #define FT_GET_OFF3() FT_GET_MACRO( OFF3 )
|
nuclear@0
|
280 #define FT_GET_UOFF3() FT_GET_MACRO( UOFF3 )
|
nuclear@0
|
281 #define FT_GET_LONG() FT_GET_MACRO( LONG )
|
nuclear@0
|
282 #define FT_GET_ULONG() FT_GET_MACRO( ULONG )
|
nuclear@0
|
283 #define FT_GET_TAG4() FT_GET_MACRO( ULONG )
|
nuclear@0
|
284
|
nuclear@0
|
285 #define FT_GET_SHORT_LE() FT_GET_MACRO( SHORT_LE )
|
nuclear@0
|
286 #define FT_GET_USHORT_LE() FT_GET_MACRO( USHORT_LE )
|
nuclear@0
|
287 #define FT_GET_LONG_LE() FT_GET_MACRO( LONG_LE )
|
nuclear@0
|
288 #define FT_GET_ULONG_LE() FT_GET_MACRO( ULONG_LE )
|
nuclear@0
|
289
|
nuclear@0
|
290 #else
|
nuclear@0
|
291 #define FT_GET_MACRO( func, type ) ( (type)func( stream ) )
|
nuclear@0
|
292
|
nuclear@0
|
293 #define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
|
nuclear@0
|
294 #define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
|
nuclear@0
|
295 #define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_Short )
|
nuclear@0
|
296 #define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_UShort )
|
nuclear@0
|
297 #define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_Long )
|
nuclear@0
|
298 #define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_ULong )
|
nuclear@0
|
299 #define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetLong, FT_Long )
|
nuclear@0
|
300 #define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
|
nuclear@0
|
301 #define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
|
nuclear@0
|
302
|
nuclear@0
|
303 #define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_Short )
|
nuclear@0
|
304 #define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_UShort )
|
nuclear@0
|
305 #define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_Long )
|
nuclear@0
|
306 #define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_ULong )
|
nuclear@0
|
307 #endif
|
nuclear@0
|
308
|
nuclear@0
|
309 #define FT_READ_MACRO( func, type, var ) \
|
nuclear@0
|
310 ( var = (type)func( stream, &error ), \
|
nuclear@0
|
311 error != FT_Err_Ok )
|
nuclear@0
|
312
|
nuclear@0
|
313 #define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
|
nuclear@0
|
314 #define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
|
nuclear@0
|
315 #define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_Short, var )
|
nuclear@0
|
316 #define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_UShort, var )
|
nuclear@0
|
317 #define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_Long, var )
|
nuclear@0
|
318 #define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_ULong, var )
|
nuclear@0
|
319 #define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_Long, var )
|
nuclear@0
|
320 #define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_ULong, var )
|
nuclear@0
|
321
|
nuclear@0
|
322 #define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_Short, var )
|
nuclear@0
|
323 #define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_UShort, var )
|
nuclear@0
|
324 #define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_Long, var )
|
nuclear@0
|
325 #define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_ULong, var )
|
nuclear@0
|
326
|
nuclear@0
|
327
|
nuclear@0
|
328 #ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
|
nuclear@0
|
329
|
nuclear@0
|
330 /* initialize a stream for reading a regular system stream */
|
nuclear@0
|
331 FT_BASE( FT_Error )
|
nuclear@0
|
332 FT_Stream_Open( FT_Stream stream,
|
nuclear@0
|
333 const char* filepathname );
|
nuclear@0
|
334
|
nuclear@0
|
335 #endif /* FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */
|
nuclear@0
|
336
|
nuclear@0
|
337
|
nuclear@0
|
338 /* create a new (input) stream from an FT_Open_Args structure */
|
nuclear@0
|
339 FT_BASE( FT_Error )
|
nuclear@0
|
340 FT_Stream_New( FT_Library library,
|
nuclear@0
|
341 const FT_Open_Args* args,
|
nuclear@0
|
342 FT_Stream *astream );
|
nuclear@0
|
343
|
nuclear@0
|
344 /* free a stream */
|
nuclear@0
|
345 FT_BASE( void )
|
nuclear@0
|
346 FT_Stream_Free( FT_Stream stream,
|
nuclear@0
|
347 FT_Int external );
|
nuclear@0
|
348
|
nuclear@0
|
349 /* initialize a stream for reading in-memory data */
|
nuclear@0
|
350 FT_BASE( void )
|
nuclear@0
|
351 FT_Stream_OpenMemory( FT_Stream stream,
|
nuclear@0
|
352 const FT_Byte* base,
|
nuclear@0
|
353 FT_ULong size );
|
nuclear@0
|
354
|
nuclear@0
|
355 /* close a stream (does not destroy the stream structure) */
|
nuclear@0
|
356 FT_BASE( void )
|
nuclear@0
|
357 FT_Stream_Close( FT_Stream stream );
|
nuclear@0
|
358
|
nuclear@0
|
359
|
nuclear@0
|
360 /* seek within a stream. position is relative to start of stream */
|
nuclear@0
|
361 FT_BASE( FT_Error )
|
nuclear@0
|
362 FT_Stream_Seek( FT_Stream stream,
|
nuclear@0
|
363 FT_ULong pos );
|
nuclear@0
|
364
|
nuclear@0
|
365 /* skip bytes in a stream */
|
nuclear@0
|
366 FT_BASE( FT_Error )
|
nuclear@0
|
367 FT_Stream_Skip( FT_Stream stream,
|
nuclear@0
|
368 FT_Long distance );
|
nuclear@0
|
369
|
nuclear@0
|
370 /* return current stream position */
|
nuclear@0
|
371 FT_BASE( FT_Long )
|
nuclear@0
|
372 FT_Stream_Pos( FT_Stream stream );
|
nuclear@0
|
373
|
nuclear@0
|
374 /* read bytes from a stream into a user-allocated buffer, returns an */
|
nuclear@0
|
375 /* error if not all bytes could be read. */
|
nuclear@0
|
376 FT_BASE( FT_Error )
|
nuclear@0
|
377 FT_Stream_Read( FT_Stream stream,
|
nuclear@0
|
378 FT_Byte* buffer,
|
nuclear@0
|
379 FT_ULong count );
|
nuclear@0
|
380
|
nuclear@0
|
381 /* read bytes from a stream at a given position */
|
nuclear@0
|
382 FT_BASE( FT_Error )
|
nuclear@0
|
383 FT_Stream_ReadAt( FT_Stream stream,
|
nuclear@0
|
384 FT_ULong pos,
|
nuclear@0
|
385 FT_Byte* buffer,
|
nuclear@0
|
386 FT_ULong count );
|
nuclear@0
|
387
|
nuclear@0
|
388 /* try to read bytes at the end of a stream; return number of bytes */
|
nuclear@0
|
389 /* really available */
|
nuclear@0
|
390 FT_BASE( FT_ULong )
|
nuclear@0
|
391 FT_Stream_TryRead( FT_Stream stream,
|
nuclear@0
|
392 FT_Byte* buffer,
|
nuclear@0
|
393 FT_ULong count );
|
nuclear@0
|
394
|
nuclear@0
|
395 /* Enter a frame of `count' consecutive bytes in a stream. Returns an */
|
nuclear@0
|
396 /* error if the frame could not be read/accessed. The caller can use */
|
nuclear@0
|
397 /* the FT_Stream_Get_XXX functions to retrieve frame data without */
|
nuclear@0
|
398 /* error checks. */
|
nuclear@0
|
399 /* */
|
nuclear@0
|
400 /* You must _always_ call FT_Stream_ExitFrame() once you have entered */
|
nuclear@0
|
401 /* a stream frame! */
|
nuclear@0
|
402 /* */
|
nuclear@0
|
403 FT_BASE( FT_Error )
|
nuclear@0
|
404 FT_Stream_EnterFrame( FT_Stream stream,
|
nuclear@0
|
405 FT_ULong count );
|
nuclear@0
|
406
|
nuclear@0
|
407 /* exit a stream frame */
|
nuclear@0
|
408 FT_BASE( void )
|
nuclear@0
|
409 FT_Stream_ExitFrame( FT_Stream stream );
|
nuclear@0
|
410
|
nuclear@0
|
411 /* Extract a stream frame. If the stream is disk-based, a heap block */
|
nuclear@0
|
412 /* is allocated and the frame bytes are read into it. If the stream */
|
nuclear@0
|
413 /* is memory-based, this function simply set a pointer to the data. */
|
nuclear@0
|
414 /* */
|
nuclear@0
|
415 /* Useful to optimize access to memory-based streams transparently. */
|
nuclear@0
|
416 /* */
|
nuclear@0
|
417 /* All extracted frames must be `freed' with a call to the function */
|
nuclear@0
|
418 /* FT_Stream_ReleaseFrame(). */
|
nuclear@0
|
419 /* */
|
nuclear@0
|
420 FT_BASE( FT_Error )
|
nuclear@0
|
421 FT_Stream_ExtractFrame( FT_Stream stream,
|
nuclear@0
|
422 FT_ULong count,
|
nuclear@0
|
423 FT_Byte** pbytes );
|
nuclear@0
|
424
|
nuclear@0
|
425 /* release an extract frame (see FT_Stream_ExtractFrame) */
|
nuclear@0
|
426 FT_BASE( void )
|
nuclear@0
|
427 FT_Stream_ReleaseFrame( FT_Stream stream,
|
nuclear@0
|
428 FT_Byte** pbytes );
|
nuclear@0
|
429
|
nuclear@0
|
430 /* read a byte from an entered frame */
|
nuclear@0
|
431 FT_BASE( FT_Char )
|
nuclear@0
|
432 FT_Stream_GetChar( FT_Stream stream );
|
nuclear@0
|
433
|
nuclear@0
|
434 /* read a 16-bit big-endian integer from an entered frame */
|
nuclear@0
|
435 FT_BASE( FT_Short )
|
nuclear@0
|
436 FT_Stream_GetShort( FT_Stream stream );
|
nuclear@0
|
437
|
nuclear@0
|
438 /* read a 24-bit big-endian integer from an entered frame */
|
nuclear@0
|
439 FT_BASE( FT_Long )
|
nuclear@0
|
440 FT_Stream_GetOffset( FT_Stream stream );
|
nuclear@0
|
441
|
nuclear@0
|
442 /* read a 32-bit big-endian integer from an entered frame */
|
nuclear@0
|
443 FT_BASE( FT_Long )
|
nuclear@0
|
444 FT_Stream_GetLong( FT_Stream stream );
|
nuclear@0
|
445
|
nuclear@0
|
446 /* read a 16-bit little-endian integer from an entered frame */
|
nuclear@0
|
447 FT_BASE( FT_Short )
|
nuclear@0
|
448 FT_Stream_GetShortLE( FT_Stream stream );
|
nuclear@0
|
449
|
nuclear@0
|
450 /* read a 32-bit little-endian integer from an entered frame */
|
nuclear@0
|
451 FT_BASE( FT_Long )
|
nuclear@0
|
452 FT_Stream_GetLongLE( FT_Stream stream );
|
nuclear@0
|
453
|
nuclear@0
|
454
|
nuclear@0
|
455 /* read a byte from a stream */
|
nuclear@0
|
456 FT_BASE( FT_Char )
|
nuclear@0
|
457 FT_Stream_ReadChar( FT_Stream stream,
|
nuclear@0
|
458 FT_Error* error );
|
nuclear@0
|
459
|
nuclear@0
|
460 /* read a 16-bit big-endian integer from a stream */
|
nuclear@0
|
461 FT_BASE( FT_Short )
|
nuclear@0
|
462 FT_Stream_ReadShort( FT_Stream stream,
|
nuclear@0
|
463 FT_Error* error );
|
nuclear@0
|
464
|
nuclear@0
|
465 /* read a 24-bit big-endian integer from a stream */
|
nuclear@0
|
466 FT_BASE( FT_Long )
|
nuclear@0
|
467 FT_Stream_ReadOffset( FT_Stream stream,
|
nuclear@0
|
468 FT_Error* error );
|
nuclear@0
|
469
|
nuclear@0
|
470 /* read a 32-bit big-endian integer from a stream */
|
nuclear@0
|
471 FT_BASE( FT_Long )
|
nuclear@0
|
472 FT_Stream_ReadLong( FT_Stream stream,
|
nuclear@0
|
473 FT_Error* error );
|
nuclear@0
|
474
|
nuclear@0
|
475 /* read a 16-bit little-endian integer from a stream */
|
nuclear@0
|
476 FT_BASE( FT_Short )
|
nuclear@0
|
477 FT_Stream_ReadShortLE( FT_Stream stream,
|
nuclear@0
|
478 FT_Error* error );
|
nuclear@0
|
479
|
nuclear@0
|
480 /* read a 32-bit little-endian integer from a stream */
|
nuclear@0
|
481 FT_BASE( FT_Long )
|
nuclear@0
|
482 FT_Stream_ReadLongLE( FT_Stream stream,
|
nuclear@0
|
483 FT_Error* error );
|
nuclear@0
|
484
|
nuclear@0
|
485 /* Read a structure from a stream. The structure must be described */
|
nuclear@0
|
486 /* by an array of FT_Frame_Field records. */
|
nuclear@0
|
487 FT_BASE( FT_Error )
|
nuclear@0
|
488 FT_Stream_ReadFields( FT_Stream stream,
|
nuclear@0
|
489 const FT_Frame_Field* fields,
|
nuclear@0
|
490 void* structure );
|
nuclear@0
|
491
|
nuclear@0
|
492
|
nuclear@0
|
493 #define FT_STREAM_POS() \
|
nuclear@0
|
494 FT_Stream_Pos( stream )
|
nuclear@0
|
495
|
nuclear@0
|
496 #define FT_STREAM_SEEK( position ) \
|
nuclear@0
|
497 FT_SET_ERROR( FT_Stream_Seek( stream, position ) )
|
nuclear@0
|
498
|
nuclear@0
|
499 #define FT_STREAM_SKIP( distance ) \
|
nuclear@0
|
500 FT_SET_ERROR( FT_Stream_Skip( stream, distance ) )
|
nuclear@0
|
501
|
nuclear@0
|
502 #define FT_STREAM_READ( buffer, count ) \
|
nuclear@0
|
503 FT_SET_ERROR( FT_Stream_Read( stream, \
|
nuclear@0
|
504 (FT_Byte*)buffer, \
|
nuclear@0
|
505 count ) )
|
nuclear@0
|
506
|
nuclear@0
|
507 #define FT_STREAM_READ_AT( position, buffer, count ) \
|
nuclear@0
|
508 FT_SET_ERROR( FT_Stream_ReadAt( stream, \
|
nuclear@0
|
509 position, \
|
nuclear@0
|
510 (FT_Byte*)buffer, \
|
nuclear@0
|
511 count ) )
|
nuclear@0
|
512
|
nuclear@0
|
513 #define FT_STREAM_READ_FIELDS( fields, object ) \
|
nuclear@0
|
514 FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) )
|
nuclear@0
|
515
|
nuclear@0
|
516
|
nuclear@0
|
517 #define FT_FRAME_ENTER( size ) \
|
nuclear@0
|
518 FT_SET_ERROR( \
|
nuclear@0
|
519 FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, size ) ) )
|
nuclear@0
|
520
|
nuclear@0
|
521 #define FT_FRAME_EXIT() \
|
nuclear@0
|
522 FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) )
|
nuclear@0
|
523
|
nuclear@0
|
524 #define FT_FRAME_EXTRACT( size, bytes ) \
|
nuclear@0
|
525 FT_SET_ERROR( \
|
nuclear@0
|
526 FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, size, \
|
nuclear@0
|
527 (FT_Byte**)&(bytes) ) ) )
|
nuclear@0
|
528
|
nuclear@0
|
529 #define FT_FRAME_RELEASE( bytes ) \
|
nuclear@0
|
530 FT_DEBUG_INNER( FT_Stream_ReleaseFrame( stream, \
|
nuclear@0
|
531 (FT_Byte**)&(bytes) ) )
|
nuclear@0
|
532
|
nuclear@0
|
533
|
nuclear@0
|
534 FT_END_HEADER
|
nuclear@0
|
535
|
nuclear@0
|
536 #endif /* __FTSTREAM_H__ */
|
nuclear@0
|
537
|
nuclear@0
|
538
|
nuclear@0
|
539 /* END */
|