zlib 1.0.7
This commit is contained in:
		
							
								
								
									
										92
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,13 +1,103 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ChangeLog file for zlib
 | 
							ChangeLog file for zlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changes in 1.0.7 (20 Jan 1998)
 | 
				
			||||||
 | 
					- fix gzseek which was broken in write mode
 | 
				
			||||||
 | 
					- return error for gzseek to negative absolute position
 | 
				
			||||||
 | 
					- fix configure for Linux (Chun-Chung Chen)
 | 
				
			||||||
 | 
					- increase stack space for MSC (Tim Wegner)
 | 
				
			||||||
 | 
					- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
 | 
				
			||||||
 | 
					- define EXPORTVA for gzprintf (Gilles Vollant)
 | 
				
			||||||
 | 
					- added man page zlib.3 (Rick Rodgers)
 | 
				
			||||||
 | 
					- for contrib/untgz, fix makedir() and improve Makefile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- check gzseek in write mode in example.c
 | 
				
			||||||
 | 
					- allocate extra buffer for seeks only if gzseek is actually called
 | 
				
			||||||
 | 
					- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
 | 
				
			||||||
 | 
					- add inflateSyncPoint in zconf.h
 | 
				
			||||||
 | 
					- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changes in 1.0.6 (19 Jan 1998)
 | 
				
			||||||
 | 
					- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
 | 
				
			||||||
 | 
					  gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
 | 
				
			||||||
 | 
					- Fix a deflate bug occuring only with compression level 0 (thanks to
 | 
				
			||||||
 | 
					  Andy Buckler for finding this one).
 | 
				
			||||||
 | 
					- In minigzip, pass transparently also the first byte for .Z files.
 | 
				
			||||||
 | 
					- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
 | 
				
			||||||
 | 
					- check Z_FINISH in inflate (thanks to Marc Schluper)
 | 
				
			||||||
 | 
					- Implement deflateCopy (thanks to Adam Costello)
 | 
				
			||||||
 | 
					- make static libraries by default in configure, add --shared option.
 | 
				
			||||||
 | 
					- move MSDOS or Windows specific files to directory msdos
 | 
				
			||||||
 | 
					- suppress the notion of partial flush to simplify the interface
 | 
				
			||||||
 | 
					  (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
 | 
				
			||||||
 | 
					- suppress history buffer provided by application to simplify the interface
 | 
				
			||||||
 | 
					  (this feature was not implemented anyway in 1.0.4)
 | 
				
			||||||
 | 
					- next_in and avail_in must be initialized before calling inflateInit or
 | 
				
			||||||
 | 
					  inflateInit2
 | 
				
			||||||
 | 
					- add EXPORT in all exported functions (for Windows DLL)
 | 
				
			||||||
 | 
					- added Makefile.nt (thanks to Stephen Williams)
 | 
				
			||||||
 | 
					- added the unsupported "contrib" directory:
 | 
				
			||||||
 | 
					   contrib/asm386/ by Gilles Vollant <info@winimage.com>
 | 
				
			||||||
 | 
						386 asm code replacing longest_match().
 | 
				
			||||||
 | 
					   contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
				
			||||||
 | 
					        A C++ I/O streams interface to the zlib gz* functions
 | 
				
			||||||
 | 
					   contrib/iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
				
			||||||
 | 
						Another C++ I/O streams interface
 | 
				
			||||||
 | 
					   contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
				
			||||||
 | 
						A very simple tar.gz file extractor using zlib
 | 
				
			||||||
 | 
					   contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
				
			||||||
 | 
					        How to use compress(), uncompress() and the gz* functions from VB.
 | 
				
			||||||
 | 
					- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
 | 
				
			||||||
 | 
					  level) in minigzip (thanks to Tom Lane)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- use const for rommable constants in deflate
 | 
				
			||||||
 | 
					- added test for gzseek and gztell in example.c
 | 
				
			||||||
 | 
					- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
 | 
				
			||||||
 | 
					- add undocumented function zError to convert error code to string
 | 
				
			||||||
 | 
					  (for Tim Smithers)
 | 
				
			||||||
 | 
					- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
 | 
				
			||||||
 | 
					- Use default memcpy for Symantec MSDOS compiler.
 | 
				
			||||||
 | 
					- Add EXPORT keyword for check_func (needed for Windows DLL)
 | 
				
			||||||
 | 
					- add current directory to LD_LIBRARY_PATH for "make test"
 | 
				
			||||||
 | 
					- create also a link for libz.so.1
 | 
				
			||||||
 | 
					- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
 | 
				
			||||||
 | 
					- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
 | 
				
			||||||
 | 
					- added -soname for Linux in configure (Chun-Chung Chen,
 | 
				
			||||||
 | 
					- assign numbers to the exported functions in zlib.def (for Windows DLL)
 | 
				
			||||||
 | 
					- add advice in zlib.h for best usage of deflateSetDictionary
 | 
				
			||||||
 | 
					- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
 | 
				
			||||||
 | 
					- allow compilation with ANSI keywords only enabled for TurboC in large model
 | 
				
			||||||
 | 
					- avoid "versionString"[0] (Borland bug)
 | 
				
			||||||
 | 
					- add NEED_DUMMY_RETURN for Borland
 | 
				
			||||||
 | 
					- use variable z_verbose for tracing in debug mode (Peter Deutsch).
 | 
				
			||||||
 | 
					- allow compilation with CC
 | 
				
			||||||
 | 
					- defined STDC for OS/2 (David Charlap)	
 | 
				
			||||||
 | 
					- limit external names to 8 chars for MVS (Thomas Lund)
 | 
				
			||||||
 | 
					- in minigzip.c, use static buffers only for 16-bit systems
 | 
				
			||||||
 | 
					- fix suffix check for "minigzip -d foo.gz"
 | 
				
			||||||
 | 
					- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
 | 
				
			||||||
 | 
					- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
 | 
				
			||||||
 | 
					- added makelcc.bat for lcc-win32 (Tom St Denis)
 | 
				
			||||||
 | 
					- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
 | 
				
			||||||
 | 
					- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
 | 
				
			||||||
 | 
					- check for unistd.h in configure (for off_t)
 | 
				
			||||||
 | 
					- use Tracev instead of Trace in infblock.c
 | 
				
			||||||
 | 
					- remove useless check parameter in inflate_blocks_free
 | 
				
			||||||
 | 
					- avoid useless assignment of s->check to itself in inflate_blocks_new
 | 
				
			||||||
 | 
					- do not flush twice in gzclose (thanks to Ken Raeburn)
 | 
				
			||||||
 | 
					- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
 | 
				
			||||||
 | 
					- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
 | 
				
			||||||
 | 
					- work around buggy fclose on pipes for HP/UX
 | 
				
			||||||
 | 
					- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
 | 
				
			||||||
 | 
					- fix configure if CC is already equal to gcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Changes in 1.0.5 (3 Jan 98)
 | 
					Changes in 1.0.5 (3 Jan 98)
 | 
				
			||||||
- Fix inflate to terminate gracefully when fed corrupted or invalid data
 | 
					- Fix inflate to terminate gracefully when fed corrupted or invalid data
 | 
				
			||||||
- Use const for rommable constants in inflate
 | 
					- Use const for rommable constants in inflate
 | 
				
			||||||
- Eliminate memory leaks on error conditions in inflate
 | 
					- Eliminate memory leaks on error conditions in inflate
 | 
				
			||||||
- Removed some vestigial code in inflate
 | 
					- Removed some vestigial code in inflate
 | 
				
			||||||
- Update web address in README
 | 
					- Update web address in README
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
Changes in 1.0.4 (24 Jul 96)
 | 
					Changes in 1.0.4 (24 Jul 96)
 | 
				
			||||||
- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
 | 
					- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
 | 
				
			||||||
  bit, so the decompressor could decompress all the correct data but went
 | 
					  bit, so the decompressor could decompress all the correct data but went
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										61
									
								
								INDEX
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								INDEX
									
									
									
									
									
								
							@@ -1,22 +1,28 @@
 | 
				
			|||||||
ChangeLog	history of changes
 | 
					ChangeLog		history of changes
 | 
				
			||||||
INDEX		this file
 | 
					INDEX			this file
 | 
				
			||||||
Make_vms.com	script for Vax/VMS
 | 
					Make_vms.com		script for Vax/VMS
 | 
				
			||||||
Makefile	makefile for Unix (generated by configure)
 | 
					Makefile		makefile for Unix (generated by configure)
 | 
				
			||||||
Makefile.b32	makefile for Borland C++   32-bit
 | 
					Makefile.in		makefile for Unix (template for configure)
 | 
				
			||||||
Makefile.bor	makefile for Borland C/C++ 16-bit
 | 
					Makefile.msc		makefile for Microsoft C 16-bit
 | 
				
			||||||
Makefile.dj2	makefile for DJGPP 2.x
 | 
					Makefile.riscos 	makefile for RISCOS
 | 
				
			||||||
Makefile.in	makefile for Unix (template for configure)
 | 
					Makefile.sas		makefile for Amiga SAS/C
 | 
				
			||||||
Makefile.msc	makefile for Microsoft C 16-bit
 | 
					README			guess what
 | 
				
			||||||
Makefile.riscos makefile for RISCOS
 | 
					algorithm.txt		description of the (de)compression algorithm
 | 
				
			||||||
Makefile.sas	makefile for Amiga SAS/C
 | 
					configure		configure script for Unix
 | 
				
			||||||
Makefile.tc	makefile for Turbo C
 | 
					descrip.mms		makefile for Vax/VMS
 | 
				
			||||||
Makefile.wat	makefile for Watcom C
 | 
					zlib.3			mini man page for zlib (volunteers to write full
 | 
				
			||||||
README		guess what
 | 
								man pages from zlib.h welcome. write to jloup@gzip.org)
 | 
				
			||||||
algorithm.doc	description of the compression & decompression algorithms
 | 
					
 | 
				
			||||||
configure	configure script for Unix
 | 
					msdos/Makefile.b32	makefile for Borland C++   32-bit
 | 
				
			||||||
descrip.mms	makefile for Vax/VMS
 | 
					msdos/Makefile.bor	makefile for Borland C/C++ 16-bit
 | 
				
			||||||
zlib.def        definition file for Windows DLL
 | 
					msdos/Makefile.dj2	makefile for DJGPP 2.x
 | 
				
			||||||
zlib.rc         definition file for Windows DLL
 | 
					msdos/Makefile.tc	makefile for Turbo C
 | 
				
			||||||
 | 
					msdos/Makefile.wat	makefile for Watcom C
 | 
				
			||||||
 | 
					msdos/zlib.def        	definition file for Windows DLL
 | 
				
			||||||
 | 
					msdos/zlib.rc         	definition file for Windows DLL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nt/Makefile.nt		makefile for Windows NT
 | 
				
			||||||
 | 
					nt/zlib.dnt		definition file for Windows NT DLL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		zlib public header files (must be kept):
 | 
							zlib public header files (must be kept):
 | 
				
			||||||
@@ -49,3 +55,20 @@ zutil.h
 | 
				
			|||||||
		source files for sample programs:
 | 
							source files for sample programs:
 | 
				
			||||||
example.c
 | 
					example.c
 | 
				
			||||||
minigzip.c
 | 
					minigzip.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							unsupported contribution by third parties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contrib/asm386/ by Gilles Vollant <info@winimage.com>
 | 
				
			||||||
 | 
						386 asm code replacing longest_match().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
				
			||||||
 | 
					        A C++ I/O streams interface to the zlib gz* functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contrib/iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
				
			||||||
 | 
						Another C++ I/O streams interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
				
			||||||
 | 
						A very simple tar.gz extractor using zlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
				
			||||||
 | 
					        How to use compress(), uncompress() and the gz* functions from VB.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								Makefile
									
									
									
									
									
								
							@@ -22,12 +22,14 @@ CFLAGS=-O
 | 
				
			|||||||
LDFLAGS=-L. -lz
 | 
					LDFLAGS=-L. -lz
 | 
				
			||||||
LDSHARED=$(CC)
 | 
					LDSHARED=$(CC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VER=1.0.5
 | 
					VER=1.0.7
 | 
				
			||||||
LIBS=libz.a
 | 
					LIBS=libz.a
 | 
				
			||||||
 | 
					SHAREDLIB=libz.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AR=ar rc
 | 
					AR=ar rc
 | 
				
			||||||
RANLIB=ranlib
 | 
					RANLIB=ranlib
 | 
				
			||||||
TAR=tar
 | 
					TAR=tar
 | 
				
			||||||
 | 
					SHELL=/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
prefix=/usr/local
 | 
					prefix=/usr/local
 | 
				
			||||||
exec_prefix = $(prefix)
 | 
					exec_prefix = $(prefix)
 | 
				
			||||||
@@ -37,22 +39,30 @@ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_OBJS = example.o minigzip.o
 | 
					TEST_OBJS = example.o minigzip.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
 | 
					DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
 | 
				
			||||||
	    zlib.def zlib.rc algorithm.doc  *.[ch]
 | 
					  algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
 | 
				
			||||||
 | 
					  nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
 | 
				
			||||||
 | 
					  contrib/asm386/*.asm contrib/asm386/*.c \
 | 
				
			||||||
 | 
					  contrib/asm386/*.bat contrib/asm386/*.mak contrib/iostream/*.cpp \
 | 
				
			||||||
 | 
					  contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
 | 
				
			||||||
 | 
					  contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: example minigzip
 | 
					all: example minigzip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test: all
 | 
					test: all
 | 
				
			||||||
	./example
 | 
						@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
 | 
				
			||||||
	echo hello world | ./minigzip | ./minigzip -d 
 | 
						./example ; \
 | 
				
			||||||
 | 
						echo hello world | ./minigzip | ./minigzip -d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libz.a: $(OBJS)
 | 
					libz.a: $(OBJS)
 | 
				
			||||||
	$(AR) $@ $(OBJS)
 | 
						$(AR) $@ $(OBJS)
 | 
				
			||||||
	-@ ($(RANLIB) $@ || true) 2>/dev/null
 | 
						-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libz.so.$(VER): $(OBJS)
 | 
					$(SHAREDLIB).$(VER): $(OBJS)
 | 
				
			||||||
	$(LDSHARED) -o $@ $(OBJS)
 | 
						$(LDSHARED) -o $@ $(OBJS)
 | 
				
			||||||
	rm -f libz.so; ln -s $@ libz.so
 | 
						rm -f $(SHAREDLIB) $(SHAREDLIB).1
 | 
				
			||||||
 | 
						ln -s $@ $(SHAREDLIB)
 | 
				
			||||||
 | 
						ln -s $@ $(SHAREDLIB).1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example: example.o $(LIBS)
 | 
					example: example.o $(LIBS)
 | 
				
			||||||
	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
						$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
				
			||||||
@@ -68,22 +78,28 @@ install: $(LIBS)
 | 
				
			|||||||
	cp $(LIBS) $(exec_prefix)/lib
 | 
						cp $(LIBS) $(exec_prefix)/lib
 | 
				
			||||||
	cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
						cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
				
			||||||
	-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
						-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
				
			||||||
	cd $(exec_prefix)/lib; if test -f libz.so.$(VER); then \
 | 
						cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \
 | 
				
			||||||
	  ln -s libz.so.$(VER) libz.so; \
 | 
						  rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
 | 
				
			||||||
 | 
						  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
 | 
				
			||||||
 | 
						  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
 | 
				
			||||||
 | 
						  (ldconfig || true)  >/dev/null 2>&1; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
					# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
				
			||||||
 | 
					# ldconfig is for Linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uninstall:
 | 
					uninstall:
 | 
				
			||||||
	cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
						cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
				
			||||||
	if test -f libz.so; then \
 | 
						if test -f $(SHAREDLIB); then \
 | 
				
			||||||
	 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
						 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
				
			||||||
	 rm -f libz.so.$$v libz.so; \
 | 
						 rm -f $(SHAREDLIB).$$v $(SHAREDLIB); \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	cd $(prefix)/include; rm -f zlib.h zconf.h
 | 
						cdz $(prefix)/include; rm -f zlib.h zconf.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
						rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean:	clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zip:
 | 
					zip:
 | 
				
			||||||
	mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
						mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
				
			||||||
	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
						v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								Makefile.in
									
									
									
									
									
								
							@@ -22,12 +22,14 @@ CFLAGS=-O
 | 
				
			|||||||
LDFLAGS=-L. -lz
 | 
					LDFLAGS=-L. -lz
 | 
				
			||||||
LDSHARED=$(CC)
 | 
					LDSHARED=$(CC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VER=1.0.5
 | 
					VER=1.0.7
 | 
				
			||||||
LIBS=libz.a
 | 
					LIBS=libz.a
 | 
				
			||||||
 | 
					SHAREDLIB=libz.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AR=ar rc
 | 
					AR=ar rc
 | 
				
			||||||
RANLIB=ranlib
 | 
					RANLIB=ranlib
 | 
				
			||||||
TAR=tar
 | 
					TAR=tar
 | 
				
			||||||
 | 
					SHELL=/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
prefix=/usr/local
 | 
					prefix=/usr/local
 | 
				
			||||||
exec_prefix = $(prefix)
 | 
					exec_prefix = $(prefix)
 | 
				
			||||||
@@ -37,22 +39,30 @@ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_OBJS = example.o minigzip.o
 | 
					TEST_OBJS = example.o minigzip.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
 | 
					DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
 | 
				
			||||||
	    zlib.def zlib.rc algorithm.doc  *.[ch]
 | 
					  algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
 | 
				
			||||||
 | 
					  nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
 | 
				
			||||||
 | 
					  contrib/asm386/*.asm contrib/asm386/*.c \
 | 
				
			||||||
 | 
					  contrib/asm386/*.bat contrib/asm386/*.mak contrib/iostream/*.cpp \
 | 
				
			||||||
 | 
					  contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
 | 
				
			||||||
 | 
					  contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: example minigzip
 | 
					all: example minigzip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test: all
 | 
					test: all
 | 
				
			||||||
	./example
 | 
						@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
 | 
				
			||||||
	echo hello world | ./minigzip | ./minigzip -d 
 | 
						./example ; \
 | 
				
			||||||
 | 
						echo hello world | ./minigzip | ./minigzip -d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libz.a: $(OBJS)
 | 
					libz.a: $(OBJS)
 | 
				
			||||||
	$(AR) $@ $(OBJS)
 | 
						$(AR) $@ $(OBJS)
 | 
				
			||||||
	-@ ($(RANLIB) $@ || true) 2>/dev/null
 | 
						-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libz.so.$(VER): $(OBJS)
 | 
					$(SHAREDLIB).$(VER): $(OBJS)
 | 
				
			||||||
	$(LDSHARED) -o $@ $(OBJS)
 | 
						$(LDSHARED) -o $@ $(OBJS)
 | 
				
			||||||
	rm -f libz.so; ln -s $@ libz.so
 | 
						rm -f $(SHAREDLIB) $(SHAREDLIB).1
 | 
				
			||||||
 | 
						ln -s $@ $(SHAREDLIB)
 | 
				
			||||||
 | 
						ln -s $@ $(SHAREDLIB).1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example: example.o $(LIBS)
 | 
					example: example.o $(LIBS)
 | 
				
			||||||
	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
						$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
				
			||||||
@@ -68,22 +78,28 @@ install: $(LIBS)
 | 
				
			|||||||
	cp $(LIBS) $(exec_prefix)/lib
 | 
						cp $(LIBS) $(exec_prefix)/lib
 | 
				
			||||||
	cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
						cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
				
			||||||
	-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
						-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
				
			||||||
	cd $(exec_prefix)/lib; if test -f libz.so.$(VER); then \
 | 
						cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \
 | 
				
			||||||
	  ln -s libz.so.$(VER) libz.so; \
 | 
						  rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
 | 
				
			||||||
 | 
						  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
 | 
				
			||||||
 | 
						  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
 | 
				
			||||||
 | 
						  (ldconfig || true)  >/dev/null 2>&1; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
					# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
				
			||||||
 | 
					# ldconfig is for Linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uninstall:
 | 
					uninstall:
 | 
				
			||||||
	cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
						cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
				
			||||||
	if test -f libz.so; then \
 | 
						if test -f $(SHAREDLIB); then \
 | 
				
			||||||
	 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
						 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
				
			||||||
	 rm -f libz.so.$$v libz.so; \
 | 
						 rm -f $(SHAREDLIB).$$v $(SHAREDLIB); \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	cd $(prefix)/include; rm -f zlib.h zconf.h
 | 
						cdz $(prefix)/include; rm -f zlib.h zconf.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
						rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean:	clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zip:
 | 
					zip:
 | 
				
			||||||
	mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
						mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
				
			||||||
	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
						v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										56
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								README
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
zlib 1.0.5 is a general purpose data compression library.  All the code
 | 
					zlib 1.0.7 is a general purpose data compression library.  All the code
 | 
				
			||||||
is reentrant (thread safe).  The data format used by the zlib library
 | 
					is reentrant (thread safe).  The data format used by the zlib library
 | 
				
			||||||
is described by RFCs (Request for Comments) 1950 to 1952 in the files 
 | 
					is described by RFCs (Request for Comments) 1950 to 1952 in the files 
 | 
				
			||||||
ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
 | 
					ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
 | 
				
			||||||
@@ -19,27 +19,54 @@ makefiles such as Makefile.msc; for VMS, use Make_vms.com or descrip.mms.
 | 
				
			|||||||
Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov> or,
 | 
					Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov> or,
 | 
				
			||||||
if this fails, to the addresses given below in the Copyright section.
 | 
					if this fails, to the addresses given below in the Copyright section.
 | 
				
			||||||
The zlib home page is http://www.cdrom.com/pub/infozip/zlib/
 | 
					The zlib home page is http://www.cdrom.com/pub/infozip/zlib/
 | 
				
			||||||
 | 
					The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/
 | 
				
			||||||
 | 
					Mark Nelson wrote an article about zlib for the Jan. 1997 issue of 
 | 
				
			||||||
 | 
					Dr. Dobb's Journal; a copy of the article is available in
 | 
				
			||||||
 | 
					http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The changes made in version 1.0.5 are documented in the file ChangeLog.
 | 
					The changes made in version 1.0.7 are documented in the file ChangeLog.
 | 
				
			||||||
The main changes since 1.0.4 are:
 | 
					The main changes since 1.0.6 are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fix inflate to terminate gracefully when fed corrupted or invalid data
 | 
					- fix gzseek which was broken in write mode
 | 
				
			||||||
- Use const for rommable constants in inflate
 | 
					- return error for gzseek to negative absolute position
 | 
				
			||||||
 | 
					- fix configure for Linux (Chun-Chung Chen)
 | 
				
			||||||
 | 
					- increase stack space for MSC (Tim Wegner)
 | 
				
			||||||
 | 
					- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
 | 
				
			||||||
 | 
					- define EXPORTVA for gzprintf (Gilles Vollant)
 | 
				
			||||||
 | 
					- added mini man page zlib.3 (Rick Rodgers) [volunteers to write full
 | 
				
			||||||
 | 
					  man pages from zlib.h most welcome. write to jloup@gzip.org]
 | 
				
			||||||
 | 
					- for contrib/untgz, fix makedir() and improve Makefile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unsupported third party contributions are provided in directory "contrib".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A Java implementation of zlib is available in the Java Development Kit 1.1
 | 
				
			||||||
 | 
					http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
 | 
				
			||||||
 | 
					See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
 | 
					A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
 | 
				
			||||||
is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
 | 
					is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
 | 
				
			||||||
ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
 | 
					ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A Python interface to zlib written by A.M. Kuchling <amk@magnet.com>
 | 
				
			||||||
 | 
					is available from the Python Software Association sites, such as:
 | 
				
			||||||
 | 
					ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Notes for some targets:
 | 
					Notes for some targets:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- For Turbo C the small model is supported only with reduced performance to
 | 
					- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
 | 
				
			||||||
  avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
 | 
					  and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
 | 
				
			||||||
 | 
					  The zlib DLL support was initially done by Alessandro Iacopetti and is
 | 
				
			||||||
 | 
					  now maintained by Gilles Vollant <info@winimage.com>. Check the zlib DLL
 | 
				
			||||||
 | 
					  home page at http://www.winimage.com/zLibDll
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- For 64-bit Iris, deflate.c must be compiled without any optimization.
 | 
					  From Visual Basic, you can call the DLL functions which do not take
 | 
				
			||||||
 | 
					  a structure as argument: compress, uncompress and all gz* functions.
 | 
				
			||||||
 | 
					  See contrib/visual-basic.txt for more information.
 | 
				
			||||||
 | 
					  I don't know how to handle structures in Visual Basic, sorry.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- For 64-bit Irix, deflate.c must be compiled without any optimization.
 | 
				
			||||||
  With -O, one libpng test fails. The test works in 32 bit mode (with
 | 
					  With -O, one libpng test fails. The test works in 32 bit mode (with
 | 
				
			||||||
  the -32 compiler flag). The compiler bug has been reported to SGI.
 | 
					  the -n32 compiler flag). The compiler bug has been reported to SGI.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1   
 | 
					- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1   
 | 
				
			||||||
  it works when compiled with cc.
 | 
					  it works when compiled with cc.
 | 
				
			||||||
@@ -47,14 +74,11 @@ Notes for some targets:
 | 
				
			|||||||
- zlib doesn't work on HP-UX 9.05 with one cc compiler (the one not
 | 
					- zlib doesn't work on HP-UX 9.05 with one cc compiler (the one not
 | 
				
			||||||
  accepting the -O option). It works with the other cc compiler.
 | 
					  accepting the -O option). It works with the other cc compiler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
 | 
					 | 
				
			||||||
  and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
 | 
					 | 
				
			||||||
  For help on building a zlib DLL, contact Alessandro Iacopetti
 | 
					 | 
				
			||||||
  <iaco@email.alessandria.alpcom.it>  http://lisa.unial.it/iaco ,
 | 
					 | 
				
			||||||
  or contact Brad Clarke <bclarke@cyberus.ca>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- gzdopen is not supported on RISCOS
 | 
					- gzdopen is not supported on RISCOS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- For Turbo C the small model is supported only with reduced performance to
 | 
				
			||||||
 | 
					  avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Acknowledgments:
 | 
					Acknowledgments:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,7 +108,7 @@ Copyright notice:
 | 
				
			|||||||
  3. This notice may not be removed or altered from any source distribution.
 | 
					  3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Jean-loup Gailly        Mark Adler
 | 
					  Jean-loup Gailly        Mark Adler
 | 
				
			||||||
  gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
					  jloup@gzip.org          madler@alumni.caltech.edu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you use the zlib library in a product, we would appreciate *not*
 | 
					If you use the zlib library in a product, we would appreciate *not*
 | 
				
			||||||
receiving lengthy legal documents to sign. The sources are provided
 | 
					receiving lengthy legal documents to sign. The sources are provided
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* adler32.c -- compute the Adler-32 checksum of a data stream
 | 
					/* adler32.c -- compute the Adler-32 checksum of a data stream
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: adler32.c,v 1.10 1996/05/22 11:52:18 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
#define DO16(buf)   DO8(buf,0); DO8(buf,8);
 | 
					#define DO16(buf)   DO8(buf,0); DO8(buf,8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
uLong adler32(adler, buf, len)
 | 
					uLong EXPORT adler32(adler, buf, len)
 | 
				
			||||||
    uLong adler;
 | 
					    uLong adler;
 | 
				
			||||||
    const Bytef *buf;
 | 
					    const Bytef *buf;
 | 
				
			||||||
    uInt len;
 | 
					    uInt len;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
1. Compression algorithm (deflate)
 | 
					1. Compression algorithm (deflate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The deflation algorithm used by zlib (also zip and gzip) is a variation of
 | 
					The deflation algorithm used by gzip (also zip and zlib) is a variation of
 | 
				
			||||||
LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
 | 
					LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
 | 
				
			||||||
the input data.  The second occurrence of a string is replaced by a
 | 
					the input data.  The second occurrence of a string is replaced by a
 | 
				
			||||||
pointer to the previous string, in the form of a pair (distance,
 | 
					pointer to the previous string, in the form of a pair (distance,
 | 
				
			||||||
@@ -35,12 +35,12 @@ parameter of deflateInit). So deflate() does not always find the longest
 | 
				
			|||||||
possible match but generally finds a match which is long enough.
 | 
					possible match but generally finds a match which is long enough.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
deflate() also defers the selection of matches with a lazy evaluation
 | 
					deflate() also defers the selection of matches with a lazy evaluation
 | 
				
			||||||
mechanism. After a match of length N has been found, deflate() searches for a
 | 
					mechanism. After a match of length N has been found, deflate() searches for
 | 
				
			||||||
longer match at the next input byte. If a longer match is found, the
 | 
					a longer match at the next input byte. If a longer match is found, the
 | 
				
			||||||
previous match is truncated to a length of one (thus producing a single
 | 
					previous match is truncated to a length of one (thus producing a single
 | 
				
			||||||
literal byte) and the longer match is emitted afterwards.  Otherwise,
 | 
					literal byte) and the process of lazy evaluation begins again. Otherwise,
 | 
				
			||||||
the original match is kept, and the next match search is attempted only
 | 
					the original match is kept, and the next match search is attempted only N
 | 
				
			||||||
N steps later.
 | 
					steps later.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The lazy match evaluation is also subject to a runtime parameter. If
 | 
					The lazy match evaluation is also subject to a runtime parameter. If
 | 
				
			||||||
the current match is long enough, deflate() reduces the search for a longer
 | 
					the current match is long enough, deflate() reduces the search for a longer
 | 
				
			||||||
@@ -57,6 +57,8 @@ but saves time since there are both fewer insertions and fewer searches.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
2. Decompression algorithm (inflate)
 | 
					2. Decompression algorithm (inflate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2.1 Introduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The real question is, given a Huffman tree, how to decode fast.  The most
 | 
					The real question is, given a Huffman tree, how to decode fast.  The most
 | 
				
			||||||
important realization is that shorter codes are much more common than
 | 
					important realization is that shorter codes are much more common than
 | 
				
			||||||
longer codes, so pay attention to decoding the short codes fast, and let
 | 
					longer codes, so pay attention to decoding the short codes fast, and let
 | 
				
			||||||
@@ -91,8 +93,114 @@ interesting to see if optimizing the first level table for other
 | 
				
			|||||||
applications gave values within a bit or two of the flat code size.
 | 
					applications gave values within a bit or two of the flat code size.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2.2 More details on the inflate table lookup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ok, you want to know what this cleverly obfuscated inflate tree actually  
 | 
				
			||||||
 | 
					looks like.  You are correct that it's not a Huffman tree.  It is simply a  
 | 
				
			||||||
 | 
					lookup table for the first, let's say, nine bits of a Huffman symbol.  The  
 | 
				
			||||||
 | 
					symbol could be as short as one bit or as long as 15 bits.  If a particular  
 | 
				
			||||||
 | 
					symbol is shorter than nine bits, then that symbol's translation is duplicated
 | 
				
			||||||
 | 
					in all those entries that start with that symbol's bits.  For example, if the  
 | 
				
			||||||
 | 
					symbol is four bits, then it's duplicated 32 times in a nine-bit table.  If a  
 | 
				
			||||||
 | 
					symbol is nine bits long, it appears in the table once.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the symbol is longer than nine bits, then that entry in the table points  
 | 
				
			||||||
 | 
					to another similar table for the remaining bits.  Again, there are duplicated  
 | 
				
			||||||
 | 
					entries as needed.  The idea is that most of the time the symbol will be short
 | 
				
			||||||
 | 
					and there will only be one table look up.  (That's whole idea behind data  
 | 
				
			||||||
 | 
					compression in the first place.)  For the less frequent long symbols, there  
 | 
				
			||||||
 | 
					will be two lookups.  If you had a compression method with really long  
 | 
				
			||||||
 | 
					symbols, you could have as many levels of lookups as is efficient.  For  
 | 
				
			||||||
 | 
					inflate, two is enough.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					So a table entry either points to another table (in which case nine bits in  
 | 
				
			||||||
 | 
					the above example are gobbled), or it contains the translation for the symbol  
 | 
				
			||||||
 | 
					and the number of bits to gobble.  Then you start again with the next  
 | 
				
			||||||
 | 
					ungobbled bit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You may wonder: why not just have one lookup table for how ever many bits the  
 | 
				
			||||||
 | 
					longest symbol is?  The reason is that if you do that, you end up spending  
 | 
				
			||||||
 | 
					more time filling in duplicate symbol entries than you do actually decoding.   
 | 
				
			||||||
 | 
					At least for deflate's output that generates new trees every several 10's of  
 | 
				
			||||||
 | 
					kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code  
 | 
				
			||||||
 | 
					would take too long if you're only decoding several thousand symbols.  At the  
 | 
				
			||||||
 | 
					other extreme, you could make a new table for every bit in the code.  In fact,
 | 
				
			||||||
 | 
					that's essentially a Huffman tree.  But then you spend two much time  
 | 
				
			||||||
 | 
					traversing the tree while decoding, even for short symbols.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					So the number of bits for the first lookup table is a trade of the time to  
 | 
				
			||||||
 | 
					fill out the table vs. the time spent looking at the second level and above of
 | 
				
			||||||
 | 
					the table.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is an example, scaled down:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The code being decoded, with 10 symbols, from 1 to 6 bits long:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A: 0
 | 
				
			||||||
 | 
					B: 10
 | 
				
			||||||
 | 
					C: 1100
 | 
				
			||||||
 | 
					D: 11010
 | 
				
			||||||
 | 
					E: 11011
 | 
				
			||||||
 | 
					F: 11100
 | 
				
			||||||
 | 
					G: 11101
 | 
				
			||||||
 | 
					H: 11110
 | 
				
			||||||
 | 
					I: 111110
 | 
				
			||||||
 | 
					J: 111111
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Let's make the first table three bits long (eight entries):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					000: A,1
 | 
				
			||||||
 | 
					001: A,1
 | 
				
			||||||
 | 
					010: A,1
 | 
				
			||||||
 | 
					011: A,1
 | 
				
			||||||
 | 
					100: B,2
 | 
				
			||||||
 | 
					101: B,2
 | 
				
			||||||
 | 
					110: -> table X (gobble 3 bits)
 | 
				
			||||||
 | 
					111: -> table Y (gobble 3 bits)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Each entry is what the bits decode to and how many bits that is, i.e. how  
 | 
				
			||||||
 | 
					many bits to gobble.  Or the entry points to another table, with the number of
 | 
				
			||||||
 | 
					bits to gobble implicit in the size of the table.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Table X is two bits long since the longest code starting with 110 is five bits
 | 
				
			||||||
 | 
					long:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					00: C,1
 | 
				
			||||||
 | 
					01: C,1
 | 
				
			||||||
 | 
					10: D,2
 | 
				
			||||||
 | 
					11: E,2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Table Y is three bits long since the longest code starting with 111 is six  
 | 
				
			||||||
 | 
					bits long:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					000: F,2
 | 
				
			||||||
 | 
					001: F,2
 | 
				
			||||||
 | 
					010: G,2
 | 
				
			||||||
 | 
					011: G,2
 | 
				
			||||||
 | 
					100: H,2
 | 
				
			||||||
 | 
					101: H,2
 | 
				
			||||||
 | 
					110: I,3
 | 
				
			||||||
 | 
					111: J,3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					So what we have here are three tables with a total of 20 entries that had to  
 | 
				
			||||||
 | 
					be constructed.  That's compared to 64 entries for a single table.  Or  
 | 
				
			||||||
 | 
					compared to 16 entries for a Huffman tree (six two entry tables and one four  
 | 
				
			||||||
 | 
					entry table).  Assuming that the code ideally represents the probability of  
 | 
				
			||||||
 | 
					the symbols, it takes on the average 1.25 lookups per symbol.  That's compared
 | 
				
			||||||
 | 
					to one lookup for the single table, or 1.66 lookups per symbol for the  
 | 
				
			||||||
 | 
					Huffman tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There, I think that gives you a picture of what's going on.  For inflate, the  
 | 
				
			||||||
 | 
					meaning of a particular symbol is often more than just a letter.  It can be a  
 | 
				
			||||||
 | 
					byte (a "literal"), or it can be either a length or a distance which  
 | 
				
			||||||
 | 
					indicates a base value and a number of bits to fetch after the code that is  
 | 
				
			||||||
 | 
					added to the base value.  Or it might be the special end-of-block code.  The  
 | 
				
			||||||
 | 
					data structures created in inftrees.c try to encode all that information  
 | 
				
			||||||
 | 
					compactly in the tables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jean-loup Gailly        Mark Adler
 | 
					Jean-loup Gailly        Mark Adler
 | 
				
			||||||
gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
					jloup@gzip.org          madler@alumni.caltech.edu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
References:
 | 
					References:
 | 
				
			||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* compress.c -- compress a memory buffer
 | 
					/* compress.c -- compress a memory buffer
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: compress.c,v 1.10 1996/05/23 16:51:12 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
					   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
				
			||||||
   buffer.
 | 
					   buffer.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int compress (dest, destLen, source, sourceLen)
 | 
					int EXPORT compress (dest, destLen, source, sourceLen)
 | 
				
			||||||
    Bytef *dest;
 | 
					    Bytef *dest;
 | 
				
			||||||
    uLongf *destLen;
 | 
					    uLongf *destLen;
 | 
				
			||||||
    const Bytef *source;
 | 
					    const Bytef *source;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										69
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -4,6 +4,10 @@
 | 
				
			|||||||
# of if you need special compiler, flags or install directory.
 | 
					# of if you need special compiler, flags or install directory.
 | 
				
			||||||
# Otherwise, you can just use directly "make test; make install"
 | 
					# Otherwise, you can just use directly "make test; make install"
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					# To create a shared library, use "configure --shared"; by default a static
 | 
				
			||||||
 | 
					# library is created. If the primitive shared library support provided here
 | 
				
			||||||
 | 
					# does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
# To impose specific compiler or flags or install directory, use for example:
 | 
					# To impose specific compiler or flags or install directory, use for example:
 | 
				
			||||||
#    prefix=$HOME CC=cc CFLAGS="-O4" ./configure
 | 
					#    prefix=$HOME CC=cc CFLAGS="-O4" ./configure
 | 
				
			||||||
# or for csh/tcsh users:
 | 
					# or for csh/tcsh users:
 | 
				
			||||||
@@ -11,22 +15,33 @@
 | 
				
			|||||||
# LDSHARED is the command to be used to create a shared library
 | 
					# LDSHARED is the command to be used to create a shared library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBS=libz.a
 | 
					LIBS=libz.a
 | 
				
			||||||
 | 
					SHAREDLIB=libz.so
 | 
				
			||||||
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
 | 
					VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
 | 
				
			||||||
AR=${AR-"ar rc"}
 | 
					AR=${AR-"ar rc"}
 | 
				
			||||||
RANLIB=${RANLIB-"ranlib"}
 | 
					RANLIB=${RANLIB-"ranlib"}
 | 
				
			||||||
prefix=${prefix-/usr/local}
 | 
					prefix=${prefix-/usr/local}
 | 
				
			||||||
exec_prefix=${exec_prefix-$prefix}
 | 
					exec_prefix=${exec_prefix-$prefix}
 | 
				
			||||||
 | 
					shared_ext='.so'
 | 
				
			||||||
 | 
					shared=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					case "$1" in
 | 
				
			||||||
 | 
					  -s* | --s*) shared=1; shift;;
 | 
				
			||||||
 | 
					  -h* | --h*) echo 'syntax: configure [ --shared ]'; exit 0;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test -z "$CC" && echo Checking for gcc...
 | 
					test -z "$CC" && echo Checking for gcc...
 | 
				
			||||||
test=ztest$$
 | 
					test=ztest$$
 | 
				
			||||||
cat > $test.c <<EOF
 | 
					cat > $test.c <<EOF
 | 
				
			||||||
int hello() { printf("hello\n"); }
 | 
					int hello() { printf("hello\n"); }
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
if test -z "$CC" && (gcc -c -O3 $test.c) 2>/dev/null; then
 | 
					if test -z "$CC" -o "$CC" = "gcc" && (gcc -c -O3 $test.c) 2>/dev/null; then
 | 
				
			||||||
  CC=gcc
 | 
					  CC=gcc
 | 
				
			||||||
  SFLAGS=${CFLAGS-"-fPIC -O3"}
 | 
					  SFLAGS=${CFLAGS-"-fPIC -O3"}
 | 
				
			||||||
  CFLAGS=${CFLAGS-"-O3"}
 | 
					  CFLAGS=${CFLAGS-"-O3"}
 | 
				
			||||||
  LDSHARED=${LDSHARED-"gcc -shared"}
 | 
					  case `(uname -s || echo unknown) 2>/dev/null` in
 | 
				
			||||||
 | 
					  Linux | linux) LDSHARED=${LDSHARED-"gcc -shared -Wl,-soname,libz.so.1"};;
 | 
				
			||||||
 | 
					  *)             LDSHARED=${LDSHARED-"gcc -shared"};;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
  # find system name and corresponding cc options
 | 
					  # find system name and corresponding cc options
 | 
				
			||||||
  CC=${CC-cc}
 | 
					  CC=${CC-cc}
 | 
				
			||||||
@@ -50,35 +65,55 @@ else
 | 
				
			|||||||
	     LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
 | 
						     LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
 | 
				
			||||||
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
 | 
					  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
 | 
				
			||||||
	     CFLAGS=${CFLAGS-"-O"}
 | 
						     CFLAGS=${CFLAGS-"-O"}
 | 
				
			||||||
	     LDSHARED=${LDSHARED-"ld -b"}
 | 
						     LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
 | 
				
			||||||
	     SHAREDLIBS='libz.sl';;
 | 
						     shared_ext='.sl'
 | 
				
			||||||
  # send working options for other systems to gzip@prep.ai.mit.edu
 | 
						     SHAREDLIB='libz.sl';;
 | 
				
			||||||
 | 
					  UNIX_System_V\ 4.2.0) 
 | 
				
			||||||
 | 
						     SFLAGS=${CFLAGS-"-KPIC -O"}
 | 
				
			||||||
 | 
						     CFLAGS=${CFLAGS-"-O"}
 | 
				
			||||||
 | 
						     LDSHARED=${LDSHARED-"cc -G"};;
 | 
				
			||||||
 | 
					  # send working options for other systems to support@gzip.org
 | 
				
			||||||
  *)         SFLAGS=${CFLAGS-"-O"}
 | 
					  *)         SFLAGS=${CFLAGS-"-O"}
 | 
				
			||||||
	     CFLAGS=${CFLAGS-"-O"}
 | 
						     CFLAGS=${CFLAGS-"-O"}
 | 
				
			||||||
	     LDSHARED=${LDSHARED-"cc -shared"};;
 | 
						     LDSHARED=${LDSHARED-"cc -shared"};;
 | 
				
			||||||
  esac
 | 
					  esac
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo Checking for shared library support...
 | 
					if test $shared -eq 1; then
 | 
				
			||||||
# we must test in two steps (cc then ld), required at least on SunOS 4.x
 | 
					  echo Checking for shared library support...
 | 
				
			||||||
if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" &&
 | 
					  # we must test in two steps (cc then ld), required at least on SunOS 4.x
 | 
				
			||||||
   test "`($LDSHARED -o $test.so $test.o) 2>&1`" = ""; then
 | 
					  if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" &&
 | 
				
			||||||
  CFLAGS="$SFLAGS"
 | 
					     test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then
 | 
				
			||||||
  LIBS='libz.so.$(VER)'
 | 
					    CFLAGS="$SFLAGS"
 | 
				
			||||||
  echo Building shared library libz.so.$VER with $CC.
 | 
					    LIBS="$SHAREDLIB.$VER"
 | 
				
			||||||
else
 | 
					    echo Building shared library $SHAREDLIB.$VER with $CC.
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    echo No shared library suppport.
 | 
				
			||||||
 | 
					    shared=0;
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if test $shared -eq 0; then
 | 
				
			||||||
  LDSHARED="$CC"
 | 
					  LDSHARED="$CC"
 | 
				
			||||||
  echo Building static library $LIBS version $VER with $CC.
 | 
					  echo Building static library $LIBS version $VER with $CC.
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
rm -f $test.[co] $test.so
 | 
					rm -f $test.[co] $test$shared_ext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test -f /usr/include/unistd.h; then
 | 
				
			||||||
 | 
					  CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test ! -f /usr/include/errno.h; then
 | 
				
			||||||
 | 
					  CFLAGS="$CFLAGS -DNO_ERRNO_H"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# udpate Makefile
 | 
					# udpate Makefile
 | 
				
			||||||
sed < Makefile.in "
 | 
					sed < Makefile.in "
 | 
				
			||||||
/^CC *=/s/=.*/=$CC/
 | 
					/^CC *=/s,=.*,=$CC,
 | 
				
			||||||
/^CFLAGS *=/s/=.*/=$CFLAGS/
 | 
					/^CFLAGS *=/s/=.*/=$CFLAGS/
 | 
				
			||||||
/^LDSHARED *=/s/=.*/=$LDSHARED/
 | 
					/^LDSHARED *=/s%=.*%=$LDSHARED%
 | 
				
			||||||
/^LIBS *=/s,=.*,=$LIBS,
 | 
					/^LIBS *=/s,=.*,=$LIBS,
 | 
				
			||||||
/^AR *=/s/=.*/=$AR/
 | 
					/^SHAREDLIB *=/s,=.*,=$SHAREDLIB,
 | 
				
			||||||
 | 
					/^AR *=/s,=.*,=$AR,
 | 
				
			||||||
/^RANLIB *=/s,=.*,=$RANLIB,
 | 
					/^RANLIB *=/s,=.*,=$RANLIB,
 | 
				
			||||||
/^VER *=/s/=.*/=$VER/
 | 
					/^VER *=/s/=.*/=$VER/
 | 
				
			||||||
/^prefix *=/s,=.*,=$prefix,
 | 
					/^prefix *=/s,=.*,=$prefix,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								contrib/README.contrib
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								contrib/README.contrib
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					All files under this contrib directory are UNSUPPORTED. There were
 | 
				
			||||||
 | 
					provided by users of zlib and were not tested by the authors of zlib.
 | 
				
			||||||
 | 
					Use at your own risk. Please contact the authors of the contributions
 | 
				
			||||||
 | 
					for help about these, not the zlib authors. Thanks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					asm386/     by Gilles Vollant <info@winimage.com>
 | 
				
			||||||
 | 
						386 asm code replacing longest_match(). This code may be slower
 | 
				
			||||||
 | 
					        than the C code if you have a good compiler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iostream/   by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
				
			||||||
 | 
					        A C++ I/O streams interface to the zlib gz* functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
				
			||||||
 | 
						Another C++ I/O streams interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					untgz/      by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
				
			||||||
 | 
						A very simple tar.gz file extractor using zlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
				
			||||||
 | 
					        How to use compress(), uncompress() and the gz* functions from VB.
 | 
				
			||||||
							
								
								
									
										464
									
								
								contrib/asm386/gvmat32.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										464
									
								
								contrib/asm386/gvmat32.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,464 @@
 | 
				
			|||||||
 | 
					;
 | 
				
			||||||
 | 
					; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86
 | 
				
			||||||
 | 
					; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
 | 
				
			||||||
 | 
					; File written by Gilles Vollant, by modifiying the longest_match
 | 
				
			||||||
 | 
					;  from Jean-loup Gailly in deflate.c
 | 
				
			||||||
 | 
					; It need wmask == 0x7fff
 | 
				
			||||||
 | 
					;     (assembly code is faster with a fixed wmask)
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK)
 | 
				
			||||||
 | 
					;   I compile with : "ml /coff /Zi /c gvmat32.asm"
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; uInt longest_match_gvasm(IPos cur_match,int* match_start_ptr,uInt scan_end,
 | 
				
			||||||
 | 
					;                          uInt scan_start,ush* prev,uch* window,int best_len,
 | 
				
			||||||
 | 
					;                          IPos limit,uInt chain_length,uch* scanrp,
 | 
				
			||||||
 | 
					;                          uInt nice_match);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;uInt longest_match(s, cur_match)
 | 
				
			||||||
 | 
					;    deflate_state *s;
 | 
				
			||||||
 | 
					;    IPos cur_match;                             /* current match */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						NbStack		equ	76
 | 
				
			||||||
 | 
						cur_match	equ	dword ptr[esp+NbStack-0]
 | 
				
			||||||
 | 
						str_s		equ	dword ptr[esp+NbStack-4]
 | 
				
			||||||
 | 
						; 5 dword on top (ret,ebp,esi,edi,ebx)
 | 
				
			||||||
 | 
						adrret		equ	dword ptr[esp+NbStack-8]
 | 
				
			||||||
 | 
						pushebp		equ	dword ptr[esp+NbStack-12]
 | 
				
			||||||
 | 
						pushedi		equ	dword ptr[esp+NbStack-16]
 | 
				
			||||||
 | 
						pushesi		equ	dword ptr[esp+NbStack-20]
 | 
				
			||||||
 | 
						pushebx		equ	dword ptr[esp+NbStack-24]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						chain_length    equ dword ptr [esp+NbStack-28]
 | 
				
			||||||
 | 
						limit           equ dword ptr [esp+NbStack-32]
 | 
				
			||||||
 | 
						best_len        equ dword ptr [esp+NbStack-36]
 | 
				
			||||||
 | 
						window          equ dword ptr [esp+NbStack-40]
 | 
				
			||||||
 | 
						prev            equ dword ptr [esp+NbStack-44]
 | 
				
			||||||
 | 
						scan_start      equ  word ptr [esp+NbStack-48]
 | 
				
			||||||
 | 
						scan_end        equ  word ptr [esp+NbStack-52]
 | 
				
			||||||
 | 
						match_start_ptr equ dword ptr [esp+NbStack-56]
 | 
				
			||||||
 | 
						nice_match      equ dword ptr [esp+NbStack-60]
 | 
				
			||||||
 | 
						scanrp          equ dword ptr [esp+NbStack-64]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						windowlen       equ dword ptr [esp+NbStack-68]
 | 
				
			||||||
 | 
						match_start     equ dword ptr [esp+NbStack-72]
 | 
				
			||||||
 | 
						strend			equ dword ptr [esp+NbStack-76]
 | 
				
			||||||
 | 
						NbStackAdd		equ	(76-24)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .386p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    name    gvmatch
 | 
				
			||||||
 | 
					    .MODEL  FLAT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@lmtype				TYPEDEF         PROTO C :PTR , :SDWORD
 | 
				
			||||||
 | 
					longest_match_c		PROTO           @lmtype
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dep_max_chain_length	equ	70h
 | 
				
			||||||
 | 
						dep_window				equ	2ch
 | 
				
			||||||
 | 
						dep_strstart			equ	60h
 | 
				
			||||||
 | 
						dep_prev_length			equ 6ch
 | 
				
			||||||
 | 
						dep_nice_match			equ 84h
 | 
				
			||||||
 | 
						dep_w_size				equ	20h
 | 
				
			||||||
 | 
						dep_prev				equ	34h
 | 
				
			||||||
 | 
						dep_w_mask				equ	28h
 | 
				
			||||||
 | 
						dep_good_match			equ 80h
 | 
				
			||||||
 | 
						dep_match_start			equ	64h
 | 
				
			||||||
 | 
						dep_lookahead			equ	68h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_TEXT   segment
 | 
				
			||||||
 | 
					    public  _longest_match_asm7fff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MAX_MATCH		equ 258
 | 
				
			||||||
 | 
						MIN_MATCH		equ 3
 | 
				
			||||||
 | 
						MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; initialize or check the variables used in match.asm.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; -----------------------------------------------------------------------
 | 
				
			||||||
 | 
					; Set match_start to the longest match starting at the given string and
 | 
				
			||||||
 | 
					; return its length. Matches shorter or equal to prev_length are discarded,
 | 
				
			||||||
 | 
					; in which case the result is equal to prev_length and match_start is
 | 
				
			||||||
 | 
					; garbage.
 | 
				
			||||||
 | 
					; IN assertions: cur_match is the head of the hash chain for the current
 | 
				
			||||||
 | 
					;   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; int longest_match(cur_match)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_longest_match_asm7fff proc near
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    ; return address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		eax,[esp+4]
 | 
				
			||||||
 | 
							mov		bx,[eax+dep_w_mask]
 | 
				
			||||||
 | 
							cmp		bx,7fffh
 | 
				
			||||||
 | 
							jnz		longest_match_c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    push    ebp             
 | 
				
			||||||
 | 
						    push    edi             
 | 
				
			||||||
 | 
						    push    esi             
 | 
				
			||||||
 | 
						    push    ebx             
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    sub     esp,NbStackAdd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							;//mov		ebp,str_s
 | 
				
			||||||
 | 
							mov		ebp,eax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		eax,[ebp+dep_max_chain_length]
 | 
				
			||||||
 | 
							mov		ebx,[ebp+dep_prev_length]
 | 
				
			||||||
 | 
							cmp		[ebp+dep_good_match],ebx	; if prev_length>=good_match chain_length >>= 2
 | 
				
			||||||
 | 
							ja		noshr		
 | 
				
			||||||
 | 
							shr		eax,2
 | 
				
			||||||
 | 
					noshr:
 | 
				
			||||||
 | 
							mov		edi,[ebp+dep_nice_match]
 | 
				
			||||||
 | 
							mov		chain_length,eax
 | 
				
			||||||
 | 
							mov		edx,[ebp+dep_lookahead]
 | 
				
			||||||
 | 
							cmp		edx,edi
 | 
				
			||||||
 | 
					;if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
 | 
				
			||||||
 | 
							jae		nolookaheadnicematch
 | 
				
			||||||
 | 
							mov		edi,edx
 | 
				
			||||||
 | 
					nolookaheadnicematch:
 | 
				
			||||||
 | 
							mov		best_len,ebx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		esi,[ebp+dep_window]
 | 
				
			||||||
 | 
							mov		ecx,[ebp+dep_strstart]
 | 
				
			||||||
 | 
							mov		window,esi
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							mov		nice_match,edi
 | 
				
			||||||
 | 
							add		esi,ecx
 | 
				
			||||||
 | 
							mov		scanrp,esi
 | 
				
			||||||
 | 
							mov		ax,word ptr [esi]
 | 
				
			||||||
 | 
							mov		bx,word ptr [esi+ebx-1]
 | 
				
			||||||
 | 
							add		esi,MAX_MATCH-1
 | 
				
			||||||
 | 
							mov		scan_start,ax
 | 
				
			||||||
 | 
							mov		strend,esi
 | 
				
			||||||
 | 
							mov		scan_end,bx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
 | 
				
			||||||
 | 
					;        s->strstart - (IPos)MAX_DIST(s) : NIL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		esi,[ebp+dep_w_size]
 | 
				
			||||||
 | 
							sub		esi,MIN_LOOKAHEAD
 | 
				
			||||||
 | 
							; here esi = MAX_DIST(s)
 | 
				
			||||||
 | 
							sub		ecx,esi
 | 
				
			||||||
 | 
							ja		nodist
 | 
				
			||||||
 | 
							xor		ecx,ecx
 | 
				
			||||||
 | 
					nodist:
 | 
				
			||||||
 | 
							mov		limit,ecx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		eax,[ebp+dep_prev]
 | 
				
			||||||
 | 
							mov		prev,eax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    mov     ebx,dword ptr [ebp+dep_match_start]
 | 
				
			||||||
 | 
						    mov     bp,scan_start
 | 
				
			||||||
 | 
						    mov     edx,cur_match
 | 
				
			||||||
 | 
						    mov     match_start,ebx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    mov     bx,scan_end
 | 
				
			||||||
 | 
						    mov     eax,window
 | 
				
			||||||
 | 
							mov		edi,eax
 | 
				
			||||||
 | 
						    add     edi,best_len
 | 
				
			||||||
 | 
						    mov     esi,prev
 | 
				
			||||||
 | 
							dec     edi
 | 
				
			||||||
 | 
						    mov     windowlen,edi
 | 
				
			||||||
 | 
						    
 | 
				
			||||||
 | 
						    jmp     beginloop2
 | 
				
			||||||
 | 
						    align   4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; here, in the loop
 | 
				
			||||||
 | 
					;;;;       eax = chain_length
 | 
				
			||||||
 | 
					;       edx = dx = cur_match
 | 
				
			||||||
 | 
					;       ecx = limit
 | 
				
			||||||
 | 
					;        bx = scan_end
 | 
				
			||||||
 | 
					;        bp = scan_start
 | 
				
			||||||
 | 
					;       edi = windowlen (window + best_len)
 | 
				
			||||||
 | 
					;       esi = prev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;// here; eax <=16
 | 
				
			||||||
 | 
					normalbeg0add16: 
 | 
				
			||||||
 | 
							add		chain_length,16
 | 
				
			||||||
 | 
							jz		exitloop
 | 
				
			||||||
 | 
					normalbeg0: 
 | 
				
			||||||
 | 
						    cmp     word ptr[edi+edx-0],bx
 | 
				
			||||||
 | 
						    je      normalbeg2
 | 
				
			||||||
 | 
						    and     edx,7fffh
 | 
				
			||||||
 | 
						    mov     dx,word ptr[esi+edx*2]
 | 
				
			||||||
 | 
						    cmp     ecx,edx
 | 
				
			||||||
 | 
						    jnb     exitloop
 | 
				
			||||||
 | 
						    dec     chain_length
 | 
				
			||||||
 | 
							jnz		normalbeg0
 | 
				
			||||||
 | 
					;jnbexitloopshort1:
 | 
				
			||||||
 | 
							jmp     exitloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contloop3:
 | 
				
			||||||
 | 
						    mov     edi,windowlen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; cur_match = prev[cur_match & wmask]
 | 
				
			||||||
 | 
						    and		edx,7fffh
 | 
				
			||||||
 | 
						    mov     dx,word ptr[esi+edx*2]
 | 
				
			||||||
 | 
					; if cur_match > limit, go to exitloop
 | 
				
			||||||
 | 
						    cmp     ecx,edx
 | 
				
			||||||
 | 
					jnbexitloopshort1:
 | 
				
			||||||
 | 
						    jnb     exitloop
 | 
				
			||||||
 | 
					; if --chain_length != 0, go to exitloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					beginloop2:
 | 
				
			||||||
 | 
							sub		chain_length,16+1
 | 
				
			||||||
 | 
							jna     normalbeg0add16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					do16:
 | 
				
			||||||
 | 
						    cmp     word ptr[edi+edx],bx
 | 
				
			||||||
 | 
						    je      normalbeg2dc0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					maccn	MACRO	lab
 | 
				
			||||||
 | 
						    and     edx,7fffh
 | 
				
			||||||
 | 
						    mov     dx,word ptr[esi+edx*2]
 | 
				
			||||||
 | 
						    cmp     ecx,edx
 | 
				
			||||||
 | 
						    jnb     exitloop
 | 
				
			||||||
 | 
						    cmp     word ptr[edi+edx-0],bx
 | 
				
			||||||
 | 
						    je      lab
 | 
				
			||||||
 | 
							ENDM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop0:
 | 
				
			||||||
 | 
							maccn normalbeg2dc1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop1:
 | 
				
			||||||
 | 
							maccn normalbeg2dc2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop2:
 | 
				
			||||||
 | 
							maccn normalbeg2dc3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop3:
 | 
				
			||||||
 | 
							maccn normalbeg2dc4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop4:
 | 
				
			||||||
 | 
							maccn normalbeg2dc5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop5:
 | 
				
			||||||
 | 
							maccn normalbeg2dc6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop6:
 | 
				
			||||||
 | 
							maccn normalbeg2dc7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop7:
 | 
				
			||||||
 | 
							maccn normalbeg2dc8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop8:
 | 
				
			||||||
 | 
							maccn normalbeg2dc9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop9:
 | 
				
			||||||
 | 
							maccn normalbeg2dc10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop10:
 | 
				
			||||||
 | 
							maccn normalbeg2dc11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop11:
 | 
				
			||||||
 | 
							maccn short normalbeg2dc12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop12:
 | 
				
			||||||
 | 
							maccn short normalbeg2dc13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop13:
 | 
				
			||||||
 | 
							maccn short normalbeg2dc14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop14:
 | 
				
			||||||
 | 
							maccn short normalbeg2dc15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rcontloop15:
 | 
				
			||||||
 | 
						    and     edx,7fffh
 | 
				
			||||||
 | 
						    mov     dx,word ptr[esi+edx*2]
 | 
				
			||||||
 | 
						    cmp     ecx,edx
 | 
				
			||||||
 | 
						    jnb     short exitloopshort
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							sub		chain_length,16
 | 
				
			||||||
 | 
							ja		do16
 | 
				
			||||||
 | 
							jmp		normalbeg0add16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exitloopshort:
 | 
				
			||||||
 | 
							jmp		exitloop                  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normbeg	MACRO	rcontlab,valsub
 | 
				
			||||||
 | 
						    cmp     bp,word ptr[eax+edx]
 | 
				
			||||||
 | 
							jne		rcontlab
 | 
				
			||||||
 | 
							add     chain_length,16-valsub
 | 
				
			||||||
 | 
							jmp		iseq
 | 
				
			||||||
 | 
							ENDM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc12:
 | 
				
			||||||
 | 
							normbeg	rcontloop12,12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc13:
 | 
				
			||||||
 | 
							normbeg	rcontloop13,13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc14:
 | 
				
			||||||
 | 
							normbeg	rcontloop14,14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc15:
 | 
				
			||||||
 | 
							normbeg	rcontloop15,15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc11:
 | 
				
			||||||
 | 
							normbeg	rcontloop11,11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc10:
 | 
				
			||||||
 | 
							normbeg	rcontloop10,10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc9:
 | 
				
			||||||
 | 
							normbeg	rcontloop9,9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc8:
 | 
				
			||||||
 | 
							normbeg	rcontloop8,8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc7:
 | 
				
			||||||
 | 
							normbeg	rcontloop7,7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc5:
 | 
				
			||||||
 | 
							normbeg	rcontloop5,5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc6:
 | 
				
			||||||
 | 
							normbeg	rcontloop6,6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc4:
 | 
				
			||||||
 | 
							normbeg	rcontloop4,4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc3:
 | 
				
			||||||
 | 
							normbeg	rcontloop3,3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc2:
 | 
				
			||||||
 | 
							normbeg	rcontloop2,2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc1:
 | 
				
			||||||
 | 
							normbeg	rcontloop1,1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2dc0:
 | 
				
			||||||
 | 
							normbeg	rcontloop0,0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					normalbeg2:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								 ; 10 nop here take 10% time
 | 
				
			||||||
 | 
							mov		edi,window
 | 
				
			||||||
 | 
							  ;mov     chain_length,eax    ; now, we need eax...
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
						    cmp     bp,word ptr[edi+edx]
 | 
				
			||||||
 | 
						    jne     contloop3                   ; if *(ushf*)match != scan_start, continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iseq:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mov		edi,eax
 | 
				
			||||||
 | 
						    mov     esi,scanrp                  ; esi = scan    
 | 
				
			||||||
 | 
						    add     edi,edx				; edi = window + cur_match = match
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							       
 | 
				
			||||||
 | 
						    mov     eax,[esi+3]					; compare manually dword at match+3
 | 
				
			||||||
 | 
						    xor     eax,[edi+3]                 ;       and scan +3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    jz      begincompare                ; if equal, go to long compare
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								; we will determine the unmatch byte and calculate len (in esi)
 | 
				
			||||||
 | 
							or		al,al
 | 
				
			||||||
 | 
							je		eq1rr
 | 
				
			||||||
 | 
						    mov     esi,3
 | 
				
			||||||
 | 
						    jmp     trfinval
 | 
				
			||||||
 | 
					eq1rr:
 | 
				
			||||||
 | 
						    or      ax,ax                               
 | 
				
			||||||
 | 
						    je      eq1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    mov     esi,4
 | 
				
			||||||
 | 
						    jmp     trfinval
 | 
				
			||||||
 | 
					eq1:
 | 
				
			||||||
 | 
						    shl     eax,8
 | 
				
			||||||
 | 
						    jz      eq11
 | 
				
			||||||
 | 
						    mov     esi,5
 | 
				
			||||||
 | 
						    jmp     trfinval
 | 
				
			||||||
 | 
					eq11:
 | 
				
			||||||
 | 
						    mov     esi,6
 | 
				
			||||||
 | 
						    jmp     trfinval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					begincompare:
 | 
				
			||||||
 | 
							; here we now scan and match begin same
 | 
				
			||||||
 | 
						    add     edi,6
 | 
				
			||||||
 | 
						    add     esi,6
 | 
				
			||||||
 | 
						    mov     ecx,(MAX_MATCH-(2+4))/4     ;//; scan for at most MAX_MATCH bytes
 | 
				
			||||||
 | 
						    repe    cmpsd                                               ;//; loop until mismatch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    je      trfin                                               ; go to trfin if not unmatch
 | 
				
			||||||
 | 
								; we determine the unmatch byte
 | 
				
			||||||
 | 
						    sub     esi,4
 | 
				
			||||||
 | 
						    mov     eax,[edi-4]
 | 
				
			||||||
 | 
						    xor     eax,[esi]
 | 
				
			||||||
 | 
						    or      al,al
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    jnz     trfin
 | 
				
			||||||
 | 
						    inc     esi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    or      ax,ax
 | 
				
			||||||
 | 
						    jnz     trfin
 | 
				
			||||||
 | 
						    inc     esi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    shl     eax,8           
 | 
				
			||||||
 | 
						    jnz     trfin
 | 
				
			||||||
 | 
						    inc     esi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					trfin:      
 | 
				
			||||||
 | 
						    sub     esi,scanrp          ; esi = len
 | 
				
			||||||
 | 
					trfinval:
 | 
				
			||||||
 | 
						    cmp     esi,best_len        ; if len <= best_len, go contloop2
 | 
				
			||||||
 | 
						    jbe     contloop2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    mov     best_len,esi        ; len become best_len
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    mov     match_start,edx
 | 
				
			||||||
 | 
						    cmp     esi,nice_match ;//; if esi >= nice_match, exit
 | 
				
			||||||
 | 
						    mov     ecx,scanrp
 | 
				
			||||||
 | 
						    jae     exitloop
 | 
				
			||||||
 | 
						    add     esi,window
 | 
				
			||||||
 | 
						    add     ecx,best_len
 | 
				
			||||||
 | 
								dec             esi
 | 
				
			||||||
 | 
						    mov     windowlen,esi
 | 
				
			||||||
 | 
						    mov     bx,[ecx-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; now we restore eax, ecx and esi, for the big loop :
 | 
				
			||||||
 | 
					contloop2:
 | 
				
			||||||
 | 
						    mov     esi,prev
 | 
				
			||||||
 | 
						    mov     ecx,limit
 | 
				
			||||||
 | 
						    ;mov     eax,chain_length
 | 
				
			||||||
 | 
							mov		eax,window
 | 
				
			||||||
 | 
						    jmp     contloop3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exitloop:        
 | 
				
			||||||
 | 
						    mov     ebx,match_start
 | 
				
			||||||
 | 
							mov		ebp,str_s
 | 
				
			||||||
 | 
						    mov     dword ptr [ebp+dep_match_start],ebx
 | 
				
			||||||
 | 
						    mov     eax,best_len
 | 
				
			||||||
 | 
						    add     esp,NbStackAdd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    pop     ebx
 | 
				
			||||||
 | 
						    pop     esi
 | 
				
			||||||
 | 
						    pop     edi
 | 
				
			||||||
 | 
						    pop     ebp 
 | 
				
			||||||
 | 
						    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_longest_match_asm7fff endp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_TEXT   ends
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
										
 | 
				
			||||||
							
								
								
									
										229
									
								
								contrib/asm386/gvmat32c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										229
									
								
								contrib/asm386/gvmat32c.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,229 @@
 | 
				
			|||||||
 | 
					/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
 | 
				
			||||||
 | 
					 * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
 | 
				
			||||||
 | 
					 * File written by Gilles Vollant, by modifiying the longest_match
 | 
				
			||||||
 | 
					 *  from Jean-loup Gailly in deflate.c
 | 
				
			||||||
 | 
					 *  it prepare all parameters and call the assembly longest_match_gvasm
 | 
				
			||||||
 | 
					 *  longest_match execute standard C code is wmask != 0x7fff
 | 
				
			||||||
 | 
					 *     (assembly code is faster with a fixed wmask)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//#pragma optimize("agt",on)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "deflate.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef FAR
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ASMV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NIL 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static unsigned int tot=0;
 | 
				
			||||||
 | 
					static unsigned int totl0=0;
 | 
				
			||||||
 | 
					static unsigned int totl0p0=0;
 | 
				
			||||||
 | 
					static unsigned int ba0=0;
 | 
				
			||||||
 | 
					static unsigned int ba1=0;
 | 
				
			||||||
 | 
					static unsigned int cpta=0;
 | 
				
			||||||
 | 
					static unsigned int cptb=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UNALIGNED_OK
 | 
				
			||||||
 | 
					#define gvshow(a,b,c,d)
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					void gvshow(int chain_length,int len,int limit,ushf* prev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					static int ival=0;
 | 
				
			||||||
 | 
					char sz[80];
 | 
				
			||||||
 | 
					unsigned long i;
 | 
				
			||||||
 | 
					int prev0=*prev;
 | 
				
			||||||
 | 
						ival++;
 | 
				
			||||||
 | 
						//wsprintf(sz,"call %u, len=%u, chain_length=%u\n",ival,len,chain_length);
 | 
				
			||||||
 | 
						//OutputDebugString(sz);
 | 
				
			||||||
 | 
						tot++;
 | 
				
			||||||
 | 
						if (limit==NIL)
 | 
				
			||||||
 | 
							totl0++;
 | 
				
			||||||
 | 
						if ((limit==NIL) && (prev0==0))
 | 
				
			||||||
 | 
							totl0p0++;
 | 
				
			||||||
 | 
						for (i=limit+1;i<32768;i++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							ush va=*(prev+i);
 | 
				
			||||||
 | 
							if (ba0>4000000000)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ba0+=10;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ba0++;
 | 
				
			||||||
 | 
							if ((va>limit) || (va==0))
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							ba1++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* if your C compiler don't add underline before function name,
 | 
				
			||||||
 | 
							define ADD_UNDERLINE_ASMFUNC */
 | 
				
			||||||
 | 
					#ifdef ADD_UNDERLINE_ASMFUNC
 | 
				
			||||||
 | 
					#define longest_match_asm7fff _longest_match_asm7fff
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					void match_init()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uInt longest_match_c(
 | 
				
			||||||
 | 
					    deflate_state *s,
 | 
				
			||||||
 | 
					    IPos cur_match);                             /* current match */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uInt longest_match_asm7fff(
 | 
				
			||||||
 | 
					    deflate_state *s,
 | 
				
			||||||
 | 
					    IPos cur_match);                             /* current match */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uInt longest_match(
 | 
				
			||||||
 | 
					    deflate_state *s,
 | 
				
			||||||
 | 
					    IPos cur_match)                             /* current match */
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (s->w_mask == 0x7fff)
 | 
				
			||||||
 | 
					        return longest_match_asm7fff(s,cur_match);
 | 
				
			||||||
 | 
					    return longest_match_c(s,cur_match);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uInt longest_match_c(s, cur_match)
 | 
				
			||||||
 | 
					    deflate_state *s;
 | 
				
			||||||
 | 
					    IPos cur_match;                             /* current match */
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    unsigned chain_length = s->max_chain_length;/* max hash chain length */
 | 
				
			||||||
 | 
					    register Bytef *scan = s->window + s->strstart; /* current string */
 | 
				
			||||||
 | 
					    register Bytef *match;                       /* matched string */
 | 
				
			||||||
 | 
					    register int len;                           /* length of current match */
 | 
				
			||||||
 | 
					    int best_len = s->prev_length;              /* best match length so far */
 | 
				
			||||||
 | 
					    int nice_match = s->nice_match;             /* stop if match long enough */
 | 
				
			||||||
 | 
					    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
 | 
				
			||||||
 | 
					        s->strstart - (IPos)MAX_DIST(s) : NIL;
 | 
				
			||||||
 | 
					    /* Stop when cur_match becomes <= limit. To simplify the code,
 | 
				
			||||||
 | 
					     * we prevent matches with the string of window index 0.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Posf *prev = s->prev;
 | 
				
			||||||
 | 
					    uInt wmask = s->w_mask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef UNALIGNED_OK
 | 
				
			||||||
 | 
					    /* Compare two bytes at a time. Note: this is not always beneficial.
 | 
				
			||||||
 | 
					     * Try with and without -DUNALIGNED_OK to check.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
 | 
				
			||||||
 | 
					    register ush scan_start = *(ushf*)scan;
 | 
				
			||||||
 | 
					    register ush scan_end   = *(ushf*)(scan+best_len-1);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
 | 
				
			||||||
 | 
					    register Byte scan_end1  = scan[best_len-1];
 | 
				
			||||||
 | 
					    register Byte scan_end   = scan[best_len];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
 | 
				
			||||||
 | 
					     * It is easy to get rid of this optimization if necessary.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Do not waste too much time if we already have a good match: */
 | 
				
			||||||
 | 
					    if (s->prev_length >= s->good_match) {
 | 
				
			||||||
 | 
					        chain_length >>= 2;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* Do not look for matches beyond the end of the input. This is necessary
 | 
				
			||||||
 | 
					     * to make deflate deterministic.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    do {
 | 
				
			||||||
 | 
					        Assert(cur_match < s->strstart, "no future");
 | 
				
			||||||
 | 
					        match = s->window + cur_match;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Skip to next match if the match length cannot increase
 | 
				
			||||||
 | 
					         * or if the match length is less than 2:
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
 | 
				
			||||||
 | 
					        /* This code assumes sizeof(unsigned short) == 2. Do not use
 | 
				
			||||||
 | 
					         * UNALIGNED_OK if your compiler uses a different size.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        if (*(ushf*)(match+best_len-1) != scan_end ||
 | 
				
			||||||
 | 
					            *(ushf*)match != scan_start) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* It is not necessary to compare scan[2] and match[2] since they are
 | 
				
			||||||
 | 
					         * always equal when the other bytes match, given that the hash keys
 | 
				
			||||||
 | 
					         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
 | 
				
			||||||
 | 
					         * strstart+3, +5, ... up to strstart+257. We check for insufficient
 | 
				
			||||||
 | 
					         * lookahead only every 4th comparison; the 128th check will be made
 | 
				
			||||||
 | 
					         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
 | 
				
			||||||
 | 
					         * necessary to put more guard bytes at the end of the window, or
 | 
				
			||||||
 | 
					         * to check more often for insufficient lookahead.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        Assert(scan[2] == match[2], "scan[2]?");
 | 
				
			||||||
 | 
					        scan++, match++;
 | 
				
			||||||
 | 
					        do {
 | 
				
			||||||
 | 
					        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
				
			||||||
 | 
					                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
				
			||||||
 | 
					                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
				
			||||||
 | 
					                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
				
			||||||
 | 
					                 scan < strend);
 | 
				
			||||||
 | 
					        /* The funny "do {}" generates better code on most compilers */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Here, scan <= window+strstart+257 */
 | 
				
			||||||
 | 
					        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
 | 
				
			||||||
 | 
					        if (*scan == *match) scan++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        len = (MAX_MATCH - 1) - (int)(strend-scan);
 | 
				
			||||||
 | 
					        scan = strend - (MAX_MATCH-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else /* UNALIGNED_OK */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (match[best_len]   != scan_end  ||
 | 
				
			||||||
 | 
					            match[best_len-1] != scan_end1 ||
 | 
				
			||||||
 | 
					            *match            != *scan     ||
 | 
				
			||||||
 | 
					            *++match          != scan[1])      continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* The check at best_len-1 can be removed because it will be made
 | 
				
			||||||
 | 
					         * again later. (This heuristic is not always a win.)
 | 
				
			||||||
 | 
					         * It is not necessary to compare scan[2] and match[2] since they
 | 
				
			||||||
 | 
					         * are always equal when the other bytes match, given that
 | 
				
			||||||
 | 
					         * the hash keys are equal and that HASH_BITS >= 8.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        scan += 2, match++;
 | 
				
			||||||
 | 
					        Assert(*scan == *match, "match[2]?");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* We check for insufficient lookahead only every 8th comparison;
 | 
				
			||||||
 | 
					         * the 256th check will be made at strstart+258.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        do {
 | 
				
			||||||
 | 
					        } while (*++scan == *++match && *++scan == *++match &&
 | 
				
			||||||
 | 
					                 *++scan == *++match && *++scan == *++match &&
 | 
				
			||||||
 | 
					                 *++scan == *++match && *++scan == *++match &&
 | 
				
			||||||
 | 
					                 *++scan == *++match && *++scan == *++match &&
 | 
				
			||||||
 | 
					                 scan < strend);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        len = MAX_MATCH - (int)(strend - scan);
 | 
				
			||||||
 | 
					        scan = strend - MAX_MATCH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* UNALIGNED_OK */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (len > best_len) {
 | 
				
			||||||
 | 
					            s->match_start = cur_match;
 | 
				
			||||||
 | 
					            best_len = len;
 | 
				
			||||||
 | 
					            if (len >= nice_match) break;
 | 
				
			||||||
 | 
					#ifdef UNALIGNED_OK
 | 
				
			||||||
 | 
					            scan_end = *(ushf*)(scan+best_len-1);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					            scan_end1  = scan[best_len-1];
 | 
				
			||||||
 | 
					            scan_end   = scan[best_len];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } while ((cur_match = prev[cur_match & wmask]) > limit
 | 
				
			||||||
 | 
					             && --chain_length != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((uInt)best_len <= s->lookahead) return best_len;
 | 
				
			||||||
 | 
					    return s->lookahead;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* ASMV */
 | 
				
			||||||
							
								
								
									
										1
									
								
								contrib/asm386/mkgvmt32.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								contrib/asm386/mkgvmt32.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
 | 
				
			||||||
							
								
								
									
										781
									
								
								contrib/asm386/zlibvc.mak
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										781
									
								
								contrib/asm386/zlibvc.mak
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,781 @@
 | 
				
			|||||||
 | 
					# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
 | 
				
			||||||
 | 
					# ** DO NOT EDIT **
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF "$(CFG)" == ""
 | 
				
			||||||
 | 
					CFG=zlibvc - Win32 Debug
 | 
				
			||||||
 | 
					!MESSAGE No configuration specified.  Defaulting to zlibvc - Win32 Debug.
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF "$(CFG)" != "zlibvc - Win32 Release" && "$(CFG)" != "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					!MESSAGE Invalid configuration "$(CFG)" specified.
 | 
				
			||||||
 | 
					!MESSAGE You can specify a configuration when running NMAKE on this makefile
 | 
				
			||||||
 | 
					!MESSAGE by defining the macro CFG on the command line.  For example:
 | 
				
			||||||
 | 
					!MESSAGE 
 | 
				
			||||||
 | 
					!MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					!MESSAGE 
 | 
				
			||||||
 | 
					!MESSAGE Possible choices for configuration are:
 | 
				
			||||||
 | 
					!MESSAGE 
 | 
				
			||||||
 | 
					!MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
 | 
				
			||||||
 | 
					!MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
 | 
				
			||||||
 | 
					!MESSAGE 
 | 
				
			||||||
 | 
					!ERROR An invalid configuration is specified.
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF "$(OS)" == "Windows_NT"
 | 
				
			||||||
 | 
					NULL=
 | 
				
			||||||
 | 
					!ELSE 
 | 
				
			||||||
 | 
					NULL=nul
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Project
 | 
				
			||||||
 | 
					# PROP Target_Last_Scanned "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					CPP=cl.exe
 | 
				
			||||||
 | 
					RSC=rc.exe
 | 
				
			||||||
 | 
					MTL=mktyplib.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PROP BASE Use_MFC 0
 | 
				
			||||||
 | 
					# PROP BASE Use_Debug_Libraries 0
 | 
				
			||||||
 | 
					# PROP BASE Output_Dir "Release"
 | 
				
			||||||
 | 
					# PROP BASE Intermediate_Dir "Release"
 | 
				
			||||||
 | 
					# PROP BASE Target_Dir ""
 | 
				
			||||||
 | 
					# PROP Use_MFC 0
 | 
				
			||||||
 | 
					# PROP Use_Debug_Libraries 0
 | 
				
			||||||
 | 
					# PROP Output_Dir "Release"
 | 
				
			||||||
 | 
					# PROP Intermediate_Dir "Release"
 | 
				
			||||||
 | 
					# PROP Target_Dir ""
 | 
				
			||||||
 | 
					OUTDIR=.\Release
 | 
				
			||||||
 | 
					INTDIR=.\Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALL : "$(OUTDIR)\zlib.dll" "$(OUTDIR)\zlibvc.bsc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLEAN : 
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\adler32.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\adler32.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\compress.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\compress.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\crc32.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\crc32.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\deflate.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\deflate.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gvmat32c.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gvmat32c.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gzio.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gzio.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infblock.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infblock.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infcodes.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infcodes.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inffast.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inffast.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inflate.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inflate.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inftrees.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inftrees.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infutil.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infutil.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\trees.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\trees.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\uncompr.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\uncompr.sbr"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\zlib.res"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\zutil.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\zutil.sbr"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.dll"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.exp"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.lib"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.map"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlibvc.bsc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(OUTDIR)" :
 | 
				
			||||||
 | 
					    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
 | 
				
			||||||
 | 
					# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV" /FR /YX /c
 | 
				
			||||||
 | 
					CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D\
 | 
				
			||||||
 | 
					 "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV"\
 | 
				
			||||||
 | 
					 /FR"$(INTDIR)/" /Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /c 
 | 
				
			||||||
 | 
					CPP_OBJS=.\Release/
 | 
				
			||||||
 | 
					CPP_SBRS=.\Release/
 | 
				
			||||||
 | 
					# ADD BASE MTL /nologo /D "NDEBUG" /win32
 | 
				
			||||||
 | 
					# ADD MTL /nologo /D "NDEBUG" /win32
 | 
				
			||||||
 | 
					MTL_PROJ=/nologo /D "NDEBUG" /win32 
 | 
				
			||||||
 | 
					# ADD BASE RSC /l 0x40c /d "NDEBUG"
 | 
				
			||||||
 | 
					# ADD RSC /l 0x40c /d "NDEBUG"
 | 
				
			||||||
 | 
					RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "NDEBUG" 
 | 
				
			||||||
 | 
					BSC32=bscmake.exe
 | 
				
			||||||
 | 
					# ADD BASE BSC32 /nologo
 | 
				
			||||||
 | 
					# ADD BSC32 /nologo
 | 
				
			||||||
 | 
					BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc" 
 | 
				
			||||||
 | 
					BSC32_SBRS= \
 | 
				
			||||||
 | 
						"$(INTDIR)\adler32.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\compress.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\crc32.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\deflate.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gvmat32c.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gzio.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infblock.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infcodes.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inffast.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inflate.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inftrees.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infutil.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\trees.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\uncompr.sbr" \
 | 
				
			||||||
 | 
						"$(INTDIR)\zutil.sbr"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(OUTDIR)\zlibvc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
 | 
				
			||||||
 | 
					    $(BSC32) @<<
 | 
				
			||||||
 | 
					  $(BSC32_FLAGS) $(BSC32_SBRS)
 | 
				
			||||||
 | 
					<<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LINK32=link.exe
 | 
				
			||||||
 | 
					# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
 | 
				
			||||||
 | 
					# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:"Release/zlib.dll"
 | 
				
			||||||
 | 
					LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 | 
				
			||||||
 | 
					 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo\
 | 
				
			||||||
 | 
					 /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/zlib.pdb"\
 | 
				
			||||||
 | 
					 /map:"$(INTDIR)/zlib.map" /machine:I386 /nodefaultlib /def:".\zlib.def"\
 | 
				
			||||||
 | 
					 /out:"$(OUTDIR)/zlib.dll" /implib:"$(OUTDIR)/zlib.lib" 
 | 
				
			||||||
 | 
					DEF_FILE= \
 | 
				
			||||||
 | 
						".\zlib.def"
 | 
				
			||||||
 | 
					LINK32_OBJS= \
 | 
				
			||||||
 | 
						"$(INTDIR)\adler32.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\compress.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\crc32.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\deflate.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gvmat32c.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gzio.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infblock.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infcodes.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inffast.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inflate.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inftrees.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infutil.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\trees.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\uncompr.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\zlib.res" \
 | 
				
			||||||
 | 
						"$(INTDIR)\zutil.obj" \
 | 
				
			||||||
 | 
						".\GVMAT32.obj"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
 | 
				
			||||||
 | 
					    $(LINK32) @<<
 | 
				
			||||||
 | 
					  $(LINK32_FLAGS) $(LINK32_OBJS)
 | 
				
			||||||
 | 
					<<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PROP BASE Use_MFC 0
 | 
				
			||||||
 | 
					# PROP BASE Use_Debug_Libraries 1
 | 
				
			||||||
 | 
					# PROP BASE Output_Dir "Debug"
 | 
				
			||||||
 | 
					# PROP BASE Intermediate_Dir "Debug"
 | 
				
			||||||
 | 
					# PROP BASE Target_Dir ""
 | 
				
			||||||
 | 
					# PROP Use_MFC 0
 | 
				
			||||||
 | 
					# PROP Use_Debug_Libraries 1
 | 
				
			||||||
 | 
					# PROP Output_Dir "Debug"
 | 
				
			||||||
 | 
					# PROP Intermediate_Dir "Debug"
 | 
				
			||||||
 | 
					# PROP Target_Dir ""
 | 
				
			||||||
 | 
					OUTDIR=.\Debug
 | 
				
			||||||
 | 
					INTDIR=.\Debug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALL : "$(OUTDIR)\zlib.dll"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLEAN : 
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\adler32.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\compress.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\crc32.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\deflate.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gvmat32c.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\gzio.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infblock.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infcodes.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inffast.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inflate.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\inftrees.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\infutil.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\trees.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\uncompr.obj"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\vc40.idb"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\vc40.pdb"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\zlib.res"
 | 
				
			||||||
 | 
						-@erase "$(INTDIR)\zutil.obj"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.dll"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.exp"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.ilk"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.lib"
 | 
				
			||||||
 | 
						-@erase "$(OUTDIR)\zlib.pdb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(OUTDIR)" :
 | 
				
			||||||
 | 
					    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
 | 
				
			||||||
 | 
					# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /YX /c
 | 
				
			||||||
 | 
					CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\
 | 
				
			||||||
 | 
					 /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL"\
 | 
				
			||||||
 | 
					 /Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c 
 | 
				
			||||||
 | 
					CPP_OBJS=.\Debug/
 | 
				
			||||||
 | 
					CPP_SBRS=.\.
 | 
				
			||||||
 | 
					# ADD BASE MTL /nologo /D "_DEBUG" /win32
 | 
				
			||||||
 | 
					# ADD MTL /nologo /D "_DEBUG" /win32
 | 
				
			||||||
 | 
					MTL_PROJ=/nologo /D "_DEBUG" /win32 
 | 
				
			||||||
 | 
					# ADD BASE RSC /l 0x40c /d "_DEBUG"
 | 
				
			||||||
 | 
					# ADD RSC /l 0x40c /d "_DEBUG"
 | 
				
			||||||
 | 
					RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "_DEBUG" 
 | 
				
			||||||
 | 
					BSC32=bscmake.exe
 | 
				
			||||||
 | 
					# ADD BASE BSC32 /nologo
 | 
				
			||||||
 | 
					# ADD BSC32 /nologo
 | 
				
			||||||
 | 
					BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc" 
 | 
				
			||||||
 | 
					BSC32_SBRS= \
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					LINK32=link.exe
 | 
				
			||||||
 | 
					# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
 | 
				
			||||||
 | 
					# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/zlib.dll"
 | 
				
			||||||
 | 
					LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 | 
				
			||||||
 | 
					 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
 | 
				
			||||||
 | 
					 /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)/zlib.pdb" /debug\
 | 
				
			||||||
 | 
					 /machine:I386 /def:".\zlib.def" /out:"$(OUTDIR)/zlib.dll"\
 | 
				
			||||||
 | 
					 /implib:"$(OUTDIR)/zlib.lib" 
 | 
				
			||||||
 | 
					DEF_FILE= \
 | 
				
			||||||
 | 
						".\zlib.def"
 | 
				
			||||||
 | 
					LINK32_OBJS= \
 | 
				
			||||||
 | 
						"$(INTDIR)\adler32.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\compress.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\crc32.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\deflate.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gvmat32c.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\gzio.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infblock.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infcodes.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inffast.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inflate.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\inftrees.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\infutil.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\trees.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\uncompr.obj" \
 | 
				
			||||||
 | 
						"$(INTDIR)\zlib.res" \
 | 
				
			||||||
 | 
						"$(INTDIR)\zutil.obj" \
 | 
				
			||||||
 | 
						".\GVMAT32.obj"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
 | 
				
			||||||
 | 
					    $(LINK32) @<<
 | 
				
			||||||
 | 
					  $(LINK32_FLAGS) $(LINK32_OBJS)
 | 
				
			||||||
 | 
					<<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.c{$(CPP_OBJS)}.obj:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cpp{$(CPP_OBJS)}.obj:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cxx{$(CPP_OBJS)}.obj:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.c{$(CPP_SBRS)}.sbr:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cpp{$(CPP_SBRS)}.sbr:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cxx{$(CPP_SBRS)}.sbr:
 | 
				
			||||||
 | 
					   $(CPP) $(CPP_PROJ) $<  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Name "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					# Name "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\adler32.c
 | 
				
			||||||
 | 
					DEP_CPP_ADLER=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\adler32.sbr" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\compress.c
 | 
				
			||||||
 | 
					DEP_CPP_COMPR=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\compress.sbr" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\crc32.c
 | 
				
			||||||
 | 
					DEP_CPP_CRC32=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\crc32.sbr" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\deflate.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_DEFLA=\
 | 
				
			||||||
 | 
						".\deflate.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\deflate.sbr" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_DEFLA=\
 | 
				
			||||||
 | 
						".\deflate.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					NODEP_CPP_DEFLA=\
 | 
				
			||||||
 | 
						".\local"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\gzio.c
 | 
				
			||||||
 | 
					DEP_CPP_GZIO_=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gzio.sbr" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\infblock.c
 | 
				
			||||||
 | 
					DEP_CPP_INFBL=\
 | 
				
			||||||
 | 
						".\infblock.h"\
 | 
				
			||||||
 | 
						".\infcodes.h"\
 | 
				
			||||||
 | 
						".\inftrees.h"\
 | 
				
			||||||
 | 
						".\infutil.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infblock.sbr" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\infcodes.c
 | 
				
			||||||
 | 
					DEP_CPP_INFCO=\
 | 
				
			||||||
 | 
						".\infblock.h"\
 | 
				
			||||||
 | 
						".\infcodes.h"\
 | 
				
			||||||
 | 
						".\inffast.h"\
 | 
				
			||||||
 | 
						".\inftrees.h"\
 | 
				
			||||||
 | 
						".\infutil.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infcodes.sbr" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\inffast.c
 | 
				
			||||||
 | 
					DEP_CPP_INFFA=\
 | 
				
			||||||
 | 
						".\infblock.h"\
 | 
				
			||||||
 | 
						".\infcodes.h"\
 | 
				
			||||||
 | 
						".\inffast.h"\
 | 
				
			||||||
 | 
						".\inftrees.h"\
 | 
				
			||||||
 | 
						".\infutil.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inffast.sbr" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\inflate.c
 | 
				
			||||||
 | 
					DEP_CPP_INFLA=\
 | 
				
			||||||
 | 
						".\infblock.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inflate.sbr" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\inftrees.c
 | 
				
			||||||
 | 
					DEP_CPP_INFTR=\
 | 
				
			||||||
 | 
						".\inftrees.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inftrees.sbr" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\infutil.c
 | 
				
			||||||
 | 
					DEP_CPP_INFUT=\
 | 
				
			||||||
 | 
						".\infblock.h"\
 | 
				
			||||||
 | 
						".\infcodes.h"\
 | 
				
			||||||
 | 
						".\inftrees.h"\
 | 
				
			||||||
 | 
						".\infutil.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infutil.sbr" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\trees.c
 | 
				
			||||||
 | 
					DEP_CPP_TREES=\
 | 
				
			||||||
 | 
						".\deflate.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\trees.sbr" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\uncompr.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_UNCOM=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\uncompr.sbr" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_UNCOM=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					NODEP_CPP_UNCOM=\
 | 
				
			||||||
 | 
						".\uncompress"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\zutil.c
 | 
				
			||||||
 | 
					DEP_CPP_ZUTIL=\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\zutil.sbr" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\zlib.rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\zlib.res" : $(SOURCE) "$(INTDIR)"
 | 
				
			||||||
 | 
					   $(RSC) $(RSC_PROJ) $(SOURCE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\zlib.def
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\GVMAT32.obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=.\gvmat32c.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_GVMAT=\
 | 
				
			||||||
 | 
						".\deflate.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gvmat32c.sbr" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEP_CPP_GVMAT=\
 | 
				
			||||||
 | 
						".\deflate.h"\
 | 
				
			||||||
 | 
						".\zconf.h"\
 | 
				
			||||||
 | 
						".\zlib.h"\
 | 
				
			||||||
 | 
						".\zutil.h"\
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ENDIF 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					# End Target
 | 
				
			||||||
 | 
					# End Project
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
							
								
								
									
										24
									
								
								contrib/iostream/test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								contrib/iostream/test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#include "zfstream.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Construct a stream object with this filebuffer.  Anything sent
 | 
				
			||||||
 | 
					  // to this stream will go to standard out.
 | 
				
			||||||
 | 
					  gzofstream os( 1, ios::out );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // This text is getting compressed and sent to stdout.
 | 
				
			||||||
 | 
					  // To prove this, run 'test | zcat'.
 | 
				
			||||||
 | 
					  os << "Hello, Mommy" << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  os << setcompressionlevel( Z_NO_COMPRESSION );
 | 
				
			||||||
 | 
					  os << "hello, hello, hi, ho!" << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setcompressionlevel( os, Z_DEFAULT_COMPRESSION )
 | 
				
			||||||
 | 
					    << "I'm compressing again" << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  os.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										329
									
								
								contrib/iostream/zfstream.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								contrib/iostream/zfstream.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,329 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#include <memory.h>
 | 
				
			||||||
 | 
					#include "zfstream.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf::gzfilebuf() :
 | 
				
			||||||
 | 
					  file(NULL),
 | 
				
			||||||
 | 
					  mode(0),
 | 
				
			||||||
 | 
					  own_file_descriptor(0)
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf::~gzfilebuf() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  sync();
 | 
				
			||||||
 | 
					  if ( own_file_descriptor )
 | 
				
			||||||
 | 
					    close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf *gzfilebuf::open( const char *name,
 | 
				
			||||||
 | 
								    int io_mode ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( is_open() )
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  char char_mode[10];
 | 
				
			||||||
 | 
					  char *p;
 | 
				
			||||||
 | 
					  memset(char_mode,'\0',10);
 | 
				
			||||||
 | 
					  p = char_mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( io_mode & ios::in ) {
 | 
				
			||||||
 | 
					    mode = ios::in;
 | 
				
			||||||
 | 
					    *p++ = 'r';
 | 
				
			||||||
 | 
					  } else if ( io_mode & ios::app ) {
 | 
				
			||||||
 | 
					    mode = ios::app;
 | 
				
			||||||
 | 
					    *p++ = 'a';
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    mode = ios::out;
 | 
				
			||||||
 | 
					    *p++ = 'w';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( io_mode & ios::binary ) {
 | 
				
			||||||
 | 
					    mode |= ios::binary;
 | 
				
			||||||
 | 
					    *p++ = 'b';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Hard code the compression level
 | 
				
			||||||
 | 
					  if ( io_mode & (ios::out|ios::app )) {
 | 
				
			||||||
 | 
					    *p++ = '9';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (file = gzopen(name, char_mode)) == NULL )
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  own_file_descriptor = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf *gzfilebuf::attach( int file_descriptor,
 | 
				
			||||||
 | 
								      int io_mode ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( is_open() )
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  char char_mode[10];
 | 
				
			||||||
 | 
					  char *p;
 | 
				
			||||||
 | 
					  memset(char_mode,'\0',10);
 | 
				
			||||||
 | 
					  p = char_mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( io_mode & ios::in ) {
 | 
				
			||||||
 | 
					    mode = ios::in;
 | 
				
			||||||
 | 
					    *p++ = 'r';
 | 
				
			||||||
 | 
					  } else if ( io_mode & ios::app ) {
 | 
				
			||||||
 | 
					    mode = ios::app;
 | 
				
			||||||
 | 
					    *p++ = 'a';
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    mode = ios::out;
 | 
				
			||||||
 | 
					    *p++ = 'w';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( io_mode & ios::binary ) {
 | 
				
			||||||
 | 
					    mode |= ios::binary;
 | 
				
			||||||
 | 
					    *p++ = 'b';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Hard code the compression level
 | 
				
			||||||
 | 
					  if ( io_mode & (ios::out|ios::app )) {
 | 
				
			||||||
 | 
					    *p++ = '9';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (file = gzdopen(file_descriptor, char_mode)) == NULL )
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  own_file_descriptor = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf *gzfilebuf::close() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( is_open() ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sync();
 | 
				
			||||||
 | 
					    gzclose( file );
 | 
				
			||||||
 | 
					    file = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::setcompressionlevel( short comp_level ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return gzsetparams(file, comp_level, -2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::setcompressionstrategy( short comp_strategy ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return gzsetparams(file, -2, comp_strategy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return streampos(EOF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::underflow() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // If the file hasn't been opened for reading, error.
 | 
				
			||||||
 | 
					  if ( !is_open() || !(mode & ios::in) )
 | 
				
			||||||
 | 
					    return EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // if a buffer doesn't exists, allocate one.
 | 
				
			||||||
 | 
					  if ( !base() ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( (allocate()) == EOF )
 | 
				
			||||||
 | 
					      return EOF;
 | 
				
			||||||
 | 
					    setp(0,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( in_avail() )
 | 
				
			||||||
 | 
					      return (unsigned char) *gptr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( out_waiting() ) {
 | 
				
			||||||
 | 
					      if ( flushbuf() == EOF )
 | 
				
			||||||
 | 
						return EOF;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Attempt to fill the buffer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int result = fillbuf();
 | 
				
			||||||
 | 
					  if ( result == EOF ) {
 | 
				
			||||||
 | 
					    // disable get area
 | 
				
			||||||
 | 
					    setg(0,0,0);
 | 
				
			||||||
 | 
					    return EOF;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (unsigned char) *gptr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::overflow( int c ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !is_open() || !(mode & ios::out) )
 | 
				
			||||||
 | 
					    return EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !base() ) {
 | 
				
			||||||
 | 
					    if ( allocate() == EOF )
 | 
				
			||||||
 | 
					      return EOF;
 | 
				
			||||||
 | 
					    setg(0,0,0);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if (in_avail()) {
 | 
				
			||||||
 | 
						return EOF;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (out_waiting()) {
 | 
				
			||||||
 | 
					      if (flushbuf() == EOF)
 | 
				
			||||||
 | 
						return EOF;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int bl = blen();
 | 
				
			||||||
 | 
					  setp( base(), base() + bl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( c != EOF ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *pptr() = c;
 | 
				
			||||||
 | 
					    pbump(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::sync() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !is_open() )
 | 
				
			||||||
 | 
					    return EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( out_waiting() )
 | 
				
			||||||
 | 
					    return flushbuf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::flushbuf() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int n;
 | 
				
			||||||
 | 
					  char *q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  q = pbase();
 | 
				
			||||||
 | 
					  n = pptr() - q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( gzwrite( file, q, n) < n )
 | 
				
			||||||
 | 
					    return EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setp(0,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int gzfilebuf::fillbuf() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int required;
 | 
				
			||||||
 | 
					  char *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  p = base();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  required = blen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int t = gzread( file, p, required );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( t <= 0) return EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setg( base(), base(), base()+t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilestream_common::gzfilestream_common() :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilestream_common::~gzfilestream_common()
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void gzfilestream_common::attach( int fd, int io_mode ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !buffer.attach( fd, io_mode) )
 | 
				
			||||||
 | 
					    clear( ios::failbit | ios::badbit );
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void gzfilestream_common::open( const char *name, int io_mode ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !buffer.open( name, io_mode ) )
 | 
				
			||||||
 | 
					    clear( ios::failbit | ios::badbit );
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void gzfilestream_common::close() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( !buffer.close() )
 | 
				
			||||||
 | 
					    clear( ios::failbit | ios::badbit );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzfilebuf *gzfilestream_common::rdbuf() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return &buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					gzifstream::gzifstream() :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  clear( ios::badbit );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzifstream::gzifstream( const char *name, int io_mode ) :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  gzfilestream_common::open( name, io_mode );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzifstream::gzifstream( int fd, int io_mode ) :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  gzfilestream_common::attach( fd, io_mode );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzifstream::~gzifstream() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzofstream::gzofstream() :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  clear( ios::badbit );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzofstream::gzofstream( const char *name, int io_mode ) :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  gzfilestream_common::open( name, io_mode );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzofstream::gzofstream( int fd, int io_mode ) :
 | 
				
			||||||
 | 
					  ios( gzfilestream_common::rdbuf() )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  gzfilestream_common::attach( fd, io_mode );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzofstream::~gzofstream() { }
 | 
				
			||||||
							
								
								
									
										142
									
								
								contrib/iostream/zfstream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								contrib/iostream/zfstream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _zfstream_h
 | 
				
			||||||
 | 
					#define _zfstream_h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <fstream.h>
 | 
				
			||||||
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class gzfilebuf : public streambuf {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzfilebuf( );
 | 
				
			||||||
 | 
					  virtual ~gzfilebuf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzfilebuf *open( const char *name, int io_mode );
 | 
				
			||||||
 | 
					  gzfilebuf *attach( int file_descriptor, int io_mode );
 | 
				
			||||||
 | 
					  gzfilebuf *close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int setcompressionlevel( short comp_level );
 | 
				
			||||||
 | 
					  int setcompressionstrategy( short comp_strategy );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  inline int is_open() const { return (file !=NULL); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual streampos seekoff( streamoff, ios::seek_dir, int );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual int sync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual int underflow();
 | 
				
			||||||
 | 
					  virtual int overflow( int = EOF );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzFile file;
 | 
				
			||||||
 | 
					  short mode;
 | 
				
			||||||
 | 
					  short own_file_descriptor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int flushbuf();
 | 
				
			||||||
 | 
					  int fillbuf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class gzfilestream_common : virtual public ios {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  friend class gzifstream;
 | 
				
			||||||
 | 
					  friend class gzofstream;
 | 
				
			||||||
 | 
					  friend gzofstream &setcompressionlevel( gzofstream &, int );
 | 
				
			||||||
 | 
					  friend gzofstream &setcompressionstrategy( gzofstream &, int );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  virtual ~gzfilestream_common();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void attach( int fd, int io_mode );
 | 
				
			||||||
 | 
					  void open( const char *name, int io_mode );
 | 
				
			||||||
 | 
					  void close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  gzfilestream_common();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  gzfilebuf *rdbuf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzfilebuf buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class gzifstream : public gzfilestream_common, public istream {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzifstream();
 | 
				
			||||||
 | 
					  gzifstream( const char *name, int io_mode = ios::in );
 | 
				
			||||||
 | 
					  gzifstream( int fd, int io_mode = ios::in );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual ~gzifstream();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class gzofstream : public gzfilestream_common, public ostream {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gzofstream();
 | 
				
			||||||
 | 
					  gzofstream( const char *name, int io_mode = ios::out );
 | 
				
			||||||
 | 
					  gzofstream( int fd, int io_mode = ios::out );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual ~gzofstream();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class T> class gzomanip {
 | 
				
			||||||
 | 
					  friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  gzofstream &(*func)(gzofstream &, T);
 | 
				
			||||||
 | 
					  T val;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class T> gzofstream &operator<<(gzofstream &s,
 | 
				
			||||||
 | 
										 const gzomanip<T> &m) {
 | 
				
			||||||
 | 
					  return (*m.func)(s, m.val);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline gzofstream &setcompressionlevel( gzofstream &s, int l ) {
 | 
				
			||||||
 | 
					  (s.rdbuf())->setcompressionlevel(l);
 | 
				
			||||||
 | 
					  return s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) {
 | 
				
			||||||
 | 
					  (s.rdbuf())->setcompressionstrategy(l);
 | 
				
			||||||
 | 
					  return s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline gzomanip<int> setcompressionlevel(int l)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return gzomanip<int>(&setcompressionlevel,l);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline gzomanip<int> setcompressionstrategy(int l)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return gzomanip<int>(&setcompressionstrategy,l);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										307
									
								
								contrib/iostream2/zstream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								contrib/iostream2/zstream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,307 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) 1997
 | 
				
			||||||
 | 
					 * Christian Michelsen Research AS
 | 
				
			||||||
 | 
					 * Advanced Computing
 | 
				
			||||||
 | 
					 * Fantoftvegen 38, 5036 BERGEN, Norway
 | 
				
			||||||
 | 
					 * http://www.cmr.no
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Permission to use, copy, modify, distribute and sell this software
 | 
				
			||||||
 | 
					 * and its documentation for any purpose is hereby granted without fee,
 | 
				
			||||||
 | 
					 * provided that the above copyright notice appear in all copies and
 | 
				
			||||||
 | 
					 * that both that copyright notice and this permission notice appear
 | 
				
			||||||
 | 
					 * in supporting documentation.  Christian Michelsen Research AS makes no
 | 
				
			||||||
 | 
					 * representations about the suitability of this software for any
 | 
				
			||||||
 | 
					 * purpose.  It is provided "as is" without express or implied warranty.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ZSTREAM__H
 | 
				
			||||||
 | 
					#define ZSTREAM__H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * zstream.h - C++ interface to the 'zlib' general purpose compression library
 | 
				
			||||||
 | 
					 * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <strstream.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(_WIN32)
 | 
				
			||||||
 | 
					#   include <fcntl.h>
 | 
				
			||||||
 | 
					#   include <io.h>
 | 
				
			||||||
 | 
					#   define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#   define SET_BINARY_MODE(file)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class zstringlen {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    zstringlen(class izstream&);
 | 
				
			||||||
 | 
					    zstringlen(class ozstream&, const char*);
 | 
				
			||||||
 | 
					    size_t value() const { return val.word; }
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    struct Val { unsigned char byte; size_t word; } val;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//  ----------------------------- izstream -----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class izstream
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        izstream() : m_fp(0) {}
 | 
				
			||||||
 | 
					        izstream(FILE* fp) : m_fp(0) { open(fp); }
 | 
				
			||||||
 | 
					        izstream(const char* name) : m_fp(0) { open(name); }
 | 
				
			||||||
 | 
					        ~izstream() { close(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Opens a gzip (.gz) file for reading.
 | 
				
			||||||
 | 
					         * open() can be used to read a file which is not in gzip format;
 | 
				
			||||||
 | 
					         * in this case read() will directly read from the file without
 | 
				
			||||||
 | 
					         * decompression. errno can be checked to distinguish two error
 | 
				
			||||||
 | 
					         * cases (if errno is zero, the zlib error is Z_MEM_ERROR).
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        void open(const char* name) {
 | 
				
			||||||
 | 
					            if (m_fp) close();
 | 
				
			||||||
 | 
					            m_fp = ::gzopen(name, "rb");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void open(FILE* fp) {
 | 
				
			||||||
 | 
					            SET_BINARY_MODE(fp);
 | 
				
			||||||
 | 
					            if (m_fp) close();
 | 
				
			||||||
 | 
					            m_fp = ::gzdopen(fileno(fp), "rb");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Flushes all pending input if necessary, closes the compressed file
 | 
				
			||||||
 | 
					         * and deallocates all the (de)compression state. The return value is
 | 
				
			||||||
 | 
					         * the zlib error number (see function error() below).
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        int close() {
 | 
				
			||||||
 | 
					            int r = ::gzclose(m_fp);
 | 
				
			||||||
 | 
					            m_fp = 0; return r;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Binary read the given number of bytes from the compressed file.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        int read(void* buf, size_t len) {
 | 
				
			||||||
 | 
					            return ::gzread(m_fp, buf, len);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Returns the error message for the last error which occurred on the
 | 
				
			||||||
 | 
					         * given compressed file. errnum is set to zlib error number. If an
 | 
				
			||||||
 | 
					         * error occurred in the file system and not in the compression library,
 | 
				
			||||||
 | 
					         * errnum is set to Z_ERRNO and the application may consult errno
 | 
				
			||||||
 | 
					         * to get the exact error code.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        const char* error(int* errnum) {
 | 
				
			||||||
 | 
					            return ::gzerror(m_fp, errnum);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gzFile fp() { return m_fp; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        gzFile m_fp;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Binary read the given (array of) object(s) from the compressed file.
 | 
				
			||||||
 | 
					 * If the input file was not in gzip format, read() copies the objects number
 | 
				
			||||||
 | 
					 * of bytes into the buffer.
 | 
				
			||||||
 | 
					 * returns the number of uncompressed bytes actually read
 | 
				
			||||||
 | 
					 * (0 for end of file, -1 for error).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					template <class T, class Items>
 | 
				
			||||||
 | 
					inline int read(izstream& zs, T* x, Items items) {
 | 
				
			||||||
 | 
					    return ::gzread(zs.fp(), x, items*sizeof(T));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Binary input with the '>' operator.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					template <class T>
 | 
				
			||||||
 | 
					inline izstream& operator>(izstream& zs, T& x) {
 | 
				
			||||||
 | 
					    ::gzread(zs.fp(), &x, sizeof(T));
 | 
				
			||||||
 | 
					    return zs;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline zstringlen::zstringlen(izstream& zs) {
 | 
				
			||||||
 | 
					    zs > val.byte;
 | 
				
			||||||
 | 
					    if (val.byte == 255) zs > val.word;
 | 
				
			||||||
 | 
					    else val.word = val.byte;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Read length of string + the string with the '>' operator.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					inline izstream& operator>(izstream& zs, char* x) {
 | 
				
			||||||
 | 
					    zstringlen len(zs);
 | 
				
			||||||
 | 
					    ::gzread(zs.fp(), x, len.value());
 | 
				
			||||||
 | 
					    x[len.value()] = '\0';
 | 
				
			||||||
 | 
					    return zs;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline char* read_string(izstream& zs) {
 | 
				
			||||||
 | 
					    zstringlen len(zs);
 | 
				
			||||||
 | 
					    char* x = new char[len.value()+1];
 | 
				
			||||||
 | 
					    ::gzread(zs.fp(), x, len.value());
 | 
				
			||||||
 | 
					    x[len.value()] = '\0';
 | 
				
			||||||
 | 
					    return x;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------- ozstream -----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ozstream
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        ozstream() : m_fp(0), m_os(0) {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION)
 | 
				
			||||||
 | 
					            : m_fp(0), m_os(0) {
 | 
				
			||||||
 | 
					            open(fp, level);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION)
 | 
				
			||||||
 | 
					            : m_fp(0), m_os(0) {
 | 
				
			||||||
 | 
					            open(name, level);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ~ozstream() {
 | 
				
			||||||
 | 
					            close();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Opens a gzip (.gz) file for writing.
 | 
				
			||||||
 | 
					         * The compression level parameter should be in 0..9
 | 
				
			||||||
 | 
					         * errno can be checked to distinguish two error cases
 | 
				
			||||||
 | 
					         * (if errno is zero, the zlib error is Z_MEM_ERROR).
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        void open(const char* name, int level = Z_DEFAULT_COMPRESSION) {
 | 
				
			||||||
 | 
					            char mode[4] = "wb\0";
 | 
				
			||||||
 | 
					            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
 | 
				
			||||||
 | 
					            if (m_fp) close();
 | 
				
			||||||
 | 
					            m_fp = ::gzopen(name, mode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* open from a FILE pointer.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) {
 | 
				
			||||||
 | 
					            SET_BINARY_MODE(fp);
 | 
				
			||||||
 | 
					            char mode[4] = "wb\0";
 | 
				
			||||||
 | 
					            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
 | 
				
			||||||
 | 
					            if (m_fp) close();
 | 
				
			||||||
 | 
					            m_fp = ::gzdopen(fileno(fp), mode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Flushes all pending output if necessary, closes the compressed file
 | 
				
			||||||
 | 
					         * and deallocates all the (de)compression state. The return value is
 | 
				
			||||||
 | 
					         * the zlib error number (see function error() below).
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        int close() {
 | 
				
			||||||
 | 
					            if (m_os) {
 | 
				
			||||||
 | 
					                ::gzwrite(m_fp, m_os->str(), m_os->pcount());
 | 
				
			||||||
 | 
					                delete[] m_os->str(); delete m_os; m_os = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            int r = ::gzclose(m_fp); m_fp = 0; return r;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Binary write the given number of bytes into the compressed file.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        int write(const void* buf, size_t len) {
 | 
				
			||||||
 | 
					            return ::gzwrite(m_fp, (voidp) buf, len);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Flushes all pending output into the compressed file. The parameter
 | 
				
			||||||
 | 
					         * _flush is as in the deflate() function. The return value is the zlib
 | 
				
			||||||
 | 
					         * error number (see function gzerror below). flush() returns Z_OK if
 | 
				
			||||||
 | 
					         * the flush_ parameter is Z_FINISH and all output could be flushed.
 | 
				
			||||||
 | 
					         * flush() should be called only when strictly necessary because it can
 | 
				
			||||||
 | 
					         * degrade compression.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        int flush(int _flush) {
 | 
				
			||||||
 | 
					            os_flush();
 | 
				
			||||||
 | 
					            return ::gzflush(m_fp, _flush);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Returns the error message for the last error which occurred on the
 | 
				
			||||||
 | 
					         * given compressed file. errnum is set to zlib error number. If an
 | 
				
			||||||
 | 
					         * error occurred in the file system and not in the compression library,
 | 
				
			||||||
 | 
					         * errnum is set to Z_ERRNO and the application may consult errno
 | 
				
			||||||
 | 
					         * to get the exact error code.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        const char* error(int* errnum) {
 | 
				
			||||||
 | 
					            return ::gzerror(m_fp, errnum);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gzFile fp() { return m_fp; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ostream& os() {
 | 
				
			||||||
 | 
					            if (m_os == 0) m_os = new ostrstream;
 | 
				
			||||||
 | 
					            return *m_os;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void os_flush() {
 | 
				
			||||||
 | 
					            if (m_os && m_os->pcount()>0) {
 | 
				
			||||||
 | 
					                ostrstream* oss = new ostrstream;
 | 
				
			||||||
 | 
					                oss->fill(m_os->fill());
 | 
				
			||||||
 | 
					                oss->flags(m_os->flags());
 | 
				
			||||||
 | 
					                oss->precision(m_os->precision());
 | 
				
			||||||
 | 
					                oss->width(m_os->width());
 | 
				
			||||||
 | 
					                ::gzwrite(m_fp, m_os->str(), m_os->pcount());
 | 
				
			||||||
 | 
					                delete[] m_os->str(); delete m_os; m_os = oss;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        gzFile m_fp;
 | 
				
			||||||
 | 
					        ostrstream* m_os;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Binary write the given (array of) object(s) into the compressed file.
 | 
				
			||||||
 | 
					 * returns the number of uncompressed bytes actually written
 | 
				
			||||||
 | 
					 * (0 in case of error).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					template <class T, class Items>
 | 
				
			||||||
 | 
					inline int write(ozstream& zs, const T* x, Items items) {
 | 
				
			||||||
 | 
					    return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Binary output with the '<' operator.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					template <class T>
 | 
				
			||||||
 | 
					inline ozstream& operator<(ozstream& zs, const T& x) {
 | 
				
			||||||
 | 
					    ::gzwrite(zs.fp(), (voidp) &x, sizeof(T));
 | 
				
			||||||
 | 
					    return zs;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline zstringlen::zstringlen(ozstream& zs, const char* x) {
 | 
				
			||||||
 | 
					    val.byte = 255;  val.word = ::strlen(x);
 | 
				
			||||||
 | 
					    if (val.word < 255) zs < (val.byte = val.word);
 | 
				
			||||||
 | 
					    else zs < val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Write length of string + the string with the '<' operator.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					inline ozstream& operator<(ozstream& zs, const char* x) {
 | 
				
			||||||
 | 
					    zstringlen len(zs, x);
 | 
				
			||||||
 | 
					    ::gzwrite(zs.fp(), (voidp) x, len.value());
 | 
				
			||||||
 | 
					    return zs;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef _MSC_VER
 | 
				
			||||||
 | 
					inline ozstream& operator<(ozstream& zs, char* const& x) {
 | 
				
			||||||
 | 
					    return zs < (const char*) x;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Ascii write with the << operator;
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					template <class T>
 | 
				
			||||||
 | 
					inline ostream& operator<<(ozstream& zs, const T& x) {
 | 
				
			||||||
 | 
					    zs.os_flush();
 | 
				
			||||||
 | 
					    return zs.os() << x;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										25
									
								
								contrib/iostream2/zstream_test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								contrib/iostream2/zstream_test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					#include "zstream.h"
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <iomanip.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main() {
 | 
				
			||||||
 | 
						char h[256] = "Hello";
 | 
				
			||||||
 | 
						char* g = "Goodbye";
 | 
				
			||||||
 | 
						ozstream out("temp.gz");
 | 
				
			||||||
 | 
					    out < "This works well" < h < g;
 | 
				
			||||||
 | 
					    out.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    izstream in("temp.gz"); // read it back
 | 
				
			||||||
 | 
					    char *x = read_string(in), *y = new char[256], z[256];
 | 
				
			||||||
 | 
					    in > y > z;
 | 
				
			||||||
 | 
					    in.close();
 | 
				
			||||||
 | 
					    cout << x << endl << y << endl << z << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results
 | 
				
			||||||
 | 
					    out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl;
 | 
				
			||||||
 | 
					    out << z << endl << y << endl << x << endl;
 | 
				
			||||||
 | 
					    out << 1.1234567890123456789 << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    delete[] x; delete[] y;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								contrib/untgz/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								contrib/untgz/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					CC=cc
 | 
				
			||||||
 | 
					CFLAGS=-g
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					untgz: untgz.o  ../../libz.a
 | 
				
			||||||
 | 
						$(CC) $(CFLAGS) -o untgz  untgz.o -L../.. -lz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					untgz.o: untgz.c ../../zlib.h
 | 
				
			||||||
 | 
						$(CC) $(CFLAGS) -c -I../.. untgz.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					../../libz.a:
 | 
				
			||||||
 | 
						cd ../..; make
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -f untgz untgz.o *~
 | 
				
			||||||
							
								
								
									
										63
									
								
								contrib/untgz/makefile.w32
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								contrib/untgz/makefile.w32
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					# Makefile for zlib.  Modified for mingw32
 | 
				
			||||||
 | 
					# For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To compile, 
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					#   make -fmakefile.w32
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CC=gcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate dependencies (see end of the file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPPFLAGS=-MMD 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#CFLAGS=-MMD -O
 | 
				
			||||||
 | 
					#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
 | 
				
			||||||
 | 
					#CFLAGS=-MMD -g -DDEBUG
 | 
				
			||||||
 | 
					CFLAGS=-O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 | 
				
			||||||
 | 
					             -Wstrict-prototypes -Wmissing-prototypes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If cp.exe is not found, replace with copy /Y .
 | 
				
			||||||
 | 
					CP=cp -f
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The default value of RM is "rm -f."  
 | 
				
			||||||
 | 
					# If "rm.exe" is not found, uncomment:
 | 
				
			||||||
 | 
					# RM=del
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LD=gcc
 | 
				
			||||||
 | 
					LDLIBS=-L. -lz
 | 
				
			||||||
 | 
					LDFLAGS=-s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCL=zlib.h zconf.h
 | 
				
			||||||
 | 
					LIBS=libz.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AR=ar rcs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
				
			||||||
 | 
					       zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o \
 | 
				
			||||||
 | 
					       inffast.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST_OBJS = minigzip.o untgz.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: minigzip.exe untgz.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rebuild:	clean	all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libz.a: $(OBJS)
 | 
				
			||||||
 | 
						$(AR) $@ $(OBJS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%.exe : %.o $(LIBS)
 | 
				
			||||||
 | 
						$(LD) $(LDFLAGS) -o $@ $< $(LDLIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY : clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						$(RM) *.d *.o *.exe libz.a foo.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEPS := $(wildcard *.d)
 | 
				
			||||||
 | 
					ifneq ($(DEPS),)
 | 
				
			||||||
 | 
					include $(DEPS)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										478
									
								
								contrib/untgz/untgz.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										478
									
								
								contrib/untgz/untgz.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,478 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * untgz.c -- Display contents and/or extract file from
 | 
				
			||||||
 | 
					 * a gzip'd TAR file
 | 
				
			||||||
 | 
					 * written by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
				
			||||||
 | 
					 * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <utime.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <fcntl.h>
 | 
				
			||||||
 | 
					#ifdef unix
 | 
				
			||||||
 | 
					# include <unistd.h>
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# include <direct.h>
 | 
				
			||||||
 | 
					# include <io.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Values used in typeflag field.  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define REGTYPE	 '0'		/* regular file */
 | 
				
			||||||
 | 
					#define AREGTYPE '\0'		/* regular file */
 | 
				
			||||||
 | 
					#define LNKTYPE  '1'		/* link */
 | 
				
			||||||
 | 
					#define SYMTYPE  '2'		/* reserved */
 | 
				
			||||||
 | 
					#define CHRTYPE  '3'		/* character special */
 | 
				
			||||||
 | 
					#define BLKTYPE  '4'		/* block special */
 | 
				
			||||||
 | 
					#define DIRTYPE  '5'		/* directory */
 | 
				
			||||||
 | 
					#define FIFOTYPE '6'		/* FIFO special */
 | 
				
			||||||
 | 
					#define CONTTYPE '7'		/* reserved */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BLOCKSIZE 512
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct tar_header
 | 
				
			||||||
 | 
					{				/* byte offset */
 | 
				
			||||||
 | 
					  char name[100];		/*   0 */
 | 
				
			||||||
 | 
					  char mode[8];			/* 100 */
 | 
				
			||||||
 | 
					  char uid[8];			/* 108 */
 | 
				
			||||||
 | 
					  char gid[8];			/* 116 */
 | 
				
			||||||
 | 
					  char size[12];		/* 124 */
 | 
				
			||||||
 | 
					  char mtime[12];		/* 136 */
 | 
				
			||||||
 | 
					  char chksum[8];		/* 148 */
 | 
				
			||||||
 | 
					  char typeflag;		/* 156 */
 | 
				
			||||||
 | 
					  char linkname[100];		/* 157 */
 | 
				
			||||||
 | 
					  char magic[6];		/* 257 */
 | 
				
			||||||
 | 
					  char version[2];		/* 263 */
 | 
				
			||||||
 | 
					  char uname[32];		/* 265 */
 | 
				
			||||||
 | 
					  char gname[32];		/* 297 */
 | 
				
			||||||
 | 
					  char devmajor[8];		/* 329 */
 | 
				
			||||||
 | 
					  char devminor[8];		/* 337 */
 | 
				
			||||||
 | 
					  char prefix[155];		/* 345 */
 | 
				
			||||||
 | 
									/* 500 */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					union tar_buffer {
 | 
				
			||||||
 | 
					  char               buffer[BLOCKSIZE];
 | 
				
			||||||
 | 
					  struct tar_header  header;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum { TGZ_EXTRACT = 0, TGZ_LIST };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *TGZfname	OF((const char *));
 | 
				
			||||||
 | 
					void TGZnotfound	OF((const char *));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int getoct		OF((char *, int));
 | 
				
			||||||
 | 
					char *strtime		OF((time_t *));
 | 
				
			||||||
 | 
					int ExprMatch		OF((char *,char *));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int makedir		OF((char *));
 | 
				
			||||||
 | 
					int matchname		OF((int,int,char **,char *));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void error		OF((const char *));
 | 
				
			||||||
 | 
					int  tar		OF((gzFile, int, int, int, char **));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void help		OF((int));
 | 
				
			||||||
 | 
					int main		OF((int, char **));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *prog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This will give a benign warning */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", NULL };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Return the real name of the TGZ archive */
 | 
				
			||||||
 | 
					/* or NULL if it does not exist. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *TGZfname OF((const char *fname))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  static char buffer[1024];
 | 
				
			||||||
 | 
					  int origlen,i;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  strcpy(buffer,fname);
 | 
				
			||||||
 | 
					  origlen = strlen(buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (i=0; TGZprefix[i]; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       strcpy(buffer+origlen,TGZprefix[i]);
 | 
				
			||||||
 | 
					       if (access(buffer,F_OK) == 0)
 | 
				
			||||||
 | 
					         return buffer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* error message for the filename */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TGZnotfound OF((const char *fname))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fprintf(stderr,"%s : couldn't find ",prog);
 | 
				
			||||||
 | 
					  for (i=0;TGZprefix[i];i++)
 | 
				
			||||||
 | 
					    fprintf(stderr,(TGZprefix[i+1]) ? "%s%s, " : "or %s%s\n",
 | 
				
			||||||
 | 
					            fname,
 | 
				
			||||||
 | 
					            TGZprefix[i]);
 | 
				
			||||||
 | 
					  exit(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* help functions */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int getoct(char *p,int width)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int result = 0;
 | 
				
			||||||
 | 
					  char c;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  while (width --)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      c = *p++;
 | 
				
			||||||
 | 
					      if (c == ' ')
 | 
				
			||||||
 | 
						continue;
 | 
				
			||||||
 | 
					      if (c == 0)
 | 
				
			||||||
 | 
						break;
 | 
				
			||||||
 | 
					      result = result * 8 + (c - '0');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *strtime (time_t *t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  struct tm   *local;
 | 
				
			||||||
 | 
					  static char result[32];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local = localtime(t);
 | 
				
			||||||
 | 
					  sprintf(result,"%2d/%02d/%4d %02d:%02d:%02d",
 | 
				
			||||||
 | 
						  local->tm_mday, local->tm_mon+1, local->tm_year+1900,
 | 
				
			||||||
 | 
						  local->tm_hour, local->tm_min,   local->tm_sec);
 | 
				
			||||||
 | 
					  return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* regular expression matching */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ExprMatch(char *string,char *expr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  while (1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (ISSPECIAL(*expr))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  if (*expr == '/')
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      if (*string != '\\' && *string != '/')
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						      string ++; expr++;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						  else if (*expr == '*')
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      if (*expr ++ == 0)
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						      while (*++string != *expr)
 | 
				
			||||||
 | 
							if (*string == 0)
 | 
				
			||||||
 | 
							  return 0;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  if (*string != *expr)
 | 
				
			||||||
 | 
						    return 0;
 | 
				
			||||||
 | 
						  if (*expr++ == 0)
 | 
				
			||||||
 | 
						    return 1;
 | 
				
			||||||
 | 
						  string++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* recursive make directory */
 | 
				
			||||||
 | 
					/* abort if you get an ENOENT errno somewhere in the middle */
 | 
				
			||||||
 | 
					/* e.g. ignore error "mkdir on existing directory" */
 | 
				
			||||||
 | 
					/* */
 | 
				
			||||||
 | 
					/* return 1 if OK */
 | 
				
			||||||
 | 
					/*        0 on error */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int makedir (char *newdir)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  char *buffer = strdup(newdir);
 | 
				
			||||||
 | 
					  char *p;
 | 
				
			||||||
 | 
					  int  len = strlen(buffer);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (len <= 0) {
 | 
				
			||||||
 | 
					    free(buffer);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (buffer[len-1] == '/') {
 | 
				
			||||||
 | 
					    buffer[len-1] = '\0';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (mkdir(buffer, 0775) == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      free(buffer);
 | 
				
			||||||
 | 
					      return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  p = buffer+1;
 | 
				
			||||||
 | 
					  while (1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      char hold;
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      while(*p && *p != '\\' && *p != '/')
 | 
				
			||||||
 | 
						p++;
 | 
				
			||||||
 | 
					      hold = *p;
 | 
				
			||||||
 | 
					      *p = 0;
 | 
				
			||||||
 | 
					      if ((mkdir(buffer, 0775) == -1) && (errno == ENOENT))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  fprintf(stderr,"%s: couldn't create directory %s\n",prog,buffer);
 | 
				
			||||||
 | 
						  free(buffer);
 | 
				
			||||||
 | 
						  return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      if (hold == 0)
 | 
				
			||||||
 | 
						break;
 | 
				
			||||||
 | 
					      *p++ = hold;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  free(buffer);
 | 
				
			||||||
 | 
					  return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int matchname (int arg,int argc,char **argv,char *fname)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (arg == argc)		/* no arguments given (untgz tgzarchive) */
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while (arg < argc)
 | 
				
			||||||
 | 
					    if (ExprMatch(fname,argv[arg++]))
 | 
				
			||||||
 | 
					      return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0; /* ignore this for the moment being */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Tar file list or extract */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int tar (gzFile in,int action,int arg,int argc,char **argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  union  tar_buffer buffer;
 | 
				
			||||||
 | 
					  int    len;
 | 
				
			||||||
 | 
					  int    err;
 | 
				
			||||||
 | 
					  int    getheader = 1;
 | 
				
			||||||
 | 
					  int    remaining = 0;
 | 
				
			||||||
 | 
					  FILE   *outfile = NULL;
 | 
				
			||||||
 | 
					  char   fname[BLOCKSIZE];
 | 
				
			||||||
 | 
					  time_t tartime;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (action == TGZ_LIST)
 | 
				
			||||||
 | 
					    printf("     day      time     size                       file\n"
 | 
				
			||||||
 | 
						   " ---------- -------- --------- -------------------------------------\n");
 | 
				
			||||||
 | 
					  while (1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      len = gzread(in, &buffer, BLOCKSIZE);
 | 
				
			||||||
 | 
					      if (len < 0)
 | 
				
			||||||
 | 
						error (gzerror(in, &err));
 | 
				
			||||||
 | 
					      /*
 | 
				
			||||||
 | 
					       * if we met the end of the tar
 | 
				
			||||||
 | 
					       * or the end-of-tar block,
 | 
				
			||||||
 | 
					       * we are done
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      if ((len == 0)  || (buffer.header.name[0]== 0))
 | 
				
			||||||
 | 
						break;
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      /*
 | 
				
			||||||
 | 
					       * Always expect complete blocks to process
 | 
				
			||||||
 | 
					       * the tar information.
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      if (len != BLOCKSIZE)
 | 
				
			||||||
 | 
						error("gzread: incomplete block read");
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      /*
 | 
				
			||||||
 | 
					       * If we have to get a tar header
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      if (getheader == 1)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  tartime = (time_t)getoct(buffer.header.mtime,12);
 | 
				
			||||||
 | 
						  strcpy(fname,buffer.header.name);
 | 
				
			||||||
 | 
						  
 | 
				
			||||||
 | 
						  switch (buffer.header.typeflag)
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						    case DIRTYPE:
 | 
				
			||||||
 | 
						      if (action == TGZ_LIST)
 | 
				
			||||||
 | 
							printf(" %s     <dir> %s\n",strtime(&tartime),fname);
 | 
				
			||||||
 | 
						      if (action == TGZ_EXTRACT)
 | 
				
			||||||
 | 
							makedir(fname);
 | 
				
			||||||
 | 
						      break;
 | 
				
			||||||
 | 
						    case REGTYPE:
 | 
				
			||||||
 | 
						    case AREGTYPE:
 | 
				
			||||||
 | 
						      remaining = getoct(buffer.header.size,12);
 | 
				
			||||||
 | 
						      if (action == TGZ_LIST)
 | 
				
			||||||
 | 
							printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
 | 
				
			||||||
 | 
						      if (action == TGZ_EXTRACT)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							  if ((remaining) && (matchname(arg,argc,argv,fname)))
 | 
				
			||||||
 | 
							    {
 | 
				
			||||||
 | 
							      outfile = fopen(fname,"wb");
 | 
				
			||||||
 | 
							      if (outfile == NULL) {
 | 
				
			||||||
 | 
								/* try creating directory */
 | 
				
			||||||
 | 
								char *p = strrchr(fname, '/');
 | 
				
			||||||
 | 
								if (p != NULL) {
 | 
				
			||||||
 | 
								  *p = '\0';
 | 
				
			||||||
 | 
								  makedir(fname);
 | 
				
			||||||
 | 
								  *p = '/';
 | 
				
			||||||
 | 
								  outfile = fopen(fname,"wb");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							      }
 | 
				
			||||||
 | 
							      fprintf(stderr,
 | 
				
			||||||
 | 
								      "%s %s\n",
 | 
				
			||||||
 | 
								      (outfile) ? "Extracting" : "Couldn't create",
 | 
				
			||||||
 | 
								      fname);
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
 | 
							  else
 | 
				
			||||||
 | 
							    outfile = NULL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						      /*
 | 
				
			||||||
 | 
						       * could have no contents
 | 
				
			||||||
 | 
						       */
 | 
				
			||||||
 | 
						      getheader = (remaining) ? 0 : 1;
 | 
				
			||||||
 | 
						      break;
 | 
				
			||||||
 | 
						    default:
 | 
				
			||||||
 | 
						      if (action == TGZ_LIST)
 | 
				
			||||||
 | 
							printf(" %s     <---> %s\n",strtime(&tartime),fname);
 | 
				
			||||||
 | 
						      break;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  if ((action == TGZ_EXTRACT) && (outfile != NULL))
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							  fprintf(stderr,"%s : error writing %s skipping...\n",prog,fname);
 | 
				
			||||||
 | 
							  fclose(outfile);
 | 
				
			||||||
 | 
							  unlink(fname);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						  remaining -= bytes;
 | 
				
			||||||
 | 
						  if (remaining == 0)
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      getheader = 1;
 | 
				
			||||||
 | 
						      if ((action == TGZ_EXTRACT) && (outfile != NULL))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							  struct utimbuf settime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							  settime.actime = settime.modtime = tartime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							  fclose(outfile);
 | 
				
			||||||
 | 
							  outfile = NULL;
 | 
				
			||||||
 | 
							  utime(fname,&settime);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (gzclose(in) != Z_OK)
 | 
				
			||||||
 | 
					    error("failed gzclose");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* =========================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void help(int exitval)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  fprintf(stderr,
 | 
				
			||||||
 | 
						  "untgz v 0.1\n"
 | 
				
			||||||
 | 
						  " an sample application of zlib 1.0.4\n\n"
 | 
				
			||||||
 | 
					          "Usage : untgz TGZfile            to extract all files\n"
 | 
				
			||||||
 | 
					          "        untgz TGZfile fname ...  to extract selected files\n"
 | 
				
			||||||
 | 
					          "        untgz -l TGZfile         to list archive contents\n"
 | 
				
			||||||
 | 
					          "        untgz -h                 to display this help\n\n");
 | 
				
			||||||
 | 
					  exit(exitval);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void error(const char *msg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    fprintf(stderr, "%s: %s\n", prog, msg);
 | 
				
			||||||
 | 
					    exit(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ====================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int _CRT_glob = 0;	/* disable globbing of the arguments */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc,char **argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int 	action = TGZ_EXTRACT;
 | 
				
			||||||
 | 
					    int 	arg = 1;
 | 
				
			||||||
 | 
					    char	*TGZfile;
 | 
				
			||||||
 | 
					    gzFile	*f;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    prog = strrchr(argv[0],'\\');
 | 
				
			||||||
 | 
					    if (prog == NULL)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						prog = strrchr(argv[0],'/');
 | 
				
			||||||
 | 
						if (prog == NULL)
 | 
				
			||||||
 | 
						  {
 | 
				
			||||||
 | 
						    prog = strrchr(argv[0],':');
 | 
				
			||||||
 | 
						    if (prog == NULL)
 | 
				
			||||||
 | 
						      prog = argv[0];
 | 
				
			||||||
 | 
						    else
 | 
				
			||||||
 | 
						      prog++;
 | 
				
			||||||
 | 
						  }
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						  prog++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      prog++;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (argc == 1)
 | 
				
			||||||
 | 
					      help(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (strcmp(argv[arg],"-l") == 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						action = TGZ_LIST;
 | 
				
			||||||
 | 
						if (argc == ++arg)
 | 
				
			||||||
 | 
						  help(0);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    else if (strcmp(argv[arg],"-h") == 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						help(0);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((TGZfile = TGZfname(argv[arg])) == NULL)
 | 
				
			||||||
 | 
					      TGZnotfound(argv[arg]);            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ++arg;
 | 
				
			||||||
 | 
					    if ((action == TGZ_LIST) && (arg != argc))
 | 
				
			||||||
 | 
					      help(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *  Process the TGZ file
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					    switch(action)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					      case TGZ_LIST:
 | 
				
			||||||
 | 
					      case TGZ_EXTRACT:
 | 
				
			||||||
 | 
						f = gzopen(TGZfile,"rb");
 | 
				
			||||||
 | 
						if (f == NULL)
 | 
				
			||||||
 | 
						  {
 | 
				
			||||||
 | 
						    fprintf(stderr,"%s: Couldn't gzopen %s\n",
 | 
				
			||||||
 | 
							    prog,
 | 
				
			||||||
 | 
							    TGZfile);
 | 
				
			||||||
 | 
						    return 1;
 | 
				
			||||||
 | 
						  }
 | 
				
			||||||
 | 
						exit(tar(f, action, arg, argc, argv));
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					      default:
 | 
				
			||||||
 | 
						error("Unknown option!");
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										57
									
								
								contrib/visual-basic.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								contrib/visual-basic.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					From: "Jon Caruana" <jon-net@usa.net>
 | 
				
			||||||
 | 
					To: "Jean-loup Gailly" <gzip@prep.ai.mit.edu>
 | 
				
			||||||
 | 
					Subject: Re: How to port zlib declares to vb?
 | 
				
			||||||
 | 
					Date: Mon, 28 Oct 1996 18:33:03 -0600
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Got the answer! (I haven't had time to check this but it's what I got, and
 | 
				
			||||||
 | 
					looks correct):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					He has the following routines working:
 | 
				
			||||||
 | 
					        compress
 | 
				
			||||||
 | 
					        uncompress
 | 
				
			||||||
 | 
					        gzopen
 | 
				
			||||||
 | 
					        gzwrite
 | 
				
			||||||
 | 
					        gzread
 | 
				
			||||||
 | 
					        gzclose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#If Win16 Then   'Use Win16 calls.
 | 
				
			||||||
 | 
					Declare Function compress Lib "ZLIB.DLL" (ByVal compr As
 | 
				
			||||||
 | 
					        String, comprLen As Any, ByVal buf As String, ByVal buflen
 | 
				
			||||||
 | 
					        As Long) As Integer
 | 
				
			||||||
 | 
					Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr
 | 
				
			||||||
 | 
					        As String, uncomprLen As Any, ByVal compr As String, ByVal
 | 
				
			||||||
 | 
					        lcompr As Long) As Integer
 | 
				
			||||||
 | 
					Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As
 | 
				
			||||||
 | 
					        String, ByVal mode As String) As Long
 | 
				
			||||||
 | 
					Declare Function gzread Lib "ZLIB.DLL" (ByVal file As
 | 
				
			||||||
 | 
					        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
 | 
				
			||||||
 | 
					        As Integer
 | 
				
			||||||
 | 
					Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
 | 
				
			||||||
 | 
					        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
 | 
				
			||||||
 | 
					        As Integer
 | 
				
			||||||
 | 
					Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
 | 
				
			||||||
 | 
					        Long) As Integer
 | 
				
			||||||
 | 
					#Else
 | 
				
			||||||
 | 
					Declare Function compress Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal compr As String, comprLen As Any, ByVal buf As
 | 
				
			||||||
 | 
					        String, ByVal buflen As Long) As Integer
 | 
				
			||||||
 | 
					Declare Function uncompress Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal uncompr As String, uncomprLen As Any, ByVal compr As
 | 
				
			||||||
 | 
					        String, ByVal lcompr As Long) As Long
 | 
				
			||||||
 | 
					Declare Function gzopen Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal file As String, ByVal mode As String) As Long
 | 
				
			||||||
 | 
					Declare Function gzread Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal file As Long, ByVal uncompr As String, ByVal
 | 
				
			||||||
 | 
					        uncomprLen As Long) As Long
 | 
				
			||||||
 | 
					Declare Function gzwrite Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal file As Long, ByVal uncompr As String, ByVal
 | 
				
			||||||
 | 
					        uncomprLen As Long) As Long
 | 
				
			||||||
 | 
					Declare Function gzclose Lib "ZLIB32.DLL"
 | 
				
			||||||
 | 
					        (ByVal file As Long) As Long
 | 
				
			||||||
 | 
					#End If
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-Jon Caruana
 | 
				
			||||||
 | 
					jon-net@usa.net
 | 
				
			||||||
 | 
					Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
 | 
				
			||||||
							
								
								
									
										8
									
								
								crc32.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								crc32.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* crc32.c -- compute the CRC-32 of a data stream
 | 
					/* crc32.c -- compute the CRC-32 of a data stream
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: crc32.c,v 1.8 1996/01/30 21:59:10 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,7 +124,7 @@ local uLongf crc_table[256] = {
 | 
				
			|||||||
/* =========================================================================
 | 
					/* =========================================================================
 | 
				
			||||||
 * This function can be used by asm versions of crc32()
 | 
					 * This function can be used by asm versions of crc32()
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
uLongf *get_crc_table()
 | 
					uLongf * EXPORT get_crc_table()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DYNAMIC_CRC_TABLE
 | 
					#ifdef DYNAMIC_CRC_TABLE
 | 
				
			||||||
  if (crc_table_empty) make_crc_table();
 | 
					  if (crc_table_empty) make_crc_table();
 | 
				
			||||||
@@ -139,7 +139,7 @@ uLongf *get_crc_table()
 | 
				
			|||||||
#define DO8(buf)  DO4(buf); DO4(buf);
 | 
					#define DO8(buf)  DO4(buf); DO4(buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
uLong crc32(crc, buf, len)
 | 
					uLong EXPORT crc32(crc, buf, len)
 | 
				
			||||||
    uLong crc;
 | 
					    uLong crc;
 | 
				
			||||||
    const Bytef *buf;
 | 
					    const Bytef *buf;
 | 
				
			||||||
    uInt len;
 | 
					    uInt len;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										167
									
								
								deflate.c
									
									
									
									
									
								
							
							
						
						
									
										167
									
								
								deflate.c
									
									
									
									
									
								
							@@ -36,8 +36,8 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 *  REFERENCES
 | 
					 *  REFERENCES
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
 | 
					 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
 | 
				
			||||||
 *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
 | 
					 *      Available in ftp://ds.internic.net/rfc/rfc1951.txt
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *      A description of the Rabin and Karp algorithm is given in the book
 | 
					 *      A description of the Rabin and Karp algorithm is given in the book
 | 
				
			||||||
 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
 | 
					 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
 | 
				
			||||||
@@ -47,10 +47,12 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "deflate.h"
 | 
					#include "deflate.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char deflate_copyright[] = " deflate 1.0.5 Copyright 1995-1998 Jean-loup Gailly ";
 | 
					const char deflate_copyright[] =
 | 
				
			||||||
 | 
					   " deflate 1.0.7 Copyright 1995-1998 Jean-loup Gailly ";
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
  If you use the zlib library in a product, an acknowledgment is welcome
 | 
					  If you use the zlib library in a product, an acknowledgment is welcome
 | 
				
			||||||
  in the documentation of your product. If for some reason you cannot
 | 
					  in the documentation of your product. If for some reason you cannot
 | 
				
			||||||
@@ -76,12 +78,14 @@ local block_state deflate_stored OF((deflate_state *s, int flush));
 | 
				
			|||||||
local block_state deflate_fast   OF((deflate_state *s, int flush));
 | 
					local block_state deflate_fast   OF((deflate_state *s, int flush));
 | 
				
			||||||
local block_state deflate_slow   OF((deflate_state *s, int flush));
 | 
					local block_state deflate_slow   OF((deflate_state *s, int flush));
 | 
				
			||||||
local void lm_init        OF((deflate_state *s));
 | 
					local void lm_init        OF((deflate_state *s));
 | 
				
			||||||
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
					 | 
				
			||||||
local void putShortMSB    OF((deflate_state *s, uInt b));
 | 
					local void putShortMSB    OF((deflate_state *s, uInt b));
 | 
				
			||||||
local void flush_pending  OF((z_streamp strm));
 | 
					local void flush_pending  OF((z_streamp strm));
 | 
				
			||||||
local int read_buf        OF((z_streamp strm, charf *buf, unsigned size));
 | 
					local int read_buf        OF((z_streamp strm, charf *buf, unsigned size));
 | 
				
			||||||
#ifdef ASMV
 | 
					#ifdef ASMV
 | 
				
			||||||
      void match_init OF((void)); /* asm code initialization */
 | 
					      void match_init OF((void)); /* asm code initialization */
 | 
				
			||||||
 | 
					      uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					local uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
@@ -119,7 +123,7 @@ typedef struct config_s {
 | 
				
			|||||||
   compress_func func;
 | 
					   compress_func func;
 | 
				
			||||||
} config;
 | 
					} config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local config configuration_table[10] = {
 | 
					local const config configuration_table[10] = {
 | 
				
			||||||
/*      good lazy nice chain */
 | 
					/*      good lazy nice chain */
 | 
				
			||||||
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
 | 
					/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
 | 
				
			||||||
/* 1 */ {4,    4,  8,    4, deflate_fast}, /* maximum speed, no lazy matches */
 | 
					/* 1 */ {4,    4,  8,    4, deflate_fast}, /* maximum speed, no lazy matches */
 | 
				
			||||||
@@ -174,7 +178,7 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
 | 
				
			|||||||
    zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
 | 
					    zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateInit_(strm, level, version, stream_size)
 | 
					int EXPORT deflateInit_(strm, level, version, stream_size)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
    int level;
 | 
					    int level;
 | 
				
			||||||
    const char *version;
 | 
					    const char *version;
 | 
				
			||||||
@@ -186,7 +190,7 @@ int deflateInit_(strm, level, version, stream_size)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
					int EXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
				
			||||||
		  version, stream_size)
 | 
							  version, stream_size)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
    int  level;
 | 
					    int  level;
 | 
				
			||||||
@@ -199,13 +203,14 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    deflate_state *s;
 | 
					    deflate_state *s;
 | 
				
			||||||
    int noheader = 0;
 | 
					    int noheader = 0;
 | 
				
			||||||
 | 
					    static const char* my_version = ZLIB_VERSION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ushf *overlay;
 | 
					    ushf *overlay;
 | 
				
			||||||
    /* We overlay pending_buf and d_buf+l_buf. This works since the average
 | 
					    /* We overlay pending_buf and d_buf+l_buf. This works since the average
 | 
				
			||||||
     * output size for (length,distance) codes is <= 24 bits.
 | 
					     * output size for (length,distance) codes is <= 24 bits.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
 | 
					    if (version == Z_NULL || version[0] != my_version[0] ||
 | 
				
			||||||
        stream_size != sizeof(z_stream)) {
 | 
					        stream_size != sizeof(z_stream)) {
 | 
				
			||||||
	return Z_VERSION_ERROR;
 | 
						return Z_VERSION_ERROR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -252,6 +257,7 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
 | 
					    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
 | 
				
			||||||
    s->pending_buf = (uchf *) overlay;
 | 
					    s->pending_buf = (uchf *) overlay;
 | 
				
			||||||
 | 
					    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
 | 
					    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
 | 
				
			||||||
        s->pending_buf == Z_NULL) {
 | 
					        s->pending_buf == Z_NULL) {
 | 
				
			||||||
@@ -270,7 +276,7 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateSetDictionary (strm, dictionary, dictLength)
 | 
					int EXPORT deflateSetDictionary (strm, dictionary, dictLength)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
    const Bytef *dictionary;
 | 
					    const Bytef *dictionary;
 | 
				
			||||||
    uInt  dictLength;
 | 
					    uInt  dictLength;
 | 
				
			||||||
@@ -289,7 +295,9 @@ int deflateSetDictionary (strm, dictionary, dictLength)
 | 
				
			|||||||
    if (length < MIN_MATCH) return Z_OK;
 | 
					    if (length < MIN_MATCH) return Z_OK;
 | 
				
			||||||
    if (length > MAX_DIST(s)) {
 | 
					    if (length > MAX_DIST(s)) {
 | 
				
			||||||
	length = MAX_DIST(s);
 | 
						length = MAX_DIST(s);
 | 
				
			||||||
	dictionary += dictLength - length;
 | 
					#ifndef USE_DICT_HEAD
 | 
				
			||||||
 | 
						dictionary += dictLength - length; /* use the tail of the dictionary */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    zmemcpy((charf *)s->window, dictionary, length);
 | 
					    zmemcpy((charf *)s->window, dictionary, length);
 | 
				
			||||||
    s->strstart = length;
 | 
					    s->strstart = length;
 | 
				
			||||||
@@ -309,7 +317,7 @@ int deflateSetDictionary (strm, dictionary, dictLength)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateReset (strm)
 | 
					int EXPORT deflateReset (strm)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    deflate_state *s;
 | 
					    deflate_state *s;
 | 
				
			||||||
@@ -339,7 +347,7 @@ int deflateReset (strm)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateParams(strm, level, strategy)
 | 
					int EXPORT deflateParams(strm, level, strategy)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
    int level;
 | 
					    int level;
 | 
				
			||||||
    int strategy;
 | 
					    int strategy;
 | 
				
			||||||
@@ -413,7 +421,7 @@ local void flush_pending(strm)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflate (strm, flush)
 | 
					int EXPORT deflate (strm, flush)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
    int flush;
 | 
					    int flush;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -547,42 +555,85 @@ int deflate (strm, flush)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* ========================================================================= */
 | 
				
			||||||
int deflateEnd (strm)
 | 
					int EXPORT deflateEnd (strm)
 | 
				
			||||||
    z_streamp strm;
 | 
					    z_streamp strm;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int status;
 | 
					    int status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
 | 
					    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    status = strm->state->status;
 | 
				
			||||||
 | 
					    if (status != INIT_STATE && status != BUSY_STATE &&
 | 
				
			||||||
 | 
						status != FINISH_STATE) {
 | 
				
			||||||
 | 
					      return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Deallocate in reverse order of allocations: */
 | 
					    /* Deallocate in reverse order of allocations: */
 | 
				
			||||||
    TRY_FREE(strm, strm->state->pending_buf);
 | 
					    TRY_FREE(strm, strm->state->pending_buf);
 | 
				
			||||||
    TRY_FREE(strm, strm->state->head);
 | 
					    TRY_FREE(strm, strm->state->head);
 | 
				
			||||||
    TRY_FREE(strm, strm->state->prev);
 | 
					    TRY_FREE(strm, strm->state->prev);
 | 
				
			||||||
    TRY_FREE(strm, strm->state->window);
 | 
					    TRY_FREE(strm, strm->state->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    status = strm->state->status;
 | 
					 | 
				
			||||||
    ZFREE(strm, strm->state);
 | 
					    ZFREE(strm, strm->state);
 | 
				
			||||||
    strm->state = Z_NULL;
 | 
					    strm->state = Z_NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
 | 
					    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========================================================================= */
 | 
					/* =========================================================================
 | 
				
			||||||
int deflateCopy (dest, source)
 | 
					 * Copy the source state to the destination state.
 | 
				
			||||||
 | 
					 * To simplify the source, this is not supported for 16-bit MSDOS (which
 | 
				
			||||||
 | 
					 * doesn't have enough memory anyway to duplicate compression states).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int EXPORT deflateCopy (dest, source)
 | 
				
			||||||
    z_streamp dest;
 | 
					    z_streamp dest;
 | 
				
			||||||
    z_streamp source;
 | 
					    z_streamp source;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
 | 
					#ifdef MAXSEG_64K
 | 
				
			||||||
 | 
					    return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    deflate_state *ds;
 | 
				
			||||||
 | 
					    deflate_state *ss;
 | 
				
			||||||
 | 
					    ushf *overlay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ss = source->state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (source == Z_NULL || dest == Z_NULL || ss == Z_NULL) {
 | 
				
			||||||
        return Z_STREAM_ERROR;
 | 
					        return Z_STREAM_ERROR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    *dest = *source;
 | 
					    *dest = *source;
 | 
				
			||||||
    return Z_STREAM_ERROR; /* to be implemented */
 | 
					 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
    dest->state = (struct internal_state FAR *)
 | 
					 | 
				
			||||||
        (*dest->zalloc)(1, sizeof(deflate_state));
 | 
					 | 
				
			||||||
    if (dest->state == Z_NULL) return Z_MEM_ERROR;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    *(dest->state) = *(source->state);
 | 
					    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
 | 
				
			||||||
 | 
					    if (ds == Z_NULL) return Z_MEM_ERROR;
 | 
				
			||||||
 | 
					    dest->state = (struct internal_state FAR *) ds;
 | 
				
			||||||
 | 
					    *ds = *ss;
 | 
				
			||||||
 | 
					    ds->strm = dest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
 | 
				
			||||||
 | 
					    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
 | 
				
			||||||
 | 
					    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
 | 
				
			||||||
 | 
					    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
 | 
				
			||||||
 | 
					    ds->pending_buf = (uchf *) overlay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
 | 
				
			||||||
 | 
					        ds->pending_buf == Z_NULL) {
 | 
				
			||||||
 | 
					        deflateEnd (dest);
 | 
				
			||||||
 | 
					        return Z_MEM_ERROR;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* following zmemcpy do not work for 16-bit MSDOS */
 | 
				
			||||||
 | 
					    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
 | 
				
			||||||
 | 
					    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
 | 
				
			||||||
 | 
					    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
 | 
				
			||||||
 | 
					    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
 | 
				
			||||||
 | 
					    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
 | 
				
			||||||
 | 
					    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ds->l_desc.dyn_tree = ds->dyn_ltree;
 | 
				
			||||||
 | 
					    ds->d_desc.dyn_tree = ds->dyn_dtree;
 | 
				
			||||||
 | 
					    ds->bl_desc.dyn_tree = ds->bl_tree;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Z_OK;
 | 
					    return Z_OK;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -815,7 +866,7 @@ local void check_match(s, start, match, length)
 | 
				
			|||||||
	} while (--length != 0);
 | 
						} while (--length != 0);
 | 
				
			||||||
        z_error("invalid match");
 | 
					        z_error("invalid match");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (verbose > 1) {
 | 
					    if (z_verbose > 1) {
 | 
				
			||||||
        fprintf(stderr,"\\[%d,%d]", start-match, length);
 | 
					        fprintf(stderr,"\\[%d,%d]", start-match, length);
 | 
				
			||||||
        do { putc(s->window[start++], stderr); } while (--length != 0);
 | 
					        do { putc(s->window[start++], stderr); } while (--length != 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -864,29 +915,30 @@ local void fill_window(s)
 | 
				
			|||||||
                   (unsigned)wsize);
 | 
					                   (unsigned)wsize);
 | 
				
			||||||
            s->match_start -= wsize;
 | 
					            s->match_start -= wsize;
 | 
				
			||||||
            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
 | 
					            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
 | 
				
			||||||
 | 
					 | 
				
			||||||
            s->block_start -= (long) wsize;
 | 
					            s->block_start -= (long) wsize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            /* Slide the hash table (could be avoided with 32 bit values
 | 
					            /* Slide the hash table (could be avoided with 32 bit values
 | 
				
			||||||
               at the expense of memory usage):
 | 
					               at the expense of memory usage). We slide even when level == 0
 | 
				
			||||||
 | 
					               to keep the hash table consistent if we switch back to level > 0
 | 
				
			||||||
 | 
					               later. (Using level 0 permanently is not an optimal usage of
 | 
				
			||||||
 | 
					               zlib, so we don't care about this pathological case.)
 | 
				
			||||||
             */
 | 
					             */
 | 
				
			||||||
            n = s->hash_size;
 | 
						    n = s->hash_size;
 | 
				
			||||||
            p = &s->head[n];
 | 
						    p = &s->head[n];
 | 
				
			||||||
            do {
 | 
						    do {
 | 
				
			||||||
                m = *--p;
 | 
							m = *--p;
 | 
				
			||||||
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
 | 
							*p = (Pos)(m >= wsize ? m-wsize : NIL);
 | 
				
			||||||
            } while (--n);
 | 
						    } while (--n);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            n = wsize;
 | 
					 | 
				
			||||||
            p = &s->prev[n];
 | 
					 | 
				
			||||||
            do {
 | 
					 | 
				
			||||||
                m = *--p;
 | 
					 | 
				
			||||||
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
 | 
					 | 
				
			||||||
                /* If n is not on any hash chain, prev[n] is garbage but
 | 
					 | 
				
			||||||
                 * its value will never be used.
 | 
					 | 
				
			||||||
                 */
 | 
					 | 
				
			||||||
            } while (--n);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    n = wsize;
 | 
				
			||||||
 | 
						    p = &s->prev[n];
 | 
				
			||||||
 | 
						    do {
 | 
				
			||||||
 | 
							m = *--p;
 | 
				
			||||||
 | 
							*p = (Pos)(m >= wsize ? m-wsize : NIL);
 | 
				
			||||||
 | 
							/* If n is not on any hash chain, prev[n] is garbage but
 | 
				
			||||||
 | 
							 * its value will never be used.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
						    } while (--n);
 | 
				
			||||||
            more += wsize;
 | 
					            more += wsize;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (s->strm->avail_in == 0) return;
 | 
					        if (s->strm->avail_in == 0) return;
 | 
				
			||||||
@@ -950,12 +1002,24 @@ local void fill_window(s)
 | 
				
			|||||||
 * This function does not insert new strings in the dictionary since
 | 
					 * This function does not insert new strings in the dictionary since
 | 
				
			||||||
 * uncompressible data is probably not useful. This function is used
 | 
					 * uncompressible data is probably not useful. This function is used
 | 
				
			||||||
 * only for the level=0 compression option.
 | 
					 * only for the level=0 compression option.
 | 
				
			||||||
 * NOTE: this function should be optimized to avoid extra copying.
 | 
					 * NOTE: this function should be optimized to avoid extra copying from
 | 
				
			||||||
 | 
					 * window to pending_buf.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
local block_state deflate_stored(s, flush)
 | 
					local block_state deflate_stored(s, flush)
 | 
				
			||||||
    deflate_state *s;
 | 
					    deflate_state *s;
 | 
				
			||||||
    int flush;
 | 
					    int flush;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
 | 
				
			||||||
 | 
					     * to pending_buf_size, and each stored block has a 5 byte header:
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ulg max_block_size = 0xffff;
 | 
				
			||||||
 | 
					    ulg max_start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (max_block_size > s->pending_buf_size - 5) {
 | 
				
			||||||
 | 
					        max_block_size = s->pending_buf_size - 5;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Copy as much as possible from input to output: */
 | 
				
			||||||
    for (;;) {
 | 
					    for (;;) {
 | 
				
			||||||
        /* Fill the window as much as possible: */
 | 
					        /* Fill the window as much as possible: */
 | 
				
			||||||
        if (s->lookahead <= 1) {
 | 
					        if (s->lookahead <= 1) {
 | 
				
			||||||
@@ -973,14 +1037,17 @@ local block_state deflate_stored(s, flush)
 | 
				
			|||||||
	s->strstart += s->lookahead;
 | 
						s->strstart += s->lookahead;
 | 
				
			||||||
	s->lookahead = 0;
 | 
						s->lookahead = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Stored blocks are limited to 0xffff bytes: */
 | 
						/* Emit a stored block if pending_buf will be full: */
 | 
				
			||||||
        if (s->strstart == 0 || s->strstart > 0xfffe) {
 | 
					 	max_start = s->block_start + max_block_size;
 | 
				
			||||||
 | 
					        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
 | 
				
			||||||
	    /* strstart == 0 is possible when wraparound on 16-bit machine */
 | 
						    /* strstart == 0 is possible when wraparound on 16-bit machine */
 | 
				
			||||||
	    s->lookahead = s->strstart - 0xffff;
 | 
						    s->lookahead = (uInt)(s->strstart - max_start);
 | 
				
			||||||
	    s->strstart = 0xffff;
 | 
						    s->strstart = (uInt)max_start;
 | 
				
			||||||
 | 
					            FLUSH_BLOCK(s, 0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						/* Flush if we may have to slide, otherwise block_start may become
 | 
				
			||||||
	/* Emit a stored block if it is large enough: */
 | 
					         * negative and the data will be gone:
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
 | 
					        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
 | 
				
			||||||
            FLUSH_BLOCK(s, 0);
 | 
					            FLUSH_BLOCK(s, 0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* deflate.h -- internal compression state
 | 
					/* deflate.h -- internal compression state
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
   subject to change. Applications should only use zlib.h.
 | 
					   subject to change. Applications should only use zlib.h.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: deflate.h,v 1.10 1996/07/02 12:41:00 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _DEFLATE_H
 | 
					#ifndef _DEFLATE_H
 | 
				
			||||||
#define _DEFLATE_H
 | 
					#define _DEFLATE_H
 | 
				
			||||||
@@ -83,6 +83,7 @@ typedef struct internal_state {
 | 
				
			|||||||
    z_streamp strm;      /* pointer back to this zlib stream */
 | 
					    z_streamp strm;      /* pointer back to this zlib stream */
 | 
				
			||||||
    int   status;        /* as the name implies */
 | 
					    int   status;        /* as the name implies */
 | 
				
			||||||
    Bytef *pending_buf;  /* output still pending */
 | 
					    Bytef *pending_buf;  /* output still pending */
 | 
				
			||||||
 | 
					    ulg   pending_buf_size; /* size of pending_buf */
 | 
				
			||||||
    Bytef *pending_out;  /* next pending byte to output to the stream */
 | 
					    Bytef *pending_out;  /* next pending byte to output to the stream */
 | 
				
			||||||
    int   pending;       /* nb of bytes in the pending buffer */
 | 
					    int   pending;       /* nb of bytes in the pending buffer */
 | 
				
			||||||
    int   noheader;      /* suppress zlib header and adler32 */
 | 
					    int   noheader;      /* suppress zlib header and adler32 */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								example.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								example.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* example.c -- usage example of the zlib compression library
 | 
					/* example.c -- usage example of the zlib compression library
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: example.c,v 1.16 1996/05/23 17:11:28 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
@@ -86,16 +86,17 @@ void test_gzio(out, in, uncompr, uncomprLen)
 | 
				
			|||||||
    int err;
 | 
					    int err;
 | 
				
			||||||
    int len = strlen(hello)+1;
 | 
					    int len = strlen(hello)+1;
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    z_off_t pos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    file = gzopen(out, "wb");
 | 
					    file = gzopen(out, "wb");
 | 
				
			||||||
    if (file == NULL) {
 | 
					    if (file == NULL) {
 | 
				
			||||||
        fprintf(stderr, "gzopen error\n");
 | 
					        fprintf(stderr, "gzopen error\n");
 | 
				
			||||||
        exit(1);
 | 
					        exit(1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (gzprintf(file, "%s, %s!", "hello", "hello") != len-1) {
 | 
				
			||||||
    if (gzwrite(file, (const voidp)hello, (unsigned)len) != len) {
 | 
					        fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
 | 
				
			||||||
        fprintf(stderr, "gzwrite err: %s\n", gzerror(file, &err));
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
 | 
				
			||||||
    gzclose(file);
 | 
					    gzclose(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    file = gzopen(in, "rb");
 | 
					    file = gzopen(in, "rb");
 | 
				
			||||||
@@ -108,13 +109,28 @@ void test_gzio(out, in, uncompr, uncomprLen)
 | 
				
			|||||||
    if (uncomprLen != len) {
 | 
					    if (uncomprLen != len) {
 | 
				
			||||||
        fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
 | 
					        fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    gzclose(file);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (strcmp((char*)uncompr, hello)) {
 | 
					    if (strcmp((char*)uncompr, hello)) {
 | 
				
			||||||
        fprintf(stderr, "bad gzread\n");
 | 
					        fprintf(stderr, "bad gzread\n");
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        printf("gzread(): %s\n", uncompr);
 | 
					        printf("gzread(): %s\n", uncompr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pos = gzseek(file, -7L, SEEK_CUR);
 | 
				
			||||||
 | 
					    if (pos != 7 || gztell(file) != pos) {
 | 
				
			||||||
 | 
						fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
 | 
				
			||||||
 | 
							pos, gztell(file));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    uncomprLen = gzread(file, uncompr, (unsigned)uncomprLen);
 | 
				
			||||||
 | 
					    if (uncomprLen != 7) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "gzread err after gzseek: %s\n", gzerror(file, &err));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (strcmp((char*)uncompr, hello+7)) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "bad gzread after gzseek\n");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        printf("gzread() after gzseek: %s\n", uncompr);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gzclose(file);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
@@ -171,12 +187,13 @@ void test_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
				
			|||||||
    d_stream.zfree = (free_func)0;
 | 
					    d_stream.zfree = (free_func)0;
 | 
				
			||||||
    d_stream.opaque = (voidpf)0;
 | 
					    d_stream.opaque = (voidpf)0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d_stream.next_in  = compr;
 | 
				
			||||||
 | 
					    d_stream.avail_in = 0;
 | 
				
			||||||
 | 
					    d_stream.next_out = uncompr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    err = inflateInit(&d_stream);
 | 
					    err = inflateInit(&d_stream);
 | 
				
			||||||
    CHECK_ERR(err, "inflateInit");
 | 
					    CHECK_ERR(err, "inflateInit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_stream.next_in  = compr;
 | 
					 | 
				
			||||||
    d_stream.next_out = uncompr;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
 | 
					    while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
 | 
				
			||||||
        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
 | 
					        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
 | 
				
			||||||
        err = inflate(&d_stream, Z_NO_FLUSH);
 | 
					        err = inflate(&d_stream, Z_NO_FLUSH);
 | 
				
			||||||
@@ -263,12 +280,12 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
				
			|||||||
    d_stream.zfree = (free_func)0;
 | 
					    d_stream.zfree = (free_func)0;
 | 
				
			||||||
    d_stream.opaque = (voidpf)0;
 | 
					    d_stream.opaque = (voidpf)0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    err = inflateInit(&d_stream);
 | 
					 | 
				
			||||||
    CHECK_ERR(err, "inflateInit");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d_stream.next_in  = compr;
 | 
					    d_stream.next_in  = compr;
 | 
				
			||||||
    d_stream.avail_in = (uInt)comprLen;
 | 
					    d_stream.avail_in = (uInt)comprLen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    err = inflateInit(&d_stream);
 | 
				
			||||||
 | 
					    CHECK_ERR(err, "inflateInit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (;;) {
 | 
					    for (;;) {
 | 
				
			||||||
        d_stream.next_out = uncompr;            /* discard the output */
 | 
					        d_stream.next_out = uncompr;            /* discard the output */
 | 
				
			||||||
	d_stream.avail_out = (uInt)uncomprLen;
 | 
						d_stream.avail_out = (uInt)uncomprLen;
 | 
				
			||||||
@@ -339,12 +356,13 @@ void test_sync(compr, comprLen, uncompr, uncomprLen)
 | 
				
			|||||||
    d_stream.zfree = (free_func)0;
 | 
					    d_stream.zfree = (free_func)0;
 | 
				
			||||||
    d_stream.opaque = (voidpf)0;
 | 
					    d_stream.opaque = (voidpf)0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d_stream.next_in  = compr;
 | 
				
			||||||
 | 
					    d_stream.avail_in = 2; /* just read the zlib header */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    err = inflateInit(&d_stream);
 | 
					    err = inflateInit(&d_stream);
 | 
				
			||||||
    CHECK_ERR(err, "inflateInit");
 | 
					    CHECK_ERR(err, "inflateInit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_stream.next_in  = compr;
 | 
					 | 
				
			||||||
    d_stream.next_out = uncompr;
 | 
					    d_stream.next_out = uncompr;
 | 
				
			||||||
    d_stream.avail_in = 2; /* just read the zlib header */
 | 
					 | 
				
			||||||
    d_stream.avail_out = (uInt)uncomprLen;
 | 
					    d_stream.avail_out = (uInt)uncomprLen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inflate(&d_stream, Z_NO_FLUSH);
 | 
					    inflate(&d_stream, Z_NO_FLUSH);
 | 
				
			||||||
@@ -417,12 +435,12 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
				
			|||||||
    d_stream.zfree = (free_func)0;
 | 
					    d_stream.zfree = (free_func)0;
 | 
				
			||||||
    d_stream.opaque = (voidpf)0;
 | 
					    d_stream.opaque = (voidpf)0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    err = inflateInit(&d_stream);
 | 
					 | 
				
			||||||
    CHECK_ERR(err, "inflateInit");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d_stream.next_in  = compr;
 | 
					    d_stream.next_in  = compr;
 | 
				
			||||||
    d_stream.avail_in = (uInt)comprLen;
 | 
					    d_stream.avail_in = (uInt)comprLen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    err = inflateInit(&d_stream);
 | 
				
			||||||
 | 
					    CHECK_ERR(err, "inflateInit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_stream.next_out = uncompr;
 | 
					    d_stream.next_out = uncompr;
 | 
				
			||||||
    d_stream.avail_out = (uInt)uncomprLen;
 | 
					    d_stream.avail_out = (uInt)uncomprLen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -461,8 +479,9 @@ int main(argc, argv)
 | 
				
			|||||||
    Byte *compr, *uncompr;
 | 
					    Byte *compr, *uncompr;
 | 
				
			||||||
    uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
 | 
					    uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
 | 
				
			||||||
    uLong uncomprLen = comprLen;
 | 
					    uLong uncomprLen = comprLen;
 | 
				
			||||||
 | 
					    static const char* myVersion = ZLIB_VERSION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (zlibVersion()[0] != ZLIB_VERSION[0]) {
 | 
					    if (zlibVersion()[0] != myVersion[0]) {
 | 
				
			||||||
        fprintf(stderr, "incompatible zlib version\n");
 | 
					        fprintf(stderr, "incompatible zlib version\n");
 | 
				
			||||||
        exit(1);
 | 
					        exit(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -479,7 +498,6 @@ int main(argc, argv)
 | 
				
			|||||||
        printf("out of memory\n");
 | 
					        printf("out of memory\n");
 | 
				
			||||||
	exit(1);
 | 
						exit(1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    test_compress(compr, comprLen, uncompr, uncomprLen);
 | 
					    test_compress(compr, comprLen, uncompr, uncomprLen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test_gzio((argc > 1 ? argv[1] : "foo.gz"),
 | 
					    test_gzio((argc > 1 ? argv[1] : "foo.gz"),
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										347
									
								
								gzio.c
									
									
									
									
									
								
							
							
						
						
									
										347
									
								
								gzio.c
									
									
									
									
									
								
							@@ -1,9 +1,11 @@
 | 
				
			|||||||
/* gzio.c -- IO on .gz files
 | 
					/* gzio.c -- IO on .gz files
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Compile this file with -DNO_DEFLATE to avoid the compression code.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: gzio.c,v 1.14 1996/07/24 13:41:01 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,10 +40,12 @@ typedef struct gz_stream {
 | 
				
			|||||||
    char     *path;   /* path name for debugging only */
 | 
					    char     *path;   /* path name for debugging only */
 | 
				
			||||||
    int      transparent; /* 1 if input file is not a .gz file */
 | 
					    int      transparent; /* 1 if input file is not a .gz file */
 | 
				
			||||||
    char     mode;    /* 'w' or 'r' */
 | 
					    char     mode;    /* 'w' or 'r' */
 | 
				
			||||||
 | 
					    long     startpos; /* start of compressed data in file (header skipped) */
 | 
				
			||||||
} gz_stream;
 | 
					} gz_stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local gzFile gz_open      OF((const char *path, const char *mode, int  fd));
 | 
					local gzFile gz_open      OF((const char *path, const char *mode, int  fd));
 | 
				
			||||||
 | 
					local int do_flush        OF((gzFile file, int flush));
 | 
				
			||||||
local int    get_byte     OF((gz_stream *s));
 | 
					local int    get_byte     OF((gz_stream *s));
 | 
				
			||||||
local void   check_header OF((gz_stream *s));
 | 
					local void   check_header OF((gz_stream *s));
 | 
				
			||||||
local int    destroy      OF((gz_stream *s));
 | 
					local int    destroy      OF((gz_stream *s));
 | 
				
			||||||
@@ -64,6 +68,7 @@ local gzFile gz_open (path, mode, fd)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    int err;
 | 
					    int err;
 | 
				
			||||||
    int level = Z_DEFAULT_COMPRESSION; /* compression level */
 | 
					    int level = Z_DEFAULT_COMPRESSION; /* compression level */
 | 
				
			||||||
 | 
					    int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */
 | 
				
			||||||
    char *p = (char*)mode;
 | 
					    char *p = (char*)mode;
 | 
				
			||||||
    gz_stream *s;
 | 
					    gz_stream *s;
 | 
				
			||||||
    char fmode[80]; /* copy of mode, without the compression level */
 | 
					    char fmode[80]; /* copy of mode, without the compression level */
 | 
				
			||||||
@@ -99,6 +104,10 @@ local gzFile gz_open (path, mode, fd)
 | 
				
			|||||||
        if (*p == 'w' || *p == 'a') s->mode = 'w';
 | 
					        if (*p == 'w' || *p == 'a') s->mode = 'w';
 | 
				
			||||||
        if (*p >= '0' && *p <= '9') {
 | 
					        if (*p >= '0' && *p <= '9') {
 | 
				
			||||||
	    level = *p - '0';
 | 
						    level = *p - '0';
 | 
				
			||||||
 | 
						} else if (*p == 'f') {
 | 
				
			||||||
 | 
						  strategy = Z_FILTERED;
 | 
				
			||||||
 | 
						} else if (*p == 'h') {
 | 
				
			||||||
 | 
						  strategy = Z_HUFFMAN_ONLY;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
	    *m++ = *p; /* copy the mode */
 | 
						    *m++ = *p; /* copy the mode */
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -106,19 +115,24 @@ local gzFile gz_open (path, mode, fd)
 | 
				
			|||||||
    if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
 | 
					    if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (s->mode == 'w') {
 | 
					    if (s->mode == 'w') {
 | 
				
			||||||
 | 
					#ifdef NO_DEFLATE
 | 
				
			||||||
 | 
					        err = Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
        err = deflateInit2(&(s->stream), level,
 | 
					        err = deflateInit2(&(s->stream), level,
 | 
				
			||||||
                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0);
 | 
					                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy);
 | 
				
			||||||
        /* windowBits is passed < 0 to suppress zlib header */
 | 
					        /* windowBits is passed < 0 to suppress zlib header */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
					        s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        if (err != Z_OK || s->outbuf == Z_NULL) {
 | 
					        if (err != Z_OK || s->outbuf == Z_NULL) {
 | 
				
			||||||
            return destroy(s), (gzFile)Z_NULL;
 | 
					            return destroy(s), (gzFile)Z_NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        err = inflateInit2(&(s->stream), -MAX_WBITS);
 | 
					 | 
				
			||||||
        s->stream.next_in  = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
					        s->stream.next_in  = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        err = inflateInit2(&(s->stream), -MAX_WBITS);
 | 
				
			||||||
 | 
					        /* windowBits is passed < 0 to tell that there is no zlib header */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (err != Z_OK || s->inbuf == Z_NULL) {
 | 
					        if (err != Z_OK || s->inbuf == Z_NULL) {
 | 
				
			||||||
            return destroy(s), (gzFile)Z_NULL;
 | 
					            return destroy(s), (gzFile)Z_NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -126,7 +140,7 @@ local gzFile gz_open (path, mode, fd)
 | 
				
			|||||||
    s->stream.avail_out = Z_BUFSIZE;
 | 
					    s->stream.avail_out = Z_BUFSIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    errno = 0;
 | 
					    errno = 0;
 | 
				
			||||||
    s->file = fd < 0 ? FOPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
 | 
					    s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->file == NULL) {
 | 
					    if (s->file == NULL) {
 | 
				
			||||||
        return destroy(s), (gzFile)Z_NULL;
 | 
					        return destroy(s), (gzFile)Z_NULL;
 | 
				
			||||||
@@ -136,16 +150,19 @@ local gzFile gz_open (path, mode, fd)
 | 
				
			|||||||
         */
 | 
					         */
 | 
				
			||||||
        fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
 | 
					        fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
 | 
				
			||||||
             Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
 | 
					             Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
 | 
				
			||||||
 | 
						s->startpos = ftell(s->file);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
	check_header(s); /* skip the .gz header */
 | 
						check_header(s); /* skip the .gz header */
 | 
				
			||||||
 | 
						s->startpos = (ftell(s->file) - s->stream.avail_in);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    return (gzFile)s;
 | 
					    return (gzFile)s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
     Opens a gzip (.gz) file for reading or writing.
 | 
					     Opens a gzip (.gz) file for reading or writing.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
gzFile gzopen (path, mode)
 | 
					gzFile EXPORT gzopen (path, mode)
 | 
				
			||||||
    const char *path;
 | 
					    const char *path;
 | 
				
			||||||
    const char *mode;
 | 
					    const char *mode;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -156,7 +173,7 @@ gzFile gzopen (path, mode)
 | 
				
			|||||||
     Associate a gzFile with the file descriptor fd. fd is not dup'ed here
 | 
					     Associate a gzFile with the file descriptor fd. fd is not dup'ed here
 | 
				
			||||||
   to mimic the behavio(u)r of fdopen.
 | 
					   to mimic the behavio(u)r of fdopen.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
gzFile gzdopen (fd, mode)
 | 
					gzFile EXPORT gzdopen (fd, mode)
 | 
				
			||||||
    int fd;
 | 
					    int fd;
 | 
				
			||||||
    const char *mode;
 | 
					    const char *mode;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -168,6 +185,31 @@ gzFile gzdopen (fd, mode)
 | 
				
			|||||||
    return gz_open (name, mode, fd);
 | 
					    return gz_open (name, mode, fd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					 * Update the compression level and strategy
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int EXPORT gzsetparams (file, level, strategy)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    int level;
 | 
				
			||||||
 | 
					    int strategy;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Make room to allow flushing */
 | 
				
			||||||
 | 
					    if (s->stream.avail_out == 0) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						s->stream.next_out = s->outbuf;
 | 
				
			||||||
 | 
						if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
 | 
				
			||||||
 | 
						    s->z_err = Z_ERRNO;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						s->stream.avail_out = Z_BUFSIZE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return deflateParams (&(s->stream), level, strategy);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
 | 
					     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
 | 
				
			||||||
   for end of file.
 | 
					   for end of file.
 | 
				
			||||||
@@ -212,8 +254,11 @@ local void check_header(s)
 | 
				
			|||||||
    for (len = 0; len < 2; len++) {
 | 
					    for (len = 0; len < 2; len++) {
 | 
				
			||||||
	c = get_byte(s);
 | 
						c = get_byte(s);
 | 
				
			||||||
	if (c != gz_magic[len]) {
 | 
						if (c != gz_magic[len]) {
 | 
				
			||||||
	    s->transparent = 1;
 | 
						    if (len != 0) s->stream.avail_in++, s->stream.next_in--;
 | 
				
			||||||
	    if (c != EOF) s->stream.avail_in++, s->stream.next_in--;
 | 
						    if (c != EOF) {
 | 
				
			||||||
 | 
							s->stream.avail_in++, s->stream.next_in--;
 | 
				
			||||||
 | 
							s->transparent = 1;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
	    s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;
 | 
						    s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;
 | 
				
			||||||
	    return;
 | 
						    return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -260,14 +305,21 @@ local int destroy (s)
 | 
				
			|||||||
    TRYFREE(s->msg);
 | 
					    TRYFREE(s->msg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->stream.state != NULL) {
 | 
					    if (s->stream.state != NULL) {
 | 
				
			||||||
       if (s->mode == 'w') {
 | 
						if (s->mode == 'w') {
 | 
				
			||||||
           err = deflateEnd(&(s->stream));
 | 
					#ifdef NO_DEFLATE
 | 
				
			||||||
       } else if (s->mode == 'r') {
 | 
						    err = Z_STREAM_ERROR;
 | 
				
			||||||
           err = inflateEnd(&(s->stream));
 | 
					#else
 | 
				
			||||||
       }
 | 
						    err = deflateEnd(&(s->stream));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						} else if (s->mode == 'r') {
 | 
				
			||||||
 | 
						    err = inflateEnd(&(s->stream));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (s->file != NULL && fclose(s->file)) {
 | 
					    if (s->file != NULL && fclose(s->file)) {
 | 
				
			||||||
        err = Z_ERRNO;
 | 
					#ifdef ESPIPE
 | 
				
			||||||
 | 
						if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						    err = Z_ERRNO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (s->z_err < 0) err = s->z_err;
 | 
					    if (s->z_err < 0) err = s->z_err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -282,13 +334,13 @@ local int destroy (s)
 | 
				
			|||||||
     Reads the given number of uncompressed bytes from the compressed file.
 | 
					     Reads the given number of uncompressed bytes from the compressed file.
 | 
				
			||||||
   gzread returns the number of bytes actually read (0 for end of file).
 | 
					   gzread returns the number of bytes actually read (0 for end of file).
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int gzread (file, buf, len)
 | 
					int EXPORT gzread (file, buf, len)
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
    voidp buf;
 | 
					    voidp buf;
 | 
				
			||||||
    unsigned len;
 | 
					    unsigned len;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    gz_stream *s = (gz_stream*)file;
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
    Bytef *start = buf; /* starting point for crc computation */
 | 
					    Bytef *start = (Bytef*)buf; /* starting point for crc computation */
 | 
				
			||||||
    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */
 | 
					    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;
 | 
					    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;
 | 
				
			||||||
@@ -296,7 +348,8 @@ int gzread (file, buf, len)
 | 
				
			|||||||
    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
 | 
					    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
 | 
				
			||||||
    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */
 | 
					    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->stream.next_out = next_out = buf;
 | 
					    next_out = (Byte*)buf;
 | 
				
			||||||
 | 
					    s->stream.next_out = (Bytef*)buf;
 | 
				
			||||||
    s->stream.avail_out = len;
 | 
					    s->stream.avail_out = len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (s->stream.avail_out != 0) {
 | 
					    while (s->stream.avail_out != 0) {
 | 
				
			||||||
@@ -345,7 +398,12 @@ int gzread (file, buf, len)
 | 
				
			|||||||
		/* Check for concatenated .gz files: */
 | 
							/* Check for concatenated .gz files: */
 | 
				
			||||||
		check_header(s);
 | 
							check_header(s);
 | 
				
			||||||
		if (s->z_err == Z_OK) {
 | 
							if (s->z_err == Z_OK) {
 | 
				
			||||||
 | 
							    uLong total_in = s->stream.total_in;
 | 
				
			||||||
 | 
							    uLong total_out = s->stream.total_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		    inflateReset(&(s->stream));
 | 
							    inflateReset(&(s->stream));
 | 
				
			||||||
 | 
							    s->stream.total_in = total_in;
 | 
				
			||||||
 | 
							    s->stream.total_out = total_out;
 | 
				
			||||||
		    s->crc = crc32(0L, Z_NULL, 0);
 | 
							    s->crc = crc32(0L, Z_NULL, 0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
@@ -357,11 +415,26 @@ int gzread (file, buf, len)
 | 
				
			|||||||
    return (int)(len - s->stream.avail_out);
 | 
					    return (int)(len - s->stream.avail_out);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					      Reads one byte from the compressed file. gzgetc returns this byte
 | 
				
			||||||
 | 
					   or -1 in case of end of file or error.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					int EXPORT gzgetc(file)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return gzread(file, &c, 1) == 1 ? c : -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef NO_DEFLATE
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
     Writes the given number of uncompressed bytes into the compressed file.
 | 
					     Writes the given number of uncompressed bytes into the compressed file.
 | 
				
			||||||
   gzwrite returns the number of bytes actually written (0 in case of error).
 | 
					   gzwrite returns the number of bytes actually written (0 in case of error).
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int gzwrite (file, buf, len)
 | 
					int EXPORT gzwrite (file, buf, len)
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
    const voidp buf;
 | 
					    const voidp buf;
 | 
				
			||||||
    unsigned len;
 | 
					    unsigned len;
 | 
				
			||||||
@@ -370,7 +443,7 @@ int gzwrite (file, buf, len)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
 | 
					    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->stream.next_in = buf;
 | 
					    s->stream.next_in = (Bytef*)buf;
 | 
				
			||||||
    s->stream.avail_in = len;
 | 
					    s->stream.avail_in = len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (s->stream.avail_in != 0) {
 | 
					    while (s->stream.avail_in != 0) {
 | 
				
			||||||
@@ -387,18 +460,79 @@ int gzwrite (file, buf, len)
 | 
				
			|||||||
        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
 | 
					        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
 | 
				
			||||||
        if (s->z_err != Z_OK) break;
 | 
					        if (s->z_err != Z_OK) break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    s->crc = crc32(s->crc, buf, len);
 | 
					    s->crc = crc32(s->crc, (const Bytef *)buf, len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (int)(len - s->stream.avail_in);
 | 
					    return (int)(len - s->stream.avail_in);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					     Converts, formats, and writes the args to the compressed file under
 | 
				
			||||||
 | 
					   control of the format string, as in fprintf. gzprintf returns the number of
 | 
				
			||||||
 | 
					   uncompressed bytes actually written (0 in case of error).
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifdef STDC
 | 
				
			||||||
 | 
					#include <stdarg.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int EXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    char buf[Z_BUFSIZE];
 | 
				
			||||||
 | 
					    va_list va;
 | 
				
			||||||
 | 
					    int len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    va_start(va, format);
 | 
				
			||||||
 | 
					#ifdef HAS_vsnprintf
 | 
				
			||||||
 | 
					    len = vsnprintf(buf, sizeof(buf), format, va);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    len = vsprintf(buf, format, va);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    va_end(va);
 | 
				
			||||||
 | 
					    if (len <= 0) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return gzwrite(file, buf, (unsigned)len);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#else /* not ANSI C */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int EXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
 | 
				
			||||||
 | 
						               a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    const char *format;
 | 
				
			||||||
 | 
					    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
 | 
				
			||||||
 | 
						a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    char buf[Z_BUFSIZE];
 | 
				
			||||||
 | 
					    int len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAS_snprintf
 | 
				
			||||||
 | 
					    snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
 | 
				
			||||||
 | 
						     a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
 | 
				
			||||||
 | 
						    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */
 | 
				
			||||||
 | 
					    if (len <= 0) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return gzwrite(file, buf, len);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					      Writes c, converted to an unsigned char, into the compressed file.
 | 
				
			||||||
 | 
					   gzputc returns the value that was written, or -1 in case of error.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					int EXPORT gzputc(file, c)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    int c;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return gzwrite(file, &c, 1) == 1 ? c : -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
     Flushes all pending output into the compressed file. The parameter
 | 
					     Flushes all pending output into the compressed file. The parameter
 | 
				
			||||||
   flush is as in the deflate() function.
 | 
					   flush is as in the deflate() function.
 | 
				
			||||||
     gzflush should be called only when strictly necessary because it can
 | 
					 | 
				
			||||||
   degrade compression.
 | 
					 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int gzflush (file, flush)
 | 
					local int do_flush (file, flush)
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
    int flush;
 | 
					    int flush;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -424,6 +558,9 @@ int gzflush (file, flush)
 | 
				
			|||||||
        if (done) break;
 | 
					        if (done) break;
 | 
				
			||||||
        s->z_err = deflate(&(s->stream), flush);
 | 
					        s->z_err = deflate(&(s->stream), flush);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Ignore the second of two consecutive flushes: */
 | 
				
			||||||
 | 
						if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* deflate has finished flushing only when it hasn't used up
 | 
					        /* deflate has finished flushing only when it hasn't used up
 | 
				
			||||||
         * all the available space in the output buffer: 
 | 
					         * all the available space in the output buffer: 
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
@@ -431,9 +568,154 @@ int gzflush (file, flush)
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
 | 
					        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int EXPORT gzflush (file, flush)
 | 
				
			||||||
 | 
					     gzFile file;
 | 
				
			||||||
 | 
					     int flush;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
 | 
					    int err = do_flush (file, flush);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (err) return err;
 | 
				
			||||||
    fflush(s->file);
 | 
					    fflush(s->file);
 | 
				
			||||||
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
 | 
					    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#endif /* NO_DEFLATE */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					      Sets the starting position for the next gzread or gzwrite on the given
 | 
				
			||||||
 | 
					   compressed file. The offset represents a number of bytes in the
 | 
				
			||||||
 | 
					      gzseek returns the resulting offset location as measured in bytes from
 | 
				
			||||||
 | 
					   the beginning of the uncompressed stream, or -1 in case of error.
 | 
				
			||||||
 | 
					      SEEK_END is not implemented, returns error.
 | 
				
			||||||
 | 
					      In this version of the library, gzseek can be extremely slow.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					z_off_t EXPORT gzseek (file, offset, whence)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    z_off_t offset;
 | 
				
			||||||
 | 
					    int whence;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s == NULL || whence == SEEK_END || s->z_err == Z_ERRNO) return -1L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s->z_err = Z_OK;
 | 
				
			||||||
 | 
					    s->z_eof = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (s->mode == 'w') {
 | 
				
			||||||
 | 
					#ifdef NO_DEFLATE
 | 
				
			||||||
 | 
						return -1L;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						if (whence == SEEK_SET) {
 | 
				
			||||||
 | 
						    offset -= s->stream.total_out;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (offset < 0) return -1L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* At this point, offset is the number of zero bytes to write. */
 | 
				
			||||||
 | 
						if (s->inbuf == Z_NULL) {
 | 
				
			||||||
 | 
						    s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
 | 
				
			||||||
 | 
						    zmemzero(s->inbuf, Z_BUFSIZE);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						while (offset > 0)  {
 | 
				
			||||||
 | 
						    uInt size = Z_BUFSIZE;
 | 
				
			||||||
 | 
						    if (offset < Z_BUFSIZE) size = (uInt)offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    size = gzwrite(file, s->inbuf, size);
 | 
				
			||||||
 | 
						    if (size == 0) return -1L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    offset -= size;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return s->stream.total_in;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* Rest of function is for reading only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s->z_err == Z_DATA_ERROR) return -1L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* compute absolute position */
 | 
				
			||||||
 | 
					    if (whence == SEEK_CUR) {
 | 
				
			||||||
 | 
						offset += s->stream.total_out;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (offset < 0) return -1L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s->transparent) {
 | 
				
			||||||
 | 
						/* map to fseek */
 | 
				
			||||||
 | 
						s->stream.avail_in = 0;
 | 
				
			||||||
 | 
						s->stream.next_in = s->inbuf;
 | 
				
			||||||
 | 
						if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
 | 
				
			||||||
 | 
						return offset;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* For a negative seek, rewind and use positive seek */
 | 
				
			||||||
 | 
					    if ((uLong)offset >= s->stream.total_out) {
 | 
				
			||||||
 | 
						offset -= s->stream.total_out;
 | 
				
			||||||
 | 
					    } else if (gzrewind(file) < 0) {
 | 
				
			||||||
 | 
						return -1L;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* offset is now the number of bytes to skip. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (offset != 0 && s->outbuf == Z_NULL) {
 | 
				
			||||||
 | 
						s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    while (offset > 0)  {
 | 
				
			||||||
 | 
						int size = Z_BUFSIZE;
 | 
				
			||||||
 | 
						if (offset < Z_BUFSIZE) size = (int)offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						size = gzread(file, s->outbuf, (uInt)size);
 | 
				
			||||||
 | 
						if (size <= 0) return -1L;
 | 
				
			||||||
 | 
						offset -= size;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return s->stream.total_out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					     Rewinds input file. 
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					int EXPORT gzrewind (file)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (s == NULL || s->mode != 'r') return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s->z_err = Z_OK;
 | 
				
			||||||
 | 
					    s->z_eof = 0;
 | 
				
			||||||
 | 
					    s->stream.avail_in = 0;
 | 
				
			||||||
 | 
					    s->stream.next_in = s->inbuf;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					    if (s->startpos == 0) { /* not a compressed file */
 | 
				
			||||||
 | 
						rewind(s->file);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (void) inflateReset(&s->stream);
 | 
				
			||||||
 | 
					    return fseek(s->file, s->startpos, SEEK_SET);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					     Returns the starting position for the next gzread or gzwrite on the
 | 
				
			||||||
 | 
					   given compressed file. This position represents a number of bytes in the
 | 
				
			||||||
 | 
					   uncompressed data stream.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					z_off_t EXPORT gztell (file)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return gzseek(file, 0L, SEEK_CUR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ===========================================================================
 | 
				
			||||||
 | 
					     Returns 1 when EOF has previously been detected reading the given
 | 
				
			||||||
 | 
					   input stream, otherwise zero.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					int EXPORT gzeof (file)
 | 
				
			||||||
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gz_stream *s = (gz_stream*)file;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return (s == NULL || s->mode != 'r') ? 0 : s->z_eof;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
   Outputs a long in LSB order to the given file
 | 
					   Outputs a long in LSB order to the given file
 | 
				
			||||||
@@ -470,7 +752,7 @@ local uLong getLong (s)
 | 
				
			|||||||
     Flushes all pending output if necessary, closes the compressed file
 | 
					     Flushes all pending output if necessary, closes the compressed file
 | 
				
			||||||
   and deallocates all the (de)compression state.
 | 
					   and deallocates all the (de)compression state.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int gzclose (file)
 | 
					int EXPORT gzclose (file)
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int err;
 | 
					    int err;
 | 
				
			||||||
@@ -479,14 +761,17 @@ int gzclose (file)
 | 
				
			|||||||
    if (s == NULL) return Z_STREAM_ERROR;
 | 
					    if (s == NULL) return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->mode == 'w') {
 | 
					    if (s->mode == 'w') {
 | 
				
			||||||
        err = gzflush (file, Z_FINISH);
 | 
					#ifdef NO_DEFLATE
 | 
				
			||||||
        if (err != Z_OK) return destroy(file);
 | 
						return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        err = do_flush (file, Z_FINISH);
 | 
				
			||||||
 | 
					        if (err != Z_OK) return destroy((gz_stream*)file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        putLong (s->file, s->crc);
 | 
					        putLong (s->file, s->crc);
 | 
				
			||||||
        putLong (s->file, s->stream.total_in);
 | 
					        putLong (s->file, s->stream.total_in);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return destroy(file);
 | 
					    return destroy((gz_stream*)file);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
@@ -496,7 +781,7 @@ int gzclose (file)
 | 
				
			|||||||
   errnum is set to Z_ERRNO and the application may consult errno
 | 
					   errnum is set to Z_ERRNO and the application may consult errno
 | 
				
			||||||
   to get the exact error code.
 | 
					   to get the exact error code.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
const char*  gzerror (file, errnum)
 | 
					const char*  EXPORT gzerror (file, errnum)
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
    int *errnum;
 | 
					    int *errnum;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								infblock.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								infblock.c
									
									
									
									
									
								
							@@ -66,7 +66,7 @@ inflate_blocks_statef *s;
 | 
				
			|||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
uLongf *c;
 | 
					uLongf *c;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (s->checkfn != Z_NULL)
 | 
					  if (c != Z_NULL)
 | 
				
			||||||
    *c = s->check;
 | 
					    *c = s->check;
 | 
				
			||||||
  if (s->mode == BTREE || s->mode == DTREE)
 | 
					  if (s->mode == BTREE || s->mode == DTREE)
 | 
				
			||||||
    ZFREE(z, s->sub.trees.blens);
 | 
					    ZFREE(z, s->sub.trees.blens);
 | 
				
			||||||
@@ -81,7 +81,7 @@ uLongf *c;
 | 
				
			|||||||
  s->bitb = 0;
 | 
					  s->bitb = 0;
 | 
				
			||||||
  s->read = s->write = s->window;
 | 
					  s->read = s->write = s->window;
 | 
				
			||||||
  if (s->checkfn != Z_NULL)
 | 
					  if (s->checkfn != Z_NULL)
 | 
				
			||||||
    z->adler = s->check = (*s->checkfn)(0L, Z_NULL, 0);
 | 
					    z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
 | 
				
			||||||
  Trace((stderr, "inflate:   blocks reset\n"));
 | 
					  Trace((stderr, "inflate:   blocks reset\n"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -105,7 +105,7 @@ uInt w;
 | 
				
			|||||||
  s->checkfn = c;
 | 
					  s->checkfn = c;
 | 
				
			||||||
  s->mode = TYPE;
 | 
					  s->mode = TYPE;
 | 
				
			||||||
  Trace((stderr, "inflate:   blocks allocated\n"));
 | 
					  Trace((stderr, "inflate:   blocks allocated\n"));
 | 
				
			||||||
  inflate_blocks_reset(s, z, &s->check);
 | 
					  inflate_blocks_reset(s, z, Z_NULL);
 | 
				
			||||||
  return s;
 | 
					  return s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -380,12 +380,11 @@ int r;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflate_blocks_free(s, z, c)
 | 
					int inflate_blocks_free(s, z)
 | 
				
			||||||
inflate_blocks_statef *s;
 | 
					inflate_blocks_statef *s;
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
uLongf *c;
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  inflate_blocks_reset(s, z, c);
 | 
					  inflate_blocks_reset(s, z, Z_NULL);
 | 
				
			||||||
  ZFREE(z, s->window);
 | 
					  ZFREE(z, s->window);
 | 
				
			||||||
  ZFREE(z, s);
 | 
					  ZFREE(z, s);
 | 
				
			||||||
  Trace((stderr, "inflate:   blocks freed\n"));
 | 
					  Trace((stderr, "inflate:   blocks freed\n"));
 | 
				
			||||||
@@ -401,3 +400,14 @@ uInt  n;
 | 
				
			|||||||
  zmemcpy((charf *)s->window, d, n);
 | 
					  zmemcpy((charf *)s->window, d, n);
 | 
				
			||||||
  s->read = s->write = s->window + n;
 | 
					  s->read = s->write = s->window + n;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns true if inflate is currently at the end of a block generated
 | 
				
			||||||
 | 
					 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
 | 
				
			||||||
 | 
					 * IN assertion: s != Z_NULL
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int inflate_blocks_sync_point(s)
 | 
				
			||||||
 | 
					inflate_blocks_statef *s;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return s->mode == LENS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* infblock.h -- header to use infblock.c
 | 
					/* infblock.h -- header to use infblock.c
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,10 +28,12 @@ extern void inflate_blocks_reset OF((
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern int inflate_blocks_free OF((
 | 
					extern int inflate_blocks_free OF((
 | 
				
			||||||
    inflate_blocks_statef *,
 | 
					    inflate_blocks_statef *,
 | 
				
			||||||
    z_streamp ,
 | 
					    z_streamp));
 | 
				
			||||||
    uLongf *));                  /* check value on output */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void inflate_set_dictionary OF((
 | 
					extern void inflate_set_dictionary OF((
 | 
				
			||||||
    inflate_blocks_statef *s,
 | 
					    inflate_blocks_statef *s,
 | 
				
			||||||
    const Bytef *d,  /* dictionary */
 | 
					    const Bytef *d,  /* dictionary */
 | 
				
			||||||
    uInt  n));       /* dictionary length */
 | 
					    uInt  n));       /* dictionary length */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int inflate_blocks_sync_point OF((
 | 
				
			||||||
 | 
					    inflate_blocks_statef *s));
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								infcodes.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								infcodes.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* infcodes.c -- process literals and length/distance pairs
 | 
					/* infcodes.c -- process literals and length/distance pairs
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,11 +16,7 @@
 | 
				
			|||||||
#define exop word.what.Exop
 | 
					#define exop word.what.Exop
 | 
				
			||||||
#define bits word.what.Bits
 | 
					#define bits word.what.Bits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* inflate codes private state */
 | 
					typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
 | 
				
			||||||
struct inflate_codes_state {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* mode */
 | 
					 | 
				
			||||||
  enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
 | 
					 | 
				
			||||||
      START,    /* x: set up for LEN */
 | 
					      START,    /* x: set up for LEN */
 | 
				
			||||||
      LEN,      /* i: get length/literal/eob next */
 | 
					      LEN,      /* i: get length/literal/eob next */
 | 
				
			||||||
      LENEXT,   /* i: getting length extra (have base) */
 | 
					      LENEXT,   /* i: getting length extra (have base) */
 | 
				
			||||||
@@ -31,7 +27,13 @@ struct inflate_codes_state {
 | 
				
			|||||||
      WASH,     /* o: got eob, possibly still output waiting */
 | 
					      WASH,     /* o: got eob, possibly still output waiting */
 | 
				
			||||||
      END,      /* x: got eob and all data flushed */
 | 
					      END,      /* x: got eob and all data flushed */
 | 
				
			||||||
      BADCODE}  /* x: got error */
 | 
					      BADCODE}  /* x: got error */
 | 
				
			||||||
    mode;               /* current inflate_codes mode */
 | 
					inflate_codes_mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* inflate codes private state */
 | 
				
			||||||
 | 
					struct inflate_codes_state {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* mode */
 | 
				
			||||||
 | 
					  inflate_codes_mode mode;      /* current inflate_codes mode */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* mode dependent information */
 | 
					  /* mode dependent information */
 | 
				
			||||||
  uInt len;
 | 
					  uInt len;
 | 
				
			||||||
@@ -235,6 +237,9 @@ int r;
 | 
				
			|||||||
      r = Z_STREAM_ERROR;
 | 
					      r = Z_STREAM_ERROR;
 | 
				
			||||||
      LEAVE
 | 
					      LEAVE
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					#ifdef NEED_DUMMY_RETURN
 | 
				
			||||||
 | 
					  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* infcodes.h -- header to use infcodes.c
 | 
					/* infcodes.h -- header to use infcodes.c
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* inffast.c -- process literals and length/distance pairs fast
 | 
					/* inffast.c -- process literals and length/distance pairs fast
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* inffast.h -- header to use inffast.c
 | 
					/* inffast.h -- header to use inffast.c
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								inflate.c
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								inflate.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* inflate.c -- zlib interface to inflate modules
 | 
					/* inflate.c -- zlib interface to inflate modules
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8,11 +8,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
 | 
					struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* inflate private state */
 | 
					typedef enum {
 | 
				
			||||||
struct internal_state {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* mode */
 | 
					 | 
				
			||||||
  enum {
 | 
					 | 
				
			||||||
      METHOD,   /* waiting for method byte */
 | 
					      METHOD,   /* waiting for method byte */
 | 
				
			||||||
      FLAG,     /* waiting for flag byte */
 | 
					      FLAG,     /* waiting for flag byte */
 | 
				
			||||||
      DICT4,    /* four dictionary check bytes to go */
 | 
					      DICT4,    /* four dictionary check bytes to go */
 | 
				
			||||||
@@ -27,7 +23,13 @@ struct internal_state {
 | 
				
			|||||||
      CHECK1,   /* one check byte to go */
 | 
					      CHECK1,   /* one check byte to go */
 | 
				
			||||||
      DONE,     /* finished check, done */
 | 
					      DONE,     /* finished check, done */
 | 
				
			||||||
      BAD}      /* got an error--stay here */
 | 
					      BAD}      /* got an error--stay here */
 | 
				
			||||||
    mode;               /* current inflate mode */
 | 
					inflate_mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* inflate private state */
 | 
				
			||||||
 | 
					struct internal_state {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* mode */
 | 
				
			||||||
 | 
					  inflate_mode  mode;   /* current inflate mode */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* mode dependent information */
 | 
					  /* mode dependent information */
 | 
				
			||||||
  union {
 | 
					  union {
 | 
				
			||||||
@@ -48,39 +50,35 @@ struct internal_state {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateReset(z)
 | 
					int EXPORT inflateReset(z)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uLong c;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (z == Z_NULL || z->state == Z_NULL)
 | 
					  if (z == Z_NULL || z->state == Z_NULL)
 | 
				
			||||||
    return Z_STREAM_ERROR;
 | 
					    return Z_STREAM_ERROR;
 | 
				
			||||||
  z->total_in = z->total_out = 0;
 | 
					  z->total_in = z->total_out = 0;
 | 
				
			||||||
  z->msg = Z_NULL;
 | 
					  z->msg = Z_NULL;
 | 
				
			||||||
  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
 | 
					  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
 | 
				
			||||||
  inflate_blocks_reset(z->state->blocks, z, &c);
 | 
					  inflate_blocks_reset(z->state->blocks, z, Z_NULL);
 | 
				
			||||||
  Trace((stderr, "inflate: reset\n"));
 | 
					  Tracev((stderr, "inflate: reset\n"));
 | 
				
			||||||
  return Z_OK;
 | 
					  return Z_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateEnd(z)
 | 
					int EXPORT inflateEnd(z)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uLong c;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
 | 
					  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
 | 
				
			||||||
    return Z_STREAM_ERROR;
 | 
					    return Z_STREAM_ERROR;
 | 
				
			||||||
  if (z->state->blocks != Z_NULL)
 | 
					  if (z->state->blocks != Z_NULL)
 | 
				
			||||||
    inflate_blocks_free(z->state->blocks, z, &c);
 | 
					    inflate_blocks_free(z->state->blocks, z);
 | 
				
			||||||
  ZFREE(z, z->state);
 | 
					  ZFREE(z, z->state);
 | 
				
			||||||
  z->state = Z_NULL;
 | 
					  z->state = Z_NULL;
 | 
				
			||||||
  Trace((stderr, "inflate: end\n"));
 | 
					  Tracev((stderr, "inflate: end\n"));
 | 
				
			||||||
  return Z_OK;
 | 
					  return Z_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateInit2_(z, w, version, stream_size)
 | 
					int EXPORT inflateInit2_(z, w, version, stream_size)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
int w;
 | 
					int w;
 | 
				
			||||||
const char *version;
 | 
					const char *version;
 | 
				
			||||||
@@ -129,7 +127,7 @@ int stream_size;
 | 
				
			|||||||
    inflateEnd(z);
 | 
					    inflateEnd(z);
 | 
				
			||||||
    return Z_MEM_ERROR;
 | 
					    return Z_MEM_ERROR;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  Trace((stderr, "inflate: allocated\n"));
 | 
					  Tracev((stderr, "inflate: allocated\n"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* reset state */
 | 
					  /* reset state */
 | 
				
			||||||
  inflateReset(z);
 | 
					  inflateReset(z);
 | 
				
			||||||
@@ -137,7 +135,7 @@ int stream_size;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateInit_(z, version, stream_size)
 | 
					int EXPORT inflateInit_(z, version, stream_size)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
const char *version;
 | 
					const char *version;
 | 
				
			||||||
int stream_size;
 | 
					int stream_size;
 | 
				
			||||||
@@ -146,10 +144,10 @@ int stream_size;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NEEDBYTE {if(z->avail_in==0)return r;r=Z_OK;}
 | 
					#define NEEDBYTE {if(z->avail_in==0)return r; if (f != Z_FINISH) r = Z_OK;}
 | 
				
			||||||
#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
 | 
					#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflate(z, f)
 | 
					int EXPORT inflate(z, f)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
int f;
 | 
					int f;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -188,7 +186,7 @@ int f;
 | 
				
			|||||||
        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
					        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      Trace((stderr, "inflate: zlib header ok\n"));
 | 
					      Tracev((stderr, "inflate: zlib header ok\n"));
 | 
				
			||||||
      if (!(b & PRESET_DICT))
 | 
					      if (!(b & PRESET_DICT))
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        z->state->mode = BLOCKS;
 | 
					        z->state->mode = BLOCKS;
 | 
				
			||||||
@@ -227,7 +225,7 @@ int f;
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (r != Z_STREAM_END)
 | 
					      if (r != Z_STREAM_END)
 | 
				
			||||||
        return r;
 | 
					        return f == Z_FINISH && r == Z_OK ? Z_BUF_ERROR : r;
 | 
				
			||||||
      r = Z_OK;
 | 
					      r = Z_OK;
 | 
				
			||||||
      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
 | 
					      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
 | 
				
			||||||
      if (z->state->nowrap)
 | 
					      if (z->state->nowrap)
 | 
				
			||||||
@@ -236,6 +234,7 @@ int f;
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      z->state->mode = CHECK4;
 | 
					      z->state->mode = CHECK4;
 | 
				
			||||||
 | 
					      if (f == Z_FINISH) r = Z_BUF_ERROR;
 | 
				
			||||||
    case CHECK4:
 | 
					    case CHECK4:
 | 
				
			||||||
      NEEDBYTE
 | 
					      NEEDBYTE
 | 
				
			||||||
      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
 | 
					      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
 | 
				
			||||||
@@ -259,7 +258,7 @@ int f;
 | 
				
			|||||||
        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
					        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      Trace((stderr, "inflate: zlib check ok\n"));
 | 
					      Tracev((stderr, "inflate: zlib check ok\n"));
 | 
				
			||||||
      z->state->mode = DONE;
 | 
					      z->state->mode = DONE;
 | 
				
			||||||
    case DONE:
 | 
					    case DONE:
 | 
				
			||||||
      return Z_STREAM_END;
 | 
					      return Z_STREAM_END;
 | 
				
			||||||
@@ -268,10 +267,13 @@ int f;
 | 
				
			|||||||
    default:
 | 
					    default:
 | 
				
			||||||
      return Z_STREAM_ERROR;
 | 
					      return Z_STREAM_ERROR;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					#ifdef NEED_DUMMY_RETURN
 | 
				
			||||||
 | 
					  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateSetDictionary(z, dictionary, dictLength)
 | 
					int EXPORT inflateSetDictionary(z, dictionary, dictLength)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
const Bytef *dictionary;
 | 
					const Bytef *dictionary;
 | 
				
			||||||
uInt  dictLength;
 | 
					uInt  dictLength;
 | 
				
			||||||
@@ -295,7 +297,7 @@ uInt  dictLength;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int inflateSync(z)
 | 
					int EXPORT inflateSync(z)
 | 
				
			||||||
z_streamp z;
 | 
					z_streamp z;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uInt n;       /* number of bytes to look at */
 | 
					  uInt n;       /* number of bytes to look at */
 | 
				
			||||||
@@ -343,3 +345,19 @@ z_streamp z;
 | 
				
			|||||||
  z->state->mode = BLOCKS;
 | 
					  z->state->mode = BLOCKS;
 | 
				
			||||||
  return Z_OK;
 | 
					  return Z_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns true if inflate is currently at the end of a block generated
 | 
				
			||||||
 | 
					 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
 | 
				
			||||||
 | 
					 * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
 | 
				
			||||||
 | 
					 * but removes the length bytes of the resulting empty stored block. When
 | 
				
			||||||
 | 
					 * decompressing, PPP checks that at the end of input packet, inflate is
 | 
				
			||||||
 | 
					 * waiting for these length bytes.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int EXPORT inflateSyncPoint(z)
 | 
				
			||||||
 | 
					z_streamp z;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
 | 
				
			||||||
 | 
					    return Z_STREAM_ERROR;
 | 
				
			||||||
 | 
					  return inflate_blocks_sync_point(z->state->blocks);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,8 @@
 | 
				
			|||||||
#include "zutil.h"
 | 
					#include "zutil.h"
 | 
				
			||||||
#include "inftrees.h"
 | 
					#include "inftrees.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char inflate_copyright[] = " inflate 1.0.5 Copyright 1995-1998 Mark Adler ";
 | 
					const char inflate_copyright[] =
 | 
				
			||||||
 | 
					   " inflate 1.0.7 Copyright 1995-1998 Mark Adler ";
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
  If you use the zlib library in a product, an acknowledgment is welcome
 | 
					  If you use the zlib library in a product, an acknowledgment is welcome
 | 
				
			||||||
  in the documentation of your product. If for some reason you cannot
 | 
					  in the documentation of your product. If for some reason you cannot
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* inftrees.h -- header to use inftrees.c
 | 
					/* inftrees.h -- header to use inftrees.c
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* inflate_util.c -- data and routines common to blocks and codes
 | 
					/* inflate_util.c -- data and routines common to blocks and codes
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* infutil.h -- types and macros common to blocks and codes
 | 
					/* infutil.h -- types and macros common to blocks and codes
 | 
				
			||||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
					 * Copyright (C) 1995-1998 Mark Adler
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										46
									
								
								minigzip.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								minigzip.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* minigzip.c -- simulate gzip using the zlib compression library
 | 
					/* minigzip.c -- simulate gzip using the zlib compression library
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
 * or in pipe mode.
 | 
					 * or in pipe mode.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: minigzip.c,v 1.10 1996/07/24 13:41:04 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
@@ -47,18 +47,19 @@
 | 
				
			|||||||
#ifndef GZ_SUFFIX
 | 
					#ifndef GZ_SUFFIX
 | 
				
			||||||
#  define GZ_SUFFIX ".gz"
 | 
					#  define GZ_SUFFIX ".gz"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define SUFFIX_LEN sizeof(GZ_SUFFIX)
 | 
					#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int unlink OF((const char *));
 | 
					extern int unlink OF((const char *));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BUFLEN 4096
 | 
					#define BUFLEN 4096
 | 
				
			||||||
#define MAX_NAME_LEN 1024
 | 
					#define MAX_NAME_LEN 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define local static
 | 
					#ifdef MAXSEG_64K
 | 
				
			||||||
/* For MSDOS and other systems with limitation on stack size. For Unix,
 | 
					#  define local static
 | 
				
			||||||
    #define local
 | 
					   /* Needed for systems with limitation on stack size. */
 | 
				
			||||||
   works also.
 | 
					#else
 | 
				
			||||||
 */
 | 
					#  define local
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char *prog;
 | 
					char *prog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -201,7 +202,11 @@ void file_uncompress(file)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ===========================================================================
 | 
					/* ===========================================================================
 | 
				
			||||||
 * Usage:  minigzip [-d] [files...]
 | 
					 * Usage:  minigzip [-d] [-f] [-h] [-1 to -9] [files...]
 | 
				
			||||||
 | 
					 *   -d : decompress
 | 
				
			||||||
 | 
					 *   -f : compress with Z_FILTERED
 | 
				
			||||||
 | 
					 *   -h : compress with Z_HUFFMAN_ONLY
 | 
				
			||||||
 | 
					 *   -1 to -9 : compression level
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(argc, argv)
 | 
					int main(argc, argv)
 | 
				
			||||||
@@ -210,15 +215,26 @@ int main(argc, argv)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    int uncompr = 0;
 | 
					    int uncompr = 0;
 | 
				
			||||||
    gzFile file;
 | 
					    gzFile file;
 | 
				
			||||||
 | 
					    char outmode[20];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    strcpy(outmode, "wb6 ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    prog = argv[0];
 | 
					    prog = argv[0];
 | 
				
			||||||
    argc--, argv++;
 | 
					    argc--, argv++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (argc > 0) {
 | 
					    while (argc > 0) {
 | 
				
			||||||
        uncompr = (strcmp(*argv, "-d") == 0);
 | 
					      if (strcmp(*argv, "-d") == 0)
 | 
				
			||||||
        if (uncompr) {
 | 
						uncompr = 1;
 | 
				
			||||||
            argc--, argv++;
 | 
					      else if (strcmp(*argv, "-f") == 0)
 | 
				
			||||||
        }
 | 
						outmode[3] = 'f';
 | 
				
			||||||
 | 
					      else if (strcmp(*argv, "-h") == 0)
 | 
				
			||||||
 | 
						outmode[3] = 'h';
 | 
				
			||||||
 | 
					      else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&
 | 
				
			||||||
 | 
						       (*argv)[2] == 0)
 | 
				
			||||||
 | 
						outmode[2] = (*argv)[1];
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						break;
 | 
				
			||||||
 | 
					      argc--, argv++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (argc == 0) {
 | 
					    if (argc == 0) {
 | 
				
			||||||
        SET_BINARY_MODE(stdin);
 | 
					        SET_BINARY_MODE(stdin);
 | 
				
			||||||
@@ -228,7 +244,7 @@ int main(argc, argv)
 | 
				
			|||||||
            if (file == NULL) error("can't gzdopen stdin");
 | 
					            if (file == NULL) error("can't gzdopen stdin");
 | 
				
			||||||
            gz_uncompress(file, stdout);
 | 
					            gz_uncompress(file, stdout);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            file = gzdopen(fileno(stdout), "wb"); /* "wb9" for max compr. */
 | 
					            file = gzdopen(fileno(stdout), outmode);
 | 
				
			||||||
            if (file == NULL) error("can't gzdopen stdout");
 | 
					            if (file == NULL) error("can't gzdopen stdout");
 | 
				
			||||||
            gz_compress(stdin, file);
 | 
					            gz_compress(stdin, file);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
 | 
					# Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
 | 
				
			||||||
# Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					# Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
# For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					# For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# To compile, or to compile and test, type:
 | 
					# To compile, or to compile and test, type:
 | 
				
			||||||
@@ -22,7 +22,8 @@
 | 
				
			|||||||
# - - - - -
 | 
					# - - - - -
 | 
				
			||||||
# Alternately, these variables may be defined below, overriding the values
 | 
					# Alternately, these variables may be defined below, overriding the values
 | 
				
			||||||
# in djgpp.env, as
 | 
					# in djgpp.env, as
 | 
				
			||||||
INCLUDE_PATH=c:\usr\include
 | 
					# INCLUDE_PATH=c:\usr\include
 | 
				
			||||||
 | 
					# LIBRARY_PATH=c:\usr\lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CC=gcc
 | 
					CC=gcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,12 +33,12 @@ CC=gcc
 | 
				
			|||||||
CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 | 
					CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 | 
				
			||||||
             -Wstrict-prototypes -Wmissing-prototypes
 | 
					             -Wstrict-prototypes -Wmissing-prototypes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# If cp.exe is not found, replace with copy /Y .
 | 
					# If cp.exe is available, replace "copy /Y" with "cp -fp" .
 | 
				
			||||||
CP=cp -f
 | 
					CP=copy /Y
 | 
				
			||||||
# If install.exe is not found, replace with $(CP).
 | 
					# If gnu install.exe is available, replace $(CP) with ginstall.
 | 
				
			||||||
INSTALL=install
 | 
					INSTALL=$(CP)
 | 
				
			||||||
# The default value of RM is "rm -f."  If "rm.exe" is not found, uncomment:
 | 
					# The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
 | 
				
			||||||
# RM=del
 | 
					RM=del
 | 
				
			||||||
LDLIBS=-L. -lz
 | 
					LDLIBS=-L. -lz
 | 
				
			||||||
LD=$(CC) -s -o
 | 
					LD=$(CC) -s -o
 | 
				
			||||||
LDSHARED=$(CC)
 | 
					LDSHARED=$(CC)
 | 
				
			||||||
@@ -77,15 +78,21 @@ libz.a: $(OBJS)
 | 
				
			|||||||
install: $(INCL) $(LIBS)
 | 
					install: $(INCL) $(LIBS)
 | 
				
			||||||
	-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
 | 
						-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
 | 
				
			||||||
	-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
 | 
						-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
 | 
				
			||||||
	for %%f in ($(INCL)) do $(INSTALL) %%f $(INCLUDE_PATH)
 | 
						$(INSTALL) zlib.h $(INCLUDE_PATH)
 | 
				
			||||||
	for %%p in ($(LIBS)) do $(INSTALL) %%p $(LIBRARY_PATH)
 | 
						$(INSTALL) zconf.h $(INCLUDE_PATH)
 | 
				
			||||||
 | 
						$(INSTALL) libz.a $(LIBRARY_PATH)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uninstall:
 | 
					uninstall:
 | 
				
			||||||
	for %%f in ($(INCL)) do $(RM) $(INCLUDE_PATH)\%%f
 | 
						$(RM) $(INCLUDE_PATH)\zlib.h
 | 
				
			||||||
	for %%p in ($(LIBS)) do $(RM) $(LIBRARY_PATH)\%%p
 | 
						$(RM) $(INCLUDE_PATH)\zconf.h
 | 
				
			||||||
 | 
						$(RM) $(LIBRARY_PATH)\libz.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
	for %%p in (*.d *.o *.exe libz.a libz.so* foo.gz) do $(RM) %%p
 | 
						$(RM) *.d
 | 
				
			||||||
 | 
						$(RM) *.o
 | 
				
			||||||
 | 
						$(RM) *.exe
 | 
				
			||||||
 | 
						$(RM) libz.a
 | 
				
			||||||
 | 
						$(RM) foo.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPS := $(wildcard *.d)
 | 
					DEPS := $(wildcard *.d)
 | 
				
			||||||
ifneq ($(DEPS),)
 | 
					ifneq ($(DEPS),)
 | 
				
			||||||
@@ -15,7 +15,7 @@ CFLAGS=-Oait -Gs -nologo -W3 $(MODEL)
 | 
				
			|||||||
#-Ox generates bad code with MSC 5.1
 | 
					#-Ox generates bad code with MSC 5.1
 | 
				
			||||||
CC=cl
 | 
					CC=cl
 | 
				
			||||||
LD=link
 | 
					LD=link
 | 
				
			||||||
LDFLAGS=/e/st:0x1000/noe
 | 
					LDFLAGS=/e/st:0x1500/noe
 | 
				
			||||||
O=.obj
 | 
					O=.obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# variables
 | 
					# variables
 | 
				
			||||||
							
								
								
									
										57
									
								
								msdos/zlib.def
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								msdos/zlib.def
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					LIBRARY		"zlib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DESCRIPTION	'"""zlib data compression library"""'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXETYPE		NT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SUBSYSTEM	WINDOWS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STUB		'WINSTUB.EXE'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VERSION		1.07
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CODE		 EXECUTE READ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATA		 READ WRITE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HEAPSIZE	1048576,4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPORTS
 | 
				
			||||||
 | 
					    adler32                        @1
 | 
				
			||||||
 | 
					    compress                       @2
 | 
				
			||||||
 | 
					    crc32                          @3
 | 
				
			||||||
 | 
					    deflate                        @4
 | 
				
			||||||
 | 
					    deflateCopy                    @5
 | 
				
			||||||
 | 
					    deflateEnd                     @6
 | 
				
			||||||
 | 
					    deflateInit2_                  @7
 | 
				
			||||||
 | 
					    deflateInit_                   @8
 | 
				
			||||||
 | 
					    deflateParams                  @9
 | 
				
			||||||
 | 
					    deflateReset                   @10
 | 
				
			||||||
 | 
					    deflateSetDictionary           @11
 | 
				
			||||||
 | 
					    gzclose                        @12
 | 
				
			||||||
 | 
					    gzdopen                        @13
 | 
				
			||||||
 | 
					    gzerror                        @14
 | 
				
			||||||
 | 
					    gzflush                        @15
 | 
				
			||||||
 | 
					    gzopen                         @16
 | 
				
			||||||
 | 
					    gzread                         @17
 | 
				
			||||||
 | 
					    gzwrite                        @18
 | 
				
			||||||
 | 
					    inflate                        @19
 | 
				
			||||||
 | 
					    inflateEnd                     @20
 | 
				
			||||||
 | 
					    inflateInit2_                  @21
 | 
				
			||||||
 | 
					    inflateInit_                   @22
 | 
				
			||||||
 | 
					    inflateReset                   @23
 | 
				
			||||||
 | 
					    inflateSetDictionary           @24
 | 
				
			||||||
 | 
					    inflateSync                    @25
 | 
				
			||||||
 | 
					    uncompress                     @26
 | 
				
			||||||
 | 
					    zlibVersion                    @27
 | 
				
			||||||
 | 
					    gzprintf                       @28
 | 
				
			||||||
 | 
					    gzputc                         @29
 | 
				
			||||||
 | 
					    gzgetc                         @30
 | 
				
			||||||
 | 
					    gzseek                         @31
 | 
				
			||||||
 | 
					    gzrewind                       @32
 | 
				
			||||||
 | 
					    gztell                         @33
 | 
				
			||||||
 | 
					    gzeof                          @34
 | 
				
			||||||
 | 
					    gzsetparams                    @35
 | 
				
			||||||
 | 
					    zError                         @36
 | 
				
			||||||
 | 
					    inflateSyncPoint               @37
 | 
				
			||||||
 | 
					    get_crc_table                  @38
 | 
				
			||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define IDR_VERSION1  1
 | 
					#define IDR_VERSION1  1
 | 
				
			||||||
IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
 | 
					IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
 | 
				
			||||||
  FILEVERSION	 1,0,5,0
 | 
					  FILEVERSION	 1,0,7,0
 | 
				
			||||||
  PRODUCTVERSION 1,0,5,0
 | 
					  PRODUCTVERSION 1,0,7,0
 | 
				
			||||||
  FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
 | 
					  FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
 | 
				
			||||||
  FILEFLAGS	0
 | 
					  FILEFLAGS	0
 | 
				
			||||||
  FILEOS	VOS_DOS_WINDOWS32
 | 
					  FILEOS	VOS_DOS_WINDOWS32
 | 
				
			||||||
@@ -17,12 +17,12 @@ BEGIN
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    BEGIN
 | 
					    BEGIN
 | 
				
			||||||
      VALUE "FileDescription", "zlib data compression library\0"
 | 
					      VALUE "FileDescription", "zlib data compression library\0"
 | 
				
			||||||
      VALUE "FileVersion",	"1.0.5\0"
 | 
					      VALUE "FileVersion",	"1.0.7\0"
 | 
				
			||||||
      VALUE "InternalName",	"zlib\0"
 | 
					      VALUE "InternalName",	"zlib\0"
 | 
				
			||||||
      VALUE "OriginalFilename",	"zlib.lib\0"
 | 
					      VALUE "OriginalFilename",	"zlib.lib\0"
 | 
				
			||||||
      VALUE "ProductName",	"ZLib.DLL\0"
 | 
					      VALUE "ProductName",	"ZLib.DLL\0"
 | 
				
			||||||
      VALUE "Comments",	"DLL support by Alessandro Iacopetti\0"
 | 
					      VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
 | 
				
			||||||
      VALUE "LegalCopyright", "(C) 1995-1996 Jean-loup Gailly & Mark Adler\0"
 | 
					      VALUE "LegalCopyright", "(C) 1995-1998 Jean-loup Gailly & Mark Adler\0"
 | 
				
			||||||
    END
 | 
					    END
 | 
				
			||||||
  END
 | 
					  END
 | 
				
			||||||
  BLOCK "VarFileInfo"
 | 
					  BLOCK "VarFileInfo"
 | 
				
			||||||
							
								
								
									
										88
									
								
								nt/Makefile.nt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								nt/Makefile.nt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					# Makefile for zlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!include <ntwin32.mak>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CC=cl
 | 
				
			||||||
 | 
					LD=link
 | 
				
			||||||
 | 
					CFLAGS=-O -nologo
 | 
				
			||||||
 | 
					LDFLAGS=
 | 
				
			||||||
 | 
					O=.obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# variables
 | 
				
			||||||
 | 
					OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
 | 
				
			||||||
 | 
					  trees$(O)
 | 
				
			||||||
 | 
					OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
 | 
				
			||||||
 | 
					  infutil$(O) inffast$(O)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all:  zlib.dll example.exe minigzip.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					adler32.obj: adler32.c zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					compress.obj: compress.c zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crc32.obj: crc32.c zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gzio.obj: gzio.c zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
 | 
				
			||||||
 | 
					   infcodes.h infutil.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
 | 
				
			||||||
 | 
					   infcodes.h inffast.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uncompr.obj: uncompr.c zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					zutil.obj: zutil.c zutil.h zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					example.obj: example.c zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minigzip.obj: minigzip.c zlib.h zconf.h
 | 
				
			||||||
 | 
						$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					zlib.dll: $(OBJ1) $(OBJ2) zlib.dnt
 | 
				
			||||||
 | 
						link $(dlllflags) -out:$@ -def:zlib.dnt $(OBJ1) $(OBJ2) $(guilibsdll)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					zlib.lib: zlib.dll
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					example.exe: example.obj zlib.lib
 | 
				
			||||||
 | 
						$(LD) $(LDFLAGS) example.obj zlib.lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minigzip.exe: minigzip.obj zlib.lib
 | 
				
			||||||
 | 
						$(LD) $(LDFLAGS) minigzip.obj zlib.lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test: example.exe minigzip.exe
 | 
				
			||||||
 | 
						example
 | 
				
			||||||
 | 
						echo hello world | minigzip | minigzip -d 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						del *.obj
 | 
				
			||||||
 | 
						del *.exe
 | 
				
			||||||
 | 
						del *.dll
 | 
				
			||||||
 | 
						del *.lib
 | 
				
			||||||
							
								
								
									
										44
									
								
								nt/zlib.dnt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								nt/zlib.dnt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					LIBRARY		zlib.dll
 | 
				
			||||||
 | 
					EXETYPE WINDOWS
 | 
				
			||||||
 | 
					CODE		 PRELOAD MOVEABLE DISCARDABLE
 | 
				
			||||||
 | 
					DATA		 PRELOAD MOVEABLE MULTIPLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPORTS
 | 
				
			||||||
 | 
					    adler32                        @1
 | 
				
			||||||
 | 
					    compress                       @2
 | 
				
			||||||
 | 
					    crc32                          @3
 | 
				
			||||||
 | 
					    deflate                        @4
 | 
				
			||||||
 | 
					    deflateCopy                    @5
 | 
				
			||||||
 | 
					    deflateEnd                     @6
 | 
				
			||||||
 | 
					    deflateInit2_                  @7
 | 
				
			||||||
 | 
					    deflateInit_                   @8
 | 
				
			||||||
 | 
					    deflateParams                  @9
 | 
				
			||||||
 | 
					    deflateReset                   @10
 | 
				
			||||||
 | 
					    deflateSetDictionary           @11
 | 
				
			||||||
 | 
					    gzclose                        @12
 | 
				
			||||||
 | 
					    gzdopen                        @13
 | 
				
			||||||
 | 
					    gzerror                        @14
 | 
				
			||||||
 | 
					    gzflush                        @15
 | 
				
			||||||
 | 
					    gzopen                         @16
 | 
				
			||||||
 | 
					    gzread                         @17
 | 
				
			||||||
 | 
					    gzwrite                        @18
 | 
				
			||||||
 | 
					    inflate                        @19
 | 
				
			||||||
 | 
					    inflateEnd                     @20
 | 
				
			||||||
 | 
					    inflateInit2_                  @21
 | 
				
			||||||
 | 
					    inflateInit_                   @22
 | 
				
			||||||
 | 
					    inflateReset                   @23
 | 
				
			||||||
 | 
					    inflateSetDictionary           @24
 | 
				
			||||||
 | 
					    inflateSync                    @25
 | 
				
			||||||
 | 
					    uncompress                     @26
 | 
				
			||||||
 | 
					    zlibVersion                    @27
 | 
				
			||||||
 | 
					    gzprintf                       @28
 | 
				
			||||||
 | 
					    gzputc                         @29
 | 
				
			||||||
 | 
					    gzgetc                         @30
 | 
				
			||||||
 | 
					    gzseek                         @31
 | 
				
			||||||
 | 
					    gzrewind                       @32
 | 
				
			||||||
 | 
					    gztell                         @33
 | 
				
			||||||
 | 
					    gzeof                          @34
 | 
				
			||||||
 | 
					    gzsetparams                    @35
 | 
				
			||||||
 | 
					    zError                         @36
 | 
				
			||||||
 | 
					    inflateSyncPoint               @37
 | 
				
			||||||
 | 
					    get_crc_table                  @38
 | 
				
			||||||
							
								
								
									
										18
									
								
								trees.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								trees.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* trees.c -- output deflated data using Huffman coding
 | 
					/* trees.c -- output deflated data using Huffman coding
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,7 +29,7 @@
 | 
				
			|||||||
 *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
 | 
					 *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: trees.c,v 1.11 1996/07/24 13:41:06 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "deflate.h"
 | 
					#include "deflate.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,16 +56,16 @@
 | 
				
			|||||||
#define REPZ_11_138  18
 | 
					#define REPZ_11_138  18
 | 
				
			||||||
/* repeat a zero length 11-138 times  (7 bits of repeat count) */
 | 
					/* repeat a zero length 11-138 times  (7 bits of repeat count) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
 | 
					local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
 | 
				
			||||||
   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
 | 
					   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local int extra_dbits[D_CODES] /* extra bits for each distance code */
 | 
					local const int extra_dbits[D_CODES] /* extra bits for each distance code */
 | 
				
			||||||
   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
 | 
					   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local int extra_blbits[BL_CODES]/* extra bits for each bit length code */
 | 
					local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
 | 
				
			||||||
   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
 | 
					   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local uch bl_order[BL_CODES]
 | 
					local const uch bl_order[BL_CODES]
 | 
				
			||||||
   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
 | 
					   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
 | 
				
			||||||
/* The lengths of the bit length codes are sent in order of decreasing
 | 
					/* The lengths of the bit length codes are sent in order of decreasing
 | 
				
			||||||
 * probability, to avoid transmitting the lengths for unused bit length codes.
 | 
					 * probability, to avoid transmitting the lengths for unused bit length codes.
 | 
				
			||||||
@@ -109,7 +109,7 @@ local int base_dist[D_CODES];
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct static_tree_desc_s {
 | 
					struct static_tree_desc_s {
 | 
				
			||||||
    ct_data *static_tree;        /* static tree or NULL */
 | 
					    ct_data *static_tree;        /* static tree or NULL */
 | 
				
			||||||
    intf    *extra_bits;         /* extra bits for each code or NULL */
 | 
					    const intf *extra_bits;      /* extra bits for each code or NULL */
 | 
				
			||||||
    int     extra_base;          /* base index for extra_bits */
 | 
					    int     extra_base;          /* base index for extra_bits */
 | 
				
			||||||
    int     elems;               /* max number of elements in the tree */
 | 
					    int     elems;               /* max number of elements in the tree */
 | 
				
			||||||
    int     max_length;          /* max bit length for the codes */
 | 
					    int     max_length;          /* max bit length for the codes */
 | 
				
			||||||
@@ -154,7 +154,7 @@ local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#else /* DEBUG */
 | 
					#else /* DEBUG */
 | 
				
			||||||
#  define send_code(s, c, tree) \
 | 
					#  define send_code(s, c, tree) \
 | 
				
			||||||
     { if (verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
 | 
					     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
 | 
				
			||||||
       send_bits(s, tree[c].Code, tree[c].Len); }
 | 
					       send_bits(s, tree[c].Code, tree[c].Len); }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -416,7 +416,7 @@ local void gen_bitlen(s, desc)
 | 
				
			|||||||
    ct_data *tree  = desc->dyn_tree;
 | 
					    ct_data *tree  = desc->dyn_tree;
 | 
				
			||||||
    int max_code   = desc->max_code;
 | 
					    int max_code   = desc->max_code;
 | 
				
			||||||
    ct_data *stree = desc->stat_desc->static_tree;
 | 
					    ct_data *stree = desc->stat_desc->static_tree;
 | 
				
			||||||
    intf *extra    = desc->stat_desc->extra_bits;
 | 
					    const intf *extra = desc->stat_desc->extra_bits;
 | 
				
			||||||
    int base       = desc->stat_desc->extra_base;
 | 
					    int base       = desc->stat_desc->extra_base;
 | 
				
			||||||
    int max_length = desc->stat_desc->max_length;
 | 
					    int max_length = desc->stat_desc->max_length;
 | 
				
			||||||
    int h;              /* heap index */
 | 
					    int h;              /* heap index */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* uncompr.c -- decompress a memory buffer
 | 
					/* uncompr.c -- decompress a memory buffer
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: uncompr.c,v 1.8 1996/01/30 21:59:26 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -22,7 +22,7 @@
 | 
				
			|||||||
   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
					   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
				
			||||||
   buffer, or Z_DATA_ERROR if the input data was corrupted.
 | 
					   buffer, or Z_DATA_ERROR if the input data was corrupted.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
int uncompress (dest, destLen, source, sourceLen)
 | 
					int EXPORT uncompress (dest, destLen, source, sourceLen)
 | 
				
			||||||
    Bytef *dest;
 | 
					    Bytef *dest;
 | 
				
			||||||
    uLongf *destLen;
 | 
					    uLongf *destLen;
 | 
				
			||||||
    const Bytef *source;
 | 
					    const Bytef *source;
 | 
				
			||||||
@@ -49,7 +49,7 @@ int uncompress (dest, destLen, source, sourceLen)
 | 
				
			|||||||
    err = inflate(&stream, Z_FINISH);
 | 
					    err = inflate(&stream, Z_FINISH);
 | 
				
			||||||
    if (err != Z_STREAM_END) {
 | 
					    if (err != Z_STREAM_END) {
 | 
				
			||||||
        inflateEnd(&stream);
 | 
					        inflateEnd(&stream);
 | 
				
			||||||
        return err;
 | 
					        return err == Z_OK ? Z_BUF_ERROR : err;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    *destLen = stream.total_out;
 | 
					    *destLen = stream.total_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										77
									
								
								zconf.h
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								zconf.h
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* zconf.h -- configuration of the zlib compression library
 | 
					/* zconf.h -- configuration of the zlib compression library
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: zconf.h,v 1.20 1996/07/02 15:09:28 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _ZCONF_H
 | 
					#ifndef _ZCONF_H
 | 
				
			||||||
#define _ZCONF_H
 | 
					#define _ZCONF_H
 | 
				
			||||||
@@ -27,6 +27,7 @@
 | 
				
			|||||||
#  define inflateInit2_	z_inflateInit2_
 | 
					#  define inflateInit2_	z_inflateInit2_
 | 
				
			||||||
#  define inflateSetDictionary z_inflateSetDictionary
 | 
					#  define inflateSetDictionary z_inflateSetDictionary
 | 
				
			||||||
#  define inflateSync	z_inflateSync
 | 
					#  define inflateSync	z_inflateSync
 | 
				
			||||||
 | 
					#  define inflateSyncPoint z_inflateSyncPoint
 | 
				
			||||||
#  define inflateReset	z_inflateReset
 | 
					#  define inflateReset	z_inflateReset
 | 
				
			||||||
#  define compress	z_compress
 | 
					#  define compress	z_compress
 | 
				
			||||||
#  define uncompress	z_uncompress
 | 
					#  define uncompress	z_uncompress
 | 
				
			||||||
@@ -72,8 +73,10 @@
 | 
				
			|||||||
#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
 | 
					#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
 | 
				
			||||||
#  define STDC
 | 
					#  define STDC
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if (defined(__STDC__) || defined(__cplusplus)) && !defined(STDC)
 | 
					#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
 | 
				
			||||||
#  define STDC
 | 
					#  ifndef STDC
 | 
				
			||||||
 | 
					#    define STDC
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef STDC
 | 
					#ifndef STDC
 | 
				
			||||||
@@ -87,6 +90,12 @@
 | 
				
			|||||||
#  define NO_DUMMY_DECL
 | 
					#  define NO_DUMMY_DECL
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Borland C incorrectly complains about missing returns: */
 | 
				
			||||||
 | 
					#if defined(__BORLANDC__)
 | 
				
			||||||
 | 
					#  define NEED_DUMMY_RETURN
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Maximum value for memLevel in deflateInit2 */
 | 
					/* Maximum value for memLevel in deflateInit2 */
 | 
				
			||||||
#ifndef MAX_MEM_LEVEL
 | 
					#ifndef MAX_MEM_LEVEL
 | 
				
			||||||
#  ifdef MAXSEG_64K
 | 
					#  ifdef MAXSEG_64K
 | 
				
			||||||
@@ -96,13 +105,17 @@
 | 
				
			|||||||
#  endif
 | 
					#  endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Maximum value for windowBits in deflateInit2 and inflateInit2 */
 | 
					/* Maximum value for windowBits in deflateInit2 and inflateInit2.
 | 
				
			||||||
 | 
					 * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
 | 
				
			||||||
 | 
					 * created by gzip. (Files created by minigzip can still be extracted by
 | 
				
			||||||
 | 
					 * gzip.)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
#ifndef MAX_WBITS
 | 
					#ifndef MAX_WBITS
 | 
				
			||||||
#  define MAX_WBITS   15 /* 32K LZ77 window */
 | 
					#  define MAX_WBITS   15 /* 32K LZ77 window */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* The memory requirements for deflate are (in bytes):
 | 
					/* The memory requirements for deflate are (in bytes):
 | 
				
			||||||
            1 << (windowBits+2)   +  1 << (memLevel+9)
 | 
					            (1 << (windowBits+2)) +  (1 << (memLevel+9))
 | 
				
			||||||
 that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
 | 
					 that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
 | 
				
			||||||
 plus a few kilobytes for small objects. For example, if you want to reduce
 | 
					 plus a few kilobytes for small objects. For example, if you want to reduce
 | 
				
			||||||
 the default memory requirements from 256K to 128K, compile with
 | 
					 the default memory requirements from 256K to 128K, compile with
 | 
				
			||||||
@@ -172,13 +185,63 @@ typedef uLong FAR uLongf;
 | 
				
			|||||||
   typedef Byte     *voidp;
 | 
					   typedef Byte     *voidp;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UNISTD_H
 | 
				
			||||||
 | 
					#  include <unistd.h> /* for SEEK_* and off_t */
 | 
				
			||||||
 | 
					#  define z_off_t  off_t
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef SEEK_SET
 | 
				
			||||||
 | 
					#  define SEEK_SET        0       /* Seek from beginning of file.  */
 | 
				
			||||||
 | 
					#  define SEEK_CUR        1       /* Seek from current position.  */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef z_off_t
 | 
				
			||||||
 | 
					#  define  z_off_t long
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Compile with -DZLIB_DLL for Windows DLL support */
 | 
					/* Compile with -DZLIB_DLL for Windows DLL support */
 | 
				
			||||||
#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL)
 | 
					#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL)
 | 
				
			||||||
 | 
					#  undef FAR
 | 
				
			||||||
#  include <windows.h>
 | 
					#  include <windows.h>
 | 
				
			||||||
#  define EXPORT  WINAPI
 | 
					#  define EXPORT  WINAPI
 | 
				
			||||||
 | 
					#  ifdef WIN32
 | 
				
			||||||
 | 
					#    define EXPORTVA  WINAPIV
 | 
				
			||||||
 | 
					#  else
 | 
				
			||||||
 | 
					#    define EXPORTVA  FAR _cdecl _export
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#  define EXPORT
 | 
					#   if defined (__BORLANDC__) && defined (_Windows) && defined (__DLL__)
 | 
				
			||||||
 | 
					#       define EXPORT _export
 | 
				
			||||||
 | 
					#       define EXPORTVA _export
 | 
				
			||||||
 | 
					#   else
 | 
				
			||||||
 | 
					#       define EXPORT
 | 
				
			||||||
 | 
					#       define EXPORTVA
 | 
				
			||||||
 | 
					#   endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* MVS linker does not support external names larger than 8 bytes */
 | 
				
			||||||
 | 
					#if defined(__MVS__)
 | 
				
			||||||
 | 
					#   pragma map(deflateInit_,"DEIN")
 | 
				
			||||||
 | 
					#   pragma map(deflateInit2_,"DEIN2")
 | 
				
			||||||
 | 
					#   pragma map(deflateEnd,"DEEND")
 | 
				
			||||||
 | 
					#   pragma map(inflateInit_,"ININ")
 | 
				
			||||||
 | 
					#   pragma map(inflateInit2_,"ININ2")
 | 
				
			||||||
 | 
					#   pragma map(inflateEnd,"INEND")
 | 
				
			||||||
 | 
					#   pragma map(inflateSync,"INSY")
 | 
				
			||||||
 | 
					#   pragma map(inflateSetDictionary,"INSEDI")
 | 
				
			||||||
 | 
					#   pragma map(inflate_blocks,"INBL")
 | 
				
			||||||
 | 
					#   pragma map(inflate_blocks_new,"INBLNE")
 | 
				
			||||||
 | 
					#   pragma map(inflate_blocks_free,"INBLFR")
 | 
				
			||||||
 | 
					#   pragma map(inflate_blocks_reset,"INBLRE")
 | 
				
			||||||
 | 
					#   pragma map(inflate_codes_free,"INCOFR")
 | 
				
			||||||
 | 
					#   pragma map(inflate_codes,"INCO")
 | 
				
			||||||
 | 
					#   pragma map(inflate_fast,"INFA")
 | 
				
			||||||
 | 
					#   pragma map(inflate_flush,"INFLU")
 | 
				
			||||||
 | 
					#   pragma map(inflate_mask,"INMA")
 | 
				
			||||||
 | 
					#   pragma map(inflate_set_dictionary,"INSEDI2")
 | 
				
			||||||
 | 
					#   pragma map(inflate_copyright,"INCOPY")
 | 
				
			||||||
 | 
					#   pragma map(inflate_trees_bits,"INTRBI")
 | 
				
			||||||
 | 
					#   pragma map(inflate_trees_dynamic,"INTRDY")
 | 
				
			||||||
 | 
					#   pragma map(inflate_trees_fixed,"INTRFI")
 | 
				
			||||||
 | 
					#   pragma map(inflate_trees_free,"INTRFR")
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _ZCONF_H */
 | 
					#endif /* _ZCONF_H */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										107
									
								
								zlib.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								zlib.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
				
			|||||||
 | 
					.TH ZLIB 3 "20 January 1998"
 | 
				
			||||||
 | 
					.SH NAME
 | 
				
			||||||
 | 
					zlib \- compression/decompression library
 | 
				
			||||||
 | 
					.SH SYNOPSIS
 | 
				
			||||||
 | 
					[see
 | 
				
			||||||
 | 
					.I zlib.h
 | 
				
			||||||
 | 
					for full descripton]
 | 
				
			||||||
 | 
					.SH DESCRIPTION
 | 
				
			||||||
 | 
					The
 | 
				
			||||||
 | 
					.I zlib
 | 
				
			||||||
 | 
					library is a general purpose data compression library.
 | 
				
			||||||
 | 
					The code is reentrant (thread safe).
 | 
				
			||||||
 | 
					It provides in-memory compression and decompression functions,
 | 
				
			||||||
 | 
					including integrity checks of the uncompressed data.
 | 
				
			||||||
 | 
					This version of the library supports only one compression method (deflation)
 | 
				
			||||||
 | 
					but other algorithms will be added later and will have the same stream interface.
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					Compression can be done in a single step if the buffers are large enough
 | 
				
			||||||
 | 
					(for example if an input file is mmap'ed),
 | 
				
			||||||
 | 
					or can be done by repeated calls of the compression function.
 | 
				
			||||||
 | 
					In the latter case,
 | 
				
			||||||
 | 
					the application must provide more input and/or consume the output
 | 
				
			||||||
 | 
					(providing more output space) before each call.
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					The library also supports reading and writing files in
 | 
				
			||||||
 | 
					.I gzip
 | 
				
			||||||
 | 
					(.gz) format
 | 
				
			||||||
 | 
					with an interface similar to that of stdio.
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					The library does not install any signal handler. The decoder checks
 | 
				
			||||||
 | 
					the consistency of the compressed data, so the library should never
 | 
				
			||||||
 | 
					crash even in case of corrupted input.
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					All functions of the compression library are documented in the file
 | 
				
			||||||
 | 
					.IR zlib.h.
 | 
				
			||||||
 | 
					The distribution source includes examples of use of the library
 | 
				
			||||||
 | 
					the files
 | 
				
			||||||
 | 
					.I example.c
 | 
				
			||||||
 | 
					and
 | 
				
			||||||
 | 
					.IR minigzip.c .
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					A Java implementation of
 | 
				
			||||||
 | 
					.IR zlib
 | 
				
			||||||
 | 
					is available in the Java Development Kit 1.1
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					A Perl interface to
 | 
				
			||||||
 | 
					.IR zlib ,
 | 
				
			||||||
 | 
					written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
 | 
				
			||||||
 | 
					is available at CPAN (Comprehensive Perl Archive Network) sites,
 | 
				
			||||||
 | 
					such as:
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					A Python interface to
 | 
				
			||||||
 | 
					.IR zlib
 | 
				
			||||||
 | 
					written by A.M. Kuchling <amk@magnet.com>
 | 
				
			||||||
 | 
					is available from the Python Software Association sites, such as:
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz
 | 
				
			||||||
 | 
					.SH "SEE ALSO"
 | 
				
			||||||
 | 
					Questions about zlib should be sent to:
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					zlib@quest.jpl.nasa.gov
 | 
				
			||||||
 | 
					or, if this fails, to the author addresses given below.
 | 
				
			||||||
 | 
					The zlib home page is:
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					http://www.cdrom.com/infozip/zlib/
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					The data format used by the zlib library is described by RFC
 | 
				
			||||||
 | 
					(Request for Comments) 1950 to 1952 in the files: 
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					ftp://ds.internic.net/rfc/rfc1950.txt (zlib format)
 | 
				
			||||||
 | 
					.br
 | 
				
			||||||
 | 
					rfc1951.txt (deflate format)
 | 
				
			||||||
 | 
					.br
 | 
				
			||||||
 | 
					rfc1952.txt (gzip format)
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					These documents are also available in other formats from:
 | 
				
			||||||
 | 
					.IP
 | 
				
			||||||
 | 
					ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
 | 
				
			||||||
 | 
					.SH AUTHORS
 | 
				
			||||||
 | 
					Version 1.0.7.
 | 
				
			||||||
 | 
					Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org)
 | 
				
			||||||
 | 
					and Mark Adler (madler@alumni.caltech.edu).
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					This software is provided "as-is,"
 | 
				
			||||||
 | 
					without any express or implied warranty.
 | 
				
			||||||
 | 
					In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					See the distribution directory with respect to requirements
 | 
				
			||||||
 | 
					governing redistribution.
 | 
				
			||||||
 | 
					The deflate format used by
 | 
				
			||||||
 | 
					.I zlib
 | 
				
			||||||
 | 
					was defined by Phil Katz.
 | 
				
			||||||
 | 
					The deflate and
 | 
				
			||||||
 | 
					.I zlib
 | 
				
			||||||
 | 
					specifications were written by Peter Deutsch.
 | 
				
			||||||
 | 
					Thanks to all the people who reported problems and suggested various
 | 
				
			||||||
 | 
					improvements in
 | 
				
			||||||
 | 
					.IR zlib ;
 | 
				
			||||||
 | 
					who are too numerous to cite here.
 | 
				
			||||||
 | 
					.LP
 | 
				
			||||||
 | 
					UNIX manual page by R. P. C. Rodgers,
 | 
				
			||||||
 | 
					U.S. National Library of Medicine (rodgers@nlm.nih.gov).
 | 
				
			||||||
 | 
					.\" end of man page
 | 
				
			||||||
							
								
								
									
										46
									
								
								zlib.def
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								zlib.def
									
									
									
									
									
								
							@@ -1,46 +0,0 @@
 | 
				
			|||||||
LIBRARY		"zlib"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DESCRIPTION	'"""zlib data compression library"""'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXETYPE		NT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SUBSYSTEM	WINDOWS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
STUB		'WINSTUB.EXE'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VERSION		1.05
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CODE		 EXECUTE READ
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DATA		 READ WRITE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
HEAPSIZE	1048576,4096
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXPORTS
 | 
					 | 
				
			||||||
		zlibVersion
 | 
					 | 
				
			||||||
		deflate
 | 
					 | 
				
			||||||
		deflateEnd
 | 
					 | 
				
			||||||
		inflate
 | 
					 | 
				
			||||||
		inflateEnd
 | 
					 | 
				
			||||||
		deflateSetDictionary
 | 
					 | 
				
			||||||
		deflateCopy
 | 
					 | 
				
			||||||
		deflateReset
 | 
					 | 
				
			||||||
		deflateParams
 | 
					 | 
				
			||||||
		inflateSetDictionary
 | 
					 | 
				
			||||||
		inflateSync
 | 
					 | 
				
			||||||
		inflateReset
 | 
					 | 
				
			||||||
		compress
 | 
					 | 
				
			||||||
		uncompress
 | 
					 | 
				
			||||||
		gzopen
 | 
					 | 
				
			||||||
		gzdopen
 | 
					 | 
				
			||||||
		gzread
 | 
					 | 
				
			||||||
		gzwrite
 | 
					 | 
				
			||||||
		gzflush
 | 
					 | 
				
			||||||
		gzclose
 | 
					 | 
				
			||||||
		gzerror
 | 
					 | 
				
			||||||
		adler32
 | 
					 | 
				
			||||||
		crc32
 | 
					 | 
				
			||||||
		deflateInit_
 | 
					 | 
				
			||||||
		inflateInit_
 | 
					 | 
				
			||||||
		deflateInit2_
 | 
					 | 
				
			||||||
		inflateInit2_
 | 
					 | 
				
			||||||
							
								
								
									
										361
									
								
								zlib.h
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								zlib.h
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
 | 
					/* zlib.h -- interface of the 'zlib' general purpose compression library
 | 
				
			||||||
  version 1.0.5, Jan 3rd, 1998.
 | 
					  version 1.0.7, Jan 20th, 1998
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
 | 
					  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -20,7 +20,7 @@
 | 
				
			|||||||
  3. This notice may not be removed or altered from any source distribution.
 | 
					  3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Jean-loup Gailly        Mark Adler
 | 
					  Jean-loup Gailly        Mark Adler
 | 
				
			||||||
  gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
					  jloup@gzip.org          madler@alumni.caltech.edu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  The data format used by the zlib library is described by RFCs (Request for
 | 
					  The data format used by the zlib library is described by RFCs (Request for
 | 
				
			||||||
@@ -37,30 +37,27 @@ extern "C" {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "zconf.h"
 | 
					#include "zconf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ZLIB_VERSION "1.0.5"
 | 
					#define ZLIB_VERSION "1.0.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 
 | 
					/* 
 | 
				
			||||||
     The 'zlib' compression library provides in-memory compression and
 | 
					     The 'zlib' compression library provides in-memory compression and
 | 
				
			||||||
  decompression functions, including integrity checks of the uncompressed
 | 
					  decompression functions, including integrity checks of the uncompressed
 | 
				
			||||||
  data.  This version of the library supports only one compression method
 | 
					  data.  This version of the library supports only one compression method
 | 
				
			||||||
  (deflation) but other algorithms may be added later and will have the same
 | 
					  (deflation) but other algorithms will be added later and will have the same
 | 
				
			||||||
  stream interface.
 | 
					  stream interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     For compression the application must provide the output buffer and
 | 
					 | 
				
			||||||
  may optionally provide the input buffer for optimization. For decompression,
 | 
					 | 
				
			||||||
  the application must provide the input buffer and may optionally provide
 | 
					 | 
				
			||||||
  the output buffer for optimization.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     Compression can be done in a single step if the buffers are large
 | 
					     Compression can be done in a single step if the buffers are large
 | 
				
			||||||
  enough (for example if an input file is mmap'ed), or can be done by
 | 
					  enough (for example if an input file is mmap'ed), or can be done by
 | 
				
			||||||
  repeated calls of the compression function.  In the latter case, the
 | 
					  repeated calls of the compression function.  In the latter case, the
 | 
				
			||||||
  application must provide more input and/or consume the output
 | 
					  application must provide more input and/or consume the output
 | 
				
			||||||
  (providing more output space) before each call.
 | 
					  (providing more output space) before each call.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The library does not install any signal handler. It is recommended to
 | 
					     The library also supports reading and writing files in gzip (.gz) format
 | 
				
			||||||
  add at least a handler for SIGSEGV when decompressing; the library checks
 | 
					  with an interface similar to that of stdio.
 | 
				
			||||||
  the consistency of the input data whenever possible but may go nuts
 | 
					
 | 
				
			||||||
  for some forms of corrupted input.
 | 
					     The library does not install any signal handler. The decoder checks
 | 
				
			||||||
 | 
					  the consistency of the compressed data, so the library should never
 | 
				
			||||||
 | 
					  crash even in case of corrupted input.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
 | 
					typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
 | 
				
			||||||
@@ -123,7 +120,7 @@ typedef z_stream FAR *z_streamp;
 | 
				
			|||||||
                        /* constants */
 | 
					                        /* constants */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define Z_NO_FLUSH      0
 | 
					#define Z_NO_FLUSH      0
 | 
				
			||||||
#define Z_PARTIAL_FLUSH 1
 | 
					#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
 | 
				
			||||||
#define Z_SYNC_FLUSH    2
 | 
					#define Z_SYNC_FLUSH    2
 | 
				
			||||||
#define Z_FULL_FLUSH    3
 | 
					#define Z_FULL_FLUSH    3
 | 
				
			||||||
#define Z_FINISH        4
 | 
					#define Z_FINISH        4
 | 
				
			||||||
@@ -200,7 +197,13 @@ extern int EXPORT deflateInit OF((z_streamp strm, int level));
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
					extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
  Performs one or both of the following actions:
 | 
					    deflate compresses as much data as possible, and stops when the input
 | 
				
			||||||
 | 
					  buffer becomes empty or the output buffer becomes full. It may introduce some
 | 
				
			||||||
 | 
					  output latency (reading input without producing any output) except when
 | 
				
			||||||
 | 
					  forced to flush.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    The detailed semantics are as follows. deflate performs one or both of the
 | 
				
			||||||
 | 
					  following actions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - Compress more input starting at next_in and update next_in and avail_in
 | 
					  - Compress more input starting at next_in and update next_in and avail_in
 | 
				
			||||||
    accordingly. If not all input can be processed (because there is not
 | 
					    accordingly. If not all input can be processed (because there is not
 | 
				
			||||||
@@ -222,24 +225,23 @@ extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
				
			|||||||
  and with zero avail_out, it must be called again after making room in the
 | 
					  and with zero avail_out, it must be called again after making room in the
 | 
				
			||||||
  output buffer because there might be more output pending.
 | 
					  output buffer because there might be more output pending.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If the parameter flush is set to Z_PARTIAL_FLUSH, the current compression
 | 
					    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
 | 
				
			||||||
  block is terminated and flushed to the output buffer so that the
 | 
					  flushed to the output buffer and the output is aligned on a byte boundary, so
 | 
				
			||||||
  decompressor can get all input data available so far. For method 9, a future
 | 
					  that the decompressor can get all input data available so far. (In particular
 | 
				
			||||||
  variant on method 8, the current block will be flushed but not terminated.
 | 
					  avail_in is zero after the call if enough output space has been provided
 | 
				
			||||||
  Z_SYNC_FLUSH has the same effect as partial flush except that the compressed
 | 
					  before the call.)  Flushing may degrade compression for some compression
 | 
				
			||||||
  output is byte aligned (the compressor can clear its internal bit buffer)
 | 
					  algorithms and so it should be used only when necessary.
 | 
				
			||||||
  and the current block is always terminated; this can be useful if the
 | 
					
 | 
				
			||||||
  compressor has to be restarted from scratch after an interruption (in which
 | 
					    If flush is set to Z_FULL_FLUSH, all output is flushed as with
 | 
				
			||||||
  case the internal state of the compressor may be lost).
 | 
					  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
 | 
				
			||||||
    If flush is set to Z_FULL_FLUSH, the compression block is terminated, a
 | 
					  restart from this point if previous compressed data has been damaged or if
 | 
				
			||||||
  special marker is output and the compression dictionary is discarded; this
 | 
					  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
 | 
				
			||||||
  is useful to allow the decompressor to synchronize if one compressed block
 | 
					  the compression.
 | 
				
			||||||
  has been damaged (see inflateSync below).  Flushing degrades compression and
 | 
					
 | 
				
			||||||
  so should be used only when necessary.  Using Z_FULL_FLUSH too often can
 | 
					    If deflate returns with avail_out == 0, this function must be called again
 | 
				
			||||||
  seriously degrade the compression. If deflate returns with avail_out == 0,
 | 
					  with the same value of the flush parameter and more output space (updated
 | 
				
			||||||
  this function must be called again with the same value of the flush
 | 
					  avail_out), until the flush is complete (deflate returns with non-zero
 | 
				
			||||||
  parameter and more output space (updated avail_out), until the flush is
 | 
					  avail_out).
 | 
				
			||||||
  complete (deflate returns with non-zero avail_out).
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If the parameter flush is set to Z_FINISH, pending input is processed,
 | 
					    If the parameter flush is set to Z_FINISH, pending input is processed,
 | 
				
			||||||
  pending output is flushed and deflate returns with Z_STREAM_END if there
 | 
					  pending output is flushed and deflate returns with Z_STREAM_END if there
 | 
				
			||||||
@@ -254,6 +256,9 @@ extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
				
			|||||||
  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
 | 
					  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
 | 
				
			||||||
  Z_STREAM_END, then it must be called again as described above.
 | 
					  Z_STREAM_END, then it must be called again as described above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    deflate() sets strm->adler to the adler32 checksum of all input read
 | 
				
			||||||
 | 
					  so far (that is, total_in bytes).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    deflate() may update data_type if it can make a good guess about
 | 
					    deflate() may update data_type if it can make a good guess about
 | 
				
			||||||
  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
 | 
					  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
 | 
				
			||||||
  binary. This field is only for information purposes and does not affect
 | 
					  binary. This field is only for information purposes and does not affect
 | 
				
			||||||
@@ -285,21 +290,32 @@ extern int EXPORT deflateEnd OF((z_streamp strm));
 | 
				
			|||||||
extern int EXPORT inflateInit OF((z_streamp strm));
 | 
					extern int EXPORT inflateInit OF((z_streamp strm));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     Initializes the internal stream state for decompression. The fields
 | 
					     Initializes the internal stream state for decompression. The fields
 | 
				
			||||||
   zalloc, zfree and opaque must be initialized before by the caller.  If
 | 
					   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
 | 
				
			||||||
   zalloc and zfree are set to Z_NULL, inflateInit updates them to use default
 | 
					   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
 | 
				
			||||||
   allocation functions.
 | 
					   value depends on the compression method), inflateInit determines the
 | 
				
			||||||
 | 
					   compression method from the zlib header and allocates all data structures
 | 
				
			||||||
 | 
					   accordingly; otherwise the allocation will be deferred to the first call of
 | 
				
			||||||
 | 
					   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
 | 
				
			||||||
 | 
					   use default allocation functions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
 | 
					     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
				
			||||||
   enough memory, Z_VERSION_ERROR if the zlib library version is incompatible
 | 
					   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
 | 
				
			||||||
   with the version assumed by the caller.  msg is set to null if there is no
 | 
					   version assumed by the caller.  msg is set to null if there is no error
 | 
				
			||||||
   error message. inflateInit does not perform any decompression: this will be
 | 
					   message. inflateInit does not perform any decompression apart from reading
 | 
				
			||||||
   done by inflate().
 | 
					   the zlib header if present: this will be done by inflate().  (So next_in and
 | 
				
			||||||
 | 
					   avail_in may be modified, but next_out and avail_out are unchanged.)
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
					extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
  Performs one or both of the following actions:
 | 
					    inflate decompresses as much data as possible, and stops when the input
 | 
				
			||||||
 | 
					  buffer becomes empty or the output buffer becomes full. It may some
 | 
				
			||||||
 | 
					  introduce some output latency (reading input without producing any output)
 | 
				
			||||||
 | 
					  except when forced to flush.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The detailed semantics are as follows. inflate performs one or both of the
 | 
				
			||||||
 | 
					  following actions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - Decompress more input starting at next_in and update next_in and avail_in
 | 
					  - Decompress more input starting at next_in and update next_in and avail_in
 | 
				
			||||||
    accordingly. If not all input can be processed (because there is not
 | 
					    accordingly. If not all input can be processed (because there is not
 | 
				
			||||||
@@ -320,9 +336,9 @@ extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
				
			|||||||
  must be called again after making room in the output buffer because there
 | 
					  must be called again after making room in the output buffer because there
 | 
				
			||||||
  might be more output pending.
 | 
					  might be more output pending.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If the parameter flush is set to Z_PARTIAL_FLUSH, inflate flushes as much
 | 
					    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
 | 
				
			||||||
  output as possible to the output buffer. The flushing behavior of inflate is
 | 
					  output as possible to the output buffer. The flushing behavior of inflate is
 | 
				
			||||||
  not specified for values of the flush parameter other than Z_PARTIAL_FLUSH
 | 
					  not specified for values of the flush parameter other than Z_SYNC_FLUSH
 | 
				
			||||||
  and Z_FINISH, but the current implementation actually flushes as much output
 | 
					  and Z_FINISH, but the current implementation actually flushes as much output
 | 
				
			||||||
  as possible anyway.
 | 
					  as possible anyway.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -337,18 +353,26 @@ extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
				
			|||||||
  is never required, but can be used to inform inflate that a faster routine
 | 
					  is never required, but can be used to inform inflate that a faster routine
 | 
				
			||||||
  may be used for the single inflate() call.
 | 
					  may be used for the single inflate() call.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inflate() returns Z_OK if some progress has been made (more input
 | 
					     If a preset dictionary is needed at this point (see inflateSetDictionary
 | 
				
			||||||
  processed or more output produced), Z_STREAM_END if the end of the
 | 
					  below), inflate sets strm-adler to the adler32 checksum of the
 | 
				
			||||||
  compressed data has been reached and all uncompressed output has been
 | 
					  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
 | 
				
			||||||
  produced, Z_NEED_DICT if a preset dictionary is needed at this point (see
 | 
					  it sets strm->adler to the adler32 checksum of all output produced
 | 
				
			||||||
  inflateSetDictionary below), Z_DATA_ERROR if the input data was corrupted,
 | 
					  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
 | 
				
			||||||
  Z_STREAM_ERROR if the stream structure was inconsistent (for example if
 | 
					  an error code as described below. At the end of the stream, inflate()
 | 
				
			||||||
  next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
 | 
					  checks that its computed adler32 checksum is equal to that saved by the
 | 
				
			||||||
  Z_BUF_ERROR if no progress is possible or if there was not enough room in
 | 
					  compressor and returns Z_STREAM_END only if the checksum is correct.
 | 
				
			||||||
  the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the
 | 
					
 | 
				
			||||||
  application may then call inflateSync to look for a good compression block.
 | 
					    inflate() returns Z_OK if some progress has been made (more input processed
 | 
				
			||||||
  In the Z_NEED_DICT case, strm->adler is set to the Adler32 value of the
 | 
					  or more output produced), Z_STREAM_END if the end of the compressed data has
 | 
				
			||||||
  dictionary chosen by the compressor.
 | 
					  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
 | 
				
			||||||
 | 
					  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
 | 
				
			||||||
 | 
					  corrupted (input stream not conforming to the zlib format or incorrect
 | 
				
			||||||
 | 
					  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
 | 
				
			||||||
 | 
					  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
 | 
				
			||||||
 | 
					  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
 | 
				
			||||||
 | 
					  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
 | 
				
			||||||
 | 
					  case, the application may then call inflateSync to look for a good
 | 
				
			||||||
 | 
					  compression block.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -382,14 +406,13 @@ extern int EXPORT deflateInit2 OF((z_streamp strm,
 | 
				
			|||||||
   the caller.
 | 
					   the caller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The method parameter is the compression method. It must be Z_DEFLATED in
 | 
					     The method parameter is the compression method. It must be Z_DEFLATED in
 | 
				
			||||||
   this version of the library. (Method 9 will allow a 64K history buffer and
 | 
					   this version of the library.
 | 
				
			||||||
   partial block flushes.)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The windowBits parameter is the base two logarithm of the window size
 | 
					     The windowBits parameter is the base two logarithm of the window size
 | 
				
			||||||
   (the size of the history buffer).  It should be in the range 8..15 for this
 | 
					   (the size of the history buffer).  It should be in the range 8..15 for this
 | 
				
			||||||
   version of the library (the value 16 will be allowed for method 9). Larger
 | 
					   version of the library. Larger values of this parameter result in better
 | 
				
			||||||
   values of this parameter result in better compression at the expense of
 | 
					   compression at the expense of memory usage. The default value is 15 if
 | 
				
			||||||
   memory usage. The default value is 15 if deflateInit is used instead.
 | 
					   deflateInit is used instead.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The memLevel parameter specifies how much memory should be allocated
 | 
					     The memLevel parameter specifies how much memory should be allocated
 | 
				
			||||||
   for the internal compression state. memLevel=1 uses minimum memory but
 | 
					   for the internal compression state. memLevel=1 uses minimum memory but
 | 
				
			||||||
@@ -408,42 +431,35 @@ extern int EXPORT deflateInit2 OF((z_streamp strm,
 | 
				
			|||||||
   the compression ratio but not the correctness of the compressed output even
 | 
					   the compression ratio but not the correctness of the compressed output even
 | 
				
			||||||
   if it is not set appropriately.
 | 
					   if it is not set appropriately.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     If next_in is not null, the library will use this buffer to hold also
 | 
					      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
				
			||||||
   some history information; the buffer must either hold the entire input
 | 
					   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
 | 
				
			||||||
   data, or have at least 1<<(windowBits+1) bytes and be writable. If next_in
 | 
					   method). msg is set to null if there is no error message.  deflateInit2 does
 | 
				
			||||||
   is null, the library will allocate its own history buffer (and leave next_in
 | 
					   not perform any compression: this will be done by deflate().
 | 
				
			||||||
   null). next_out need not be provided here but must be provided by the
 | 
					 | 
				
			||||||
   application for the next call of deflate().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     If the history buffer is provided by the application, next_in must
 | 
					 | 
				
			||||||
   must never be changed by the application since the compressor maintains
 | 
					 | 
				
			||||||
   information inside this buffer from call to call; the application
 | 
					 | 
				
			||||||
   must provide more input only by increasing avail_in. next_in is always
 | 
					 | 
				
			||||||
   reset by the library in this case.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
 | 
					 | 
				
			||||||
   not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
 | 
					 | 
				
			||||||
   an invalid method). msg is set to null if there is no error message.
 | 
					 | 
				
			||||||
   deflateInit2 does not perform any compression: this will be done by
 | 
					 | 
				
			||||||
   deflate(). 
 | 
					 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
                            
 | 
					                            
 | 
				
			||||||
extern int EXPORT deflateSetDictionary OF((z_streamp strm,
 | 
					extern int EXPORT deflateSetDictionary OF((z_streamp strm,
 | 
				
			||||||
                                           const Bytef *dictionary,
 | 
					                                           const Bytef *dictionary,
 | 
				
			||||||
				           uInt  dictLength));
 | 
									           uInt  dictLength));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Initializes the compression dictionary (history buffer) from the given
 | 
					     Initializes the compression dictionary from the given byte sequence
 | 
				
			||||||
   byte sequence without producing any compressed output. This function must
 | 
					   without producing any compressed output. This function must be called
 | 
				
			||||||
   be called immediately after deflateInit or deflateInit2, before any call
 | 
					   immediately after deflateInit or deflateInit2, before any call of
 | 
				
			||||||
   of deflate. The compressor and decompressor must use exactly the same
 | 
					   deflate. The compressor and decompressor must use exactly the same
 | 
				
			||||||
   dictionary (see inflateSetDictionary).
 | 
					   dictionary (see inflateSetDictionary).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The dictionary should consist of strings (byte sequences) that are likely
 | 
					     The dictionary should consist of strings (byte sequences) that are likely
 | 
				
			||||||
   to be encountered later in the data to be compressed, with the most commonly
 | 
					   to be encountered later in the data to be compressed, with the most commonly
 | 
				
			||||||
   used strings preferably put towards the end of the dictionary. Using a
 | 
					   used strings preferably put towards the end of the dictionary. Using a
 | 
				
			||||||
   dictionary is most useful when the data to be compressed is short and
 | 
					   dictionary is most useful when the data to be compressed is short and can be
 | 
				
			||||||
   can be predicted with good accuracy; the data can then be compressed better
 | 
					   predicted with good accuracy; the data can then be compressed better than
 | 
				
			||||||
   than with the default empty dictionary. In this version of the library,
 | 
					   with the default empty dictionary.
 | 
				
			||||||
   only the last 32K bytes of the dictionary are used.
 | 
					
 | 
				
			||||||
 | 
					     Depending on the size of the compression data structures selected by
 | 
				
			||||||
 | 
					   deflateInit or deflateInit2, a part of the dictionary may in effect be
 | 
				
			||||||
 | 
					   discarded, for example if the dictionary is larger than the window size in
 | 
				
			||||||
 | 
					   deflate or deflate2. Thus the strings most likely to be useful should be
 | 
				
			||||||
 | 
					   put at the end of the dictionary, not at the front.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     Upon return of this function, strm->adler is set to the Adler32 value
 | 
					     Upon return of this function, strm->adler is set to the Adler32 value
 | 
				
			||||||
   of the dictionary; the decompressor may later use this value to determine
 | 
					   of the dictionary; the decompressor may later use this value to determine
 | 
				
			||||||
   which dictionary has been used by the compressor. (The Adler32 value
 | 
					   which dictionary has been used by the compressor. (The Adler32 value
 | 
				
			||||||
@@ -451,21 +467,16 @@ extern int EXPORT deflateSetDictionary OF((z_streamp strm,
 | 
				
			|||||||
   actually used by the compressor.)
 | 
					   actually used by the compressor.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
 | 
					     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
 | 
				
			||||||
   parameter is invalid (such as NULL dictionary) or the stream state
 | 
					   parameter is invalid (such as NULL dictionary) or the stream state is
 | 
				
			||||||
   is inconsistent (for example if deflate has already been called for this
 | 
					   inconsistent (for example if deflate has already been called for this stream
 | 
				
			||||||
   stream). deflateSetDictionary does not perform any compression: this will
 | 
					   or if the compression method is bsort). deflateSetDictionary does not
 | 
				
			||||||
   be done by deflate(). 
 | 
					   perform any compression: this will be done by deflate().
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT deflateCopy OF((z_streamp dest,
 | 
					extern int EXPORT deflateCopy OF((z_streamp dest,
 | 
				
			||||||
                                  z_streamp source));
 | 
					                                  z_streamp source));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Sets the destination stream as a complete copy of the source stream.  If
 | 
					     Sets the destination stream as a complete copy of the source stream.
 | 
				
			||||||
   the source stream is using an application-supplied history buffer, a new
 | 
					 | 
				
			||||||
   buffer is allocated for the destination stream.  The compressed output
 | 
					 | 
				
			||||||
   buffer is always application-supplied. It's the responsibility of the
 | 
					 | 
				
			||||||
   application to provide the correct values of next_out and avail_out for the
 | 
					 | 
				
			||||||
   next call of deflate.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
     This function can be useful when several compression strategies will be
 | 
					     This function can be useful when several compression strategies will be
 | 
				
			||||||
   tried, for example when there are several ways of pre-processing the input
 | 
					   tried, for example when there are several ways of pre-processing the input
 | 
				
			||||||
@@ -493,12 +504,13 @@ extern int EXPORT deflateReset OF((z_streamp strm));
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
 | 
					extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Dynamically update the compression level and compression strategy.
 | 
					     Dynamically update the compression level and compression strategy.  The
 | 
				
			||||||
   This can be used to switch between compression and straight copy of
 | 
					   interpretation of level and strategy is as in deflateInit2.  This can be
 | 
				
			||||||
   the input data, or to switch to a different kind of input data requiring
 | 
					   used to switch between compression and straight copy of the input data, or
 | 
				
			||||||
   a different strategy. If the compression level is changed, the input
 | 
					   to switch to a different kind of input data requiring a different
 | 
				
			||||||
   available so far is compressed with the old level (and may be flushed);
 | 
					   strategy. If the compression level is changed, the input available so far
 | 
				
			||||||
   the new level will take effect only at the next call of deflate().
 | 
					   is compressed with the old level (and may be flushed); the new level will
 | 
				
			||||||
 | 
					   take effect only at the next call of deflate().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     Before the call of deflateParams, the stream state must be set as for
 | 
					     Before the call of deflateParams, the stream state must be set as for
 | 
				
			||||||
   a call of deflate(), since the currently available input may have to
 | 
					   a call of deflate(), since the currently available input may have to
 | 
				
			||||||
@@ -513,46 +525,34 @@ extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
 | 
				
			|||||||
extern int EXPORT inflateInit2 OF((z_streamp strm,
 | 
					extern int EXPORT inflateInit2 OF((z_streamp strm,
 | 
				
			||||||
                                   int  windowBits));
 | 
					                                   int  windowBits));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     This is another version of inflateInit with more compression options. The
 | 
					     This is another version of inflateInit with an extra parameter. The
 | 
				
			||||||
   fields next_out, zalloc, zfree and opaque must be initialized before by
 | 
					   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
 | 
				
			||||||
   the caller.
 | 
					   before by the caller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     The windowBits parameter is the base two logarithm of the maximum window
 | 
					     The windowBits parameter is the base two logarithm of the maximum window
 | 
				
			||||||
   size (the size of the history buffer).  It should be in the range 8..15 for
 | 
					   size (the size of the history buffer).  It should be in the range 8..15 for
 | 
				
			||||||
   this version of the library (the value 16 will be allowed soon). The
 | 
					   this version of the library. The default value is 15 if inflateInit is used
 | 
				
			||||||
   default value is 15 if inflateInit is used instead. If a compressed stream
 | 
					   instead. If a compressed stream with a larger window size is given as
 | 
				
			||||||
   with a larger window size is given as input, inflate() will return with
 | 
					   input, inflate() will return with the error code Z_DATA_ERROR instead of
 | 
				
			||||||
   the error code Z_DATA_ERROR instead of trying to allocate a larger window.
 | 
					   trying to allocate a larger window.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     If next_out is not null, the library will use this buffer for the history
 | 
					      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
				
			||||||
   buffer; the buffer must either be large enough to hold the entire output
 | 
					   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
 | 
				
			||||||
   data, or have at least 1<<windowBits bytes.  If next_out is null, the
 | 
					   memLevel). msg is set to null if there is no error message.  inflateInit2
 | 
				
			||||||
   library will allocate its own buffer (and leave next_out null). next_in
 | 
					   does not perform any decompression apart from reading the zlib header if
 | 
				
			||||||
   need not be provided here but must be provided by the application for the
 | 
					   present: this will be done by inflate(). (So next_in and avail_in may be
 | 
				
			||||||
   next call of inflate().
 | 
					   modified, but next_out and avail_out are unchanged.)
 | 
				
			||||||
 | 
					 | 
				
			||||||
     If the history buffer is provided by the application, next_out must
 | 
					 | 
				
			||||||
   never be changed by the application since the decompressor maintains
 | 
					 | 
				
			||||||
   history information inside this buffer from call to call; the application
 | 
					 | 
				
			||||||
   can only reset next_out to the beginning of the history buffer when
 | 
					 | 
				
			||||||
   avail_out is zero and all output has been consumed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
 | 
					 | 
				
			||||||
   not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
 | 
					 | 
				
			||||||
   windowBits < 8). msg is set to null if there is no error message.
 | 
					 | 
				
			||||||
   inflateInit2 does not perform any decompression: this will be done by
 | 
					 | 
				
			||||||
   inflate().
 | 
					 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT inflateSetDictionary OF((z_streamp strm,
 | 
					extern int EXPORT inflateSetDictionary OF((z_streamp strm,
 | 
				
			||||||
				           const Bytef *dictionary,
 | 
									           const Bytef *dictionary,
 | 
				
			||||||
					   uInt  dictLength));
 | 
										   uInt  dictLength));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Initializes the decompression dictionary (history buffer) from the given
 | 
					     Initializes the decompression dictionary from the given uncompressed byte
 | 
				
			||||||
   uncompressed byte sequence. This function must be called immediately after
 | 
					   sequence. This function must be called immediately after a call of inflate
 | 
				
			||||||
   a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen
 | 
					   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
 | 
				
			||||||
   by the compressor can be determined from the Adler32 value returned by this
 | 
					   can be determined from the Adler32 value returned by this call of
 | 
				
			||||||
   call of inflate. The compressor and decompressor must use exactly the same
 | 
					   inflate. The compressor and decompressor must use exactly the same
 | 
				
			||||||
   dictionary (see deflateSetDictionary).
 | 
					   dictionary (see deflateSetDictionary).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
 | 
					     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
 | 
				
			||||||
@@ -565,12 +565,12 @@ extern int EXPORT inflateSetDictionary OF((z_streamp strm,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern int EXPORT inflateSync OF((z_streamp strm));
 | 
					extern int EXPORT inflateSync OF((z_streamp strm));
 | 
				
			||||||
/* 
 | 
					/* 
 | 
				
			||||||
    Skips invalid compressed data until the special marker (see deflate()
 | 
					    Skips invalid compressed data until a full flush point (see above the
 | 
				
			||||||
  above) can be found, or until all available input is skipped. No output
 | 
					  description of deflate with Z_FULL_FLUSH) can be found, or until all
 | 
				
			||||||
  is provided.
 | 
					  available input is skipped. No output is provided.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inflateSync returns Z_OK if the special marker has been found, Z_BUF_ERROR
 | 
					    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
 | 
				
			||||||
  if no more input was provided, Z_DATA_ERROR if no marker has been found,
 | 
					  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
 | 
				
			||||||
  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
 | 
					  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
 | 
				
			||||||
  case, the application may save the current current value of total_in which
 | 
					  case, the application may save the current current value of total_in which
 | 
				
			||||||
  indicates where valid compressed data was found. In the error case, the
 | 
					  indicates where valid compressed data was found. In the error case, the
 | 
				
			||||||
@@ -594,7 +594,7 @@ extern int EXPORT inflateReset OF((z_streamp strm));
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
     The following utility functions are implemented on top of the
 | 
					     The following utility functions are implemented on top of the
 | 
				
			||||||
   basic stream-oriented functions. To simplify the interface, some
 | 
					   basic stream-oriented functions. To simplify the interface, some
 | 
				
			||||||
   default options are assumed (compression level, window size,
 | 
					   default options are assumed (compression level and memory usage,
 | 
				
			||||||
   standard memory allocation functions). The source code of these
 | 
					   standard memory allocation functions). The source code of these
 | 
				
			||||||
   utility functions can easily be modified if you need special options.
 | 
					   utility functions can easily be modified if you need special options.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
@@ -639,13 +639,17 @@ extern gzFile EXPORT gzopen  OF((const char *path, const char *mode));
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
     Opens a gzip (.gz) file for reading or writing. The mode parameter
 | 
					     Opens a gzip (.gz) file for reading or writing. The mode parameter
 | 
				
			||||||
   is as in fopen ("rb" or "wb") but can also include a compression level
 | 
					   is as in fopen ("rb" or "wb") but can also include a compression level
 | 
				
			||||||
   ("wb9").  gzopen can be used to read a file which is not in gzip format;
 | 
					   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
 | 
				
			||||||
   in this case gzread will directly read from the file without decompression.
 | 
					   Huffman only compression as in "wb1h". (See the description
 | 
				
			||||||
 | 
					   of deflateInit2 for more information about the strategy parameter.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     gzopen can be used to read a file which is not in gzip format; in this
 | 
				
			||||||
 | 
					   case gzread will directly read from the file without decompression.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     gzopen returns NULL if the file could not be opened or if there was
 | 
					     gzopen returns NULL if the file could not be opened or if there was
 | 
				
			||||||
   insufficient memory to allocate the (de)compression state; errno
 | 
					   insufficient memory to allocate the (de)compression state; errno
 | 
				
			||||||
   can be checked to distinguish the two cases (if errno is zero, the
 | 
					   can be checked to distinguish the two cases (if errno is zero, the
 | 
				
			||||||
   zlib error is Z_MEM_ERROR).
 | 
					   zlib error is Z_MEM_ERROR).  */
 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 | 
					extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -660,6 +664,14 @@ extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 | 
				
			|||||||
   the (de)compression state.
 | 
					   the (de)compression state.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORT gzsetparams OF((gzFile file, int level, int strategy));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     Dynamically update the compression level or strategy. See the description
 | 
				
			||||||
 | 
					   of deflateInit2 for the meaning of these parameters.
 | 
				
			||||||
 | 
					     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
 | 
				
			||||||
 | 
					   opened for writing.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
 | 
					extern int EXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Reads the given number of uncompressed bytes from the compressed file.
 | 
					     Reads the given number of uncompressed bytes from the compressed file.
 | 
				
			||||||
@@ -675,6 +687,25 @@ extern int EXPORT    gzwrite OF((gzFile file, const voidp buf, unsigned len));
 | 
				
			|||||||
   (0 in case of error).
 | 
					   (0 in case of error).
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORTVA   gzprintf OF((gzFile file, const char *format, ...));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     Converts, formats, and writes the args to the compressed file under
 | 
				
			||||||
 | 
					   control of the format string, as in fprintf. gzprintf returns the number of
 | 
				
			||||||
 | 
					   uncompressed bytes actually written (0 in case of error).
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORT    gzputc OF((gzFile file, int c));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					      Writes c, converted to an unsigned char, into the compressed file.
 | 
				
			||||||
 | 
					   gzputc returns the value that was written, or -1 in case of error.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORT    gzgetc OF((gzFile file));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					      Reads one byte from the compressed file. gzgetc returns this byte
 | 
				
			||||||
 | 
					   or -1 in case of end of file or error.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT    gzflush OF((gzFile file, int flush));
 | 
					extern int EXPORT    gzflush OF((gzFile file, int flush));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Flushes all pending output into the compressed file. The parameter
 | 
					     Flushes all pending output into the compressed file. The parameter
 | 
				
			||||||
@@ -685,6 +716,45 @@ extern int EXPORT    gzflush OF((gzFile file, int flush));
 | 
				
			|||||||
   degrade compression.
 | 
					   degrade compression.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern z_off_t EXPORT    gzseek OF((gzFile file, z_off_t offset, int whence));
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					      Sets the starting position for the next gzread or gzwrite on the given
 | 
				
			||||||
 | 
					   compressed file. The offset represents a number of bytes in the
 | 
				
			||||||
 | 
					   uncompressed data stream. The whence parameter is defined as in lseek(2);
 | 
				
			||||||
 | 
					   the value SEEK_END is not supported.
 | 
				
			||||||
 | 
					     If the file is opened for reading, this function is emulated but can be
 | 
				
			||||||
 | 
					   extremely slow. If the file is opened for writing, only forward seeks are
 | 
				
			||||||
 | 
					   supported; gzseek then compresses a sequence of zeroes up to the new
 | 
				
			||||||
 | 
					   starting position.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      gzseek returns the resulting offset location as measured in bytes from
 | 
				
			||||||
 | 
					   the beginning of the uncompressed stream, or -1 in case of error, in
 | 
				
			||||||
 | 
					   particular if the file is opened for writing and the new starting position
 | 
				
			||||||
 | 
					   would be before the current position.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORT    gzrewind OF((gzFile file));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     Rewinds the given file. This function is supported only for reading.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern z_off_t EXPORT    gztell OF((gzFile file));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     Returns the starting position for the next gzread or gzwrite on the
 | 
				
			||||||
 | 
					   given compressed file. This position represents a number of bytes in the
 | 
				
			||||||
 | 
					   uncompressed data stream.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int EXPORT gzeof OF((gzFile file));
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     Returns 1 when EOF has previously been detected reading the given
 | 
				
			||||||
 | 
					   input stream, otherwise zero.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int EXPORT    gzclose OF((gzFile file));
 | 
					extern int EXPORT    gzclose OF((gzFile file));
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
     Flushes all pending output if necessary, closes the compressed file
 | 
					     Flushes all pending output if necessary, closes the compressed file
 | 
				
			||||||
@@ -767,11 +837,14 @@ extern int EXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
 | 
				
			|||||||
#define inflateInit2(strm, windowBits) \
 | 
					#define inflateInit2(strm, windowBits) \
 | 
				
			||||||
        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
 | 
					        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
 | 
					#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
 | 
				
			||||||
    struct internal_state {int dummy;}; /* hack for buggy compilers */
 | 
					    struct internal_state {int dummy;}; /* hack for buggy compilers */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uLongf *get_crc_table OF((void)); /* can be used by asm versions of crc32() */
 | 
					extern const char * EXPORT zError           OF((int err));
 | 
				
			||||||
 | 
					extern int          EXPORT inflateSyncPoint OF((z_streamp z));
 | 
				
			||||||
 | 
					extern uLongf *     EXPORT get_crc_table    OF((void));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								zutil.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								zutil.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
/* zutil.c -- target dependent utility functions for the compression library
 | 
					/* zutil.c -- target dependent utility functions for the compression library
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: zutil.c,v 1.17 1996/07/24 13:41:12 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,12 +28,18 @@ const char *z_errmsg[10] = {
 | 
				
			|||||||
""};
 | 
					""};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *zlibVersion()
 | 
					const char * EXPORT zlibVersion()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return ZLIB_VERSION;
 | 
					    return ZLIB_VERSION;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#  ifndef verbose
 | 
				
			||||||
 | 
					#    define verbose 0
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
 | 
					int z_verbose = verbose;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void z_error (m)
 | 
					void z_error (m)
 | 
				
			||||||
    char *m;
 | 
					    char *m;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -42,6 +48,16 @@ void z_error (m)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* exported to allow conversion of error code to string for compress() and
 | 
				
			||||||
 | 
					 * uncompress()
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const char * EXPORT zError(err)
 | 
				
			||||||
 | 
					    int err;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return ERR_MSG(err);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef HAVE_MEMCPY
 | 
					#ifndef HAVE_MEMCPY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void zmemcpy(dest, source, len)
 | 
					void zmemcpy(dest, source, len)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										56
									
								
								zutil.h
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								zutil.h
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* zutil.h -- internal interface and configuration of the compression library
 | 
					/* zutil.h -- internal interface and configuration of the compression library
 | 
				
			||||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
					 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
				
			||||||
 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
					 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8,23 +8,23 @@
 | 
				
			|||||||
   subject to change. Applications should only use zlib.h.
 | 
					   subject to change. Applications should only use zlib.h.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* $Id: zutil.h,v 1.16 1996/07/24 13:41:13 me Exp $ */
 | 
					/* @(#) $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _Z_UTIL_H
 | 
					#ifndef _Z_UTIL_H
 | 
				
			||||||
#define _Z_UTIL_H
 | 
					#define _Z_UTIL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "zlib.h"
 | 
					#include "zlib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(MSDOS)||defined(VMS)||defined(CRAY)||defined(WIN32)||defined(RISCOS)
 | 
					 | 
				
			||||||
#   include <stddef.h>
 | 
					 | 
				
			||||||
#   include <errno.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    extern int errno;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifdef STDC
 | 
					#ifdef STDC
 | 
				
			||||||
 | 
					#  include <stddef.h>
 | 
				
			||||||
#  include <string.h>
 | 
					#  include <string.h>
 | 
				
			||||||
#  include <stdlib.h>
 | 
					#  include <stdlib.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef NO_ERRNO_H
 | 
				
			||||||
 | 
					    extern int errno;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#   include <errno.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef local
 | 
					#ifndef local
 | 
				
			||||||
#  define local static
 | 
					#  define local static
 | 
				
			||||||
@@ -76,7 +76,13 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
#ifdef MSDOS
 | 
					#ifdef MSDOS
 | 
				
			||||||
#  define OS_CODE  0x00
 | 
					#  define OS_CODE  0x00
 | 
				
			||||||
#  ifdef __TURBOC__
 | 
					#  ifdef __TURBOC__
 | 
				
			||||||
#    include <alloc.h>
 | 
					#    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
 | 
				
			||||||
 | 
					       /* Allow compilation with ANSI keywords only enabled */
 | 
				
			||||||
 | 
					       void _Cdecl farfree( void *block );
 | 
				
			||||||
 | 
					       void *_Cdecl farmalloc( unsigned long nbytes );
 | 
				
			||||||
 | 
					#    else
 | 
				
			||||||
 | 
					#     include <alloc.h>
 | 
				
			||||||
 | 
					#    endif
 | 
				
			||||||
#  else /* MSC or DJGPP */
 | 
					#  else /* MSC or DJGPP */
 | 
				
			||||||
#    include <malloc.h>
 | 
					#    include <malloc.h>
 | 
				
			||||||
#  endif
 | 
					#  endif
 | 
				
			||||||
@@ -92,7 +98,7 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if defined(VAXC) || defined(VMS)
 | 
					#if defined(VAXC) || defined(VMS)
 | 
				
			||||||
#  define OS_CODE  0x02
 | 
					#  define OS_CODE  0x02
 | 
				
			||||||
#  define FOPEN(name, mode) \
 | 
					#  define F_OPEN(name, mode) \
 | 
				
			||||||
     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
 | 
					     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,14 +126,19 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
#  define fdopen(fd,mode) NULL /* No fdopen() */
 | 
					#  define fdopen(fd,mode) NULL /* No fdopen() */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (defined(_MSC_VER) && (_MSC_VER >= 600))
 | 
				
			||||||
 | 
					#  define fdopen(fd,type)  _fdopen(fd,type)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Common defaults */
 | 
					        /* Common defaults */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef OS_CODE
 | 
					#ifndef OS_CODE
 | 
				
			||||||
#  define OS_CODE  0x03  /* assume Unix */
 | 
					#  define OS_CODE  0x03  /* assume Unix */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef FOPEN
 | 
					#ifndef F_OPEN
 | 
				
			||||||
#  define FOPEN(name, mode) fopen((name), (mode))
 | 
					#  define F_OPEN(name, mode) fopen((name), (mode))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* functions */
 | 
					         /* functions */
 | 
				
			||||||
@@ -142,9 +153,10 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
#if defined(pyr)
 | 
					#if defined(pyr)
 | 
				
			||||||
#  define NO_MEMCPY
 | 
					#  define NO_MEMCPY
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(_MSC_VER)
 | 
					#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
 | 
				
			||||||
 /* Use our own functions for small and medium model with MSC <= 5.0.
 | 
					 /* Use our own functions for small and medium model with MSC <= 5.0.
 | 
				
			||||||
  * You may have to use the same strategy for Borland C (untested).
 | 
					  * You may have to use the same strategy for Borland C (untested).
 | 
				
			||||||
 | 
					  * The __SC__ check is for Symantec.
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
#  define NO_MEMCPY
 | 
					#  define NO_MEMCPY
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -170,16 +182,14 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
/* Diagnostic functions */
 | 
					/* Diagnostic functions */
 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
#  include <stdio.h>
 | 
					#  include <stdio.h>
 | 
				
			||||||
#  ifndef verbose
 | 
					   extern int z_verbose;
 | 
				
			||||||
#    define verbose 0
 | 
					 | 
				
			||||||
#  endif
 | 
					 | 
				
			||||||
   extern void z_error    OF((char *m));
 | 
					   extern void z_error    OF((char *m));
 | 
				
			||||||
#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
 | 
					#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
 | 
				
			||||||
#  define Trace(x) fprintf x
 | 
					#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
 | 
				
			||||||
#  define Tracev(x) {if (verbose) fprintf x ;}
 | 
					#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
 | 
				
			||||||
#  define Tracevv(x) {if (verbose>1) fprintf x ;}
 | 
					#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
 | 
				
			||||||
#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
 | 
					#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
 | 
				
			||||||
#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
 | 
					#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#  define Assert(cond,msg)
 | 
					#  define Assert(cond,msg)
 | 
				
			||||||
#  define Trace(x)
 | 
					#  define Trace(x)
 | 
				
			||||||
@@ -190,8 +200,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef uLong (*check_func) OF((uLong check, const Bytef *buf, uInt len));
 | 
					typedef uLong (EXPORT *check_func) OF((uLong check, const Bytef *buf,
 | 
				
			||||||
 | 
									       uInt len));
 | 
				
			||||||
voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
 | 
					voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
 | 
				
			||||||
void   zcfree  OF((voidpf opaque, voidpf ptr));
 | 
					void   zcfree  OF((voidpf opaque, voidpf ptr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user