00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __FTSTREAM_H__
00020 #define __FTSTREAM_H__
00021
00022
00023 #include <ft2build.h>
00024 #include FT_SYSTEM_H
00025 #include FT_INTERNAL_OBJECTS_H
00026
00027
00028 FT_BEGIN_HEADER
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #define FT_FRAME_OP_SHIFT 2
00041 #define FT_FRAME_OP_SIGNED 1
00042 #define FT_FRAME_OP_LITTLE 2
00043 #define FT_FRAME_OP_COMMAND( x ) ( x >> FT_FRAME_OP_SHIFT )
00044
00045 #define FT_MAKE_FRAME_OP( command, little, sign ) \
00046 ( ( command << FT_FRAME_OP_SHIFT ) | ( little << 1 ) | sign )
00047
00048 #define FT_FRAME_OP_END 0
00049 #define FT_FRAME_OP_START 1
00050 #define FT_FRAME_OP_BYTE 2
00051 #define FT_FRAME_OP_SHORT 3
00052 #define FT_FRAME_OP_LONG 4
00053 #define FT_FRAME_OP_OFF3 5
00054 #define FT_FRAME_OP_BYTES 6
00055
00056
00057 typedef enum FT_Frame_Op_
00058 {
00059 ft_frame_end = 0,
00060 ft_frame_start = FT_MAKE_FRAME_OP( FT_FRAME_OP_START, 0, 0 ),
00061
00062 ft_frame_byte = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 0 ),
00063 ft_frame_schar = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 1 ),
00064
00065 ft_frame_ushort_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 0 ),
00066 ft_frame_short_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 1 ),
00067 ft_frame_ushort_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 0 ),
00068 ft_frame_short_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 1 ),
00069
00070 ft_frame_ulong_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 0 ),
00071 ft_frame_long_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 1 ),
00072 ft_frame_ulong_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 0 ),
00073 ft_frame_long_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 1 ),
00074
00075 ft_frame_uoff3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ),
00076 ft_frame_off3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ),
00077 ft_frame_uoff3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ),
00078 ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ),
00079
00080 ft_frame_bytes = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 ),
00081 ft_frame_skip = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 1 )
00082
00083 } FT_Frame_Op;
00084
00085
00086 typedef struct FT_Frame_Field_
00087 {
00088 FT_Byte value;
00089 FT_Byte size;
00090 FT_UShort offset;
00091
00092 } FT_Frame_Field;
00093
00094
00095
00096
00097
00098
00099 #define FT_FIELD_SIZE( f ) \
00100 (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
00101
00102 #define FT_FIELD_SIZE_DELTA( f ) \
00103 (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
00104
00105 #define FT_FIELD_OFFSET( f ) \
00106 (FT_UShort)( offsetof( FT_STRUCTURE, f ) )
00107
00108 #define FT_FRAME_FIELD( frame_op, field ) \
00109 { \
00110 frame_op, \
00111 FT_FIELD_SIZE( field ), \
00112 FT_FIELD_OFFSET( field ) \
00113 }
00114
00115 #define FT_MAKE_EMPTY_FIELD( frame_op ) { frame_op, 0, 0 }
00116
00117 #define FT_FRAME_START( size ) { ft_frame_start, 0, size }
00118 #define FT_FRAME_END { ft_frame_end, 0, 0 }
00119
00120 #define FT_FRAME_LONG( f ) FT_FRAME_FIELD( ft_frame_long_be, f )
00121 #define FT_FRAME_ULONG( f ) FT_FRAME_FIELD( ft_frame_ulong_be, f )
00122 #define FT_FRAME_SHORT( f ) FT_FRAME_FIELD( ft_frame_short_be, f )
00123 #define FT_FRAME_USHORT( f ) FT_FRAME_FIELD( ft_frame_ushort_be, f )
00124 #define FT_FRAME_OFF3( f ) FT_FRAME_FIELD( ft_frame_off3_be, f )
00125 #define FT_FRAME_UOFF3( f ) FT_FRAME_FIELD( ft_frame_uoff3_be, f )
00126 #define FT_FRAME_BYTE( f ) FT_FRAME_FIELD( ft_frame_byte, f )
00127 #define FT_FRAME_CHAR( f ) FT_FRAME_FIELD( ft_frame_schar, f )
00128
00129 #define FT_FRAME_LONG_LE( f ) FT_FRAME_FIELD( ft_frame_long_le, f )
00130 #define FT_FRAME_ULONG_LE( f ) FT_FRAME_FIELD( ft_frame_ulong_le, f )
00131 #define FT_FRAME_SHORT_LE( f ) FT_FRAME_FIELD( ft_frame_short_le, f )
00132 #define FT_FRAME_USHORT_LE( f ) FT_FRAME_FIELD( ft_frame_ushort_le, f )
00133 #define FT_FRAME_OFF3_LE( f ) FT_FRAME_FIELD( ft_frame_off3_le, f )
00134 #define FT_FRAME_UOFF3_LE( f ) FT_FRAME_FIELD( ft_frame_uoff3_le, f )
00135
00136 #define FT_FRAME_SKIP_LONG { ft_frame_long_be, 0, 0 }
00137 #define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 }
00138 #define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 }
00139
00140 #define FT_FRAME_BYTES( field, count ) \
00141 { \
00142 ft_frame_bytes, \
00143 count, \
00144 FT_FIELD_OFFSET( field ) \
00145 }
00146
00147 #define FT_FRAME_SKIP_BYTES( count ) { ft_frame_skip, count, 0 }
00148
00149
00150
00151
00152
00153
00154
00155
00156 #define FT_BYTE_( p, i ) ( ((const FT_Byte*)(p))[(i)] )
00157 #define FT_INT8_( p, i ) ( ((const FT_Char*)(p))[(i)] )
00158
00159 #define FT_INT16( x ) ( (FT_Int16)(x) )
00160 #define FT_UINT16( x ) ( (FT_UInt16)(x) )
00161 #define FT_INT32( x ) ( (FT_Int32)(x) )
00162 #define FT_UINT32( x ) ( (FT_UInt32)(x) )
00163
00164 #define FT_BYTE_I16( p, i, s ) ( FT_INT16( FT_BYTE_( p, i ) ) << (s) )
00165 #define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
00166 #define FT_BYTE_I32( p, i, s ) ( FT_INT32( FT_BYTE_( p, i ) ) << (s) )
00167 #define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
00168
00169 #define FT_INT8_I16( p, i, s ) ( FT_INT16( FT_INT8_( p, i ) ) << (s) )
00170 #define FT_INT8_U16( p, i, s ) ( FT_UINT16( FT_INT8_( p, i ) ) << (s) )
00171 #define FT_INT8_I32( p, i, s ) ( FT_INT32( FT_INT8_( p, i ) ) << (s) )
00172 #define FT_INT8_U32( p, i, s ) ( FT_UINT32( FT_INT8_( p, i ) ) << (s) )
00173
00174
00175 #define FT_PEEK_SHORT( p ) FT_INT16( FT_INT8_I16( p, 0, 8) | \
00176 FT_BYTE_I16( p, 1, 0) )
00177
00178 #define FT_PEEK_USHORT( p ) FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \
00179 FT_BYTE_U16( p, 1, 0 ) )
00180
00181 #define FT_PEEK_LONG( p ) FT_INT32( FT_INT8_I32( p, 0, 24 ) | \
00182 FT_BYTE_I32( p, 1, 16 ) | \
00183 FT_BYTE_I32( p, 2, 8 ) | \
00184 FT_BYTE_I32( p, 3, 0 ) )
00185
00186 #define FT_PEEK_ULONG( p ) FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \
00187 FT_BYTE_U32( p, 1, 16 ) | \
00188 FT_BYTE_U32( p, 2, 8 ) | \
00189 FT_BYTE_U32( p, 3, 0 ) )
00190
00191 #define FT_PEEK_OFF3( p ) FT_INT32( FT_INT8_I32( p, 0, 16 ) | \
00192 FT_BYTE_I32( p, 1, 8 ) | \
00193 FT_BYTE_I32( p, 2, 0 ) )
00194
00195 #define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
00196 FT_BYTE_U32( p, 1, 8 ) | \
00197 FT_BYTE_U32( p, 2, 0 ) )
00198
00199 #define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_INT8_I16( p, 1, 8 ) | \
00200 FT_BYTE_I16( p, 0, 0 ) )
00201
00202 #define FT_PEEK_USHORT_LE( p ) FT_UINT16( FT_BYTE_U16( p, 1, 8 ) | \
00203 FT_BYTE_U16( p, 0, 0 ) )
00204
00205 #define FT_PEEK_LONG_LE( p ) FT_INT32( FT_INT8_I32( p, 3, 24 ) | \
00206 FT_BYTE_I32( p, 2, 16 ) | \
00207 FT_BYTE_I32( p, 1, 8 ) | \
00208 FT_BYTE_I32( p, 0, 0 ) )
00209
00210 #define FT_PEEK_ULONG_LE( p ) FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \
00211 FT_BYTE_U32( p, 2, 16 ) | \
00212 FT_BYTE_U32( p, 1, 8 ) | \
00213 FT_BYTE_U32( p, 0, 0 ) )
00214
00215 #define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_INT8_I32( p, 2, 16 ) | \
00216 FT_BYTE_I32( p, 1, 8 ) | \
00217 FT_BYTE_I32( p, 0, 0 ) )
00218
00219 #define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
00220 FT_BYTE_U32( p, 1, 8 ) | \
00221 FT_BYTE_U32( p, 0, 0 ) )
00222
00223
00224 #define FT_NEXT_CHAR( buffer ) \
00225 ( (signed char)*buffer++ )
00226
00227 #define FT_NEXT_BYTE( buffer ) \
00228 ( (unsigned char)*buffer++ )
00229
00230 #define FT_NEXT_SHORT( buffer ) \
00231 ( (short)( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) )
00232
00233 #define FT_NEXT_USHORT( buffer ) \
00234 ( (unsigned short)( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) )
00235
00236 #define FT_NEXT_OFF3( buffer ) \
00237 ( (long)( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) )
00238
00239 #define FT_NEXT_UOFF3( buffer ) \
00240 ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) )
00241
00242 #define FT_NEXT_LONG( buffer ) \
00243 ( (long)( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) )
00244
00245 #define FT_NEXT_ULONG( buffer ) \
00246 ( (unsigned long)( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) )
00247
00248
00249 #define FT_NEXT_SHORT_LE( buffer ) \
00250 ( (short)( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) )
00251
00252 #define FT_NEXT_USHORT_LE( buffer ) \
00253 ( (unsigned short)( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) )
00254
00255 #define FT_NEXT_OFF3_LE( buffer ) \
00256 ( (long)( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) )
00257
00258 #define FT_NEXT_UOFF3_LE( buffer ) \
00259 ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) )
00260
00261 #define FT_NEXT_LONG_LE( buffer ) \
00262 ( (long)( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) )
00263
00264 #define FT_NEXT_ULONG_LE( buffer ) \
00265 ( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
00266
00267
00268
00269
00270
00271
00272 #if 0
00273 #define FT_GET_MACRO( type ) FT_NEXT_ ## type ( stream->cursor )
00274
00275 #define FT_GET_CHAR() FT_GET_MACRO( CHAR )
00276 #define FT_GET_BYTE() FT_GET_MACRO( BYTE )
00277 #define FT_GET_SHORT() FT_GET_MACRO( SHORT )
00278 #define FT_GET_USHORT() FT_GET_MACRO( USHORT )
00279 #define FT_GET_OFF3() FT_GET_MACRO( OFF3 )
00280 #define FT_GET_UOFF3() FT_GET_MACRO( UOFF3 )
00281 #define FT_GET_LONG() FT_GET_MACRO( LONG )
00282 #define FT_GET_ULONG() FT_GET_MACRO( ULONG )
00283 #define FT_GET_TAG4() FT_GET_MACRO( ULONG )
00284
00285 #define FT_GET_SHORT_LE() FT_GET_MACRO( SHORT_LE )
00286 #define FT_GET_USHORT_LE() FT_GET_MACRO( USHORT_LE )
00287 #define FT_GET_LONG_LE() FT_GET_MACRO( LONG_LE )
00288 #define FT_GET_ULONG_LE() FT_GET_MACRO( ULONG_LE )
00289
00290 #else
00291 #define FT_GET_MACRO( func, type ) ( (type)func( stream ) )
00292
00293 #define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
00294 #define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
00295 #define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_Short )
00296 #define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_UShort )
00297 #define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_Long )
00298 #define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_ULong )
00299 #define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetLong, FT_Long )
00300 #define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
00301 #define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
00302
00303 #define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_Short )
00304 #define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_UShort )
00305 #define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_Long )
00306 #define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_ULong )
00307 #endif
00308
00309 #define FT_READ_MACRO( func, type, var ) \
00310 ( var = (type)func( stream, &error ), \
00311 error != FT_Err_Ok )
00312
00313 #define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
00314 #define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
00315 #define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_Short, var )
00316 #define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_UShort, var )
00317 #define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_Long, var )
00318 #define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_ULong, var )
00319 #define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_Long, var )
00320 #define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_ULong, var )
00321
00322 #define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_Short, var )
00323 #define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_UShort, var )
00324 #define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_Long, var )
00325 #define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_ULong, var )
00326
00327
00328 #ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
00329
00330
00331 FT_BASE( FT_Error )
00332 FT_Stream_Open( FT_Stream stream,
00333 const char* filepathname );
00334
00335 #endif
00336
00337
00338
00339 FT_BASE( FT_Error )
00340 FT_Stream_New( FT_Library library,
00341 const FT_Open_Args* args,
00342 FT_Stream *astream );
00343
00344
00345 FT_BASE( void )
00346 FT_Stream_Free( FT_Stream stream,
00347 FT_Int external );
00348
00349
00350 FT_BASE( void )
00351 FT_Stream_OpenMemory( FT_Stream stream,
00352 const FT_Byte* base,
00353 FT_ULong size );
00354
00355
00356 FT_BASE( void )
00357 FT_Stream_Close( FT_Stream stream );
00358
00359
00360
00361 FT_BASE( FT_Error )
00362 FT_Stream_Seek( FT_Stream stream,
00363 FT_ULong pos );
00364
00365
00366 FT_BASE( FT_Error )
00367 FT_Stream_Skip( FT_Stream stream,
00368 FT_Long distance );
00369
00370
00371 FT_BASE( FT_Long )
00372 FT_Stream_Pos( FT_Stream stream );
00373
00374
00375
00376 FT_BASE( FT_Error )
00377 FT_Stream_Read( FT_Stream stream,
00378 FT_Byte* buffer,
00379 FT_ULong count );
00380
00381
00382 FT_BASE( FT_Error )
00383 FT_Stream_ReadAt( FT_Stream stream,
00384 FT_ULong pos,
00385 FT_Byte* buffer,
00386 FT_ULong count );
00387
00388
00389
00390 FT_BASE( FT_ULong )
00391 FT_Stream_TryRead( FT_Stream stream,
00392 FT_Byte* buffer,
00393 FT_ULong count );
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403 FT_BASE( FT_Error )
00404 FT_Stream_EnterFrame( FT_Stream stream,
00405 FT_ULong count );
00406
00407
00408 FT_BASE( void )
00409 FT_Stream_ExitFrame( FT_Stream stream );
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420 FT_BASE( FT_Error )
00421 FT_Stream_ExtractFrame( FT_Stream stream,
00422 FT_ULong count,
00423 FT_Byte** pbytes );
00424
00425
00426 FT_BASE( void )
00427 FT_Stream_ReleaseFrame( FT_Stream stream,
00428 FT_Byte** pbytes );
00429
00430
00431 FT_BASE( FT_Char )
00432 FT_Stream_GetChar( FT_Stream stream );
00433
00434
00435 FT_BASE( FT_Short )
00436 FT_Stream_GetShort( FT_Stream stream );
00437
00438
00439 FT_BASE( FT_Long )
00440 FT_Stream_GetOffset( FT_Stream stream );
00441
00442
00443 FT_BASE( FT_Long )
00444 FT_Stream_GetLong( FT_Stream stream );
00445
00446
00447 FT_BASE( FT_Short )
00448 FT_Stream_GetShortLE( FT_Stream stream );
00449
00450
00451 FT_BASE( FT_Long )
00452 FT_Stream_GetLongLE( FT_Stream stream );
00453
00454
00455
00456 FT_BASE( FT_Char )
00457 FT_Stream_ReadChar( FT_Stream stream,
00458 FT_Error* error );
00459
00460
00461 FT_BASE( FT_Short )
00462 FT_Stream_ReadShort( FT_Stream stream,
00463 FT_Error* error );
00464
00465
00466 FT_BASE( FT_Long )
00467 FT_Stream_ReadOffset( FT_Stream stream,
00468 FT_Error* error );
00469
00470
00471 FT_BASE( FT_Long )
00472 FT_Stream_ReadLong( FT_Stream stream,
00473 FT_Error* error );
00474
00475
00476 FT_BASE( FT_Short )
00477 FT_Stream_ReadShortLE( FT_Stream stream,
00478 FT_Error* error );
00479
00480
00481 FT_BASE( FT_Long )
00482 FT_Stream_ReadLongLE( FT_Stream stream,
00483 FT_Error* error );
00484
00485
00486
00487 FT_BASE( FT_Error )
00488 FT_Stream_ReadFields( FT_Stream stream,
00489 const FT_Frame_Field* fields,
00490 void* structure );
00491
00492
00493 #define FT_STREAM_POS() \
00494 FT_Stream_Pos( stream )
00495
00496 #define FT_STREAM_SEEK( position ) \
00497 FT_SET_ERROR( FT_Stream_Seek( stream, position ) )
00498
00499 #define FT_STREAM_SKIP( distance ) \
00500 FT_SET_ERROR( FT_Stream_Skip( stream, distance ) )
00501
00502 #define FT_STREAM_READ( buffer, count ) \
00503 FT_SET_ERROR( FT_Stream_Read( stream, \
00504 (FT_Byte*)buffer, \
00505 count ) )
00506
00507 #define FT_STREAM_READ_AT( position, buffer, count ) \
00508 FT_SET_ERROR( FT_Stream_ReadAt( stream, \
00509 position, \
00510 (FT_Byte*)buffer, \
00511 count ) )
00512
00513 #define FT_STREAM_READ_FIELDS( fields, object ) \
00514 FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) )
00515
00516
00517 #define FT_FRAME_ENTER( size ) \
00518 FT_SET_ERROR( \
00519 FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, size ) ) )
00520
00521 #define FT_FRAME_EXIT() \
00522 FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) )
00523
00524 #define FT_FRAME_EXTRACT( size, bytes ) \
00525 FT_SET_ERROR( \
00526 FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, size, \
00527 (FT_Byte**)&(bytes) ) ) )
00528
00529 #define FT_FRAME_RELEASE( bytes ) \
00530 FT_DEBUG_INNER( FT_Stream_ReleaseFrame( stream, \
00531 (FT_Byte**)&(bytes) ) )
00532
00533
00534 FT_END_HEADER
00535
00536 #endif
00537
00538
00539