xref: /plan9/sys/src/cmd/gs/zlib/zutil.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
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