17dd7cddfSDavid du Colombier /* zutil.h -- internal interface and configuration of the compression library 2*593dc095SDavid du Colombier * Copyright (C) 1995-2003 Jean-loup Gailly. 37dd7cddfSDavid du Colombier * For conditions of distribution and use, see copyright notice in zlib.h 47dd7cddfSDavid du Colombier */ 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombier /* WARNING: this file should *not* be used by applications. It is 77dd7cddfSDavid du Colombier part of the implementation of the compression library and is 87dd7cddfSDavid du Colombier subject to change. Applications should only use zlib.h. 97dd7cddfSDavid du Colombier */ 107dd7cddfSDavid du Colombier 11*593dc095SDavid du Colombier /* @(#) $Id: zutil.h,v 1.1.1.1 2005/04/24 21:39:38 giles Exp $ */ 127dd7cddfSDavid du Colombier 13*593dc095SDavid du Colombier #ifndef ZUTIL_H 14*593dc095SDavid du Colombier #define ZUTIL_H 157dd7cddfSDavid du Colombier 16*593dc095SDavid du Colombier #define ZLIB_INTERNAL 177dd7cddfSDavid du Colombier #include "zlib.h" 187dd7cddfSDavid du Colombier 197dd7cddfSDavid du Colombier #ifdef STDC 20*593dc095SDavid du Colombier # include <stddef.h> 217dd7cddfSDavid du Colombier # include <string.h> 227dd7cddfSDavid du Colombier # include <stdlib.h> 237dd7cddfSDavid du Colombier #endif 24*593dc095SDavid du Colombier #ifdef NO_ERRNO_H 25*593dc095SDavid du Colombier extern int errno; 26*593dc095SDavid du Colombier #else 27*593dc095SDavid du Colombier # include <errno.h> 28*593dc095SDavid du Colombier #endif 297dd7cddfSDavid du Colombier 307dd7cddfSDavid du Colombier #ifndef local 317dd7cddfSDavid du Colombier # define local static 327dd7cddfSDavid du Colombier #endif 337dd7cddfSDavid du Colombier /* compile with -Dlocal if your debugger can't find static symbols */ 347dd7cddfSDavid du Colombier 357dd7cddfSDavid du Colombier typedef unsigned char uch; 367dd7cddfSDavid du Colombier typedef uch FAR uchf; 377dd7cddfSDavid du Colombier typedef unsigned short ush; 387dd7cddfSDavid du Colombier typedef ush FAR ushf; 397dd7cddfSDavid du Colombier typedef unsigned long ulg; 407dd7cddfSDavid du Colombier 41*593dc095SDavid du Colombier extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ 427dd7cddfSDavid du Colombier /* (size given to avoid silly warnings with Visual C++) */ 437dd7cddfSDavid du Colombier 447dd7cddfSDavid du Colombier #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombier #define ERR_RETURN(strm,err) \ 477dd7cddfSDavid du Colombier return (strm->msg = (char*)ERR_MSG(err), (err)) 487dd7cddfSDavid du Colombier /* To be used only when the state is known to be valid */ 497dd7cddfSDavid du Colombier 507dd7cddfSDavid du Colombier /* common constants */ 517dd7cddfSDavid du Colombier 527dd7cddfSDavid du Colombier #ifndef DEF_WBITS 537dd7cddfSDavid du Colombier # define DEF_WBITS MAX_WBITS 547dd7cddfSDavid du Colombier #endif 557dd7cddfSDavid du Colombier /* default windowBits for decompression. MAX_WBITS is for compression only */ 567dd7cddfSDavid du Colombier 577dd7cddfSDavid du Colombier #if MAX_MEM_LEVEL >= 8 587dd7cddfSDavid du Colombier # define DEF_MEM_LEVEL 8 597dd7cddfSDavid du Colombier #else 607dd7cddfSDavid du Colombier # define DEF_MEM_LEVEL MAX_MEM_LEVEL 617dd7cddfSDavid du Colombier #endif 627dd7cddfSDavid du Colombier /* default memLevel */ 637dd7cddfSDavid du Colombier 647dd7cddfSDavid du Colombier #define STORED_BLOCK 0 657dd7cddfSDavid du Colombier #define STATIC_TREES 1 667dd7cddfSDavid du Colombier #define DYN_TREES 2 677dd7cddfSDavid du Colombier /* The three kinds of block type */ 687dd7cddfSDavid du Colombier 697dd7cddfSDavid du Colombier #define MIN_MATCH 3 707dd7cddfSDavid du Colombier #define MAX_MATCH 258 717dd7cddfSDavid du Colombier /* The minimum and maximum match lengths */ 727dd7cddfSDavid du Colombier 737dd7cddfSDavid du Colombier #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ 747dd7cddfSDavid du Colombier 757dd7cddfSDavid du Colombier /* target dependencies */ 767dd7cddfSDavid du Colombier 77*593dc095SDavid du Colombier #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) 787dd7cddfSDavid du Colombier # define OS_CODE 0x00 79*593dc095SDavid du Colombier # if defined(__TURBOC__) || defined(__BORLANDC__) 80*593dc095SDavid du Colombier # if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) 81*593dc095SDavid du Colombier /* Allow compilation with ANSI keywords only enabled */ 82*593dc095SDavid du Colombier void _Cdecl farfree( void *block ); 83*593dc095SDavid du Colombier void *_Cdecl farmalloc( unsigned long nbytes ); 84*593dc095SDavid du Colombier # else 857dd7cddfSDavid du Colombier # include <alloc.h> 86*593dc095SDavid du Colombier # endif 877dd7cddfSDavid du Colombier # else /* MSC or DJGPP */ 887dd7cddfSDavid du Colombier # include <malloc.h> 897dd7cddfSDavid du Colombier # endif 907dd7cddfSDavid du Colombier #endif 917dd7cddfSDavid du Colombier 927dd7cddfSDavid du Colombier #ifdef AMIGA 937dd7cddfSDavid du Colombier # define OS_CODE 0x01 947dd7cddfSDavid du Colombier #endif 957dd7cddfSDavid du Colombier 96*593dc095SDavid du Colombier #if defined(VAXC) || defined(VMS) 97*593dc095SDavid du Colombier # define OS_CODE 0x02 98*593dc095SDavid du Colombier # define F_OPEN(name, mode) \ 99*593dc095SDavid du Colombier fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") 100*593dc095SDavid du Colombier #endif 101*593dc095SDavid du Colombier 1027dd7cddfSDavid du Colombier #if defined(ATARI) || defined(atarist) 1037dd7cddfSDavid du Colombier # define OS_CODE 0x05 1047dd7cddfSDavid du Colombier #endif 1057dd7cddfSDavid du Colombier 106*593dc095SDavid du Colombier #ifdef OS2 107*593dc095SDavid du Colombier # define OS_CODE 0x06 1087dd7cddfSDavid du Colombier #endif 1097dd7cddfSDavid du Colombier 110*593dc095SDavid du Colombier #if defined(MACOS) || defined(TARGET_OS_MAC) 111*593dc095SDavid du Colombier # define OS_CODE 0x07 112*593dc095SDavid du Colombier # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os 113*593dc095SDavid du Colombier # include <unix.h> /* for fdopen */ 114*593dc095SDavid du Colombier # else 115*593dc095SDavid du Colombier # ifndef fdopen 116*593dc095SDavid du Colombier # define fdopen(fd,mode) NULL /* No fdopen() */ 117*593dc095SDavid du Colombier # endif 118*593dc095SDavid du Colombier # endif 1197dd7cddfSDavid du Colombier #endif 1207dd7cddfSDavid du Colombier 1217dd7cddfSDavid du Colombier #ifdef TOPS20 1227dd7cddfSDavid du Colombier # define OS_CODE 0x0a 1237dd7cddfSDavid du Colombier #endif 1247dd7cddfSDavid du Colombier 125*593dc095SDavid du Colombier #ifdef WIN32 126*593dc095SDavid du Colombier # ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ 127*593dc095SDavid du Colombier # define OS_CODE 0x0b 128*593dc095SDavid du Colombier # endif 129*593dc095SDavid du Colombier #endif 130*593dc095SDavid du Colombier 131*593dc095SDavid du Colombier #ifdef __50SERIES /* Prime/PRIMOS */ 132*593dc095SDavid du Colombier # define OS_CODE 0x0f 133*593dc095SDavid du Colombier #endif 134*593dc095SDavid du Colombier 1357dd7cddfSDavid du Colombier #if defined(_BEOS_) || defined(RISCOS) 1367dd7cddfSDavid du Colombier # define fdopen(fd,mode) NULL /* No fdopen() */ 1377dd7cddfSDavid du Colombier #endif 1387dd7cddfSDavid du Colombier 139*593dc095SDavid du Colombier #if (defined(_MSC_VER) && (_MSC_VER > 600)) 140*593dc095SDavid du Colombier # if defined(_WIN32_WCE) 141*593dc095SDavid du Colombier # define fdopen(fd,mode) NULL /* No fdopen() */ 142*593dc095SDavid du Colombier # ifndef _PTRDIFF_T_DEFINED 143*593dc095SDavid du Colombier typedef int ptrdiff_t; 144*593dc095SDavid du Colombier # define _PTRDIFF_T_DEFINED 145*593dc095SDavid du Colombier # endif 146*593dc095SDavid du Colombier # else 147*593dc095SDavid du Colombier # define fdopen(fd,type) _fdopen(fd,type) 148*593dc095SDavid du Colombier # endif 149*593dc095SDavid du Colombier #endif 150*593dc095SDavid du Colombier 151*593dc095SDavid du Colombier /* common defaults */ 1527dd7cddfSDavid du Colombier 1537dd7cddfSDavid du Colombier #ifndef OS_CODE 1547dd7cddfSDavid du Colombier # define OS_CODE 0x03 /* assume Unix */ 1557dd7cddfSDavid du Colombier #endif 1567dd7cddfSDavid du Colombier 157*593dc095SDavid du Colombier #ifndef F_OPEN 158*593dc095SDavid du Colombier # define F_OPEN(name, mode) fopen((name), (mode)) 1597dd7cddfSDavid du Colombier #endif 1607dd7cddfSDavid du Colombier 1617dd7cddfSDavid du Colombier /* functions */ 1627dd7cddfSDavid du Colombier 163*593dc095SDavid du Colombier #if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) 164*593dc095SDavid du Colombier # ifndef HAVE_VSNPRINTF 165*593dc095SDavid du Colombier # define HAVE_VSNPRINTF 166*593dc095SDavid du Colombier # endif 167*593dc095SDavid du Colombier #endif 168*593dc095SDavid du Colombier #if defined(__CYGWIN__) 169*593dc095SDavid du Colombier # ifndef HAVE_VSNPRINTF 170*593dc095SDavid du Colombier # define HAVE_VSNPRINTF 171*593dc095SDavid du Colombier # endif 172*593dc095SDavid du Colombier #endif 173*593dc095SDavid du Colombier #ifndef HAVE_VSNPRINTF 174*593dc095SDavid du Colombier # ifdef MSDOS 175*593dc095SDavid du Colombier /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), 176*593dc095SDavid du Colombier but for now we just assume it doesn't. */ 177*593dc095SDavid du Colombier # define NO_vsnprintf 178*593dc095SDavid du Colombier # endif 179*593dc095SDavid du Colombier # ifdef __TURBOC__ 180*593dc095SDavid du Colombier # define NO_vsnprintf 181*593dc095SDavid du Colombier # endif 182*593dc095SDavid du Colombier # ifdef WIN32 183*593dc095SDavid du Colombier /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ 184*593dc095SDavid du Colombier # if !defined(vsnprintf) && !defined(NO_vsnprintf) 185*593dc095SDavid du Colombier # define vsnprintf _vsnprintf 186*593dc095SDavid du Colombier # endif 187*593dc095SDavid du Colombier # endif 188*593dc095SDavid du Colombier # ifdef __SASC 189*593dc095SDavid du Colombier # define NO_vsnprintf 190*593dc095SDavid du Colombier # endif 191*593dc095SDavid du Colombier #endif 192*593dc095SDavid du Colombier #ifdef VMS 193*593dc095SDavid du Colombier # define NO_vsnprintf 194*593dc095SDavid du Colombier #endif 195*593dc095SDavid du Colombier 1967dd7cddfSDavid du Colombier #ifdef HAVE_STRERROR 197*593dc095SDavid du Colombier # ifndef VMS 1987dd7cddfSDavid du Colombier extern char *strerror OF((int)); 199*593dc095SDavid du Colombier # endif 2007dd7cddfSDavid du Colombier # define zstrerror(errnum) strerror(errnum) 2017dd7cddfSDavid du Colombier #else 2027dd7cddfSDavid du Colombier # define zstrerror(errnum) "" 2037dd7cddfSDavid du Colombier #endif 2047dd7cddfSDavid du Colombier 2057dd7cddfSDavid du Colombier #if defined(pyr) 2067dd7cddfSDavid du Colombier # define NO_MEMCPY 2077dd7cddfSDavid du Colombier #endif 208*593dc095SDavid du Colombier #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) 2097dd7cddfSDavid du Colombier /* Use our own functions for small and medium model with MSC <= 5.0. 2107dd7cddfSDavid du Colombier * You may have to use the same strategy for Borland C (untested). 211*593dc095SDavid du Colombier * The __SC__ check is for Symantec. 2127dd7cddfSDavid du Colombier */ 2137dd7cddfSDavid du Colombier # define NO_MEMCPY 2147dd7cddfSDavid du Colombier #endif 2157dd7cddfSDavid du Colombier #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) 2167dd7cddfSDavid du Colombier # define HAVE_MEMCPY 2177dd7cddfSDavid du Colombier #endif 2187dd7cddfSDavid du Colombier #ifdef HAVE_MEMCPY 2197dd7cddfSDavid du Colombier # ifdef SMALL_MEDIUM /* MSDOS small or medium model */ 2207dd7cddfSDavid du Colombier # define zmemcpy _fmemcpy 2217dd7cddfSDavid du Colombier # define zmemcmp _fmemcmp 2227dd7cddfSDavid du Colombier # define zmemzero(dest, len) _fmemset(dest, 0, len) 2237dd7cddfSDavid du Colombier # else 2247dd7cddfSDavid du Colombier # define zmemcpy memcpy 2257dd7cddfSDavid du Colombier # define zmemcmp memcmp 2267dd7cddfSDavid du Colombier # define zmemzero(dest, len) memset(dest, 0, len) 2277dd7cddfSDavid du Colombier # endif 2287dd7cddfSDavid du Colombier #else 229*593dc095SDavid du Colombier extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); 230*593dc095SDavid du Colombier extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); 2317dd7cddfSDavid du Colombier extern void zmemzero OF((Bytef* dest, uInt len)); 2327dd7cddfSDavid du Colombier #endif 2337dd7cddfSDavid du Colombier 2347dd7cddfSDavid du Colombier /* Diagnostic functions */ 2357dd7cddfSDavid du Colombier #ifdef DEBUG 2367dd7cddfSDavid du Colombier # include <stdio.h> 237*593dc095SDavid du Colombier extern int z_verbose; 2387dd7cddfSDavid du Colombier extern void z_error OF((char *m)); 2397dd7cddfSDavid du Colombier # define Assert(cond,msg) {if(!(cond)) z_error(msg);} 240*593dc095SDavid du Colombier # define Trace(x) {if (z_verbose>=0) fprintf x ;} 241*593dc095SDavid du Colombier # define Tracev(x) {if (z_verbose>0) fprintf x ;} 242*593dc095SDavid du Colombier # define Tracevv(x) {if (z_verbose>1) fprintf x ;} 243*593dc095SDavid du Colombier # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} 244*593dc095SDavid du Colombier # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} 2457dd7cddfSDavid du Colombier #else 2467dd7cddfSDavid du Colombier # define Assert(cond,msg) 2477dd7cddfSDavid du Colombier # define Trace(x) 2487dd7cddfSDavid du Colombier # define Tracev(x) 2497dd7cddfSDavid du Colombier # define Tracevv(x) 2507dd7cddfSDavid du Colombier # define Tracec(c,x) 2517dd7cddfSDavid du Colombier # define Tracecv(c,x) 2527dd7cddfSDavid du Colombier #endif 2537dd7cddfSDavid du Colombier 2547dd7cddfSDavid du Colombier 2557dd7cddfSDavid du Colombier voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); 2567dd7cddfSDavid du Colombier void zcfree OF((voidpf opaque, voidpf ptr)); 2577dd7cddfSDavid du Colombier 2587dd7cddfSDavid du Colombier #define ZALLOC(strm, items, size) \ 2597dd7cddfSDavid du Colombier (*((strm)->zalloc))((strm)->opaque, (items), (size)) 2607dd7cddfSDavid du Colombier #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) 2617dd7cddfSDavid du Colombier #define TRY_FREE(s, p) {if (p) ZFREE(s, p);} 2627dd7cddfSDavid du Colombier 263*593dc095SDavid du Colombier #endif /* ZUTIL_H */ 264