diff options
-rw-r--r-- | src/vf/vflib.c | 116 |
1 files changed, 115 insertions, 1 deletions
diff --git a/src/vf/vflib.c b/src/vf/vflib.c index ec492292f..987ff6473 100644 --- a/src/vf/vflib.c +++ b/src/vf/vflib.c @@ -46,7 +46,121 @@ * */ - /* TO-DO */ + FT_Long vf_read_intn( FT_Stream, FT_Int ); + FT_ULong vf_read_uintn( FT_Stream, FT_Int ); + FT_Long vf_get_intn( FT_Byte*, FT_Int ); + FT_ULong vf_get_uintn( FT_Byte*, FT_Int ); + +#define READ_UINT1( stream ) (FT_Byte)vf_read_uintn( stream, 1 ) +#define READ_UINT2( stream ) (FT_Byte)vf_read_uintn( stream, 2 ) +#define READ_UINT3( stream ) (FT_Byte)vf_read_uintn( stream, 3 ) +#define READ_UINT4( stream ) (FT_Byte)vf_read_uintn( stream, 4 ) +#define READ_UINTN( stream, n ) (FT_ULong)vf_read_uintn( stream, n ) +#define READ_INT1( stream ) (FT_String)vf_read_intn( stream, 1 ) +#define READ_INT4( stream ) (FT_Long)vf_read_intn( stream, 4 ) + +#define GET_INT1(p) (FT_Char)vf_get_intn((p), 1) +#define GET_UINT1(p) (FT_Byte)vf_get_uintn((p), 1) +#define GET_INT2(p) (FT_Int)vf_get_intn((p), 2) +#define GET_UINT2(p) (FT_UInt)vf_get_uintn((p), 2) +#define GET_INT3(p) (FT_Long)vf_get_intn((p), 3) +#define GET_UINT3(p) (FT_ULong)vf_get_uintn((p), 3) +#define GET_INT4(p) (FT_Long)vf_get_intn((p), 4) +#define GET_UINT4(p) (FT_ULong)vf_get_uintn((p), 4) +#define GET_INTN(p,n) (FT_Long)vf_get_intn((p), (n)) +#define GET_UINTN(p,n) (FT_ULong)vf_get_uintn((p), (n)) + +/* + * Reading a Number from file + */ + + FT_ULong + vf_read_uintn( FT_Stream stream, + FT_Int size ) + { + FT_ULong v,k; + FT_Error error; + FT_Byte tp; + + v = 0L; + + while ( size >= 1 ) + { + if ( FT_READ_BYTE(tp) ) + return 0; + k = (FT_ULong) tp; + v = v*256L + k; + --size; + } + return v; + } + + + FT_Long + vf_read_intn( FT_Stream stream, + FT_Int size ) + { + FT_Long v; + FT_Byte tp; + FT_Error error; + FT_ULong z; + + if ( FT_READ_BYTE(tp) ) + return 0; + z = (FT_ULong) tp; + v = (FT_Long) z & 0xffL; + + if( v & 0x80L ) + v = v - 256L; + --size; + + while ( size >= 1 ) + { + if ( FT_READ_BYTE(tp) ) + return 0; + z = (FT_ULong) tp; + v = v*256L + z; + --size; + } + return v; + } + + + FT_ULong + vf_get_uintn( FT_Byte *p, + FT_Int size ) + { + FT_ULong v; + + v = 0L; + while (size >= 1) + { + v = v*256L + (FT_ULong) *(p++); + --size; + } + + return v; + } + + FT_Long + vf_get_intn( FT_Byte *p, + FT_Int size ) + { + FT_Long v; + + v = (FT_Long)*(p++) & 0xffL; + if (v & 0x80L) + v = v - 256L; + --size; + while (size >= 1) + { + v = v*256L + (FT_ULong) *(p++); + --size; + } + + return v; + } + /************************************************************************** * |