123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #ifndef __OT_LAYOUT_H__
- #define __OT_LAYOUT_H__
- #include "otlconf.h"
- OTL_BEGIN_HEADER
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** BASE DATA TYPES *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- typedef unsigned char OTL_Byte;
- typedef const OTL_Byte* OTL_Bytes;
- typedef int OTL_Error;
- typedef void* OTL_Pointer;
- typedef int OTL_Int;
- typedef unsigned int OTL_UInt;
- typedef long OTL_Long;
- typedef unsigned long OTL_ULong;
- typedef short OTL_Int16;
- typedef unsigned short OTL_UInt16;
- #if OTL_SIZEOF_INT == 4
- typedef int OTL_Int32;
- typedef unsigned int OTL_UInt32;
- #elif OTL_SIZEOF_LONG == 4
- typedef long OTL_Int32;
- typedef unsigned long OTL_UInt32;
- #else
- # error "no 32-bits type found"
- #endif
- typedef OTL_UInt32 OTL_Tag;
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** ERROR CODES *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- typedef enum
- {
- OTL_Err_Ok = 0,
- OTL_Err_InvalidArgument,
- OTL_Err_InvalidFormat,
- OTL_Err_InvalidOffset,
- OTL_Err_Max
- } OTL_Error;
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** MEMORY MANAGEMENT *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- typedef OTL_Pointer (*OTL_AllocFunc)( OTL_ULong size,
- OTL_Pointer data );
- typedef OTL_Pointer (*OTL_ReallocFunc)( OTL_Pointer block,
- OTL_ULong size,
- OTL_Pointer data );
- typedef void (*OTL_FreeFunc)( OTL_Pointer block,
- OTL_Pointer data );
- typedef struct OTL_MemoryRec_
- {
- OTL_Pointer mem_data;
- OTL_AllocFunc mem_alloc;
- OTL_ReallocFunc mem_realloc;
- OTL_FreeFunc mem_free;
- } OTL_MemoryRec, *OTL_Memory;
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** ENUMERATIONS *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- /* re-define OTL_MAKE_TAG to something different if you're not */
- /* using an ASCII-based character set (Vaxes anyone ?) */
- #ifndef OTL_MAKE_TAG
- #define OTL_MAKE_TAG(c1,c2,c3,c4) \
- ( ( (OTL_UInt32)(c1) << 24 ) | \
- (OTL_UInt32)(c2) << 16 ) | \
- (OTL_UInt32)(c3) << 8 ) | \
- (OTL_UInt32)(c4) )
- #endif
- typedef enum OTL_ScriptTag_
- {
- OTL_SCRIPT_NONE = 0,
- #define OTL_SCRIPT_TAG(c1,c2,c3,c4,s,n) OTL_SCRIPT_TAG_ ## n = OTL_MAKE_TAG(c1,c2,c3,c4),
- #include "otltags.h"
- OTL_SCRIPT_MAX
- } OTL_ScriptTag;
- typedef enum OTL_LangTag_
- {
- OTL_LANG_DEFAULT = 0,
- #define OTL_LANG_TAG(c1,c2,c3,c4,s,n) OTL_LANG_TAG_ ## n = OTL_MAKE_TAG(c1,c2,c3,c4),
- #include "otltags.h"
- OTL_LANG_MAX
- } OTL_LangTag;
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** MEMORY READS *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- #define OTL_PEEK_USHORT(p) ( ((OTL_UInt)((p)[0]) << 8) | \
- ((OTL_UInt)((p)[1]) ) )
- #define OTL_PEEK_ULONG(p) ( ((OTL_UInt32)((p)[0]) << 24) | \
- ((OTL_UInt32)((p)[1]) << 16) | \
- ((OTL_UInt32)((p)[2]) << 8) | \
- ((OTL_UInt32)((p)[3]) ) )
- #define OTL_PEEK_SHORT(p) ((OTL_Int16)OTL_PEEK_USHORT(p))
- #define OTL_PEEK_LONG(p) ((OTL_Int32)OTL_PEEK_ULONG(p))
- #define OTL_NEXT_USHORT(p) ( (p) += 2, OTL_PEEK_USHORT((p)-2) )
- #define OTL_NEXT_ULONG(p) ( (p) += 4, OTL_PEEK_ULONG((p)-4) )
- #define OTL_NEXT_SHORT(p) ((OTL_Int16)OTL_NEXT_USHORT(p))
- #define OTL_NEXT_LONG(p) ((OTL_Int32)OTL_NEXT_ULONG(p))
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** VALIDATION *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
- typedef struct OTL_ValidatorRec_* OTL_Validator;
- typedef struct OTL_ValidatorRec_
- {
- OTL_Bytes limit;
- OTL_Bytes base;
- OTL_Error error;
- OTL_jmp_buf jump_buffer;
- } OTL_ValidatorRec;
- typedef void (*OTL_ValidateFunc)( OTL_Bytes table,
- OTL_Valid valid );
- OTL_API( void )
- otl_validator_error( OTL_Validator validator,
- OTL_Error error );
- #define OTL_INVALID(e) otl_validator_error( valid, e )
- #define OTL_INVALID_TOO_SHORT OTL_INVALID( OTL_Err_InvalidOffset )
- #define OTL_INVALID_DATA OTL_INVALID( OTL_Err_InvalidFormat )
- #define OTL_CHECK(_count) OTL_BEGIN_STMNT \
- if ( p + (_count) > valid->limit ) \
- OTL_INVALID_TOO_SHORT; \
- OTL_END_STMNT
- /* */
- OTL_END_HEADER
- #endif /* __OPENTYPE_LAYOUT_H__ */
|