#ifndef _XPRS_H_ #define _XPRS_H_ /* ------------------------------------------------------------------------ */ /* */ /* Copyright (c) Microsoft Corporation, 2000-2002. All rights reserved. */ /* Copyright (c) Andrew Kadatch, 1991-2002. All rights reserved. */ /* */ /* Microsoft Confidential -- do not redistribute. */ /* */ /* ------------------------------------------------------------------------ */ #include #include #include #include #include "xpress.h" #ifdef _MSC_VER #pragma code_seg ("PAGELK") #if !DEBUG #ifdef _M_IX86 #pragma optimize ("tgaw", on) #else #pragma optimize ("tgw", on) #endif /* _M_IX86 */ #endif /* DEBUG */ #endif /* ------------------------ Configuration ----------------------------- */ /* ------------- */ #ifndef CODING_ALG #define CODING_ALG 1 #endif #define CODING_DIRECT2 (1 << 1) #define CODING_DIRECT (1 << 2) #define CODING_BY_BIT (1 << 3) #define CODING_HUFF_LEN (1 << 4) #define CODING_HUFF_PTR (1 << 5) #define CODING_HUFF_ALL (1 << 6) #define CODING (1 << CODING_ALG) #define SUPPORT_CRC 0 #define BUFF_SIZE_LOG XPRESS_MAX_BLOCK_LOG #define BUFF_SIZE (1< 16 ? 16 : BUFF_SIZE_LOG) #else #define MAX_OFFSET 13 #endif #if CODING == CODING_DIRECT2 && MAX_OFFSET > 13 #undef MAX_OFFSET #define MAX_OFFSET 13 #define DIRECT2_LEN_LOG (16 - MAX_OFFSET) #define DIRECT2_MAX_LEN ((1 << DIRECT2_LEN_LOG) - 1) #endif #if BUFF_SIZE < XPRESS_MAX_BLOCK #error BUFF_SIZE should not be less than XPRESS_MAX_BLOCK #endif #if CODING == CODING_HUFF_LEN #define MAX_LENGTH 32 #define HUFF_SIZE (MAX_LENGTH * 2) #elif CODING & (CODING_HUFF_PTR | CODING_HUFF_ALL) #if (256 / MAX_OFFSET) >= 32 #define MAX_LENGTH_LOG 5 #else #define MAX_LENGTH_LOG 4 #endif #define MAX_LENGTH (1 << MAX_LENGTH_LOG) #if CODING == CODING_HUFF_PTR #define HUFF_SIZE ((MAX_LENGTH * MAX_OFFSET + 1) & ~1) #elif CODING == CODING_HUFF_ALL #define HUFF_SIZE (256 + ((MAX_LENGTH * MAX_OFFSET + 1) & ~1)) #endif #endif #define MIN_MATCH 3 /* min acceptable match length */ #if CODING == CODING_HUFF_LEN #define DECODE_BITS 8 #elif CODING & (CODING_HUFF_PTR | CODING_HUFF_ALL) #define DECODE_BITS 10 #endif /* ---------------------- Useful types ------------------------ */ /* ------------ */ #if defined (_M_IX86) && !defined (i386) #define i386 1 /* ifdef i386 asm code will be used for some encodings */ #endif #if defined (i386) && defined (NOASM) #undef i386 #endif #define uchar unsigned char /* useful types */ #define schar signed char #ifdef _M_IX86 #define __unaligned /* x86 does not have __unaligned keyword */ #endif #define int4 int /* any long enough integral type */ #define int2 short /* assert (2*sizeof(int2) == sizeof (int4)) */ #define xint int /* any int type >= 32 bits && >= sizeof (bitmask4) */ #define int32 int /* 32 bit type */ #define int16 short /* 16 bit type */ #define tag_t int32 #ifdef i386 #define bitmask4 int32 /* must be 32 bit for i386 */ #define bitmask2 int16 #else #define bitmask4 int4 /* not important otherwise; shall not exceed xint */ #define bitmask2 int2 /* well, well... it's important for x86 compatibility */ #endif #define uint4 unsigned int4 #define uint2 unsigned int2 #define uxint unsigned xint #define uint32 unsigned int32 #define uint16 unsigned int16 #define utag_t unsigned tag_t #define ubitmask4 unsigned bitmask4 #define ubitmask2 unsigned bitmask2 #ifdef _MSC_VER #if _MSC_VER >= 1200 #define INLINE __forceinline #else #define INLINE __inline #endif #pragma warning(disable:4127) /* conditional expression is constant */ #pragma warning(disable:4711) /* function XXX selected for automatic inline expansion */ #pragma warning(disable:4710) /* function XXX not expanded */ #pragma warning(disable:4100) /* unreferenced formal paramter */ #pragma warning(disable:4068) /* bogus "unknown pragma" */ #endif #ifndef DEBUG #define DEBUG 0 #endif #if !defined (INLINE) || DEBUG #undef INLINE #define INLINE static #endif #if !DEBUG #undef assert #define assert(x) #endif #if CODING & (CODING_DIRECT | CODING_DIRECT2) #define MIN_SIZE0 8 #elif CODING == CODING_BY_BIT #define MIN_SIZE0 7 #elif CODING == CODING_HUFF_LEN #define MIN_SIZE0 44 #elif CODING == CODING_HUFF_PTR #define MIN_SIZE0 139 #elif CODING == CODING_HUFF_ALL #define MIN_SIZE0 261 #else #error wrong CODING #endif #define MIN_SIZE (MIN_SIZE0 + CRC_STAMP_SIZE) #define CRC32_FIRST 0 #if SUPPORT_CRC #define CRC_STAMP_SIZE sizeof (uint32) #else #define CRC_STAMP_SIZE 0 #endif #if DEBUG extern long xxx[]; #endif #ifdef _MSC_VER #pragma warning (disable: 4731) /* frame pointer register 'ebp' modified by inline assembly code */ #endif #if CODING_ALG != 1 && CODING_ALG != 6 #error CODING_ALGs different from 1 and 6 are not supported anymore #endif #endif /* _XPRS_H_ */