/* This file is part of the wvWare 2 project Copyright (C) 2001-2003 Werner Trobin This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GLOBAL_H #define GLOBAL_H #include "dllmagic.h" /** @file * We use this typedefs to be compatible with the types from * the MS HTML specifications. */ // A few defines used for "inline" debugging #define WV2_DUMP_PIECE_TABLE 0 // has to be defined as we just #if it //#define WV2_DUMP_FIB 1 //#define WV2_DEBUG_STYLESHEET 1 //#define WV2_DEBUG_SPRMS 1 //#define WV2_DEBUG_LIST_READING 1 //#define WV2_DEBUG_LIST_PROCESSING 1 //#define WV2_DEBUG_FIELDS 1 //#define WV2_DEBUG_FOOTNOTES 1 //#define WV2_DEBUG_HEADERS 1 //#define WV2_DEBUG_TABLES 1 //#define WV2_DEBUG_PICTURES 1 // This define should only be commented out for releases (if at all) #define WV2_CHECKING 1 extern const char* const libwv2_version; namespace wvWare { typedef signed char S8; typedef unsigned char U8; typedef signed short S16; typedef unsigned short U16; typedef signed int S32; typedef unsigned int U32; typedef U16 XCHAR; typedef U32 FC; /** * This enum tells the apply* methods in the PAP/CHP/... structs what grpprls to * expect. Unfortunately the size of the SPRMs changed for Word 8. */ enum WordVersion { Word67, Word8 }; const int Word8nFib = 193; inline U8 readU8( const U8* in ) { return *in; } inline S8 readS8( const U8* in ) { return static_cast( *in ); } // reads a U16/S16 or U32/S32 from a little-endian byte // "array" in an endian-correct way inline U16 readU16( const U8* in ) { return static_cast( in[0] ) | ( static_cast( in[1] ) << 8 ); } inline S16 readS16( const U8* in ) { return static_cast( readU16( in ) ); } // writes a U16 to a little-endian byte "array" in an endian-correct way inline void write( U8* out, U16 data ) { out[ 0 ] = data & 0x00ff; out[ 1 ] = data >> 8; } inline U32 readU32( const U8* in ) { return static_cast( in[0] ) | ( static_cast( in[1] ) << 8 ) | ( static_cast( in[2] ) << 16 ) | ( static_cast( in[3] ) << 24 ); } inline S32 readS32(const U8* in) { return static_cast( readU32( in ) ); } // Endianness fun U16 toLittleEndian( U16 data ); inline S16 toLittleEndian( S16 data ) { return static_cast( toLittleEndian( static_cast( data ) ) ); } U16 toBigEndian( U16 data ); inline S16 toBigEndian( S16 data ) { return static_cast( toBigEndian( static_cast( data ) ) ); } inline U16 swapEndianness( U16 data ) { return ( ( data & 0x00ffU ) << 8 ) | ( ( data & 0xff00U ) >> 8 ); } inline S16 swapEndianness( S16 data ) { return ( ( data & 0x00ffU ) << 8 ) | ( ( data & 0xff00U ) >> 8 ); } U32 toLittleEndian( U32 data ); inline S32 toLittleEndian( S32 data ) { return static_cast( toLittleEndian( static_cast( data ) ) ); } U32 toBigEndian( U32 data ); inline S32 toBigEndian( S32 data ) { return static_cast( toBigEndian( static_cast( data ) ) ); } inline U32 swapEndianness( U32 data ) { return ( ( data & 0x000000ffU ) << 24 ) | ( ( data & 0x0000ff00U ) << 8 ) | ( ( data & 0x00ff0000U ) >> 8 ) | ( ( data & 0xff000000U ) >> 24 ); } inline S32 swapEndianness( S32 data ) { return ( ( data & 0x000000ffU ) << 24 ) | ( ( data & 0x0000ff00U ) << 8 ) | ( ( data & 0x00ff0000U ) >> 8 ) | ( ( data & 0xff000000U ) >> 24 ); } } // namespace wvWare #endif // GLOBAL_H