vrshoot

annotate libs/ft2static/freetype/internal/ftstream.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
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 */