Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 4b5a43a219 | ||
|   | 086e982175 | 
							
								
								
									
										77
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,5 +1,82 @@ | ||||
|  | ||||
|                 ChangeLog file for zlib | ||||
|  | ||||
| Changes in 1.2.0.5 (8 September 2003) | ||||
| - Add infback9 diffs to contrib | ||||
| - Add OF to inflateBackEnd() declaration in zlib.h | ||||
| - Remember start when using gzdopen in the middle of a file | ||||
| - Use internal off_t counters in gz* functions to properly handle seeks | ||||
| - Perform more rigorous check for distance-too-far in inffast.c | ||||
| - Add Z_BLOCK flush option to return from inflate at block boundary | ||||
| - Set strm->data_type on return from inflate | ||||
|     - Indicate bits unused, if at block boundary, and if in last block | ||||
| - Replace size_t with ptrdiff_t in crc32.c, and check for correct size | ||||
| - Add condition so old NO_DEFLATE define still works for compatibility | ||||
| - FAQ update regarding the Windows DLL [Truta] | ||||
| - INDEX update: add qnx entry, remove aix entry [Truta] | ||||
| - Install zlib.3 into mandir [Wilson] | ||||
| - Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] | ||||
| - Adapt the zlib interface to the new DLL convention guidelines [Truta] | ||||
| - Introduce ZLIB_WINAPI macro to allow the export of functions using | ||||
|   the WINAPI calling convention, for Visual Basic [Vollant, Truta] | ||||
| - Update msdos and win32 scripts and makefiles [Truta] | ||||
| - Export symbols by name, not by ordinal, in win32/zlib.def [Truta] | ||||
| - Add contrib/ada [Anisimkov] | ||||
| - Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] | ||||
| - Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] | ||||
| - Add contrib/masm686 [Truta] | ||||
| - Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm | ||||
|   [Truta, Vollant] | ||||
| - Update contrib/delphi; rename to contrib/pascal; add example [Truta] | ||||
| - Remove contrib/delphi2; add a new contrib/delphi [Truta] | ||||
| - Avoid inclusion of the nonstandard <memory.h> in contrib/iostream, | ||||
|   and fix some method prototypes [Truta] | ||||
| - Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip | ||||
|   [Truta] | ||||
| - Avoid the use of backslash (\) in contrib/minizip [Vollant] | ||||
| - Fix file time handling in contrib/untgz; update makefiles [Truta] | ||||
| - Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines | ||||
|   [Vollant] | ||||
| - Remove contrib/vstudio/vc15_16 [Vollant] | ||||
| - Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] | ||||
| - Update README.contrib [Truta] | ||||
| - Invert the assignment order of match_head and s->prev[...] in | ||||
|   INSERT_STRING [Truta] | ||||
| - Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings | ||||
|   [Truta] | ||||
| - Compare function pointers with 0, not with NULL or Z_NULL [Truta] | ||||
| - Fix prototype of syncsearch in inflate.c [Truta] | ||||
| - Introduce ASMINF macro to be enabled when using an ASM implementation | ||||
|   of inflate_fast [Truta] | ||||
| - Change NO_DEFLATE to NO_GZCOMPRESS [Truta] | ||||
| - Modify test_gzio in example.c to take a single file name as a | ||||
|   parameter [Truta] | ||||
| - Exit the example.c program if gzopen fails [Truta] | ||||
| - Add type casts around strlen in example.c [Truta] | ||||
| - Remove casting to sizeof in minigzip.c; give a proper type | ||||
|   to the variable compared with SUFFIX_LEN [Truta] | ||||
| - Update definitions of STDC and STDC99 in zconf.h [Truta] | ||||
| - Synchronize zconf.h with the new Windows DLL interface [Truta] | ||||
| - Use SYS16BIT instead of __32BIT__ to distinguish between | ||||
|   16- and 32-bit platforms [Truta] | ||||
| - Use far memory allocators in small 16-bit memory models for | ||||
|   Turbo C [Truta] | ||||
| - Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in | ||||
|   zlibCompileFlags [Truta] | ||||
| - Cygwin has vsnprintf [Wilson] | ||||
| - In Windows16, OS_CODE is 0, as in MSDOS [Truta] | ||||
| - In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] | ||||
|  | ||||
| Changes in 1.2.0.4 (10 August 2003) | ||||
| - Minor FAQ updates | ||||
| - Be more strict when checking inflateInit2's windowBits parameter | ||||
| - Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well | ||||
| - Add gzip wrapper option to deflateInit2 using windowBits | ||||
| - Add updated QNX rule in configure and qnx directory [Bonnefoy] | ||||
| - Make inflate distance-too-far checks more rigorous | ||||
| - Clean up FAR usage in inflate | ||||
| - Add casting to sizeof() in gzio.c and minigzip.c | ||||
|  | ||||
| Changes in 1.2.0.3 (19 July 2003) | ||||
| - Fix silly error in gzungetc() implementation [Vollant] | ||||
| - Update contrib/minizip and contrib/vstudio [Vollant] | ||||
|   | ||||
							
								
								
									
										21
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								FAQ
									
									
									
									
									
								
							| @@ -13,9 +13,10 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | ||||
|  | ||||
|  2. Where can I get a Windows DLL version? | ||||
|  | ||||
|     The zlib sources can be compiled without change to produce a DLL. If you | ||||
|     want a precompiled DLL, see http://www.winimage.com/zLibDll/ . Questions | ||||
|     about the zlib DLL should be sent to Gilles Vollant (info@winimage.com). | ||||
|     The zlib sources can be compiled without change to produce a DLL. | ||||
|     See the file win32/DLL_FAQ.txt in the zlib distribution. | ||||
|     Pointers to the precompiled DLL are found in the zlib web site at | ||||
|     http://www.zlib.org. | ||||
|  | ||||
|  3. Where can I get a Visual Basic interface to zlib? | ||||
|  | ||||
| @@ -122,8 +123,16 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | ||||
|  | ||||
| 18. Well that's nice, but how do I make a gzip file in memory? | ||||
|  | ||||
|     Read RFC 1952 for the gzip header and trailer format, and roll your own | ||||
|     gzip formatted data using raw deflate and crc32(). | ||||
|     You can request that deflate write the gzip format instead of the zlib | ||||
|     format using deflateInit2(). You can also request that inflate decode | ||||
|     the gzip format using inflateInit2(). Read zlib.h for more details. | ||||
|  | ||||
|     Note that you cannot specify special gzip header contents (e.g. a file | ||||
|     name or modification date), nor will inflate tell you what was in the | ||||
|     gzip header. If you need to customize the header or see what's in it, | ||||
|     you can use the raw deflate and inflate operations and the crc32() | ||||
|     function and roll your own gzip encoding and decoding. Read the gzip | ||||
|     RFC 1952 for details of the header and trailer format. | ||||
|  | ||||
| 19. Is zlib thread-safe? | ||||
|  | ||||
| @@ -253,7 +262,7 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | ||||
| 32. Is there a Java version of zlib? | ||||
|  | ||||
|     Probably what you want is to use zlib in Java. zlib is already included | ||||
|     as part of the Java SDK in the java.util.zip class. If you really want | ||||
|     as part of the Java SDK in the java.util.zip package. If you really want | ||||
|     a version of zlib written in the Java language, look on the zlib home | ||||
|     page for links: http://www.zlib.org/ | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								INDEX
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								INDEX
									
									
									
									
									
								
							| @@ -8,10 +8,10 @@ algorithm.txt   description of the (de)compression algorithm | ||||
| configure       configure script for Unix | ||||
| zconf.in.h      template for zconf.h (used by configure) | ||||
|  | ||||
| aix/            instructions for building an AIX shared library | ||||
| msdos/          makefiles for MSDOS | ||||
| old/            makefiles for various architectures and zlib documentation | ||||
|                 files that have not yet been updated for zlib 1.2.x | ||||
| qnx/            makefiles for QNX | ||||
| win32/          makefiles for Windows | ||||
|  | ||||
|                 zlib public header files (must be kept): | ||||
|   | ||||
							
								
								
									
										18
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Makefile
									
									
									
									
									
								
							| @@ -7,6 +7,10 @@ | ||||
| # The call of configure is optional if you don't have special requirements | ||||
| # If you wish to build zlib as a shared library, use: ./configure -s | ||||
|  | ||||
| # To use the asm code, type: | ||||
| #    cp contrib/asm?86/match.S ./match.S | ||||
| #    make LOC=-DASMV OBJA=match.o | ||||
|  | ||||
| # To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: | ||||
| #    make install | ||||
| # To install in $HOME instead of /usr/local, use: | ||||
| @@ -24,7 +28,7 @@ LDFLAGS=libz.a | ||||
| LDSHARED=$(CC) | ||||
| CPP=$(CC) -E | ||||
|  | ||||
| VER=1.2.0.3 | ||||
| VER=1.2.0.5 | ||||
| LIBS=libz.a | ||||
| SHAREDLIB=libz.so | ||||
|  | ||||
| @@ -37,6 +41,8 @@ prefix = /usr/local | ||||
| exec_prefix = ${prefix} | ||||
| libdir = ${exec_prefix}/lib | ||||
| includedir = ${prefix}/include | ||||
| mandir = ${prefix}/share/man | ||||
| man3dir = ${mandir}/man3 | ||||
|  | ||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | ||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | ||||
| @@ -46,7 +52,7 @@ OBJA = | ||||
|  | ||||
| TEST_OBJS = example.o minigzip.o | ||||
|  | ||||
| # Note: this hasn't been updated for zlib 1.2.0 | ||||
| # Note: this has not been updated for zlib 1.2.0 | ||||
| DISTFILES = README FAQ INDEX ChangeLog configure Make*[a-z0-9] *.[ch] *.mms \ | ||||
|   algorithm.txt zlib.3 zlib.html \ | ||||
|   msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ | ||||
| @@ -98,6 +104,7 @@ install: $(LIBS) | ||||
| 	-@if [ ! -d $(exec_prefix) ]; then mkdir $(exec_prefix); fi | ||||
| 	-@if [ ! -d $(includedir)  ]; then mkdir $(includedir); fi | ||||
| 	-@if [ ! -d $(libdir)      ]; then mkdir $(libdir); fi | ||||
| 	-@if [ ! -d $(man3dir)     ]; then mkdir $(man3dir); fi | ||||
| 	cp zlib.h zconf.h $(includedir) | ||||
| 	chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h | ||||
| 	cp $(LIBS) $(libdir) | ||||
| @@ -109,6 +116,8 @@ install: $(LIBS) | ||||
| 	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ | ||||
| 	  (ldconfig || true)  >/dev/null 2>&1; \ | ||||
| 	fi | ||||
| 	cp zlib.3 $(man3dir) | ||||
| 	chmod 644 $(man3dir)/zlib.3 | ||||
| # The ranlib in install is needed on NeXTSTEP which checks file times | ||||
| # ldconfig is for Linux | ||||
|  | ||||
| @@ -123,6 +132,7 @@ uninstall: | ||||
| 	if test -f $(SHAREDLIB).$$v; then \ | ||||
| 	  rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ | ||||
| 	fi | ||||
| 	cd $(man3dir); rm -f zlib.3 | ||||
|  | ||||
| mostlyclean: clean | ||||
| clean: | ||||
| @@ -133,8 +143,10 @@ maintainer-clean: distclean | ||||
| distclean: clean | ||||
| 	cp -p Makefile.in Makefile | ||||
| 	cp -p zconf.in.h zconf.h | ||||
| 	rm -f .DS_Store | ||||
|  | ||||
| zip: | ||||
| 	echo Warning: this has not been updated for zlib 1.2.0 -- do not use | ||||
| 	mv Makefile Makefile~; cp -p Makefile.in Makefile | ||||
| 	rm -f test.c ztest*.c contrib/minizip/test.zip | ||||
| 	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | ||||
| @@ -142,7 +154,7 @@ zip: | ||||
| 	mv Makefile~ Makefile | ||||
|  | ||||
| dist: | ||||
| 	echo Warning: this hasn't been updated for zlib 1.2.0 -- don't use | ||||
| 	echo Warning: this has not been updated for zlib 1.2.0 -- do not use | ||||
| 	mv Makefile Makefile~; cp -p Makefile.in Makefile | ||||
| 	rm -f test.c ztest*.c contrib/minizip/test.zip | ||||
| 	d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | ||||
|   | ||||
							
								
								
									
										18
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Makefile.in
									
									
									
									
									
								
							| @@ -7,6 +7,10 @@ | ||||
| # The call of configure is optional if you don't have special requirements | ||||
| # If you wish to build zlib as a shared library, use: ./configure -s | ||||
|  | ||||
| # To use the asm code, type: | ||||
| #    cp contrib/asm?86/match.S ./match.S | ||||
| #    make LOC=-DASMV OBJA=match.o | ||||
|  | ||||
| # To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: | ||||
| #    make install | ||||
| # To install in $HOME instead of /usr/local, use: | ||||
| @@ -24,7 +28,7 @@ LDFLAGS=libz.a | ||||
| LDSHARED=$(CC) | ||||
| CPP=$(CC) -E | ||||
|  | ||||
| VER=1.2.0.3 | ||||
| VER=1.2.0.5 | ||||
| LIBS=libz.a | ||||
| SHAREDLIB=libz.so | ||||
|  | ||||
| @@ -37,6 +41,8 @@ prefix = /usr/local | ||||
| exec_prefix = ${prefix} | ||||
| libdir = ${exec_prefix}/lib | ||||
| includedir = ${prefix}/include | ||||
| mandir = ${prefix}/share/man | ||||
| man3dir = ${mandir}/man3 | ||||
|  | ||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | ||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | ||||
| @@ -46,7 +52,7 @@ OBJA = | ||||
|  | ||||
| TEST_OBJS = example.o minigzip.o | ||||
|  | ||||
| # Note: this hasn't been updated for zlib 1.2.0 | ||||
| # Note: this has not been updated for zlib 1.2.0 | ||||
| DISTFILES = README FAQ INDEX ChangeLog configure Make*[a-z0-9] *.[ch] *.mms \ | ||||
|   algorithm.txt zlib.3 zlib.html \ | ||||
|   msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ | ||||
| @@ -98,6 +104,7 @@ install: $(LIBS) | ||||
| 	-@if [ ! -d $(exec_prefix) ]; then mkdir $(exec_prefix); fi | ||||
| 	-@if [ ! -d $(includedir)  ]; then mkdir $(includedir); fi | ||||
| 	-@if [ ! -d $(libdir)      ]; then mkdir $(libdir); fi | ||||
| 	-@if [ ! -d $(man3dir)     ]; then mkdir $(man3dir); fi | ||||
| 	cp zlib.h zconf.h $(includedir) | ||||
| 	chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h | ||||
| 	cp $(LIBS) $(libdir) | ||||
| @@ -109,6 +116,8 @@ install: $(LIBS) | ||||
| 	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ | ||||
| 	  (ldconfig || true)  >/dev/null 2>&1; \ | ||||
| 	fi | ||||
| 	cp zlib.3 $(man3dir) | ||||
| 	chmod 644 $(man3dir)/zlib.3 | ||||
| # The ranlib in install is needed on NeXTSTEP which checks file times | ||||
| # ldconfig is for Linux | ||||
|  | ||||
| @@ -123,6 +132,7 @@ uninstall: | ||||
| 	if test -f $(SHAREDLIB).$$v; then \ | ||||
| 	  rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ | ||||
| 	fi | ||||
| 	cd $(man3dir); rm -f zlib.3 | ||||
|  | ||||
| mostlyclean: clean | ||||
| clean: | ||||
| @@ -133,8 +143,10 @@ maintainer-clean: distclean | ||||
| distclean: clean | ||||
| 	cp -p Makefile.in Makefile | ||||
| 	cp -p zconf.in.h zconf.h | ||||
| 	rm -f .DS_Store | ||||
|  | ||||
| zip: | ||||
| 	echo Warning: this has not been updated for zlib 1.2.0 -- do not use | ||||
| 	mv Makefile Makefile~; cp -p Makefile.in Makefile | ||||
| 	rm -f test.c ztest*.c contrib/minizip/test.zip | ||||
| 	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | ||||
| @@ -142,7 +154,7 @@ zip: | ||||
| 	mv Makefile~ Makefile | ||||
|  | ||||
| dist: | ||||
| 	echo Warning: this hasn't been updated for zlib 1.2.0 -- don't use | ||||
| 	echo Warning: this has not been updated for zlib 1.2.0 -- do not use | ||||
| 	mv Makefile Makefile~; cp -p Makefile.in Makefile | ||||
| 	rm -f test.c ztest*.c contrib/minizip/test.zip | ||||
| 	d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | ||||
|   | ||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| ZLIB DATA COMPRESSION LIBRARY | ||||
|  | ||||
| zlib 1.2.0.3 is a general purpose data compression library.  All the code is | ||||
| zlib 1.2.0.5 is a general purpose data compression library.  All the code is | ||||
| thread safe.  The data format used by the zlib library is described by RFCs | ||||
| (Request for Comments) 1950 to 1952 in the files | ||||
| http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) | ||||
| @@ -34,7 +34,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997 | ||||
| issue of  Dr. Dobb's Journal; a copy of the article is available in | ||||
| http://dogma.net/markn/articles/zlibtool/zlibtool.htm | ||||
|  | ||||
| The changes made in version 1.2.0.3 are documented in the file ChangeLog. | ||||
| The changes made in version 1.2.0.5 are documented in the file ChangeLog. | ||||
|  | ||||
| Unsupported third party contributions are provided in directory "contrib". | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -28,6 +28,7 @@ prefix=${prefix-/usr/local} | ||||
| exec_prefix=${exec_prefix-'${prefix}'} | ||||
| libdir=${libdir-'${exec_prefix}/lib'} | ||||
| includedir=${includedir-'${prefix}/include'} | ||||
| mandir=${mandir-'${prefix}/share/man'} | ||||
| shared_ext='.so' | ||||
| shared=0 | ||||
| gcc=0 | ||||
| @@ -78,6 +79,9 @@ if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then | ||||
|   CFLAGS="$cflags" | ||||
|   case `(uname -s || echo unknown) 2>/dev/null` in | ||||
|   Linux | linux) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};; | ||||
|   QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 | ||||
|          # (alain.bonnefoy@icbt.com) | ||||
|                  LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"};; | ||||
|   HP-UX*)        LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} | ||||
|                  shared_ext='.sl' | ||||
|                  SHAREDLIB='libz.sl';; | ||||
| @@ -148,10 +152,10 @@ if test $shared -eq 1; then | ||||
|     LIBS="$SHAREDLIB.$VER" | ||||
|     echo Building shared library $SHAREDLIB.$VER with $CC. | ||||
|   elif test -z "$old_cc" -a -z "$old_cflags"; then | ||||
|     echo No shared library suppport. | ||||
|     echo No shared library support. | ||||
|     shared=0; | ||||
|   else | ||||
|     echo 'No shared library suppport; try without defining CC and CFLAGS' | ||||
|     echo 'No shared library support; try without defining CC and CFLAGS' | ||||
|     shared=0; | ||||
|   fi | ||||
| fi | ||||
| @@ -431,5 +435,6 @@ sed < Makefile.in " | ||||
| /^exec_prefix *=/s%=.*%=$exec_prefix% | ||||
| /^libdir *=/s%=.*%=$libdir% | ||||
| /^includedir *=/s%=.*%=$includedir% | ||||
| /^mandir *=/s%=.*%=$mandir% | ||||
| /^LDFLAGS *=/s%=.*%=$LDFLAGS% | ||||
| " > Makefile | ||||
|   | ||||
| @@ -4,35 +4,56 @@ 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(), for Visual C++ 4.2 and ML 6.11c | ||||
| ada/        by Dmitriy Anisimkov <anisimkov@yahoo.com> | ||||
| 	Support for Ada | ||||
| 	See http://zlib-ada.sourceforge.net/ | ||||
|  | ||||
| asm586/ and asm686/ by Brian Raiter <breadbox@muppetlabs.com> | ||||
|         asm code for Pentium and Pentium Pro | ||||
| 	asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax | ||||
| 	See http://www.muppetlabs.com/~breadbox/software/assembly.html | ||||
|  | ||||
| blast/      by Mark Adler <madler@alumni.caltech.edu> | ||||
| 	Decompressor for output of PKWare Data Compression Library (DCL) | ||||
|  | ||||
| delphi/     by Bob Dellaca <bobdl@xtra.co.nz> | ||||
| 	Support for Delphi | ||||
| delphi/     by Cosmin Truta <cosmint@cs.ubbcluj.ro> | ||||
| 	Support for Delphi and C++ Builder | ||||
|  | ||||
| delphi2/    by Davide Moretti <dave@rimini.com> | ||||
|         Another support for C++Builder and Delphi | ||||
| infback9/   by Mark Adler <madler@alumni.caltech.edu> | ||||
|         Unsupported diffs to infback to decode the deflate64 format | ||||
|         (Worse than that, it's not even tested) | ||||
|  | ||||
| inflate86/  by Chris Anderson <christop@charm.net> | ||||
| 	Tuned x86 gcc asm code to replace inflate_fast() | ||||
|  | ||||
| minizip/    by Gilles Vollant <info@winimage.com> | ||||
| 	Mini zip and unzip based on zlib | ||||
|         See http://www.winimage.com/zLibDll/unzip.html | ||||
|  | ||||
| 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 | ||||
|  | ||||
| iostream3/  by Ludwig Schwardt <schwardt@sun.ac.za> | ||||
|             and Kevin Ruland <kevin@rodin.wustl.edu> | ||||
| 	Yet another C++ I/O streams interface | ||||
|  | ||||
| masm686/    by Dan Higdon <hdan@kinesoft.com> | ||||
|             and Chuck Walbourn <chuckw@kinesoft.com> | ||||
| 	asm code for Pentium Pro/PII, using the MASM syntax | ||||
|  | ||||
| masmx86/    by Gilles Vollant <info@winimage.com> | ||||
| 	x86 asm code to replace longest_match() and inflate_fast(), | ||||
| 	for Visual C++ and MASM | ||||
|  | ||||
| minizip/    by Gilles Vollant <info@winimage.com> | ||||
| 	Mini zip and unzip based on zlib | ||||
| 	See http://www.winimage.com/zLibDll/unzip.html | ||||
|  | ||||
| pascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al. | ||||
| 	Support for Pascal | ||||
|  | ||||
| puff/       by Mark Adler <madler@alumni.caltech.edu> | ||||
| 	Small, low memory usage inflate.  Also serves to provide an | ||||
| 	unambiguous description of the deflate format. | ||||
|  | ||||
| testzlib/   by Gilles Vollant <info@winimage.com> | ||||
| 	Example of the use of zlib | ||||
|  | ||||
| @@ -40,8 +61,7 @@ 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. | ||||
| 	How to use compress(), uncompress() and the gz* functions from VB | ||||
|  | ||||
| vstudio/    by Gilles Vollant <info@winimage.com> | ||||
| 	Building zlib DLL with Visual Studio .NET | ||||
| 	Includes x86 inffast.asm for MASM | ||||
| 	Building zlib with Visual Studio .NET | ||||
|   | ||||
							
								
								
									
										153
									
								
								contrib/ada/mtest.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								contrib/ada/mtest.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
| --  Continuous test for ZLib multithreading. If the test is fail | ||||
| --  Wou should provide thread safe allocation routines for the Z_Stream. | ||||
| -- | ||||
| --  $Id: mtest.adb,v 1.2 2003/08/12 12:11:05 vagul Exp $ | ||||
|  | ||||
| with ZLib; | ||||
| with Ada.Streams; | ||||
| with Ada.Numerics.Discrete_Random; | ||||
| with Ada.Text_IO; | ||||
| with Ada.Exceptions; | ||||
| with Ada.Task_Identification; | ||||
|  | ||||
| procedure MTest is | ||||
|    use Ada.Streams; | ||||
|    use ZLib; | ||||
|  | ||||
|    Stop : Boolean := False; | ||||
|  | ||||
|    pragma Atomic (Stop); | ||||
|  | ||||
|    subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; | ||||
|  | ||||
|    package Random_Elements is | ||||
|       new Ada.Numerics.Discrete_Random (Visible_Symbols); | ||||
|  | ||||
|    task type Test_Task; | ||||
|  | ||||
|    task body Test_Task is | ||||
|       Buffer : Stream_Element_Array (1 .. 100_000); | ||||
|       Gen : Random_Elements.Generator; | ||||
|  | ||||
|       Buffer_First  : Stream_Element_Offset; | ||||
|       Compare_First : Stream_Element_Offset; | ||||
|  | ||||
|       Deflate : Filter_Type; | ||||
|       Inflate : Filter_Type; | ||||
|  | ||||
|       procedure Further (Item : in Stream_Element_Array); | ||||
|  | ||||
|       procedure Read_Buffer | ||||
|         (Item : out Ada.Streams.Stream_Element_Array; | ||||
|          Last : out Ada.Streams.Stream_Element_Offset); | ||||
|  | ||||
|       ------------- | ||||
|       -- Further -- | ||||
|       ------------- | ||||
|  | ||||
|       procedure Further (Item : in Stream_Element_Array) is | ||||
|  | ||||
|          procedure Compare (Item : in Stream_Element_Array); | ||||
|  | ||||
|          ------------- | ||||
|          -- Compare -- | ||||
|          ------------- | ||||
|  | ||||
|          procedure Compare (Item : in Stream_Element_Array) is | ||||
|             Next_First : Stream_Element_Offset := Compare_First + Item'Length; | ||||
|          begin | ||||
|             if Buffer (Compare_First .. Next_First - 1) /= Item then | ||||
|                raise Program_Error; | ||||
|             end if; | ||||
|  | ||||
|             Compare_First := Next_First; | ||||
|          end Compare; | ||||
|  | ||||
|          procedure Compare_Write is new ZLib.Write (Write => Compare); | ||||
|       begin | ||||
|          Compare_Write (Inflate, Item, No_Flush); | ||||
|       end Further; | ||||
|  | ||||
|       ----------------- | ||||
|       -- Read_Buffer -- | ||||
|       ----------------- | ||||
|  | ||||
|       procedure Read_Buffer | ||||
|         (Item : out Ada.Streams.Stream_Element_Array; | ||||
|          Last : out Ada.Streams.Stream_Element_Offset) | ||||
|       is | ||||
|          Buff_Diff   : Stream_Element_Offset := Buffer'Last - Buffer_First; | ||||
|          Next_First : Stream_Element_Offset; | ||||
|       begin | ||||
|          if Item'Length <= Buff_Diff then | ||||
|             Last := Item'Last; | ||||
|  | ||||
|             Next_First := Buffer_First + Item'Length; | ||||
|  | ||||
|             Item := Buffer (Buffer_First .. Next_First - 1); | ||||
|  | ||||
|             Buffer_First := Next_First; | ||||
|          else | ||||
|             Last := Item'First + Buff_Diff; | ||||
|             Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last); | ||||
|             Buffer_First := Buffer'Last + 1; | ||||
|          end if; | ||||
|       end Read_Buffer; | ||||
|  | ||||
|       procedure Translate is new Generic_Translate | ||||
|                                    (Data_In  => Read_Buffer, | ||||
|                                     Data_Out => Further); | ||||
|  | ||||
|    begin | ||||
|       Random_Elements.Reset (Gen); | ||||
|  | ||||
|       Buffer := (others => 20); | ||||
|  | ||||
|       Main : loop | ||||
|          for J in Buffer'Range loop | ||||
|             Buffer (J) := Random_Elements.Random (Gen); | ||||
|  | ||||
|             Deflate_Init (Deflate); | ||||
|             Inflate_Init (Inflate); | ||||
|  | ||||
|             Buffer_First  := Buffer'First; | ||||
|             Compare_First := Buffer'First; | ||||
|  | ||||
|             Translate (Deflate); | ||||
|  | ||||
|             if Compare_First /= Buffer'Last + 1 then | ||||
|                raise Program_Error; | ||||
|             end if; | ||||
|  | ||||
|             Ada.Text_IO.Put_Line | ||||
|               (Ada.Task_Identification.Image | ||||
|                  (Ada.Task_Identification.Current_Task) | ||||
|                & Stream_Element_Offset'Image (J) | ||||
|                & ZLib.Count'Image (Total_Out (Deflate))); | ||||
|  | ||||
|             Close (Deflate); | ||||
|             Close (Inflate); | ||||
|  | ||||
|             exit Main when Stop; | ||||
|          end loop; | ||||
|       end loop Main; | ||||
|    exception | ||||
|       when E : others => | ||||
|          Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E)); | ||||
|          Stop := True; | ||||
|    end Test_Task; | ||||
|  | ||||
|    Test : array (1 .. 4) of Test_Task; | ||||
|  | ||||
|    pragma Unreferenced (Test); | ||||
|  | ||||
| begin | ||||
|    null; | ||||
| end MTest; | ||||
							
								
								
									
										151
									
								
								contrib/ada/read.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								contrib/ada/read.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,151 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: read.adb,v 1.7 2003/08/12 12:12:35 vagul Exp $ | ||||
|  | ||||
| --  Test/demo program for the generic read interface. | ||||
|  | ||||
| with Ada.Numerics.Discrete_Random; | ||||
| with Ada.Streams; | ||||
| with Ada.Text_IO; | ||||
|  | ||||
| with ZLib; | ||||
|  | ||||
| procedure Read is | ||||
|  | ||||
|    use Ada.Streams; | ||||
|  | ||||
|    ------------------------------------ | ||||
|    --  Test configuration parameters -- | ||||
|    ------------------------------------ | ||||
|  | ||||
|    File_Size   : Stream_Element_Offset := 100_000; | ||||
|  | ||||
|    Continuous  : constant Boolean          := False; | ||||
|    --  If this constant is True, the test would be repeated again and again, | ||||
|    --  with increment File_Size for every iteration. | ||||
|  | ||||
|    Header      : constant ZLib.Header_Type := ZLib.Default; | ||||
|    --  Do not use Header other than Default in ZLib versions 1.1.4 and older. | ||||
|  | ||||
|    Init_Random : constant := 8; | ||||
|    --  We are using the same random sequence, in case of we catch bug, | ||||
|    --  so we would be able to reproduce it. | ||||
|  | ||||
|    -- End -- | ||||
|  | ||||
|    Pack_Size : Stream_Element_Offset; | ||||
|    Offset    : Stream_Element_Offset; | ||||
|  | ||||
|    Filter     : ZLib.Filter_Type; | ||||
|  | ||||
|    subtype Visible_Symbols | ||||
|       is Stream_Element range 16#20# .. 16#7E#; | ||||
|  | ||||
|    package Random_Elements is new | ||||
|       Ada.Numerics.Discrete_Random (Visible_Symbols); | ||||
|  | ||||
|    Gen : Random_Elements.Generator; | ||||
|    Period  : constant Stream_Element_Offset := 200; | ||||
|    --  Period constant variable for random generator not to be very random. | ||||
|    --  Bigger period, harder random. | ||||
|  | ||||
|    Read_Buffer : Stream_Element_Array (1 .. 2048); | ||||
|    Read_First  : Stream_Element_Offset; | ||||
|    Read_Last   : Stream_Element_Offset; | ||||
|  | ||||
|    procedure Reset; | ||||
|  | ||||
|    procedure Read | ||||
|      (Item : out Stream_Element_Array; | ||||
|       Last : out Stream_Element_Offset); | ||||
|    --  this procedure is for generic instantiation of | ||||
|    --  ZLib.Read | ||||
|    --  reading data from the File_In. | ||||
|  | ||||
|    procedure Read is new ZLib.Read (Read, Read_Buffer, Read_First, Read_Last); | ||||
|  | ||||
|    ---------- | ||||
|    -- Read -- | ||||
|    ---------- | ||||
|  | ||||
|    procedure Read | ||||
|      (Item : out Stream_Element_Array; | ||||
|       Last : out Stream_Element_Offset) is | ||||
|    begin | ||||
|       Last := Stream_Element_Offset'Min | ||||
|                (Item'Last, | ||||
|                 Item'First + File_Size - Offset); | ||||
|  | ||||
|       for J in Item'First .. Last loop | ||||
|          if J < Item'First + Period then | ||||
|             Item (J) := Random_Elements.Random (Gen); | ||||
|          else | ||||
|             Item (J) := Item (J - Period); | ||||
|          end if; | ||||
|  | ||||
|          Offset   := Offset + 1; | ||||
|       end loop; | ||||
|    end Read; | ||||
|  | ||||
|    ----------- | ||||
|    -- Reset -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Reset is | ||||
|    begin | ||||
|       Random_Elements.Reset (Gen, Init_Random); | ||||
|       Pack_Size := 0; | ||||
|       Offset := 1; | ||||
|       Read_First := Read_Buffer'Last + 1; | ||||
|    end Reset; | ||||
|  | ||||
| begin | ||||
|    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); | ||||
|  | ||||
|    loop | ||||
|       for Level in ZLib.Compression_Level'Range loop | ||||
|  | ||||
|          Ada.Text_IO.Put ("Level =" | ||||
|             & ZLib.Compression_Level'Image (Level)); | ||||
|  | ||||
|          --  Deflate using generic instantiation. | ||||
|  | ||||
|          ZLib.Deflate_Init | ||||
|                (Filter, | ||||
|                 Level, | ||||
|                 Header => Header); | ||||
|  | ||||
|          Reset; | ||||
|  | ||||
|          Ada.Text_IO.Put | ||||
|            (Stream_Element_Offset'Image (File_Size) & " ->"); | ||||
|  | ||||
|          loop | ||||
|             declare | ||||
|                Buffer : Stream_Element_Array (1 .. 1024); | ||||
|                Last   : Stream_Element_Offset; | ||||
|             begin | ||||
|                Read (Filter, Buffer, Last); | ||||
|  | ||||
|                Pack_Size := Pack_Size + Last - Buffer'First + 1; | ||||
|  | ||||
|                exit when Last < Buffer'Last; | ||||
|             end; | ||||
|          end loop; | ||||
|  | ||||
|          Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size)); | ||||
|  | ||||
|          ZLib.Close (Filter); | ||||
|       end loop; | ||||
|  | ||||
|       exit when not Continuous; | ||||
|  | ||||
|       File_Size := File_Size + 1; | ||||
|    end loop; | ||||
| end Read; | ||||
							
								
								
									
										52
									
								
								contrib/ada/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								contrib/ada/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
|  | ||||
| 			ZLib for Ada thick binding (ZLib.Ada) | ||||
| 			Release 1.2 | ||||
|  | ||||
| ZLib.Ada is a thick binding interface to the popular ZLib data | ||||
| compression library, available at http://www.gzip.org/zlib/. | ||||
| It provides Ada-style access to the ZLib C library. | ||||
|  | ||||
|  | ||||
| 	Here are the main changes since ZLib.Ada 1.1: | ||||
|  | ||||
| - The default header type has a name "Default" now. Auto is used only for | ||||
|   automatic GZip/ZLib header detection. | ||||
|  | ||||
| - Added test for multitasking mtest.adb. | ||||
|  | ||||
| - Added GNAT project file zlib.gpr. | ||||
|  | ||||
|  | ||||
| 	How to build ZLib.Ada under GNAT | ||||
|  | ||||
| You should have the ZLib library already build on your computer, before | ||||
| building ZLib.Ada. Make the directory of ZLib.Ada sources current and | ||||
| issue the command: | ||||
|  | ||||
|   gnatmake test -largs -L<directory where libz.a is> -lz | ||||
|  | ||||
| Or use the GNAT project file build for GNAT 3.15 or later: | ||||
|  | ||||
|   gnatmake -Pzlib.gpr -L<directory where libz.a is> | ||||
|  | ||||
|  | ||||
| 	How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2 | ||||
|  | ||||
| 1. Make a project with all *.ads and *.adb files from the distribution. | ||||
| 2. Build the libz.a library from the ZLib C sources. | ||||
| 3. Rename libz.a to z.lib. | ||||
| 4. Add the library z.lib to the project. | ||||
| 5. Add the libc.lib library from the ObjectAda distribution to the project. | ||||
| 6. Build the executable using test.adb as a main procedure. | ||||
|  | ||||
|  | ||||
| 	How to use ZLib.Ada | ||||
|  | ||||
| The source files test.adb and read.adb are small demo programs that show | ||||
| the main functionality of ZLib.Ada. | ||||
|  | ||||
| The routines from the package specifications are commented. | ||||
|  | ||||
|  | ||||
| Homepage: http://zlib-ada.sourceforge.net/ | ||||
| Author: Dmitriy Anisimkov <anisimkov@yahoo.com> | ||||
							
								
								
									
										463
									
								
								contrib/ada/test.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										463
									
								
								contrib/ada/test.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,463 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $ | ||||
|  | ||||
| --  The program has a few aims. | ||||
| --  1. Test ZLib.Ada95 thick binding functionality. | ||||
| --  2. Show the example of use main functionality of the ZLib.Ada95 binding. | ||||
| --  3. Build this program automatically compile all ZLib.Ada95 packages under | ||||
| --     GNAT Ada95 compiler. | ||||
|  | ||||
| with ZLib.Streams; | ||||
| with Ada.Streams.Stream_IO; | ||||
| with Ada.Numerics.Discrete_Random; | ||||
|  | ||||
| with Ada.Text_IO; | ||||
|  | ||||
| with Ada.Calendar; | ||||
|  | ||||
| procedure Test is | ||||
|  | ||||
|    use Ada.Streams; | ||||
|    use Stream_IO; | ||||
|  | ||||
|    ------------------------------------ | ||||
|    --  Test configuration parameters -- | ||||
|    ------------------------------------ | ||||
|  | ||||
|    File_Size   : Count   := 100_000; | ||||
|    Continuous  : constant Boolean := False; | ||||
|  | ||||
|    Header      : constant ZLib.Header_Type := ZLib.Default; | ||||
|                                               --  ZLib.None; | ||||
|                                               --  ZLib.Auto; | ||||
|                                               --  ZLib.GZip; | ||||
|    --  Do not use Header other then Default in ZLib versions 1.1.4 | ||||
|    --  and older. | ||||
|  | ||||
|    Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy; | ||||
|    Init_Random : constant := 10; | ||||
|  | ||||
|    -- End -- | ||||
|  | ||||
|    In_File_Name  : constant String := "testzlib.in"; | ||||
|    --  Name of the input file | ||||
|  | ||||
|    Z_File_Name   : constant String := "testzlib.zlb"; | ||||
|    --  Name of the compressed file. | ||||
|  | ||||
|    Out_File_Name : constant String := "testzlib.out"; | ||||
|    --  Name of the decompressed file. | ||||
|  | ||||
|    File_In   : File_Type; | ||||
|    File_Out  : File_Type; | ||||
|    File_Back : File_Type; | ||||
|    File_Z    : ZLib.Streams.Stream_Type; | ||||
|  | ||||
|    Filter : ZLib.Filter_Type; | ||||
|  | ||||
|    Time_Stamp : Ada.Calendar.Time; | ||||
|  | ||||
|    procedure Generate_File; | ||||
|    --  Generate file of spetsified size with some random data. | ||||
|    --  The random data is repeatable, for the good compression. | ||||
|  | ||||
|    procedure Compare_Streams | ||||
|      (Left, Right : in out Root_Stream_Type'Class); | ||||
|    --  The procedure compearing data in 2 streams. | ||||
|    --  It is for compare data before and after compression/decompression. | ||||
|  | ||||
|    procedure Compare_Files (Left, Right : String); | ||||
|    --  Compare files. Based on the Compare_Streams. | ||||
|  | ||||
|    procedure Copy_Streams | ||||
|      (Source, Target : in out Root_Stream_Type'Class; | ||||
|       Buffer_Size    : in     Stream_Element_Offset := 1024); | ||||
|    --  Copying data from one stream to another. It is for test stream | ||||
|    --  interface of the library. | ||||
|  | ||||
|    procedure Data_In | ||||
|      (Item : out Stream_Element_Array; | ||||
|       Last : out Stream_Element_Offset); | ||||
|    --  this procedure is for generic instantiation of | ||||
|    --  ZLib.Generic_Translate. | ||||
|    --  reading data from the File_In. | ||||
|  | ||||
|    procedure Data_Out (Item : in Stream_Element_Array); | ||||
|    --  this procedure is for generic instantiation of | ||||
|    --  ZLib.Generic_Translate. | ||||
|    --  writing data to the File_Out. | ||||
|  | ||||
|    procedure Stamp; | ||||
|    --  Store the timestamp to the local variable. | ||||
|  | ||||
|    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); | ||||
|    --  Print the time statistic with the message. | ||||
|  | ||||
|    procedure Translate is new ZLib.Generic_Translate | ||||
|                                 (Data_In  => Data_In, | ||||
|                                  Data_Out => Data_Out); | ||||
|    --  This procedure is moving data from File_In to File_Out | ||||
|    --  with compression or decompression, depend on initialization of | ||||
|    --  Filter parameter. | ||||
|  | ||||
|    ------------------- | ||||
|    -- Compare_Files -- | ||||
|    ------------------- | ||||
|  | ||||
|    procedure Compare_Files (Left, Right : String) is | ||||
|       Left_File, Right_File : File_Type; | ||||
|    begin | ||||
|       Open (Left_File, In_File, Left); | ||||
|       Open (Right_File, In_File, Right); | ||||
|       Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); | ||||
|       Close (Left_File); | ||||
|       Close (Right_File); | ||||
|    end Compare_Files; | ||||
|  | ||||
|    --------------------- | ||||
|    -- Compare_Streams -- | ||||
|    --------------------- | ||||
|  | ||||
|    procedure Compare_Streams | ||||
|      (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) | ||||
|    is | ||||
|       Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); | ||||
|       Left_Last, Right_Last : Stream_Element_Offset; | ||||
|    begin | ||||
|       loop | ||||
|          Read (Left, Left_Buffer, Left_Last); | ||||
|          Read (Right, Right_Buffer, Right_Last); | ||||
|  | ||||
|          if Left_Last /= Right_Last then | ||||
|             Ada.Text_IO.Put_Line ("Compare error :" | ||||
|               & Stream_Element_Offset'Image (Left_Last) | ||||
|               & " /= " | ||||
|               & Stream_Element_Offset'Image (Right_Last)); | ||||
|  | ||||
|             raise Constraint_Error; | ||||
|  | ||||
|          elsif Left_Buffer (0 .. Left_Last) | ||||
|                /= Right_Buffer (0 .. Right_Last) | ||||
|          then | ||||
|             Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); | ||||
|             raise Constraint_Error; | ||||
|  | ||||
|          end if; | ||||
|  | ||||
|          exit when Left_Last < Left_Buffer'Last; | ||||
|       end loop; | ||||
|    end Compare_Streams; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Copy_Streams -- | ||||
|    ------------------ | ||||
|  | ||||
|    procedure Copy_Streams | ||||
|      (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; | ||||
|       Buffer_Size    : in     Stream_Element_Offset := 1024) | ||||
|    is | ||||
|       Buffer : Stream_Element_Array (1 .. Buffer_Size); | ||||
|       Last   : Stream_Element_Offset; | ||||
|    begin | ||||
|       loop | ||||
|          Read  (Source, Buffer, Last); | ||||
|          Write (Target, Buffer (1 .. Last)); | ||||
|  | ||||
|          exit when Last < Buffer'Last; | ||||
|       end loop; | ||||
|    end Copy_Streams; | ||||
|  | ||||
|    ------------- | ||||
|    -- Data_In -- | ||||
|    ------------- | ||||
|  | ||||
|    procedure Data_In | ||||
|      (Item : out Stream_Element_Array; | ||||
|       Last : out Stream_Element_Offset) is | ||||
|    begin | ||||
|       Read (File_In, Item, Last); | ||||
|    end Data_In; | ||||
|  | ||||
|    -------------- | ||||
|    -- Data_Out -- | ||||
|    -------------- | ||||
|  | ||||
|    procedure Data_Out (Item : in Stream_Element_Array) is | ||||
|    begin | ||||
|       Write (File_Out, Item); | ||||
|    end Data_Out; | ||||
|  | ||||
|    ------------------- | ||||
|    -- Generate_File -- | ||||
|    ------------------- | ||||
|  | ||||
|    procedure Generate_File is | ||||
|       subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; | ||||
|  | ||||
|       package Random_Elements is | ||||
|          new Ada.Numerics.Discrete_Random (Visible_Symbols); | ||||
|  | ||||
|       Gen    : Random_Elements.Generator; | ||||
|       Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; | ||||
|  | ||||
|       Buffer_Count : constant Count := File_Size / Buffer'Length; | ||||
|       --  Number of same buffers in the packet. | ||||
|  | ||||
|       Density : constant Count := 30; --  from 0 to Buffer'Length - 2; | ||||
|  | ||||
|       procedure Fill_Buffer (J, D : in Count); | ||||
|       --  Change the part of the buffer. | ||||
|  | ||||
|       ----------------- | ||||
|       -- Fill_Buffer -- | ||||
|       ----------------- | ||||
|  | ||||
|       procedure Fill_Buffer (J, D : in Count) is | ||||
|       begin | ||||
|          for K in 0 .. D loop | ||||
|             Buffer | ||||
|               (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) | ||||
|              := Random_Elements.Random (Gen); | ||||
|  | ||||
|          end loop; | ||||
|       end Fill_Buffer; | ||||
|  | ||||
|    begin | ||||
|       Random_Elements.Reset (Gen, Init_Random); | ||||
|  | ||||
|       Create (File_In, Out_File, In_File_Name); | ||||
|  | ||||
|       Fill_Buffer (1, Buffer'Length - 2); | ||||
|  | ||||
|       for J in 1 .. Buffer_Count loop | ||||
|          Write (File_In, Buffer); | ||||
|  | ||||
|          Fill_Buffer (J, Density); | ||||
|       end loop; | ||||
|  | ||||
|       --  fill remain size. | ||||
|  | ||||
|       Write | ||||
|         (File_In, | ||||
|          Buffer | ||||
|            (1 .. Stream_Element_Offset | ||||
|                    (File_Size - Buffer'Length * Buffer_Count))); | ||||
|  | ||||
|       Flush (File_In); | ||||
|       Close (File_In); | ||||
|    end Generate_File; | ||||
|  | ||||
|    --------------------- | ||||
|    -- Print_Statistic -- | ||||
|    --------------------- | ||||
|  | ||||
|    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is | ||||
|       use Ada.Calendar; | ||||
|       use Ada.Text_IO; | ||||
|  | ||||
|       package Count_IO is new Integer_IO (ZLib.Count); | ||||
|  | ||||
|       Curr_Dur : Duration := Clock - Time_Stamp; | ||||
|    begin | ||||
|       Put (Msg); | ||||
|  | ||||
|       Set_Col (20); | ||||
|       Ada.Text_IO.Put ("size ="); | ||||
|  | ||||
|       Count_IO.Put | ||||
|         (Data_Size, | ||||
|          Width => Stream_IO.Count'Image (File_Size)'Length); | ||||
|  | ||||
|       Put_Line (" duration =" & Duration'Image (Curr_Dur)); | ||||
|    end Print_Statistic; | ||||
|  | ||||
|    ----------- | ||||
|    -- Stamp -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Stamp is | ||||
|    begin | ||||
|       Time_Stamp := Ada.Calendar.Clock; | ||||
|    end Stamp; | ||||
|  | ||||
| begin | ||||
|    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); | ||||
|  | ||||
|    loop | ||||
|       Generate_File; | ||||
|  | ||||
|       for Level in ZLib.Compression_Level'Range loop | ||||
|  | ||||
|          Ada.Text_IO.Put_Line ("Level =" | ||||
|             & ZLib.Compression_Level'Image (Level)); | ||||
|  | ||||
|          --  Test generic interface. | ||||
|          Open   (File_In, In_File, In_File_Name); | ||||
|          Create (File_Out, Out_File, Z_File_Name); | ||||
|  | ||||
|          Stamp; | ||||
|  | ||||
|          --  Deflate using generic instantiation. | ||||
|  | ||||
|          ZLib.Deflate_Init | ||||
|                (Filter   => Filter, | ||||
|                 Level    => Level, | ||||
|                 Strategy => Strategy, | ||||
|                 Header   => Header); | ||||
|  | ||||
|          Translate (Filter); | ||||
|          Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); | ||||
|          ZLib.Close (Filter); | ||||
|  | ||||
|          Close (File_In); | ||||
|          Close (File_Out); | ||||
|  | ||||
|          Open   (File_In, In_File, Z_File_Name); | ||||
|          Create (File_Out, Out_File, Out_File_Name); | ||||
|  | ||||
|          Stamp; | ||||
|  | ||||
|          --  Inflate using generic instantiation. | ||||
|  | ||||
|          ZLib.Inflate_Init (Filter, Header => Header); | ||||
|  | ||||
|          Translate (Filter); | ||||
|          Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); | ||||
|  | ||||
|          ZLib.Close (Filter); | ||||
|  | ||||
|          Close (File_In); | ||||
|          Close (File_Out); | ||||
|  | ||||
|          Compare_Files (In_File_Name, Out_File_Name); | ||||
|  | ||||
|          --  Test stream interface. | ||||
|  | ||||
|          --  Compress to the back stream. | ||||
|  | ||||
|          Open   (File_In, In_File, In_File_Name); | ||||
|          Create (File_Back, Out_File, Z_File_Name); | ||||
|  | ||||
|          Stamp; | ||||
|  | ||||
|          ZLib.Streams.Create | ||||
|            (Stream          => File_Z, | ||||
|             Mode            => ZLib.Streams.Out_Stream, | ||||
|             Back            => ZLib.Streams.Stream_Access | ||||
|                                  (Stream (File_Back)), | ||||
|             Back_Compressed => True, | ||||
|             Level           => Level, | ||||
|             Strategy        => Strategy, | ||||
|             Header          => Header); | ||||
|  | ||||
|          Copy_Streams | ||||
|            (Source => Stream (File_In).all, | ||||
|             Target => File_Z); | ||||
|  | ||||
|          --  Flushing internal buffers to the back stream. | ||||
|  | ||||
|          ZLib.Streams.Flush (File_Z, ZLib.Finish); | ||||
|  | ||||
|          Print_Statistic ("Write compress", | ||||
|                           ZLib.Streams.Write_Total_Out (File_Z)); | ||||
|  | ||||
|          ZLib.Streams.Close (File_Z); | ||||
|  | ||||
|          Close (File_In); | ||||
|          Close (File_Back); | ||||
|  | ||||
|          --  Compare reading from original file and from | ||||
|          --  decompression stream. | ||||
|  | ||||
|          Open (File_In,   In_File, In_File_Name); | ||||
|          Open (File_Back, In_File, Z_File_Name); | ||||
|  | ||||
|          ZLib.Streams.Create | ||||
|            (Stream          => File_Z, | ||||
|             Mode            => ZLib.Streams.In_Stream, | ||||
|             Back            => ZLib.Streams.Stream_Access | ||||
|                                  (Stream (File_Back)), | ||||
|             Back_Compressed => True, | ||||
|             Header          => Header); | ||||
|  | ||||
|          Stamp; | ||||
|          Compare_Streams (Stream (File_In).all, File_Z); | ||||
|  | ||||
|          Print_Statistic ("Read decompress", | ||||
|                           ZLib.Streams.Read_Total_Out (File_Z)); | ||||
|  | ||||
|          ZLib.Streams.Close (File_Z); | ||||
|          Close (File_In); | ||||
|          Close (File_Back); | ||||
|  | ||||
|          --  Compress by reading from compression stream. | ||||
|  | ||||
|          Open (File_Back, In_File, In_File_Name); | ||||
|          Create (File_Out, Out_File, Z_File_Name); | ||||
|  | ||||
|          ZLib.Streams.Create | ||||
|            (Stream          => File_Z, | ||||
|             Mode            => ZLib.Streams.In_Stream, | ||||
|             Back            => ZLib.Streams.Stream_Access | ||||
|                                  (Stream (File_Back)), | ||||
|             Back_Compressed => False, | ||||
|             Level           => Level, | ||||
|             Strategy        => Strategy, | ||||
|             Header          => Header); | ||||
|  | ||||
|          Stamp; | ||||
|          Copy_Streams | ||||
|            (Source => File_Z, | ||||
|             Target => Stream (File_Out).all); | ||||
|  | ||||
|          Print_Statistic ("Read compress", | ||||
|                           ZLib.Streams.Read_Total_Out (File_Z)); | ||||
|  | ||||
|          ZLib.Streams.Close (File_Z); | ||||
|  | ||||
|          Close (File_Out); | ||||
|          Close (File_Back); | ||||
|  | ||||
|          --  Decompress to decompression stream. | ||||
|  | ||||
|          Open   (File_In,   In_File, Z_File_Name); | ||||
|          Create (File_Back, Out_File, Out_File_Name); | ||||
|  | ||||
|          ZLib.Streams.Create | ||||
|            (Stream          => File_Z, | ||||
|             Mode            => ZLib.Streams.Out_Stream, | ||||
|             Back            => ZLib.Streams.Stream_Access | ||||
|                                  (Stream (File_Back)), | ||||
|             Back_Compressed => False, | ||||
|             Header          => Header); | ||||
|  | ||||
|          Stamp; | ||||
|  | ||||
|          Copy_Streams | ||||
|            (Source => Stream (File_In).all, | ||||
|             Target => File_Z); | ||||
|  | ||||
|          Print_Statistic ("Write decompress", | ||||
|                           ZLib.Streams.Write_Total_Out (File_Z)); | ||||
|  | ||||
|          ZLib.Streams.Close (File_Z); | ||||
|          Close (File_In); | ||||
|          Close (File_Back); | ||||
|  | ||||
|          Compare_Files (In_File_Name, Out_File_Name); | ||||
|       end loop; | ||||
|  | ||||
|       Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); | ||||
|  | ||||
|       exit when not Continuous; | ||||
|  | ||||
|       File_Size := File_Size + 1; | ||||
|    end loop; | ||||
| end Test; | ||||
							
								
								
									
										215
									
								
								contrib/ada/zlib-streams.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								contrib/ada/zlib-streams.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,215 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: zlib-streams.adb,v 1.9 2003/08/12 13:15:31 vagul Exp $ | ||||
|  | ||||
| with Ada.Unchecked_Deallocation; | ||||
|  | ||||
| package body ZLib.Streams is | ||||
|  | ||||
|    ----------- | ||||
|    -- Close -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Close (Stream : in out Stream_Type) is | ||||
|       procedure Free is new Ada.Unchecked_Deallocation | ||||
|          (Stream_Element_Array, Buffer_Access); | ||||
|    begin | ||||
|       if Stream.Mode = Out_Stream or Stream.Mode = Duplex then | ||||
|          --  We should flush the data written by the writer. | ||||
|  | ||||
|          Flush (Stream, Finish); | ||||
|  | ||||
|          Close (Stream.Writer); | ||||
|       end if; | ||||
|  | ||||
|       if Stream.Mode = In_Stream or Stream.Mode = Duplex then | ||||
|          Close (Stream.Reader); | ||||
|          Free (Stream.Buffer); | ||||
|       end if; | ||||
|    end Close; | ||||
|  | ||||
|    ------------ | ||||
|    -- Create -- | ||||
|    ------------ | ||||
|  | ||||
|    procedure Create | ||||
|      (Stream            :    out Stream_Type; | ||||
|       Mode              : in     Stream_Mode; | ||||
|       Back              : in     Stream_Access; | ||||
|       Back_Compressed   : in     Boolean; | ||||
|       Level             : in     Compression_Level := Default_Compression; | ||||
|       Strategy          : in     Strategy_Type     := Default_Strategy; | ||||
|       Header            : in     Header_Type       := Default; | ||||
|       Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset | ||||
|                                     := Default_Buffer_Size; | ||||
|       Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset | ||||
|                                     := Default_Buffer_Size) | ||||
|    is | ||||
|  | ||||
|       subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size); | ||||
|  | ||||
|       procedure Init_Filter | ||||
|          (Filter   : in out Filter_Type; | ||||
|           Compress : in     Boolean); | ||||
|  | ||||
|       ----------------- | ||||
|       -- Init_Filter -- | ||||
|       ----------------- | ||||
|  | ||||
|       procedure Init_Filter | ||||
|          (Filter   : in out Filter_Type; | ||||
|           Compress : in     Boolean) is | ||||
|       begin | ||||
|          if Compress then | ||||
|             Deflate_Init | ||||
|               (Filter, Level, Strategy, Header => Header); | ||||
|          else | ||||
|             Inflate_Init (Filter, Header => Header); | ||||
|          end if; | ||||
|       end Init_Filter; | ||||
|  | ||||
|    begin | ||||
|       Stream.Back := Back; | ||||
|       Stream.Mode := Mode; | ||||
|  | ||||
|       if Mode = Out_Stream or Mode = Duplex then | ||||
|          Init_Filter (Stream.Writer, Back_Compressed); | ||||
|          Stream.Buffer_Size := Write_Buffer_Size; | ||||
|       else | ||||
|          Stream.Buffer_Size := 0; | ||||
|       end if; | ||||
|  | ||||
|       if Mode = In_Stream or Mode = Duplex then | ||||
|          Init_Filter (Stream.Reader, not Back_Compressed); | ||||
|  | ||||
|          Stream.Buffer     := new Buffer_Subtype; | ||||
|          Stream.Rest_First := Stream.Buffer'Last + 1; | ||||
|       end if; | ||||
|    end Create; | ||||
|  | ||||
|    ----------- | ||||
|    -- Flush -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Flush | ||||
|      (Stream : in out Stream_Type; | ||||
|       Mode   : in     Flush_Mode := Sync_Flush) | ||||
|    is | ||||
|       Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size); | ||||
|       Last   : Stream_Element_Offset; | ||||
|    begin | ||||
|       loop | ||||
|          Flush (Stream.Writer, Buffer, Last, Mode); | ||||
|  | ||||
|          Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last)); | ||||
|  | ||||
|          exit when Last < Buffer'Last; | ||||
|       end loop; | ||||
|    end Flush; | ||||
|  | ||||
|    ---------- | ||||
|    -- Read -- | ||||
|    ---------- | ||||
|  | ||||
|    procedure Read | ||||
|      (Stream : in out Stream_Type; | ||||
|       Item   :    out Stream_Element_Array; | ||||
|       Last   :    out Stream_Element_Offset) | ||||
|    is | ||||
|  | ||||
|       procedure Read | ||||
|         (Item : out Stream_Element_Array; | ||||
|          Last : out Stream_Element_Offset); | ||||
|  | ||||
|       ---------- | ||||
|       -- Read -- | ||||
|       ---------- | ||||
|  | ||||
|       procedure Read | ||||
|         (Item : out Stream_Element_Array; | ||||
|          Last : out Stream_Element_Offset) is | ||||
|       begin | ||||
|          Ada.Streams.Read (Stream.Back.all, Item, Last); | ||||
|       end Read; | ||||
|  | ||||
|       procedure Read is new ZLib.Read | ||||
|          (Read       => Read, | ||||
|           Buffer     => Stream.Buffer.all, | ||||
|           Rest_First => Stream.Rest_First, | ||||
|           Rest_Last  => Stream.Rest_Last); | ||||
|  | ||||
|    begin | ||||
|       Read (Stream.Reader, Item, Last); | ||||
|    end Read; | ||||
|  | ||||
|    ------------------- | ||||
|    -- Read_Total_In -- | ||||
|    ------------------- | ||||
|  | ||||
|    function Read_Total_In (Stream : in Stream_Type) return Count is | ||||
|    begin | ||||
|       return Total_In (Stream.Reader); | ||||
|    end Read_Total_In; | ||||
|  | ||||
|    -------------------- | ||||
|    -- Read_Total_Out -- | ||||
|    -------------------- | ||||
|  | ||||
|    function Read_Total_Out (Stream : in Stream_Type) return Count is | ||||
|    begin | ||||
|       return Total_Out (Stream.Reader); | ||||
|    end Read_Total_Out; | ||||
|  | ||||
|    ----------- | ||||
|    -- Write -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Write | ||||
|      (Stream : in out Stream_Type; | ||||
|       Item   : in     Stream_Element_Array) | ||||
|    is | ||||
|  | ||||
|       procedure Write (Item : in Stream_Element_Array); | ||||
|  | ||||
|       ----------- | ||||
|       -- Write -- | ||||
|       ----------- | ||||
|  | ||||
|       procedure Write (Item : in Stream_Element_Array) is | ||||
|       begin | ||||
|          Ada.Streams.Write (Stream.Back.all, Item); | ||||
|       end Write; | ||||
|  | ||||
|       procedure Write is new ZLib.Write | ||||
|          (Write       => Write, | ||||
|           Buffer_Size => Stream.Buffer_Size); | ||||
|  | ||||
|    begin | ||||
|       Write (Stream.Writer, Item, No_Flush); | ||||
|    end Write; | ||||
|  | ||||
|    -------------------- | ||||
|    -- Write_Total_In -- | ||||
|    -------------------- | ||||
|  | ||||
|    function Write_Total_In (Stream : in Stream_Type) return Count is | ||||
|    begin | ||||
|       return Total_In (Stream.Writer); | ||||
|    end Write_Total_In; | ||||
|  | ||||
|    --------------------- | ||||
|    -- Write_Total_Out -- | ||||
|    --------------------- | ||||
|  | ||||
|    function Write_Total_Out (Stream : in Stream_Type) return Count is | ||||
|    begin | ||||
|       return Total_Out (Stream.Writer); | ||||
|    end Write_Total_Out; | ||||
|  | ||||
| end ZLib.Streams; | ||||
							
								
								
									
										112
									
								
								contrib/ada/zlib-streams.ads
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								contrib/ada/zlib-streams.ads
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: zlib-streams.ads,v 1.11 2003/08/12 13:15:31 vagul Exp $ | ||||
|  | ||||
| package ZLib.Streams is | ||||
|  | ||||
|    type Stream_Mode is (In_Stream, Out_Stream, Duplex); | ||||
|  | ||||
|    type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class; | ||||
|  | ||||
|    type Stream_Type is | ||||
|       new Ada.Streams.Root_Stream_Type with private; | ||||
|  | ||||
|    procedure Read | ||||
|      (Stream : in out Stream_Type; | ||||
|       Item   :    out Ada.Streams.Stream_Element_Array; | ||||
|       Last   :    out Ada.Streams.Stream_Element_Offset); | ||||
|  | ||||
|    procedure Write | ||||
|      (Stream : in out Stream_Type; | ||||
|       Item   : in     Ada.Streams.Stream_Element_Array); | ||||
|  | ||||
|    procedure Flush | ||||
|      (Stream : in out Stream_Type; | ||||
|       Mode   : in     Flush_Mode := Sync_Flush); | ||||
|    --  Flush the written data to the back stream, | ||||
|    --  all data placed to the compressor is flushing to the Back stream. | ||||
|    --  Should not be used untill necessary, becouse it is decreasing | ||||
|    --  compression. | ||||
|  | ||||
|    function Read_Total_In (Stream : in Stream_Type) return Count; | ||||
|    pragma Inline (Read_Total_In); | ||||
|    --  Return total number of bytes read from back stream so far. | ||||
|  | ||||
|    function Read_Total_Out (Stream : in Stream_Type) return Count; | ||||
|    pragma Inline (Read_Total_Out); | ||||
|    --  Return total number of bytes read so far. | ||||
|  | ||||
|    function Write_Total_In (Stream : in Stream_Type) return Count; | ||||
|    pragma Inline (Write_Total_In); | ||||
|    --  Return total number of bytes written so far. | ||||
|  | ||||
|    function Write_Total_Out (Stream : in Stream_Type) return Count; | ||||
|    pragma Inline (Write_Total_Out); | ||||
|    --  Return total number of bytes written to the back stream. | ||||
|  | ||||
|    procedure Create | ||||
|      (Stream            :    out Stream_Type; | ||||
|       Mode              : in     Stream_Mode; | ||||
|       Back              : in     Stream_Access; | ||||
|       Back_Compressed   : in     Boolean; | ||||
|       Level             : in     Compression_Level := Default_Compression; | ||||
|       Strategy          : in     Strategy_Type     := Default_Strategy; | ||||
|       Header            : in     Header_Type       := Default; | ||||
|       Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset | ||||
|                                     := Default_Buffer_Size; | ||||
|       Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset | ||||
|                                     := Default_Buffer_Size); | ||||
|    --  Create the Comression/Decompression stream. | ||||
|    --  If mode is In_Stream then Write operation is disabled. | ||||
|    --  If mode is Out_Stream then Read operation is disabled. | ||||
|  | ||||
|    --  If Back_Compressed is true then | ||||
|    --  Data written to the Stream is compressing to the Back stream | ||||
|    --  and data read from the Stream is decompressed data from the Back stream. | ||||
|  | ||||
|    --  If Back_Compressed is false then | ||||
|    --  Data written to the Stream is decompressing to the Back stream | ||||
|    --  and data read from the Stream is compressed data from the Back stream. | ||||
|  | ||||
|    --  !!! When the Need_Header is False ZLib-Ada is using undocumented | ||||
|    --  ZLib 1.1.4 functionality to do not create/wait for ZLib headers. | ||||
|  | ||||
|    procedure Close (Stream : in out Stream_Type); | ||||
|  | ||||
| private | ||||
|  | ||||
|    use Ada.Streams; | ||||
|  | ||||
|    type Buffer_Access is access all Stream_Element_Array; | ||||
|  | ||||
|    type Stream_Type | ||||
|      is new Root_Stream_Type with | ||||
|    record | ||||
|       Mode       : Stream_Mode; | ||||
|  | ||||
|       Buffer     : Buffer_Access; | ||||
|       Rest_First : Stream_Element_Offset; | ||||
|       Rest_Last  : Stream_Element_Offset; | ||||
|       --  Buffer for Read operation. | ||||
|       --  We need to have this buffer in the record | ||||
|       --  becouse not all read data from back stream | ||||
|       --  could be processed during the read operation. | ||||
|  | ||||
|       Buffer_Size : Stream_Element_Offset; | ||||
|       --  Buffer size for write operation. | ||||
|       --  We do not need to have this buffer | ||||
|       --  in the record becouse all data could be | ||||
|       --  processed in the write operation. | ||||
|  | ||||
|       Back       : Stream_Access; | ||||
|       Reader     : Filter_Type; | ||||
|       Writer     : Filter_Type; | ||||
|    end record; | ||||
|  | ||||
| end ZLib.Streams; | ||||
							
								
								
									
										185
									
								
								contrib/ada/zlib-thin.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								contrib/ada/zlib-thin.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: zlib-thin.adb,v 1.6 2003/01/21 15:26:37 vagul Exp $ | ||||
|  | ||||
| package body ZLib.Thin is | ||||
|  | ||||
|    ZLIB_VERSION : constant Chars_Ptr := | ||||
|       Interfaces.C.Strings.New_String ("1.1.4"); | ||||
|  | ||||
|    Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit; | ||||
|  | ||||
|    -------------- | ||||
|    -- Avail_In -- | ||||
|    -------------- | ||||
|  | ||||
|    function Avail_In (Strm : in Z_Stream) return UInt is | ||||
|    begin | ||||
|       return Strm.Avail_In; | ||||
|    end Avail_In; | ||||
|  | ||||
|    --------------- | ||||
|    -- Avail_Out -- | ||||
|    --------------- | ||||
|  | ||||
|    function Avail_Out (Strm : in Z_Stream) return UInt is | ||||
|    begin | ||||
|       return Strm.Avail_Out; | ||||
|    end Avail_Out; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Deflate_Init -- | ||||
|    ------------------ | ||||
|  | ||||
|    function Deflate_Init | ||||
|      (strm  : in Z_Streamp; | ||||
|       level : in Int := Z_DEFAULT_COMPRESSION) | ||||
|       return  Int is | ||||
|    begin | ||||
|       return deflateInit (strm, level, ZLIB_VERSION, Z_Stream_Size); | ||||
|    end Deflate_Init; | ||||
|  | ||||
|    function Deflate_Init | ||||
|      (strm       : Z_Streamp; | ||||
|       level      : Int; | ||||
|       method     : Int; | ||||
|       windowBits : Int; | ||||
|       memLevel   : Int; | ||||
|       strategy   : Int) | ||||
|       return       Int is | ||||
|    begin | ||||
|       return deflateInit2 | ||||
|                (strm, | ||||
|                 level, | ||||
|                 method, | ||||
|                 windowBits, | ||||
|                 memLevel, | ||||
|                 strategy, | ||||
|                 ZLIB_VERSION, | ||||
|                 Z_Stream_Size); | ||||
|    end Deflate_Init; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Inflate_Init -- | ||||
|    ------------------ | ||||
|  | ||||
|    function Inflate_Init (strm : Z_Streamp) return Int is | ||||
|    begin | ||||
|       return inflateInit (strm, ZLIB_VERSION, Z_Stream_Size); | ||||
|    end Inflate_Init; | ||||
|  | ||||
|    function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is | ||||
|    begin | ||||
|       return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size); | ||||
|    end Inflate_Init; | ||||
|  | ||||
|    function Last_Error_Message (Strm : in Z_Stream) return String is | ||||
|       use Interfaces.C.Strings; | ||||
|    begin | ||||
|       if Strm.msg = Null_Ptr then | ||||
|          return ""; | ||||
|       else | ||||
|          return Value (Strm.msg); | ||||
|       end if; | ||||
|    end Last_Error_Message; | ||||
|  | ||||
|    ------------- | ||||
|    -- Need_In -- | ||||
|    ------------- | ||||
|  | ||||
|    function Need_In (strm : Z_Stream) return Boolean is | ||||
|    begin | ||||
|       return strm.Avail_In = 0; | ||||
|    end Need_In; | ||||
|  | ||||
|    -------------- | ||||
|    -- Need_Out -- | ||||
|    -------------- | ||||
|  | ||||
|    function Need_Out (strm : Z_Stream) return Boolean is | ||||
|    begin | ||||
|       return strm.Avail_Out = 0; | ||||
|    end Need_Out; | ||||
|  | ||||
|    ------------ | ||||
|    -- Set_In -- | ||||
|    ------------ | ||||
|  | ||||
|    procedure Set_In | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Byte_Access; | ||||
|       Size   : in UInt) is | ||||
|    begin | ||||
|       Strm.Next_In  := Buffer; | ||||
|       Strm.Avail_In := Size; | ||||
|    end Set_In; | ||||
|  | ||||
|    procedure Set_In | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Voidp; | ||||
|       Size   : in UInt) is | ||||
|    begin | ||||
|       Set_In (Strm, Bytes.To_Pointer (Buffer), Size); | ||||
|    end Set_In; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Set_Mem_Func -- | ||||
|    ------------------ | ||||
|  | ||||
|    procedure Set_Mem_Func | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Opaque : in Voidp; | ||||
|       Alloc  : in alloc_func; | ||||
|       Free   : in free_func) is | ||||
|    begin | ||||
|       Strm.opaque := Opaque; | ||||
|       Strm.zalloc := Alloc; | ||||
|       Strm.zfree  := Free; | ||||
|    end Set_Mem_Func; | ||||
|  | ||||
|    ------------- | ||||
|    -- Set_Out -- | ||||
|    ------------- | ||||
|  | ||||
|    procedure Set_Out | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Byte_Access; | ||||
|       Size   : in UInt) is | ||||
|    begin | ||||
|       Strm.Next_Out  := Buffer; | ||||
|       Strm.Avail_Out := Size; | ||||
|    end Set_Out; | ||||
|  | ||||
|    procedure Set_Out | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Voidp; | ||||
|       Size   : in UInt) is | ||||
|    begin | ||||
|       Set_Out (Strm, Bytes.To_Pointer (Buffer), Size); | ||||
|    end Set_Out; | ||||
|  | ||||
|    -------------- | ||||
|    -- Total_In -- | ||||
|    -------------- | ||||
|  | ||||
|    function Total_In (Strm : in Z_Stream) return ULong is | ||||
|    begin | ||||
|       return Strm.Total_In; | ||||
|    end Total_In; | ||||
|  | ||||
|    --------------- | ||||
|    -- Total_Out -- | ||||
|    --------------- | ||||
|  | ||||
|    function Total_Out (Strm : in Z_Stream) return ULong is | ||||
|    begin | ||||
|       return Strm.Total_Out; | ||||
|    end Total_Out; | ||||
|  | ||||
| end ZLib.Thin; | ||||
							
								
								
									
										478
									
								
								contrib/ada/zlib-thin.ads
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										478
									
								
								contrib/ada/zlib-thin.ads
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,478 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: zlib-thin.ads,v 1.8 2003/08/12 13:16:51 vagul Exp $ | ||||
|  | ||||
| with Interfaces.C.Strings; | ||||
| with System.Address_To_Access_Conversions; | ||||
|  | ||||
| private package ZLib.Thin is | ||||
|  | ||||
|    --  From zconf.h | ||||
|  | ||||
|    MAX_MEM_LEVEL : constant := 9;         --  zconf.h:105 | ||||
|                                           --  zconf.h:105 | ||||
|    MAX_WBITS : constant := 15;      --  zconf.h:115 | ||||
|                                     --  32K LZ77 window | ||||
|                                     --  zconf.h:115 | ||||
|    SEEK_SET : constant := 8#0000#;  --  zconf.h:244 | ||||
|                                     --  Seek from beginning of file. | ||||
|                                     --  zconf.h:244 | ||||
|    SEEK_CUR : constant := 1;        --  zconf.h:245 | ||||
|                                     --  Seek from current position. | ||||
|                                     --  zconf.h:245 | ||||
|    SEEK_END : constant := 2;        --  zconf.h:246 | ||||
|                                     --  Set file pointer to EOF plus "offset" | ||||
|                                     --  zconf.h:246 | ||||
|  | ||||
|    type Byte is new Interfaces.C.unsigned_char; --  8 bits | ||||
|                                                 --  zconf.h:214 | ||||
|    type UInt is new Interfaces.C.unsigned;      --  16 bits or more | ||||
|                                                 --  zconf.h:216 | ||||
|    type Int is new Interfaces.C.int; | ||||
|  | ||||
|    type ULong is new Interfaces.C.unsigned;     --  32 bits or more | ||||
|                                                 --  zconf.h:217 | ||||
|    subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr; | ||||
|  | ||||
|    type ULong_Access is access ULong; | ||||
|    type Int_Access is access Int; | ||||
|    subtype Voidp is System.Address;            --  zconf.h:232 | ||||
|  | ||||
|    package Bytes is new System.Address_To_Access_Conversions (Byte); | ||||
|  | ||||
|    subtype Byte_Access is Bytes.Object_Pointer; | ||||
|  | ||||
|    --  end from zconf | ||||
|  | ||||
|    Z_NO_FLUSH : constant := 8#0000#;   --  zlib.h:125 | ||||
|                                        --  zlib.h:125 | ||||
|    Z_PARTIAL_FLUSH : constant := 1;       --  zlib.h:126 | ||||
|                                           --  will be removed, use | ||||
|                                           --  Z_SYNC_FLUSH instead | ||||
|                                           --  zlib.h:126 | ||||
|    Z_SYNC_FLUSH : constant := 2;       --  zlib.h:127 | ||||
|                                        --  zlib.h:127 | ||||
|    Z_FULL_FLUSH : constant := 3;       --  zlib.h:128 | ||||
|                                        --  zlib.h:128 | ||||
|    Z_FINISH : constant := 4;        --  zlib.h:129 | ||||
|                                     --  zlib.h:129 | ||||
|    Z_OK : constant := 8#0000#;   --  zlib.h:132 | ||||
|                                  --  zlib.h:132 | ||||
|    Z_STREAM_END : constant := 1;       --  zlib.h:133 | ||||
|                                        --  zlib.h:133 | ||||
|    Z_NEED_DICT : constant := 2;        --  zlib.h:134 | ||||
|                                        --  zlib.h:134 | ||||
|    Z_ERRNO : constant := -1;        --  zlib.h:135 | ||||
|                                     --  zlib.h:135 | ||||
|    Z_STREAM_ERROR : constant := -2;       --  zlib.h:136 | ||||
|                                           --  zlib.h:136 | ||||
|    Z_DATA_ERROR : constant := -3;      --  zlib.h:137 | ||||
|                                        --  zlib.h:137 | ||||
|    Z_MEM_ERROR : constant := -4;       --  zlib.h:138 | ||||
|                                        --  zlib.h:138 | ||||
|    Z_BUF_ERROR : constant := -5;       --  zlib.h:139 | ||||
|                                        --  zlib.h:139 | ||||
|    Z_VERSION_ERROR : constant := -6;      --  zlib.h:140 | ||||
|                                           --  zlib.h:140 | ||||
|    Z_NO_COMPRESSION : constant := 8#0000#;   --  zlib.h:145 | ||||
|                                              --  zlib.h:145 | ||||
|    Z_BEST_SPEED : constant := 1;       --  zlib.h:146 | ||||
|                                        --  zlib.h:146 | ||||
|    Z_BEST_COMPRESSION : constant := 9;       --  zlib.h:147 | ||||
|                                              --  zlib.h:147 | ||||
|    Z_DEFAULT_COMPRESSION : constant := -1;      --  zlib.h:148 | ||||
|                                                 --  zlib.h:148 | ||||
|    Z_FILTERED : constant := 1;      --  zlib.h:151 | ||||
|                                     --  zlib.h:151 | ||||
|    Z_HUFFMAN_ONLY : constant := 2;        --  zlib.h:152 | ||||
|                                           --  zlib.h:152 | ||||
|    Z_DEFAULT_STRATEGY : constant := 8#0000#; --  zlib.h:153 | ||||
|                                              --  zlib.h:153 | ||||
|    Z_BINARY : constant := 8#0000#;  --  zlib.h:156 | ||||
|                                     --  zlib.h:156 | ||||
|    Z_ASCII : constant := 1;      --  zlib.h:157 | ||||
|                                  --  zlib.h:157 | ||||
|    Z_UNKNOWN : constant := 2;       --  zlib.h:158 | ||||
|                                     --  zlib.h:158 | ||||
|    Z_DEFLATED : constant := 8;      --  zlib.h:161 | ||||
|                                     --  zlib.h:161 | ||||
|    Z_NULL : constant := 8#0000#; --  zlib.h:164 | ||||
|                                  --  for initializing zalloc, zfree, opaque | ||||
|                                  --  zlib.h:164 | ||||
|    type gzFile is new Voidp;                  --  zlib.h:646 | ||||
|  | ||||
|    type Z_Stream is private; | ||||
|  | ||||
|    type Z_Streamp is access all Z_Stream;     --  zlib.h:89 | ||||
|  | ||||
|    type alloc_func is access function | ||||
|      (Opaque : Voidp; | ||||
|       Items  : UInt; | ||||
|       Size   : UInt) | ||||
|       return Voidp; --  zlib.h:63 | ||||
|  | ||||
|    type free_func is access procedure (opaque : Voidp; address : Voidp); | ||||
|  | ||||
|    function zlibVersion return Chars_Ptr; | ||||
|  | ||||
|    function Deflate (strm : Z_Streamp; flush : Int) return Int; | ||||
|  | ||||
|    function DeflateEnd (strm : Z_Streamp) return Int; | ||||
|  | ||||
|    function Inflate (strm : Z_Streamp; flush : Int) return Int; | ||||
|  | ||||
|    function InflateEnd (strm : Z_Streamp) return Int; | ||||
|  | ||||
|    function deflateSetDictionary | ||||
|      (strm       : Z_Streamp; | ||||
|       dictionary : Byte_Access; | ||||
|       dictLength : UInt) | ||||
|       return       Int; | ||||
|  | ||||
|    function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int; | ||||
|    --  zlib.h:478 | ||||
|  | ||||
|    function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495 | ||||
|  | ||||
|    function deflateParams | ||||
|      (strm     : Z_Streamp; | ||||
|       level    : Int; | ||||
|       strategy : Int) | ||||
|       return     Int;       -- zlib.h:506 | ||||
|  | ||||
|    function inflateSetDictionary | ||||
|      (strm       : Z_Streamp; | ||||
|       dictionary : Byte_Access; | ||||
|       dictLength : UInt) | ||||
|       return       Int; --  zlib.h:548 | ||||
|  | ||||
|    function inflateSync (strm : Z_Streamp) return Int;  --  zlib.h:565 | ||||
|  | ||||
|    function inflateReset (strm : Z_Streamp) return Int; --  zlib.h:580 | ||||
|  | ||||
|    function compress | ||||
|      (dest      : Byte_Access; | ||||
|       destLen   : ULong_Access; | ||||
|       source    : Byte_Access; | ||||
|       sourceLen : ULong) | ||||
|       return      Int;           -- zlib.h:601 | ||||
|  | ||||
|    function compress2 | ||||
|      (dest      : Byte_Access; | ||||
|       destLen   : ULong_Access; | ||||
|       source    : Byte_Access; | ||||
|       sourceLen : ULong; | ||||
|       level     : Int) | ||||
|       return      Int;          -- zlib.h:615 | ||||
|  | ||||
|    function uncompress | ||||
|      (dest      : Byte_Access; | ||||
|       destLen   : ULong_Access; | ||||
|       source    : Byte_Access; | ||||
|       sourceLen : ULong) | ||||
|       return      Int; | ||||
|  | ||||
|    function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile; | ||||
|  | ||||
|    function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile; | ||||
|  | ||||
|    function gzsetparams | ||||
|      (file     : gzFile; | ||||
|       level    : Int; | ||||
|       strategy : Int) | ||||
|       return     Int; | ||||
|  | ||||
|    function gzread | ||||
|      (file : gzFile; | ||||
|       buf  : Voidp; | ||||
|       len  : UInt) | ||||
|       return Int; | ||||
|  | ||||
|    function gzwrite | ||||
|      (file : in gzFile; | ||||
|       buf  : in Voidp; | ||||
|       len  : in UInt) | ||||
|       return Int; | ||||
|  | ||||
|    function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int; | ||||
|  | ||||
|    function gzputs (file : in gzFile; s : in Chars_Ptr) return Int; | ||||
|  | ||||
|    function gzgets | ||||
|      (file : gzFile; | ||||
|       buf  : Chars_Ptr; | ||||
|       len  : Int) | ||||
|       return Chars_Ptr; | ||||
|  | ||||
|    function gzputc (file : gzFile; char : Int) return Int; | ||||
|  | ||||
|    function gzgetc (file : gzFile) return Int; | ||||
|  | ||||
|    function gzflush (file : gzFile; flush : Int) return Int; | ||||
|  | ||||
|    function gzseek | ||||
|      (file   : gzFile; | ||||
|       offset : Int; | ||||
|       whence : Int) | ||||
|       return   Int; | ||||
|  | ||||
|    function gzrewind (file : gzFile) return Int; | ||||
|  | ||||
|    function gztell (file : gzFile) return Int; | ||||
|  | ||||
|    function gzeof (file : gzFile) return Int; | ||||
|  | ||||
|    function gzclose (file : gzFile) return Int; | ||||
|  | ||||
|    function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr; | ||||
|  | ||||
|    function adler32 | ||||
|      (adler : ULong; | ||||
|       buf   : Byte_Access; | ||||
|       len   : UInt) | ||||
|       return  ULong; | ||||
|  | ||||
|    function crc32 | ||||
|      (crc  : ULong; | ||||
|       buf  : Byte_Access; | ||||
|       len  : UInt) | ||||
|       return ULong; | ||||
|  | ||||
|    function deflateInit | ||||
|      (strm        : Z_Streamp; | ||||
|       level       : Int; | ||||
|       version     : Chars_Ptr; | ||||
|       stream_size : Int) | ||||
|       return        Int; | ||||
|  | ||||
|    function Deflate_Init | ||||
|      (strm  : in Z_Streamp; | ||||
|       level : in Int := Z_DEFAULT_COMPRESSION) | ||||
|       return  Int; | ||||
|    pragma Inline (Deflate_Init); | ||||
|  | ||||
|    function deflateInit2 | ||||
|      (strm        : Z_Streamp; | ||||
|       level       : Int; | ||||
|       method      : Int; | ||||
|       windowBits  : Int; | ||||
|       memLevel    : Int; | ||||
|       strategy    : Int; | ||||
|       version     : Chars_Ptr; | ||||
|       stream_size : Int) | ||||
|       return        Int; | ||||
|  | ||||
|    function Deflate_Init | ||||
|      (strm       : Z_Streamp; | ||||
|       level      : Int; | ||||
|       method     : Int; | ||||
|       windowBits : Int; | ||||
|       memLevel   : Int; | ||||
|       strategy   : Int) | ||||
|       return       Int; | ||||
|    pragma Inline (Deflate_Init); | ||||
|  | ||||
|    function inflateInit | ||||
|      (strm        : Z_Streamp; | ||||
|       version     : Chars_Ptr; | ||||
|       stream_size : Int) | ||||
|       return        Int; | ||||
|  | ||||
|    function Inflate_Init (strm : Z_Streamp) return Int; | ||||
|    pragma Inline (Inflate_Init); | ||||
|  | ||||
|    function inflateInit2 | ||||
|      (strm        : in Z_Streamp; | ||||
|       windowBits  : in Int; | ||||
|       version     : in Chars_Ptr; | ||||
|       stream_size : in Int) | ||||
|       return      Int; | ||||
|  | ||||
|    function inflateBackInit | ||||
|      (strm        : in Z_Streamp; | ||||
|       windowBits  : in Int; | ||||
|       window      : in Byte_Access; | ||||
|       version     : in Chars_Ptr; | ||||
|       stream_size : in Int) | ||||
|       return      Int; | ||||
|    --  Size of window have to be 2**windowBits. | ||||
|  | ||||
|    function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int; | ||||
|    pragma Inline (Inflate_Init); | ||||
|  | ||||
|    function zError (err : Int) return Chars_Ptr; | ||||
|  | ||||
|    function inflateSyncPoint (z : Z_Streamp) return Int; | ||||
|  | ||||
|    function get_crc_table return ULong_Access; | ||||
|  | ||||
|    --  Interface to the available fields of the z_stream structure. | ||||
|    --  The application must update next_in and avail_in when avail_in has | ||||
|    --  dropped to zero. It must update next_out and avail_out when avail_out | ||||
|    --  has dropped to zero. The application must initialize zalloc, zfree and | ||||
|    --  opaque before calling the init function. | ||||
|  | ||||
|    function Need_In (strm : in Z_Stream) return Boolean; | ||||
|    --  return true when we do not need to setup Next_In and Avail_In fields. | ||||
|    pragma Inline (Need_In); | ||||
|  | ||||
|    function Need_Out (strm : in Z_Stream) return Boolean; | ||||
|    --  return true when we do not need to setup Next_Out and Avail_Out field. | ||||
|    pragma Inline (Need_Out); | ||||
|  | ||||
|    procedure Set_In | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Byte_Access; | ||||
|       Size   : in UInt); | ||||
|    pragma Inline (Set_In); | ||||
|  | ||||
|    procedure Set_In | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Voidp; | ||||
|       Size   : in UInt); | ||||
|    pragma Inline (Set_In); | ||||
|  | ||||
|    procedure Set_Out | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Byte_Access; | ||||
|       Size   : in UInt); | ||||
|    pragma Inline (Set_Out); | ||||
|  | ||||
|    procedure Set_Out | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Buffer : in Voidp; | ||||
|       Size   : in UInt); | ||||
|    pragma Inline (Set_Out); | ||||
|  | ||||
|    procedure Set_Mem_Func | ||||
|      (Strm   : in out Z_Stream; | ||||
|       Opaque : in Voidp; | ||||
|       Alloc  : in alloc_func; | ||||
|       Free   : in free_func); | ||||
|    pragma Inline (Set_Mem_Func); | ||||
|  | ||||
|    function Last_Error_Message (Strm : in Z_Stream) return String; | ||||
|    pragma Inline (Last_Error_Message); | ||||
|  | ||||
|    function Avail_Out (Strm : in Z_Stream) return UInt; | ||||
|    pragma Inline (Avail_Out); | ||||
|  | ||||
|    function Avail_In (Strm : in Z_Stream) return UInt; | ||||
|    pragma Inline (Avail_In); | ||||
|  | ||||
|    function Total_In (Strm : in Z_Stream) return ULong; | ||||
|    pragma Inline (Total_In); | ||||
|  | ||||
|    function Total_Out (Strm : in Z_Stream) return ULong; | ||||
|    pragma Inline (Total_Out); | ||||
|  | ||||
|    function inflateCopy | ||||
|      (dest   : in Z_Streamp; | ||||
|       Source : in Z_Streamp) | ||||
|       return Int; | ||||
|  | ||||
|    function compressBound (Source_Len : in ULong) return ULong; | ||||
|  | ||||
|    function deflateBound | ||||
|      (Strm       : in Z_Streamp; | ||||
|       Source_Len : in ULong) | ||||
|       return     ULong; | ||||
|  | ||||
|    function gzungetc (C : in Int; File : in  gzFile) return Int; | ||||
|  | ||||
|    function zlibCompileFlags return ULong; | ||||
|  | ||||
| private | ||||
|  | ||||
|    type Z_Stream is record            -- zlib.h:68 | ||||
|       Next_In   : Byte_Access;        -- next input byte | ||||
|       Avail_In  : UInt       := 0;    -- number of bytes available at next_in | ||||
|       Total_In  : ULong      := 0;    -- total nb of input bytes read so far | ||||
|       Next_Out  : Byte_Access;        -- next output byte should be put there | ||||
|       Avail_Out : UInt       := 0;    -- remaining free space at next_out | ||||
|       Total_Out : ULong      := 0;    -- total nb of bytes output so far | ||||
|       msg       : Chars_Ptr;          -- last error message, NULL if no error | ||||
|       state     : Voidp;              -- not visible by applications | ||||
|       zalloc    : alloc_func := null; -- used to allocate the internal state | ||||
|       zfree     : free_func  := null; -- used to free the internal state | ||||
|       opaque    : Voidp;              -- private data object passed to | ||||
|                                       --  zalloc and zfree | ||||
|       data_type : Int;                -- best guess about the data type: | ||||
|                                       --  ascii or binary | ||||
|       adler     : ULong;              -- adler32 value of the uncompressed | ||||
|                                       --  data | ||||
|       reserved  : ULong;              -- reserved for future use | ||||
|    end record; | ||||
|  | ||||
|    pragma Convention (C, Z_Stream); | ||||
|  | ||||
|    pragma Import (C, zlibVersion, "zlibVersion"); | ||||
|    pragma Import (C, Deflate, "deflate"); | ||||
|    pragma Import (C, DeflateEnd, "deflateEnd"); | ||||
|    pragma Import (C, Inflate, "inflate"); | ||||
|    pragma Import (C, InflateEnd, "inflateEnd"); | ||||
|    pragma Import (C, deflateSetDictionary, "deflateSetDictionary"); | ||||
|    pragma Import (C, deflateCopy, "deflateCopy"); | ||||
|    pragma Import (C, deflateReset, "deflateReset"); | ||||
|    pragma Import (C, deflateParams, "deflateParams"); | ||||
|    pragma Import (C, inflateSetDictionary, "inflateSetDictionary"); | ||||
|    pragma Import (C, inflateSync, "inflateSync"); | ||||
|    pragma Import (C, inflateReset, "inflateReset"); | ||||
|    pragma Import (C, compress, "compress"); | ||||
|    pragma Import (C, compress2, "compress2"); | ||||
|    pragma Import (C, uncompress, "uncompress"); | ||||
|    pragma Import (C, gzopen, "gzopen"); | ||||
|    pragma Import (C, gzdopen, "gzdopen"); | ||||
|    pragma Import (C, gzsetparams, "gzsetparams"); | ||||
|    pragma Import (C, gzread, "gzread"); | ||||
|    pragma Import (C, gzwrite, "gzwrite"); | ||||
|    pragma Import (C, gzprintf, "gzprintf"); | ||||
|    pragma Import (C, gzputs, "gzputs"); | ||||
|    pragma Import (C, gzgets, "gzgets"); | ||||
|    pragma Import (C, gzputc, "gzputc"); | ||||
|    pragma Import (C, gzgetc, "gzgetc"); | ||||
|    pragma Import (C, gzflush, "gzflush"); | ||||
|    pragma Import (C, gzseek, "gzseek"); | ||||
|    pragma Import (C, gzrewind, "gzrewind"); | ||||
|    pragma Import (C, gztell, "gztell"); | ||||
|    pragma Import (C, gzeof, "gzeof"); | ||||
|    pragma Import (C, gzclose, "gzclose"); | ||||
|    pragma Import (C, gzerror, "gzerror"); | ||||
|    pragma Import (C, adler32, "adler32"); | ||||
|    pragma Import (C, crc32, "crc32"); | ||||
|    pragma Import (C, deflateInit, "deflateInit_"); | ||||
|    pragma Import (C, inflateInit, "inflateInit_"); | ||||
|    pragma Import (C, deflateInit2, "deflateInit2_"); | ||||
|    pragma Import (C, inflateInit2, "inflateInit2_"); | ||||
|    pragma Import (C, zError, "zError"); | ||||
|    pragma Import (C, inflateSyncPoint, "inflateSyncPoint"); | ||||
|    pragma Import (C, get_crc_table, "get_crc_table"); | ||||
|  | ||||
|    --  since zlib 1.2.0: | ||||
|  | ||||
|    pragma Import (C, inflateCopy, "inflateCopy"); | ||||
|    pragma Import (C, compressBound, "compressBound"); | ||||
|    pragma Import (C, deflateBound, "deflateBound"); | ||||
|    pragma Import (C, gzungetc, "gzungetc"); | ||||
|    pragma Import (C, zlibCompileFlags, "zlibCompileFlags"); | ||||
|  | ||||
|    pragma Import (C, inflateBackInit, "inflateBackInit_"); | ||||
|  | ||||
|    --  I stopped binding the inflateBack routines, becouse realize that | ||||
|    --  it does not support zlib and gzip headers for now, and have no | ||||
|    --  symmetric deflateBack routines. | ||||
|    --  ZLib-Ada is symmetric regarding deflate/inflate data transformation | ||||
|    --  and has a similar generic callback interface for the | ||||
|    --  deflate/inflate transformation based on the regular Deflate/Inflate | ||||
|    --  routines. | ||||
|  | ||||
|    --  pragma Import (C, inflateBack, "inflateBack"); | ||||
|    --  pragma Import (C, inflateBackEnd, "inflateBackEnd"); | ||||
|  | ||||
| end ZLib.Thin; | ||||
							
								
								
									
										674
									
								
								contrib/ada/zlib.adb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										674
									
								
								contrib/ada/zlib.adb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,674 @@ | ||||
| ---------------------------------------------------------------- | ||||
| --  ZLib for Ada thick binding.                               -- | ||||
| --                                                            -- | ||||
| --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | ||||
| --                                                            -- | ||||
| --  Open source license information is in the zlib.ads file.  -- | ||||
| ---------------------------------------------------------------- | ||||
|  | ||||
| --  $Id: zlib.adb,v 1.19 2003/07/13 16:02:19 vagul Exp $ | ||||
|  | ||||
| with Ada.Exceptions; | ||||
| with Ada.Unchecked_Conversion; | ||||
| with Ada.Unchecked_Deallocation; | ||||
|  | ||||
| with Interfaces.C.Strings; | ||||
|  | ||||
| with ZLib.Thin; | ||||
|  | ||||
| package body ZLib is | ||||
|  | ||||
|    use type Thin.Int; | ||||
|  | ||||
|    type Z_Stream is new Thin.Z_Stream; | ||||
|  | ||||
|    type Return_Code_Enum is | ||||
|       (OK, | ||||
|        STREAM_END, | ||||
|        NEED_DICT, | ||||
|        ERRNO, | ||||
|        STREAM_ERROR, | ||||
|        DATA_ERROR, | ||||
|        MEM_ERROR, | ||||
|        BUF_ERROR, | ||||
|        VERSION_ERROR); | ||||
|  | ||||
|    type Flate_Step_Function is access | ||||
|      function (Strm : Thin.Z_Streamp; flush : Thin.Int) return Thin.Int; | ||||
|    pragma Convention (C, Flate_Step_Function); | ||||
|  | ||||
|    type Flate_End_Function is access | ||||
|       function (Ctrm : in Thin.Z_Streamp) return Thin.Int; | ||||
|    pragma Convention (C, Flate_End_Function); | ||||
|  | ||||
|    type Flate_Type is record | ||||
|       Step : Flate_Step_Function; | ||||
|       Done : Flate_End_Function; | ||||
|    end record; | ||||
|  | ||||
|    subtype Footer_Array is Stream_Element_Array (1 .. 8); | ||||
|  | ||||
|    Simple_GZip_Header : constant Stream_Element_Array (1 .. 10) | ||||
|      := (16#1f#, 16#8b#,                 --  Magic header | ||||
|          16#08#,                         --  Z_DEFLATED | ||||
|          16#00#,                         --  Flags | ||||
|          16#00#, 16#00#, 16#00#, 16#00#, --  Time | ||||
|          16#00#,                         --  XFlags | ||||
|          16#03#                          --  OS code | ||||
|         ); | ||||
|    --  The simplest gzip header is not for informational, but just for | ||||
|    --  gzip format compatibility. | ||||
|    --  Note that some code below is using assumption | ||||
|    --  Simple_GZip_Header'Last > Footer_Array'Last, so do not make | ||||
|    --  Simple_GZip_Header'Last <= Footer_Array'Last. | ||||
|  | ||||
|    Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum | ||||
|      := (0 => OK, | ||||
|          1 => STREAM_END, | ||||
|          2 => NEED_DICT, | ||||
|         -1 => ERRNO, | ||||
|         -2 => STREAM_ERROR, | ||||
|         -3 => DATA_ERROR, | ||||
|         -4 => MEM_ERROR, | ||||
|         -5 => BUF_ERROR, | ||||
|         -6 => VERSION_ERROR); | ||||
|  | ||||
|    Flate : constant array (Boolean) of Flate_Type | ||||
|      := (True  => (Step => Thin.Deflate'Access, | ||||
|                    Done => Thin.DeflateEnd'Access), | ||||
|          False => (Step => Thin.Inflate'Access, | ||||
|                    Done => Thin.InflateEnd'Access)); | ||||
|  | ||||
|    Flush_Finish : constant array (Boolean) of Flush_Mode | ||||
|      := (True => Finish, False => No_Flush); | ||||
|  | ||||
|    procedure Raise_Error (Stream : Z_Stream); | ||||
|    pragma Inline (Raise_Error); | ||||
|  | ||||
|    procedure Raise_Error (Message : String); | ||||
|    pragma Inline (Raise_Error); | ||||
|  | ||||
|    procedure Check_Error (Stream : Z_Stream; Code : Thin.Int); | ||||
|  | ||||
|    procedure Free is new Ada.Unchecked_Deallocation | ||||
|       (Z_Stream, Z_Stream_Access); | ||||
|  | ||||
|    function To_Thin_Access is new Ada.Unchecked_Conversion | ||||
|      (Z_Stream_Access, Thin.Z_Streamp); | ||||
|  | ||||
|    procedure Translate_GZip | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode); | ||||
|    --  Separate translate routine for make gzip header. | ||||
|  | ||||
|    procedure Translate_Auto | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode); | ||||
|    --  translate routine without additional headers. | ||||
|  | ||||
|    ----------------- | ||||
|    -- Check_Error -- | ||||
|    ----------------- | ||||
|  | ||||
|    procedure Check_Error (Stream : Z_Stream; Code : Thin.Int) is | ||||
|       use type Thin.Int; | ||||
|    begin | ||||
|       if Code /= Thin.Z_OK then | ||||
|          Raise_Error | ||||
|             (Return_Code_Enum'Image (Return_Code (Code)) | ||||
|               & ": " & Last_Error_Message (Stream)); | ||||
|       end if; | ||||
|    end Check_Error; | ||||
|  | ||||
|    ----------- | ||||
|    -- Close -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Close | ||||
|      (Filter       : in out Filter_Type; | ||||
|       Ignore_Error : in     Boolean := False) | ||||
|    is | ||||
|       Code : Thin.Int; | ||||
|    begin | ||||
|       Code := Flate (Filter.Compression).Done | ||||
|           (To_Thin_Access (Filter.Strm)); | ||||
|  | ||||
|       Filter.Opened := False; | ||||
|  | ||||
|       if Ignore_Error or else Code = Thin.Z_OK then | ||||
|          Free (Filter.Strm); | ||||
|       else | ||||
|          declare | ||||
|             Error_Message : constant String | ||||
|               := Last_Error_Message (Filter.Strm.all); | ||||
|          begin | ||||
|             Free (Filter.Strm); | ||||
|             Ada.Exceptions.Raise_Exception | ||||
|                (ZLib_Error'Identity, | ||||
|                 Return_Code_Enum'Image (Return_Code (Code)) | ||||
|                 & ": " & Error_Message); | ||||
|          end; | ||||
|       end if; | ||||
|    end Close; | ||||
|  | ||||
|    ----------- | ||||
|    -- CRC32 -- | ||||
|    ----------- | ||||
|  | ||||
|    function CRC32 | ||||
|      (CRC  : in Unsigned_32; | ||||
|       Data : in Ada.Streams.Stream_Element_Array) | ||||
|       return Unsigned_32 | ||||
|    is | ||||
|       use Thin; | ||||
|    begin | ||||
|       return Unsigned_32 (crc32 | ||||
|         (ULong (CRC), | ||||
|          Bytes.To_Pointer (Data'Address), | ||||
|          Data'Length)); | ||||
|    end CRC32; | ||||
|  | ||||
|    procedure CRC32 | ||||
|      (CRC  : in out Unsigned_32; | ||||
|       Data : in     Ada.Streams.Stream_Element_Array) is | ||||
|    begin | ||||
|       CRC := CRC32 (CRC, Data); | ||||
|    end CRC32; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Deflate_Init -- | ||||
|    ------------------ | ||||
|  | ||||
|    procedure Deflate_Init | ||||
|      (Filter       : in out Filter_Type; | ||||
|       Level        : in     Compression_Level  := Default_Compression; | ||||
|       Strategy     : in     Strategy_Type      := Default_Strategy; | ||||
|       Method       : in     Compression_Method := Deflated; | ||||
|       Window_Bits  : in     Window_Bits_Type   := 15; | ||||
|       Memory_Level : in     Memory_Level_Type  := 8; | ||||
|       Header       : in     Header_Type        := Default) | ||||
|    is | ||||
|       use type Thin.Int; | ||||
|       Win_Bits : Thin.Int := Thin.Int (Window_Bits); | ||||
|    begin | ||||
|       --  We allow ZLib to make header only in case of default header type. | ||||
|       --  Otherwise we would either do header by ourselfs, or do not do | ||||
|       --  header at all. | ||||
|  | ||||
|       if Header = None or else Header = GZip then | ||||
|          Win_Bits := -Win_Bits; | ||||
|       end if; | ||||
|  | ||||
|       --  For the GZip CRC calculation and make headers. | ||||
|  | ||||
|       if Header = GZip then | ||||
|          Filter.CRC    := 0; | ||||
|          Filter.Offset := Simple_GZip_Header'First; | ||||
|       else | ||||
|          Filter.Offset := Simple_GZip_Header'Last + 1; | ||||
|       end if; | ||||
|  | ||||
|       Filter.Strm := new Z_Stream; | ||||
|       Filter.Compression := True; | ||||
|       Filter.Stream_End  := False; | ||||
|       Filter.Opened      := True; | ||||
|       Filter.Header      := Header; | ||||
|  | ||||
|       if Thin.Deflate_Init | ||||
|            (To_Thin_Access (Filter.Strm), | ||||
|             Level      => Thin.Int (Level), | ||||
|             method     => Thin.Int (Method), | ||||
|             windowBits => Win_Bits, | ||||
|             memLevel   => Thin.Int (Memory_Level), | ||||
|             strategy   => Thin.Int (Strategy)) /= Thin.Z_OK | ||||
|       then | ||||
|          Raise_Error (Filter.Strm.all); | ||||
|       end if; | ||||
|    end Deflate_Init; | ||||
|  | ||||
|    ----------- | ||||
|    -- Flush -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Flush | ||||
|      (Filter    : in out Filter_Type; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode) | ||||
|    is | ||||
|       No_Data : Stream_Element_Array := (1 .. 0 => 0); | ||||
|       Last    : Stream_Element_Offset; | ||||
|    begin | ||||
|       Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush); | ||||
|    end Flush; | ||||
|  | ||||
|    ----------------------- | ||||
|    -- Generic_Translate -- | ||||
|    ----------------------- | ||||
|  | ||||
|    procedure Generic_Translate | ||||
|      (Filter : in out ZLib.Filter_Type; | ||||
|       In_Buffer_Size  : Integer := Default_Buffer_Size; | ||||
|       Out_Buffer_Size : Integer := Default_Buffer_Size) | ||||
|    is | ||||
|       In_Buffer : Stream_Element_Array | ||||
|          (1 .. Stream_Element_Offset (In_Buffer_Size)); | ||||
|       Out_Buffer : Stream_Element_Array | ||||
|         (1 .. Stream_Element_Offset (Out_Buffer_Size)); | ||||
|       Last : Stream_Element_Offset; | ||||
|       In_Last : Stream_Element_Offset; | ||||
|       In_First : Stream_Element_Offset; | ||||
|       Out_Last : Stream_Element_Offset; | ||||
|    begin | ||||
|       Main : loop | ||||
|          Data_In (In_Buffer, Last); | ||||
|  | ||||
|          In_First := In_Buffer'First; | ||||
|  | ||||
|          loop | ||||
|             Translate | ||||
|               (Filter, | ||||
|                In_Buffer (In_First .. Last), | ||||
|                In_Last, | ||||
|                Out_Buffer, | ||||
|                Out_Last, | ||||
|                Flush_Finish (Last < In_Buffer'First)); | ||||
|  | ||||
|             Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last)); | ||||
|  | ||||
|             exit Main when Stream_End (Filter); | ||||
|  | ||||
|             --  The end of in buffer. | ||||
|             exit when In_Last = Last; | ||||
|  | ||||
|             In_First := In_Last + 1; | ||||
|          end loop; | ||||
|       end loop Main; | ||||
|  | ||||
|    end Generic_Translate; | ||||
|  | ||||
|    ------------------ | ||||
|    -- Inflate_Init -- | ||||
|    ------------------ | ||||
|  | ||||
|    procedure Inflate_Init | ||||
|      (Filter      : in out Filter_Type; | ||||
|       Window_Bits : in     Window_Bits_Type := 15; | ||||
|       Header      : in     Header_Type      := Default) | ||||
|    is | ||||
|       use type Thin.Int; | ||||
|       Win_Bits : Thin.Int := Thin.Int (Window_Bits); | ||||
|  | ||||
|       procedure Check_Version; | ||||
|       --  Check the latest header types compatibility. | ||||
|  | ||||
|       procedure Check_Version is | ||||
|       begin | ||||
|          if Version <= "1.1.4" then | ||||
|             Raise_Error | ||||
|               ("Inflate header type " & Header_Type'Image (Header) | ||||
|                & " incompatible with ZLib version " & Version); | ||||
|          end if; | ||||
|       end Check_Version; | ||||
|  | ||||
|    begin | ||||
|       case Header is | ||||
|          when None => | ||||
|             Check_Version; | ||||
|  | ||||
|             --  Inflate data without headers determined | ||||
|             --  by negative Win_Bits. | ||||
|  | ||||
|             Win_Bits := -Win_Bits; | ||||
|          when GZip => | ||||
|             Check_Version; | ||||
|  | ||||
|             --  Inflate gzip data defined by flag 16. | ||||
|  | ||||
|             Win_Bits := Win_Bits + 16; | ||||
|          when Auto => | ||||
|             Check_Version; | ||||
|  | ||||
|             --  Inflate with automatic detection | ||||
|             --  of gzip or native header defined by flag 32. | ||||
|  | ||||
|             Win_Bits := Win_Bits + 32; | ||||
|          when Default => null; | ||||
|       end case; | ||||
|  | ||||
|       Filter.Strm := new Z_Stream; | ||||
|       Filter.Compression := False; | ||||
|       Filter.Stream_End  := False; | ||||
|       Filter.Opened      := True; | ||||
|       Filter.Header      := Header; | ||||
|  | ||||
|       if Thin.Inflate_Init | ||||
|          (To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK | ||||
|       then | ||||
|          Raise_Error (Filter.Strm.all); | ||||
|       end if; | ||||
|    end Inflate_Init; | ||||
|  | ||||
|    ----------------- | ||||
|    -- Raise_Error -- | ||||
|    ----------------- | ||||
|  | ||||
|    procedure Raise_Error (Message : String) is | ||||
|    begin | ||||
|       Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message); | ||||
|    end Raise_Error; | ||||
|  | ||||
|    procedure Raise_Error (Stream : Z_Stream) is | ||||
|    begin | ||||
|       Raise_Error (Last_Error_Message (Stream)); | ||||
|    end Raise_Error; | ||||
|  | ||||
|    ---------- | ||||
|    -- Read -- | ||||
|    ---------- | ||||
|  | ||||
|    procedure Read | ||||
|      (Filter : in out Filter_Type; | ||||
|       Item   :    out Ada.Streams.Stream_Element_Array; | ||||
|       Last   :    out Ada.Streams.Stream_Element_Offset) | ||||
|    is | ||||
|       In_Last    : Stream_Element_Offset; | ||||
|       Item_First : Ada.Streams.Stream_Element_Offset := Item'First; | ||||
|  | ||||
|    begin | ||||
|       pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1); | ||||
|  | ||||
|       loop | ||||
|          if Rest_First > Buffer'Last then | ||||
|             Read (Buffer, Rest_Last); | ||||
|             Rest_First := Buffer'First; | ||||
|          end if; | ||||
|  | ||||
|          pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last); | ||||
|  | ||||
|          Translate | ||||
|            (Filter   => Filter, | ||||
|             In_Data  => Buffer (Rest_First .. Rest_Last), | ||||
|             In_Last  => In_Last, | ||||
|             Out_Data => Item (Item_First .. Item'Last), | ||||
|             Out_Last => Last, | ||||
|             Flush    => Flush_Finish (Rest_Last < Rest_First)); | ||||
|  | ||||
|          Rest_First := In_Last + 1; | ||||
|  | ||||
|          exit when Last = Item'Last or else Stream_End (Filter); | ||||
|  | ||||
|          Item_First := Last + 1; | ||||
|       end loop; | ||||
|    end Read; | ||||
|  | ||||
|    ---------------- | ||||
|    -- Stream_End -- | ||||
|    ---------------- | ||||
|  | ||||
|    function Stream_End (Filter : in Filter_Type) return Boolean is | ||||
|    begin | ||||
|       if Filter.Header = GZip and Filter.Compression then | ||||
|          return Filter.Stream_End | ||||
|             and then Filter.Offset = Footer_Array'Last + 1; | ||||
|       else | ||||
|          return Filter.Stream_End; | ||||
|       end if; | ||||
|    end Stream_End; | ||||
|  | ||||
|    -------------- | ||||
|    -- Total_In -- | ||||
|    -------------- | ||||
|  | ||||
|    function Total_In (Filter : in Filter_Type) return Count is | ||||
|    begin | ||||
|       return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all)); | ||||
|    end Total_In; | ||||
|  | ||||
|    --------------- | ||||
|    -- Total_Out -- | ||||
|    --------------- | ||||
|  | ||||
|    function Total_Out (Filter : in Filter_Type) return Count is | ||||
|    begin | ||||
|       return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all)); | ||||
|    end Total_Out; | ||||
|  | ||||
|    --------------- | ||||
|    -- Translate -- | ||||
|    --------------- | ||||
|  | ||||
|    procedure Translate | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode) is | ||||
|    begin | ||||
|       if Filter.Header = GZip and then Filter.Compression then | ||||
|          Translate_GZip | ||||
|            (Filter   => Filter, | ||||
|             In_Data  => In_Data, | ||||
|             In_Last  => In_Last, | ||||
|             Out_Data => Out_Data, | ||||
|             Out_Last => Out_Last, | ||||
|             Flush    => Flush); | ||||
|       else | ||||
|          Translate_Auto | ||||
|            (Filter   => Filter, | ||||
|             In_Data  => In_Data, | ||||
|             In_Last  => In_Last, | ||||
|             Out_Data => Out_Data, | ||||
|             Out_Last => Out_Last, | ||||
|             Flush    => Flush); | ||||
|       end if; | ||||
|    end Translate; | ||||
|  | ||||
|    -------------------- | ||||
|    -- Translate_Auto -- | ||||
|    -------------------- | ||||
|  | ||||
|    procedure Translate_Auto | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode) | ||||
|    is | ||||
|       use type Thin.Int; | ||||
|       Code : Thin.Int; | ||||
|  | ||||
|    begin | ||||
|       if Filter.Opened = False then | ||||
|          raise ZLib_Error; | ||||
|       end if; | ||||
|  | ||||
|       if Out_Data'Length = 0 then | ||||
|          raise Constraint_Error; | ||||
|       end if; | ||||
|  | ||||
|       Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length); | ||||
|       Set_In  (Filter.Strm.all, In_Data'Address, In_Data'Length); | ||||
|  | ||||
|       Code := Flate (Filter.Compression).Step | ||||
|         (To_Thin_Access (Filter.Strm), | ||||
|          Thin.Int (Flush)); | ||||
|  | ||||
|       if Code = Thin.Z_STREAM_END then | ||||
|          Filter.Stream_End := True; | ||||
|       else | ||||
|          Check_Error (Filter.Strm.all, Code); | ||||
|       end if; | ||||
|  | ||||
|       In_Last  := In_Data'Last | ||||
|          - Stream_Element_Offset (Avail_In (Filter.Strm.all)); | ||||
|       Out_Last := Out_Data'Last | ||||
|          - Stream_Element_Offset (Avail_Out (Filter.Strm.all)); | ||||
|  | ||||
|    end Translate_Auto; | ||||
|  | ||||
|    -------------------- | ||||
|    -- Translate_GZip -- | ||||
|    -------------------- | ||||
|  | ||||
|    procedure Translate_GZip | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode) | ||||
|    is | ||||
|       Out_First  : Stream_Element_Offset; | ||||
|  | ||||
|       procedure Add_Data (Data : in Stream_Element_Array); | ||||
|       --  Add data to stream from the Filter.Offset till necessary, | ||||
|       --  used for add gzip headr/footer. | ||||
|  | ||||
|       procedure Put_32 | ||||
|         (Item : in out Stream_Element_Array; | ||||
|          Data : in     Unsigned_32); | ||||
|       pragma Inline (Put_32); | ||||
|  | ||||
|       -------------- | ||||
|       -- Add_Data -- | ||||
|       -------------- | ||||
|  | ||||
|       procedure Add_Data (Data : in Stream_Element_Array) is | ||||
|          Data_First : Stream_Element_Offset renames Filter.Offset; | ||||
|          Data_Last  : Stream_Element_Offset; | ||||
|          Data_Len   : Stream_Element_Offset; --  -1 | ||||
|          Out_Len    : Stream_Element_Offset; --  -1 | ||||
|       begin | ||||
|          Out_First := Out_Last + 1; | ||||
|  | ||||
|          if Data_First > Data'Last then | ||||
|             return; | ||||
|          end if; | ||||
|  | ||||
|          Data_Len  := Data'Last     - Data_First; | ||||
|          Out_Len   := Out_Data'Last - Out_First; | ||||
|  | ||||
|          if Data_Len <= Out_Len then | ||||
|             Out_Last  := Out_First  + Data_Len; | ||||
|             Data_Last := Data'Last; | ||||
|          else | ||||
|             Out_Last  := Out_Data'Last; | ||||
|             Data_Last := Data_First + Out_Len; | ||||
|          end if; | ||||
|  | ||||
|          Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last); | ||||
|  | ||||
|          Data_First := Data_Last + 1; | ||||
|          Out_First  := Out_Last + 1; | ||||
|       end Add_Data; | ||||
|  | ||||
|       ------------ | ||||
|       -- Put_32 -- | ||||
|       ------------ | ||||
|  | ||||
|       procedure Put_32 | ||||
|         (Item : in out Stream_Element_Array; | ||||
|          Data : in     Unsigned_32) | ||||
|       is | ||||
|          D : Unsigned_32 := Data; | ||||
|       begin | ||||
|          for J in Item'First .. Item'First + 3 loop | ||||
|             Item (J) := Stream_Element (D and 16#FF#); | ||||
|             D := Shift_Right (D, 8); | ||||
|          end loop; | ||||
|       end Put_32; | ||||
|  | ||||
|    begin | ||||
|       Out_Last := Out_Data'First - 1; | ||||
|  | ||||
|       if not Filter.Stream_End then | ||||
|          Add_Data (Simple_GZip_Header); | ||||
|  | ||||
|          Translate_Auto | ||||
|            (Filter => Filter, | ||||
|             In_Data  => In_Data, | ||||
|             In_Last  => In_Last, | ||||
|             Out_Data => Out_Data (Out_First .. Out_Data'Last), | ||||
|             Out_Last => Out_Last, | ||||
|             Flush    => Flush); | ||||
|  | ||||
|          CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last)); | ||||
|  | ||||
|       end if; | ||||
|  | ||||
|       if Filter.Stream_End and then Out_Last <= Out_Data'Last then | ||||
|          --  This detection method would work only when | ||||
|          --  Simple_GZip_Header'Last > Footer_Array'Last | ||||
|  | ||||
|          if Filter.Offset = Simple_GZip_Header'Last + 1 then | ||||
|             Filter.Offset := Footer_Array'First; | ||||
|          end if; | ||||
|  | ||||
|          declare | ||||
|             Footer : Footer_Array; | ||||
|          begin | ||||
|             Put_32 (Footer, Filter.CRC); | ||||
|             Put_32 (Footer (Footer'First + 4 .. Footer'Last), | ||||
|                     Unsigned_32 (Total_In (Filter))); | ||||
|             Add_Data (Footer); | ||||
|          end; | ||||
|       end if; | ||||
|    end Translate_GZip; | ||||
|  | ||||
|    ------------- | ||||
|    -- Version -- | ||||
|    ------------- | ||||
|  | ||||
|    function Version return String is | ||||
|    begin | ||||
|       return Interfaces.C.Strings.Value (Thin.zlibVersion); | ||||
|    end Version; | ||||
|  | ||||
|    ----------- | ||||
|    -- Write -- | ||||
|    ----------- | ||||
|  | ||||
|    procedure Write | ||||
|      (Filter : in out Filter_Type; | ||||
|       Item   : in     Ada.Streams.Stream_Element_Array; | ||||
|       Flush  : in     Flush_Mode) | ||||
|    is | ||||
|       Buffer : Stream_Element_Array (1 .. Buffer_Size); | ||||
|       In_Last, Out_Last : Stream_Element_Offset; | ||||
|       In_First : Stream_Element_Offset := Item'First; | ||||
|    begin | ||||
|       if Item'Length = 0 and Flush = No_Flush then | ||||
|          return; | ||||
|       end if; | ||||
|  | ||||
|       loop | ||||
|          Translate | ||||
|            (Filter => Filter, | ||||
|             In_Data  => Item (In_First .. Item'Last), | ||||
|             In_Last  => In_Last, | ||||
|             Out_Data => Buffer, | ||||
|             Out_Last => Out_Last, | ||||
|             Flush    => Flush); | ||||
|  | ||||
|          if Out_Last >= Buffer'First then | ||||
|             Write (Buffer (1 .. Out_Last)); | ||||
|          end if; | ||||
|  | ||||
|          exit when In_Last = Item'Last or Stream_End (Filter); | ||||
|  | ||||
|          In_First := In_Last + 1; | ||||
|       end loop; | ||||
|    end Write; | ||||
|  | ||||
| end ZLib; | ||||
							
								
								
									
										311
									
								
								contrib/ada/zlib.ads
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										311
									
								
								contrib/ada/zlib.ads
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,311 @@ | ||||
| ------------------------------------------------------------------------------ | ||||
| --                      ZLib for Ada thick binding.                         -- | ||||
| --                                                                          -- | ||||
| --              Copyright (C) 2002-2003 Dmitriy Anisimkov                   -- | ||||
| --                                                                          -- | ||||
| --  This library is free software; you can redistribute it and/or modify    -- | ||||
| --  it under the terms of the GNU General Public License as published by    -- | ||||
| --  the Free Software Foundation; either version 2 of the License, or (at   -- | ||||
| --  your option) any later version.                                         -- | ||||
| --                                                                          -- | ||||
| --  This library is distributed in the hope that it will be useful, but     -- | ||||
| --  WITHOUT ANY WARRANTY; without even the implied warranty of              -- | ||||
| --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       -- | ||||
| --  General Public License for more details.                                -- | ||||
| --                                                                          -- | ||||
| --  You should have received a copy of the GNU General Public License       -- | ||||
| --  along with this library; if not, write to the Free Software Foundation, -- | ||||
| --  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.          -- | ||||
| --                                                                          -- | ||||
| --  As a special exception, if other files instantiate generics from this   -- | ||||
| --  unit, or you link this unit with other files to produce an executable,  -- | ||||
| --  this  unit  does not  by itself cause  the resulting executable to be   -- | ||||
| --  covered by the GNU General Public License. This exception does not      -- | ||||
| --  however invalidate any other reasons why the executable file  might be  -- | ||||
| --  covered by the  GNU Public License.                                     -- | ||||
| ------------------------------------------------------------------------------ | ||||
|  | ||||
| --  $Id: zlib.ads,v 1.17 2003/08/12 13:19:07 vagul Exp $ | ||||
|  | ||||
| with Ada.Streams; | ||||
|  | ||||
| with Interfaces; | ||||
|  | ||||
| package ZLib is | ||||
|  | ||||
|    ZLib_Error : exception; | ||||
|  | ||||
|    type Compression_Level is new Integer range -1 .. 9; | ||||
|  | ||||
|    type Flush_Mode is private; | ||||
|  | ||||
|    type Compression_Method is private; | ||||
|  | ||||
|    type Window_Bits_Type is new Integer range 8 .. 15; | ||||
|  | ||||
|    type Memory_Level_Type is new Integer range 1 .. 9; | ||||
|  | ||||
|    type Unsigned_32 is new Interfaces.Unsigned_32; | ||||
|  | ||||
|    type Strategy_Type is private; | ||||
|  | ||||
|    type Header_Type is (None, Auto, Default, GZip); | ||||
|    --  Header type usage have a some limitation for inflate. | ||||
|    --  See comment for Inflate_Init. | ||||
|  | ||||
|    subtype Count is Ada.Streams.Stream_Element_Count; | ||||
|  | ||||
|    ---------------------------------- | ||||
|    -- Compression method constants -- | ||||
|    ---------------------------------- | ||||
|  | ||||
|    Deflated : constant Compression_Method; | ||||
|    --  Only one method allowed in this ZLib version. | ||||
|  | ||||
|    --------------------------------- | ||||
|    -- Compression level constants -- | ||||
|    --------------------------------- | ||||
|  | ||||
|    No_Compression      : constant Compression_Level := 0; | ||||
|    Best_Speed          : constant Compression_Level := 1; | ||||
|    Best_Compression    : constant Compression_Level := 9; | ||||
|    Default_Compression : constant Compression_Level := -1; | ||||
|  | ||||
|    -------------------------- | ||||
|    -- Flush mode constants -- | ||||
|    -------------------------- | ||||
|  | ||||
|    No_Flush      : constant Flush_Mode; | ||||
|    --  Regular way for compression, no flush | ||||
|  | ||||
|    Partial_Flush : constant Flush_Mode; | ||||
|    --  will be removed, use Z_SYNC_FLUSH instead | ||||
|  | ||||
|    Sync_Flush    : constant Flush_Mode; | ||||
|    --  all pending output is flushed to the output buffer and the output | ||||
|    --  is aligned on a byte boundary, so that the decompressor can get all | ||||
|    --  input data available so far. (In particular avail_in is zero after the | ||||
|    --  call if enough output space has been provided  before the call.) | ||||
|    --  Flushing may degrade compression for some compression algorithms and so | ||||
|    --  it should be used only when necessary. | ||||
|  | ||||
|    Full_Flush    : constant Flush_Mode; | ||||
|    --  all output is flushed as with SYNC_FLUSH, and the compression state | ||||
|    --  is reset so that decompression can restart from this point if previous | ||||
|    --  compressed data has been damaged or if random access is desired. Using | ||||
|    --  FULL_FLUSH too often can seriously degrade the compression. | ||||
|  | ||||
|    Finish        : constant Flush_Mode; | ||||
|    --  Just for tell the compressor that input data is complete. | ||||
|  | ||||
|    ------------------------------------ | ||||
|    -- Compression strategy constants -- | ||||
|    ------------------------------------ | ||||
|  | ||||
|    --  RLE stategy could be used only in version 1.2.0 and later. | ||||
|  | ||||
|    Filtered         : constant Strategy_Type; | ||||
|    Huffman_Only     : constant Strategy_Type; | ||||
|    RLE              : constant Strategy_Type; | ||||
|    Default_Strategy : constant Strategy_Type; | ||||
|  | ||||
|    Default_Buffer_Size : constant := 4096; | ||||
|  | ||||
|    type Filter_Type is limited private; | ||||
|    --  The filter is for compression and for decompression. | ||||
|    --  The usage of the type is depend of its initialization. | ||||
|  | ||||
|    function Version return String; | ||||
|    pragma Inline (Version); | ||||
|    --  Return string representation of the ZLib version. | ||||
|  | ||||
|    procedure Deflate_Init | ||||
|      (Filter       : in out Filter_Type; | ||||
|       Level        : in     Compression_Level  := Default_Compression; | ||||
|       Strategy     : in     Strategy_Type      := Default_Strategy; | ||||
|       Method       : in     Compression_Method := Deflated; | ||||
|       Window_Bits  : in     Window_Bits_Type   := 15; | ||||
|       Memory_Level : in     Memory_Level_Type  := 8; | ||||
|       Header       : in     Header_Type        := Default); | ||||
|    --  Compressor initialization. | ||||
|    --  When Header parameter is Auto or Default, then default zlib header | ||||
|    --  would be provided for compressed data. | ||||
|    --  When Header is GZip, then gzip header would be set instead of | ||||
|    --  default header. | ||||
|    --  When Header is None, no header would be set for compressed data. | ||||
|  | ||||
|    procedure Inflate_Init | ||||
|      (Filter      : in out Filter_Type; | ||||
|       Window_Bits : in     Window_Bits_Type := 15; | ||||
|       Header      : in     Header_Type      := Default); | ||||
|    --  Decompressor initialization. | ||||
|    --  Default header type mean that ZLib default header is expecting in the | ||||
|    --  input compressed stream. | ||||
|    --  Header type None mean that no header is expecting in the input stream. | ||||
|    --  GZip header type mean that GZip header is expecting in the | ||||
|    --  input compressed stream. | ||||
|    --  Auto header type mean that header type (GZip or Native) would be | ||||
|    --  detected automatically in the input stream. | ||||
|    --  Note that header types parameter values None, GZip and Auto is | ||||
|    --  supporting for inflate routine only in ZLib versions 1.2.0.2 and later. | ||||
|    --  Deflate_Init is supporting all header types. | ||||
|  | ||||
|    procedure Close | ||||
|      (Filter       : in out Filter_Type; | ||||
|       Ignore_Error : in     Boolean := False); | ||||
|    --  Closing the compression or decompressor. | ||||
|    --  If stream is closing before the complete and Ignore_Error is False, | ||||
|    --  The exception would be raised. | ||||
|  | ||||
|    generic | ||||
|       with procedure Data_In | ||||
|         (Item : out Ada.Streams.Stream_Element_Array; | ||||
|          Last : out Ada.Streams.Stream_Element_Offset); | ||||
|       with procedure Data_Out | ||||
|         (Item : in Ada.Streams.Stream_Element_Array); | ||||
|    procedure Generic_Translate | ||||
|      (Filter          : in out Filter_Type; | ||||
|       In_Buffer_Size  : in     Integer := Default_Buffer_Size; | ||||
|       Out_Buffer_Size : in     Integer := Default_Buffer_Size); | ||||
|    --  Compressing/decompressing data arrived from Data_In routine | ||||
|    --  to the Data_Out routine. User should provide Data_In and Data_Out | ||||
|    --  for compression/decompression data flow. | ||||
|    --  Compression or decompression depend on initialization of Filter. | ||||
|  | ||||
|    function Total_In (Filter : in Filter_Type) return Count; | ||||
|    pragma Inline (Total_In); | ||||
|    --  Return total number of input bytes read so far. | ||||
|  | ||||
|    function Total_Out (Filter : in Filter_Type) return Count; | ||||
|    pragma Inline (Total_Out); | ||||
|    --  Return total number of bytes output so far. | ||||
|  | ||||
|    function CRC32 | ||||
|      (CRC    : in Unsigned_32; | ||||
|       Data   : in Ada.Streams.Stream_Element_Array) | ||||
|       return Unsigned_32; | ||||
|    pragma Inline (CRC32); | ||||
|    --  Calculate CRC32, it could be necessary for make gzip format. | ||||
|  | ||||
|    procedure CRC32 | ||||
|      (CRC  : in out Unsigned_32; | ||||
|       Data : in     Ada.Streams.Stream_Element_Array); | ||||
|    pragma Inline (CRC32); | ||||
|    --  Calculate CRC32, it could be necessary for make gzip format. | ||||
|  | ||||
|    ------------------------------------------------- | ||||
|    --  Below is more complex low level routines.  -- | ||||
|    ------------------------------------------------- | ||||
|  | ||||
|    procedure Translate | ||||
|      (Filter    : in out Filter_Type; | ||||
|       In_Data   : in     Ada.Streams.Stream_Element_Array; | ||||
|       In_Last   :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode); | ||||
|    --  Compressing/decompressing the datas from In_Data buffer to the | ||||
|    --  Out_Data buffer. | ||||
|    --  In_Data is incoming data portion, | ||||
|    --  In_Last is the index of last element from In_Data accepted by the | ||||
|    --  Filter. | ||||
|    --  Out_Data is the buffer for output data from the filter. | ||||
|    --  Out_Last is the last element of the received data from Filter. | ||||
|    --  To tell the filter that incoming data is complete put the | ||||
|    --  Flush parameter to FINISH. | ||||
|  | ||||
|    function Stream_End (Filter : in Filter_Type) return Boolean; | ||||
|    pragma Inline (Stream_End); | ||||
|    --  Return the true when the stream is complete. | ||||
|  | ||||
|    procedure Flush | ||||
|      (Filter    : in out Filter_Type; | ||||
|       Out_Data  :    out Ada.Streams.Stream_Element_Array; | ||||
|       Out_Last  :    out Ada.Streams.Stream_Element_Offset; | ||||
|       Flush     : in     Flush_Mode); | ||||
|    pragma Inline (Flush); | ||||
|    --  Flushing the data from the compressor. | ||||
|  | ||||
|    generic | ||||
|       with procedure Write | ||||
|         (Item : in Ada.Streams.Stream_Element_Array); | ||||
|       --  User should provide this routine for accept | ||||
|       --  compressed/decompressed data. | ||||
|  | ||||
|       Buffer_Size : in Ada.Streams.Stream_Element_Offset | ||||
|          := Default_Buffer_Size; | ||||
|       --  Buffer size for Write user routine. | ||||
|  | ||||
|    procedure Write | ||||
|      (Filter  : in out Filter_Type; | ||||
|       Item    : in     Ada.Streams.Stream_Element_Array; | ||||
|       Flush   : in     Flush_Mode); | ||||
|    --  Compressing/Decompressing data from Item to the | ||||
|    --  generic parameter procedure Write. | ||||
|    --  Output buffer size could be set in Buffer_Size generic parameter. | ||||
|  | ||||
|    generic | ||||
|       with procedure Read | ||||
|         (Item : out Ada.Streams.Stream_Element_Array; | ||||
|          Last : out Ada.Streams.Stream_Element_Offset); | ||||
|       --  User should provide data for compression/decompression | ||||
|       --  thru this routine. | ||||
|  | ||||
|       Buffer : in out Ada.Streams.Stream_Element_Array; | ||||
|       --  Buffer for keep remaining data from the previous | ||||
|       --  back read. | ||||
|  | ||||
|       Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset; | ||||
|       --  Rest_First have to be initialized to Buffer'Last + 1 | ||||
|       --  before usage. | ||||
|  | ||||
|    procedure Read | ||||
|      (Filter : in out Filter_Type; | ||||
|       Item   :    out Ada.Streams.Stream_Element_Array; | ||||
|       Last   :    out Ada.Streams.Stream_Element_Offset); | ||||
|    --  Compressing/Decompressing data from generic parameter | ||||
|    --  procedure Read to the Item. | ||||
|    --  User should provide Buffer for the operation | ||||
|    --  and Rest_First variable first time initialized to the Buffer'Last + 1. | ||||
|  | ||||
| private | ||||
|  | ||||
|    use Ada.Streams; | ||||
|  | ||||
|    type Flush_Mode is new Integer range 0 .. 4; | ||||
|  | ||||
|    type Compression_Method is new Integer range 8 .. 8; | ||||
|  | ||||
|    type Strategy_Type is new Integer range 0 .. 3; | ||||
|  | ||||
|    No_Flush      : constant Flush_Mode := 0; | ||||
|    Sync_Flush    : constant Flush_Mode := 2; | ||||
|    Full_Flush    : constant Flush_Mode := 3; | ||||
|    Finish        : constant Flush_Mode := 4; | ||||
|    Partial_Flush : constant Flush_Mode := 1; | ||||
|    --  will be removed, use Z_SYNC_FLUSH instead | ||||
|  | ||||
|    Filtered         : constant Strategy_Type := 1; | ||||
|    Huffman_Only     : constant Strategy_Type := 2; | ||||
|    RLE              : constant Strategy_Type := 3; | ||||
|    Default_Strategy : constant Strategy_Type := 0; | ||||
|  | ||||
|    Deflated : constant Compression_Method := 8; | ||||
|  | ||||
|    type Z_Stream; | ||||
|  | ||||
|    type Z_Stream_Access is access all Z_Stream; | ||||
|  | ||||
|    type Filter_Type is record | ||||
|       Strm        : Z_Stream_Access; | ||||
|       Compression : Boolean; | ||||
|       Stream_End  : Boolean; | ||||
|       Header      : Header_Type; | ||||
|       CRC         : Unsigned_32; | ||||
|       Offset      : Stream_Element_Offset; | ||||
|       --  Offset for gzip header/footer output. | ||||
|  | ||||
|       Opened      : Boolean := False; | ||||
|    end record; | ||||
|  | ||||
| end ZLib; | ||||
							
								
								
									
										21
									
								
								contrib/ada/zlib.gpr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								contrib/ada/zlib.gpr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| project Zlib is | ||||
|  | ||||
|    for Languages use ("Ada"); | ||||
|    for Source_Dirs use ("."); | ||||
|    for Object_Dir use "."; | ||||
|    for Main use ("test.adb", "mtest.adb", "read.adb"); | ||||
|  | ||||
|    package Compiler is | ||||
|       for Default_Switches ("ada") use ("-gnatwbcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst"); | ||||
|    end Compiler; | ||||
|  | ||||
|    package Linker is | ||||
|       for Default_Switches ("ada") use ("-lz"); | ||||
|    end Linker; | ||||
|  | ||||
|    package Builder is | ||||
|       for Default_Switches ("ada") use ("-s", "-gnatQ"); | ||||
|    end Builder; | ||||
|  | ||||
| end Zlib; | ||||
|  | ||||
| @@ -1,559 +0,0 @@ | ||||
| ; | ||||
| ; 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_7fff(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] | ||||
|         wmask           equ     dword ptr [esp+NbStack-52] | ||||
|         match_start_ptr equ     dword ptr [esp+NbStack-56] | ||||
|         nice_match      equ     dword ptr [esp+NbStack-60] | ||||
|         scan            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     (NbStack-24) | ||||
|  | ||||
|     .386p | ||||
|  | ||||
|     name    gvmatch | ||||
|     .MODEL  FLAT | ||||
|  | ||||
|  | ||||
|  | ||||
| ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib | ||||
| ;  in the deflate_state structure since the asm code was first written | ||||
| ;  (if you compile with zlib 1.0.4 or older, remove the +4). | ||||
| ;  Note : these value are good with a 8 bytes boundary pack structure | ||||
|     dep_chain_length    equ     70h+4 | ||||
|     dep_window          equ     2ch+4 | ||||
|     dep_strstart        equ     60h+4 | ||||
|     dep_prev_length     equ     6ch+4 | ||||
|     dep_nice_match      equ     84h+4 | ||||
|     dep_w_size          equ     20h+4 | ||||
|     dep_prev            equ     34h+4 | ||||
|     dep_w_mask          equ     28h+4 | ||||
|     dep_good_match      equ     80h+4 | ||||
|     dep_match_start     equ     64h+4 | ||||
|     dep_lookahead       equ     68h+4 | ||||
|  | ||||
|  | ||||
| _TEXT                   segment | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
|                         public  longest_match_7fff | ||||
| ;                        public  match_init | ||||
| ELSE | ||||
|                         public  _longest_match_7fff | ||||
| ;                        public  _match_init | ||||
| ENDIF | ||||
|  | ||||
|     MAX_MATCH           equ     258 | ||||
|     MIN_MATCH           equ     3 | ||||
|     MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1) | ||||
|  | ||||
|  | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
| ;match_init      proc near | ||||
| ;                ret | ||||
| ;match_init      endp | ||||
| ELSE | ||||
| ;_match_init     proc near | ||||
| ;                ret | ||||
| ;_match_init     endp | ||||
| ENDIF | ||||
|  | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
| longest_match_7fff   proc near | ||||
| ELSE | ||||
| _longest_match_7fff  proc near | ||||
| ENDIF | ||||
|  | ||||
|         mov     edx,[esp+4] | ||||
|  | ||||
|  | ||||
|  | ||||
|         push    ebp | ||||
|         push    edi | ||||
|         push    esi | ||||
|         push    ebx | ||||
|  | ||||
|         sub     esp,NbStackAdd | ||||
|  | ||||
| ; initialize or check the variables used in match.asm. | ||||
|         mov     ebp,edx | ||||
|  | ||||
| ; chain_length = s->max_chain_length | ||||
| ; if (prev_length>=good_match) chain_length >>= 2 | ||||
|         mov     edx,[ebp+dep_chain_length] | ||||
|         mov     ebx,[ebp+dep_prev_length] | ||||
|         cmp     [ebp+dep_good_match],ebx | ||||
|         ja      noshr | ||||
|         shr     edx,2 | ||||
| noshr: | ||||
| ; we increment chain_length because in the asm, the --chain_lenght is in the beginning of the loop | ||||
|         inc     edx | ||||
|         mov     edi,[ebp+dep_nice_match] | ||||
|         mov     chain_length,edx | ||||
|         mov     eax,[ebp+dep_lookahead] | ||||
|         cmp     eax,edi | ||||
| ; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; | ||||
|         jae     nolookaheadnicematch | ||||
|         mov     edi,eax | ||||
| nolookaheadnicematch: | ||||
| ; best_len = s->prev_length | ||||
|         mov     best_len,ebx | ||||
|  | ||||
| ; window = s->window | ||||
|         mov     esi,[ebp+dep_window] | ||||
|         mov     ecx,[ebp+dep_strstart] | ||||
|         mov     window,esi | ||||
|  | ||||
|         mov     nice_match,edi | ||||
| ; scan = window + strstart | ||||
|         add     esi,ecx | ||||
|         mov     scan,esi | ||||
| ; dx = *window | ||||
|         mov     dx,word ptr [esi] | ||||
| ; bx = *(window+best_len-1) | ||||
|         mov     bx,word ptr [esi+ebx-1] | ||||
|         add     esi,MAX_MATCH-1 | ||||
| ; scan_start = *scan | ||||
|         mov     scan_start,dx | ||||
| ; strend = scan + MAX_MATCH-1 | ||||
|         mov     strend,esi | ||||
| ; bx = scan_end = *(window+best_len-1) | ||||
|  | ||||
| ;    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 | ||||
|  | ||||
| ; prev = s->prev | ||||
|         mov     edx,[ebp+dep_prev] | ||||
|         mov     prev,edx | ||||
|  | ||||
| ; | ||||
|         mov     edx,dword ptr [ebp+dep_match_start] | ||||
|         mov     bp,scan_start | ||||
|         mov     eax,cur_match | ||||
|         mov     match_start,edx | ||||
|  | ||||
|         mov     edx,window | ||||
|         mov     edi,edx | ||||
|         add     edi,best_len | ||||
|         mov     esi,prev | ||||
|         dec     edi | ||||
| ; windowlen = window + best_len -1 | ||||
|         mov     windowlen,edi | ||||
|  | ||||
|         jmp     beginloop2 | ||||
|         align   4 | ||||
|  | ||||
| ; here, in the loop | ||||
| ;       eax = ax = cur_match | ||||
| ;       ecx = limit | ||||
| ;        bx = scan_end | ||||
| ;        bp = scan_start | ||||
| ;       edi = windowlen (window + best_len -1) | ||||
| ;       esi = prev | ||||
|  | ||||
|  | ||||
| ;// here; chain_length <=16 | ||||
| normalbeg0add16: | ||||
|         add     chain_length,16 | ||||
|         jz      exitloop | ||||
| normalbeg0: | ||||
|         cmp     word ptr[edi+eax],bx | ||||
|         je      normalbeg2noroll | ||||
| rcontlabnoroll: | ||||
| ; cur_match = prev[cur_match & wmask] | ||||
|         and     eax,7fffh | ||||
|         mov     ax,word ptr[esi+eax*2] | ||||
| ; if cur_match > limit, go to exitloop | ||||
|         cmp     ecx,eax | ||||
|         jnb     exitloop | ||||
| ; if --chain_length != 0, go to exitloop | ||||
|         dec     chain_length | ||||
|         jnz     normalbeg0 | ||||
|         jmp     exitloop | ||||
|  | ||||
| normalbeg2noroll: | ||||
| ; if (scan_start==*(cur_match+window)) goto normalbeg2 | ||||
|         cmp     bp,word ptr[edx+eax] | ||||
|         jne     rcontlabnoroll | ||||
|         jmp     normalbeg2 | ||||
|  | ||||
| contloop3: | ||||
|         mov     edi,windowlen | ||||
|  | ||||
| ; cur_match = prev[cur_match & wmask] | ||||
|         and     eax,7fffh | ||||
|         mov     ax,word ptr[esi+eax*2] | ||||
| ; if cur_match > limit, go to exitloop | ||||
|         cmp     ecx,eax | ||||
| jnbexitloopshort1: | ||||
|         jnb     exitloop | ||||
| ; if --chain_length != 0, go to exitloop | ||||
|  | ||||
|  | ||||
| ; begin the main loop | ||||
| beginloop2: | ||||
|         sub     chain_length,16+1 | ||||
| ; if chain_length <=16, don't use the unrolled loop | ||||
|         jna     normalbeg0add16 | ||||
|  | ||||
| do16: | ||||
|         cmp     word ptr[edi+eax],bx | ||||
|         je      normalbeg2dc0 | ||||
|  | ||||
| maccn   MACRO   lab | ||||
|         and     eax,7fffh | ||||
|         mov     ax,word ptr[esi+eax*2] | ||||
|         cmp     ecx,eax | ||||
|         jnb     exitloop | ||||
|         cmp     word ptr[edi+eax],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   short normalbeg2dc11 | ||||
|  | ||||
| rcontloop11: | ||||
|         maccn   short normalbeg2dc12 | ||||
|  | ||||
| rcontloop12: | ||||
|         maccn   short normalbeg2dc13 | ||||
|  | ||||
| rcontloop13: | ||||
|         maccn   short normalbeg2dc14 | ||||
|  | ||||
| rcontloop14: | ||||
|         maccn   short normalbeg2dc15 | ||||
|  | ||||
| rcontloop15: | ||||
|         and     eax,7fffh | ||||
|         mov     ax,word ptr[esi+eax*2] | ||||
|         cmp     ecx,eax | ||||
|         jnb     exitloop | ||||
|  | ||||
|         sub     chain_length,16 | ||||
|         ja      do16 | ||||
|         jmp     normalbeg0add16 | ||||
|  | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
|  | ||||
| normbeg MACRO   rcontlab,valsub | ||||
| ; if we are here, we know that *(match+best_len-1) == scan_end | ||||
|         cmp     bp,word ptr[edx+eax] | ||||
| ; if (match != scan_start) goto rcontlab | ||||
|         jne     rcontlab | ||||
| ; calculate the good chain_length, and we'll compare scan and match string | ||||
|         add     chain_length,16-valsub | ||||
|         jmp     iseq | ||||
|         ENDM | ||||
|  | ||||
|  | ||||
| normalbeg2dc11: | ||||
|         normbeg rcontloop11,11 | ||||
|  | ||||
| normalbeg2dc12: | ||||
|         normbeg short rcontloop12,12 | ||||
|  | ||||
| normalbeg2dc13: | ||||
|         normbeg short rcontloop13,13 | ||||
|  | ||||
| normalbeg2dc14: | ||||
|         normbeg short rcontloop14,14 | ||||
|  | ||||
| normalbeg2dc15: | ||||
|         normbeg short rcontloop15,15 | ||||
|  | ||||
| normalbeg2dc10: | ||||
|         normbeg rcontloop10,10 | ||||
|  | ||||
| normalbeg2dc9: | ||||
|         normbeg rcontloop9,9 | ||||
|  | ||||
| normalbeg2dc8: | ||||
|         normbeg rcontloop8,8 | ||||
|  | ||||
| normalbeg2dc7: | ||||
|         normbeg rcontloop7,7 | ||||
|  | ||||
| normalbeg2dc6: | ||||
|         normbeg rcontloop6,6 | ||||
|  | ||||
| normalbeg2dc5: | ||||
|         normbeg rcontloop5,5 | ||||
|  | ||||
| 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: | ||||
|         mov     edi,window | ||||
|  | ||||
|         cmp     bp,word ptr[edi+eax] | ||||
|         jne     contloop3                   ; if *(ushf*)match != scan_start, continue | ||||
|  | ||||
| iseq: | ||||
| ; if we are here, we know that *(match+best_len-1) == scan_end | ||||
| ; and (match == scan_start) | ||||
|  | ||||
|         mov     edi,edx | ||||
|         mov     esi,scan                    ; esi = scan | ||||
|         add     edi,eax                     ; edi = window + cur_match = match | ||||
|  | ||||
|         mov     edx,[esi+3]                 ; compare manually dword at match+3 | ||||
|         xor     edx,[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      dl,dl | ||||
|         je      eq1rr | ||||
|         mov     esi,3 | ||||
|         jmp     trfinval | ||||
| eq1rr: | ||||
|         or      dx,dx | ||||
|         je      eq1 | ||||
|  | ||||
|         mov     esi,4 | ||||
|         jmp     trfinval | ||||
| eq1: | ||||
|         and     edx,0ffffffh | ||||
|         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     edx,[edi-4] | ||||
|         xor     edx,[esi] | ||||
|  | ||||
|         or      dl,dl | ||||
|         jnz     trfin | ||||
|         inc     esi | ||||
|  | ||||
|         or      dx,dx | ||||
|         jnz     trfin | ||||
|         inc     esi | ||||
|  | ||||
|         and     edx,0ffffffh | ||||
|         jnz     trfin | ||||
|         inc     esi | ||||
|  | ||||
| trfin: | ||||
|         sub     esi,scan          ; esi = len | ||||
| trfinval: | ||||
| ; here we have finised compare, and esi contain len of equal string | ||||
|         cmp     esi,best_len        ; if len > best_len, go newbestlen | ||||
|         ja      short newbestlen | ||||
| ; now we restore edx, ecx and esi, for the big loop | ||||
|         mov     esi,prev | ||||
|         mov     ecx,limit | ||||
|         mov     edx,window | ||||
|         jmp     contloop3 | ||||
|  | ||||
| newbestlen: | ||||
|         mov     best_len,esi        ; len become best_len | ||||
|  | ||||
|         mov     match_start,eax     ; save new position as match_start | ||||
|         cmp     esi,nice_match      ; if best_len >= nice_match, exit | ||||
|         jae     exitloop | ||||
|         mov     ecx,scan | ||||
|         mov     edx,window          ; restore edx=window | ||||
|         add     ecx,esi | ||||
|         add     esi,edx | ||||
|  | ||||
|         dec     esi | ||||
|         mov     windowlen,esi       ; windowlen = window + best_len-1 | ||||
|         mov     bx,[ecx-1]          ; bx = *(scan+best_len-1) = scan_end | ||||
|  | ||||
| ; now we restore ecx and esi, for the big loop : | ||||
|         mov     esi,prev | ||||
|         mov     ecx,limit | ||||
|         jmp     contloop3 | ||||
|  | ||||
| exitloop: | ||||
| ; exit : s->match_start=match_start | ||||
|         mov     ebx,match_start | ||||
|         mov     ebp,str_s | ||||
|         mov     ecx,best_len | ||||
|         mov     dword ptr [ebp+dep_match_start],ebx         | ||||
|         mov     eax,dword ptr [ebp+dep_lookahead] | ||||
|         cmp     ecx,eax | ||||
|         ja      minexlo | ||||
|         mov     eax,ecx | ||||
| minexlo: | ||||
| ; return min(best_len,s->lookahead) | ||||
|          | ||||
| ; restore stack and register ebx,esi,edi,ebp | ||||
|         add     esp,NbStackAdd | ||||
|  | ||||
|         pop     ebx | ||||
|         pop     esi | ||||
|         pop     edi | ||||
|         pop     ebp | ||||
|         ret | ||||
| InfoAuthor: | ||||
| ; please don't remove this string ! | ||||
| ; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary! | ||||
|         db     0dh,0ah,"GVMat32 optimised assembly code written 1996-98 by Gilles Vollant",0dh,0ah | ||||
|  | ||||
|  | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
| longest_match_7fff   endp | ||||
| ELSE | ||||
| _longest_match_7fff  endp | ||||
| ENDIF | ||||
|  | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
| cpudetect32     proc near | ||||
| ELSE | ||||
| _cpudetect32    proc near | ||||
| ENDIF | ||||
|  | ||||
|  | ||||
| 	pushfd                  ; push original EFLAGS | ||||
| 	pop     eax             ; get original EFLAGS | ||||
| 	mov     ecx, eax        ; save original EFLAGS | ||||
| 	xor     eax, 40000h     ; flip AC bit in EFLAGS | ||||
| 	push    eax             ; save new EFLAGS value on stack | ||||
| 	popfd                   ; replace current EFLAGS value | ||||
| 	pushfd                  ; get new EFLAGS | ||||
| 	pop     eax             ; store new EFLAGS in EAX | ||||
| 	xor     eax, ecx        ; can<61>t toggle AC bit, processor=80386 | ||||
| 	jz      end_cpu_is_386  ; jump if 80386 processor | ||||
| 	push    ecx | ||||
| 	popfd                   ; restore AC bit in EFLAGS first | ||||
|  | ||||
| 	pushfd | ||||
| 	pushfd | ||||
| 	pop     ecx | ||||
| 			 | ||||
| 	mov     eax, ecx        ; get original EFLAGS | ||||
| 	xor     eax, 200000h    ; flip ID bit in EFLAGS | ||||
| 	push    eax             ; save new EFLAGS value on stack | ||||
| 	popfd                   ; replace current EFLAGS value | ||||
| 	pushfd                  ; get new EFLAGS | ||||
| 	pop		eax	            ; store new EFLAGS in EAX | ||||
| 	popfd                   ; restore original EFLAGS | ||||
| 	xor		eax, ecx        ; can<61>t toggle ID bit, | ||||
| 	je		is_old_486		; processor=old | ||||
|  | ||||
| 	mov     eax,1 | ||||
| 	db      0fh,0a2h        ;CPUID    | ||||
|  | ||||
| exitcpudetect: | ||||
| 	ret | ||||
|  | ||||
| end_cpu_is_386: | ||||
| 	mov     eax,0300h | ||||
| 	jmp     exitcpudetect | ||||
|  | ||||
| is_old_486: | ||||
| 	mov     eax,0400h | ||||
| 	jmp     exitcpudetect | ||||
|  | ||||
| IFDEF NOUNDERLINE | ||||
| cpudetect32     endp | ||||
| ELSE | ||||
| _cpudetect32    endp | ||||
| ENDIF | ||||
|  | ||||
| _TEXT   ends | ||||
| end | ||||
| @@ -1,200 +0,0 @@ | ||||
| /* 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) | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include "deflate.h" | ||||
|  | ||||
| #undef FAR | ||||
| #include <windows.h> | ||||
|  | ||||
| #ifdef ASMV | ||||
| #define NIL 0 | ||||
|  | ||||
| #define UNALIGNED_OK | ||||
|  | ||||
|  | ||||
| /* if your C compiler don't add underline before function name, | ||||
| 		define ADD_UNDERLINE_ASMFUNC */ | ||||
| #ifdef ADD_UNDERLINE_ASMFUNC | ||||
| #define longest_match_7fff _longest_match_7fff | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| void match_init() | ||||
| { | ||||
| } | ||||
|  | ||||
| unsigned long cpudetect32(); | ||||
|  | ||||
| uInt longest_match_c( | ||||
|     deflate_state *s, | ||||
|     IPos cur_match);                             /* current match */ | ||||
|  | ||||
|  | ||||
| uInt longest_match_7fff( | ||||
|     deflate_state *s, | ||||
|     IPos cur_match);                             /* current match */ | ||||
|  | ||||
| uInt longest_match( | ||||
|     deflate_state *s, | ||||
|     IPos cur_match)                             /* current match */ | ||||
| { | ||||
| 	static uInt iIsPPro=2; | ||||
|  | ||||
|     if ((s->w_mask == 0x7fff) && (iIsPPro==0)) | ||||
|         return longest_match_7fff(s,cur_match); | ||||
|  | ||||
| 	if (iIsPPro==2) | ||||
| 		iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; | ||||
|  | ||||
| 	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 (uInt)best_len; | ||||
|     return s->lookahead; | ||||
| } | ||||
|  | ||||
| #endif /* ASMV */ | ||||
| @@ -1 +0,0 @@ | ||||
| c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm | ||||
| @@ -1,74 +0,0 @@ | ||||
| LIBRARY		"zlib" | ||||
|  | ||||
| DESCRIPTION	'"""zlib data compression library"""' | ||||
|  | ||||
|  | ||||
| VERSION		1.11 | ||||
|  | ||||
|  | ||||
| HEAPSIZE	1048576,8192 | ||||
|  | ||||
| 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 | ||||
|     compress2                      @39 | ||||
|     gzputs                         @40 | ||||
|     gzgets                         @41 | ||||
|  | ||||
| 	unzOpen                       @61 | ||||
| 	unzClose                      @62 | ||||
| 	unzGetGlobalInfo              @63 | ||||
| 	unzGetCurrentFileInfo         @64 | ||||
| 	unzGoToFirstFile              @65 | ||||
| 	unzGoToNextFile               @66 | ||||
| 	unzOpenCurrentFile            @67 | ||||
| 	unzReadCurrentFile            @68 | ||||
| 	unztell                       @70 | ||||
| 	unzeof                        @71 | ||||
| 	unzCloseCurrentFile           @72 | ||||
| 	unzGetGlobalComment           @73 | ||||
| 	unzStringFileNameCompare      @74 | ||||
| 	unzLocateFile                 @75 | ||||
| 	unzGetLocalExtrafield         @76 | ||||
|  | ||||
| 	zipOpen                       @80 | ||||
| 	zipOpenNewFileInZip           @81 | ||||
| 	zipWriteInFileInZip           @82 | ||||
| 	zipCloseFileInZip             @83 | ||||
| 	zipClose                      @84 | ||||
| @@ -1,651 +0,0 @@ | ||||
| # Microsoft Developer Studio Project File - Name="zlibvc" - Package Owner=<4> | ||||
| # Microsoft Developer Studio Generated Build File, Format Version 5.00 | ||||
| # ** DO NOT EDIT ** | ||||
|  | ||||
| # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 | ||||
| # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 | ||||
|  | ||||
| CFG=zlibvc - Win32 Release | ||||
| !MESSAGE This is not a valid makefile. To build this project using NMAKE, | ||||
| !MESSAGE use the Export Makefile command and run | ||||
| !MESSAGE  | ||||
| !MESSAGE NMAKE /f "zlibvc.mak". | ||||
| !MESSAGE  | ||||
| !MESSAGE You can specify a configuration when running NMAKE | ||||
| !MESSAGE by defining the macro CFG on the command line. For example: | ||||
| !MESSAGE  | ||||
| !MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Release" | ||||
| !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 "zlibvc - Win32 ReleaseAxp" (based on\ | ||||
|  "Win32 (ALPHA) Dynamic-Link Library") | ||||
| !MESSAGE "zlibvc - Win32 ReleaseWithoutAsm" (based on\ | ||||
|  "Win32 (x86) Dynamic-Link Library") | ||||
| !MESSAGE "zlibvc - Win32 ReleaseWithoutCrtdll" (based on\ | ||||
|  "Win32 (x86) Dynamic-Link Library") | ||||
| !MESSAGE  | ||||
|  | ||||
| # Begin Project | ||||
| # PROP Scc_ProjName "" | ||||
| # PROP Scc_LocalPath "" | ||||
|  | ||||
| !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 Ignore_Export_Lib 0 | ||||
| # PROP Target_Dir "" | ||||
| CPP=cl.exe | ||||
| # 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 "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c | ||||
| # SUBTRACT CPP /YX | ||||
| MTL=midl.exe | ||||
| # ADD BASE MTL /nologo /D "NDEBUG" /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| RSC=rc.exe | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| # ADD RSC /l 0x40c /d "NDEBUG" | ||||
| BSC32=bscmake.exe | ||||
| # ADD BASE BSC32 /nologo | ||||
| # ADD BSC32 /nologo | ||||
| 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 gvmat32.obj 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" | ||||
| # SUBTRACT LINK32 /pdb:none | ||||
|  | ||||
| !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 "" | ||||
| CPP=cl.exe | ||||
| # 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" /FD /c | ||||
| # SUBTRACT CPP /YX | ||||
| MTL=midl.exe | ||||
| # ADD BASE MTL /nologo /D "_DEBUG" /win32 | ||||
| # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 | ||||
| RSC=rc.exe | ||||
| # ADD BASE RSC /l 0x40c /d "_DEBUG" | ||||
| # ADD RSC /l 0x40c /d "_DEBUG" | ||||
| BSC32=bscmake.exe | ||||
| # ADD BASE BSC32 /nologo | ||||
| # ADD BSC32 /nologo | ||||
| 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" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| # PROP BASE Use_MFC 0 | ||||
| # PROP BASE Use_Debug_Libraries 0 | ||||
| # PROP BASE Output_Dir "zlibvc__" | ||||
| # PROP BASE Intermediate_Dir "zlibvc__" | ||||
| # PROP BASE Ignore_Export_Lib 0 | ||||
| # PROP BASE Target_Dir "" | ||||
| # PROP Use_MFC 0 | ||||
| # PROP Use_Debug_Libraries 0 | ||||
| # PROP Output_Dir "zlibvc__" | ||||
| # PROP Intermediate_Dir "zlibvc__" | ||||
| # PROP Ignore_Export_Lib 0 | ||||
| # PROP Target_Dir "" | ||||
| MTL=midl.exe | ||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| CPP=cl.exe | ||||
| # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c | ||||
| # ADD CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c | ||||
| # SUBTRACT CPP /YX | ||||
| RSC=rc.exe | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| # ADD RSC /l 0x40c /d "NDEBUG" | ||||
| BSC32=bscmake.exe | ||||
| # ADD BASE BSC32 /nologo | ||||
| # ADD BSC32 /nologo | ||||
| LINK32=link.exe | ||||
| # ADD BASE LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:".\Release\zlib.dll" | ||||
| # SUBTRACT BASE LINK32 /pdb:none | ||||
| # ADD LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:"zlibvc__\zlib.dll" | ||||
| # SUBTRACT LINK32 /pdb:none | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| # PROP BASE Use_MFC 0 | ||||
| # PROP BASE Use_Debug_Libraries 0 | ||||
| # PROP BASE Output_Dir "zlibvc_0" | ||||
| # PROP BASE Intermediate_Dir "zlibvc_0" | ||||
| # PROP BASE Ignore_Export_Lib 0 | ||||
| # PROP BASE Target_Dir "" | ||||
| # PROP Use_MFC 0 | ||||
| # PROP Use_Debug_Libraries 0 | ||||
| # PROP Output_Dir "zlibvc_0" | ||||
| # PROP Intermediate_Dir "zlibvc_0" | ||||
| # PROP Ignore_Export_Lib 0 | ||||
| # PROP Target_Dir "" | ||||
| CPP=cl.exe | ||||
| # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c | ||||
| # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c | ||||
| # SUBTRACT CPP /YX | ||||
| MTL=midl.exe | ||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| RSC=rc.exe | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| # ADD RSC /l 0x40c /d "NDEBUG" | ||||
| BSC32=bscmake.exe | ||||
| # ADD BASE BSC32 /nologo | ||||
| # ADD BSC32 /nologo | ||||
| 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 crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll" | ||||
| # SUBTRACT BASE LINK32 /pdb:none | ||||
| # 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:".\zlibvc_0\zlib.dll" | ||||
| # SUBTRACT LINK32 /pdb:none | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| # PROP BASE Use_MFC 0 | ||||
| # PROP BASE Use_Debug_Libraries 0 | ||||
| # PROP BASE Output_Dir "zlibvc_1" | ||||
| # PROP BASE Intermediate_Dir "zlibvc_1" | ||||
| # PROP BASE Ignore_Export_Lib 0 | ||||
| # PROP BASE Target_Dir "" | ||||
| # PROP Use_MFC 0 | ||||
| # PROP Use_Debug_Libraries 0 | ||||
| # PROP Output_Dir "zlibvc_1" | ||||
| # PROP Intermediate_Dir "zlibvc_1" | ||||
| # PROP Ignore_Export_Lib 0 | ||||
| # PROP Target_Dir "" | ||||
| CPP=cl.exe | ||||
| # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /YX /FD /c | ||||
| # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c | ||||
| # SUBTRACT CPP /YX | ||||
| MTL=midl.exe | ||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| RSC=rc.exe | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| # ADD RSC /l 0x40c /d "NDEBUG" | ||||
| BSC32=bscmake.exe | ||||
| # ADD BASE BSC32 /nologo | ||||
| # ADD BSC32 /nologo | ||||
| LINK32=link.exe | ||||
| # ADD BASE LINK32 gvmat32.obj 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" | ||||
| # SUBTRACT BASE LINK32 /pdb:none | ||||
| # ADD LINK32 gvmat32.obj 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:".\zlibvc_1\zlib.dll" | ||||
| # SUBTRACT LINK32 /pdb:none | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # Begin Target | ||||
|  | ||||
| # Name "zlibvc - Win32 Release" | ||||
| # Name "zlibvc - Win32 Debug" | ||||
| # Name "zlibvc - Win32 ReleaseAxp" | ||||
| # Name "zlibvc - Win32 ReleaseWithoutAsm" | ||||
| # Name "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
| # Begin Group "Source Files" | ||||
|  | ||||
| # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\adler32.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_ADLER=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\compress.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_COMPR=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\crc32.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_CRC32=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\deflate.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_DEFLA=\ | ||||
| 	".\deflate.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\gvmat32c.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\gzio.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_GZIO_=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infblock.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFBL=\ | ||||
| 	".\infblock.h"\ | ||||
| 	".\infcodes.h"\ | ||||
| 	".\inftrees.h"\ | ||||
| 	".\infutil.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infcodes.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFCO=\ | ||||
| 	".\infblock.h"\ | ||||
| 	".\infcodes.h"\ | ||||
| 	".\inffast.h"\ | ||||
| 	".\inftrees.h"\ | ||||
| 	".\infutil.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\inffast.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFFA=\ | ||||
| 	".\infblock.h"\ | ||||
| 	".\infcodes.h"\ | ||||
| 	".\inffast.h"\ | ||||
| 	".\inftrees.h"\ | ||||
| 	".\infutil.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\inflate.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFLA=\ | ||||
| 	".\infblock.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\inftrees.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFTR=\ | ||||
| 	".\inftrees.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infutil.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_INFUT=\ | ||||
| 	".\infblock.h"\ | ||||
| 	".\infcodes.h"\ | ||||
| 	".\inftrees.h"\ | ||||
| 	".\infutil.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\trees.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_TREES=\ | ||||
| 	".\deflate.h"\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\uncompr.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_UNCOM=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\unzip.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zip.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zlib.rc | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zlibvc.def | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zutil.c | ||||
|  | ||||
| !IF  "$(CFG)" == "zlibvc - Win32 Release" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp" | ||||
|  | ||||
| DEP_CPP_ZUTIL=\ | ||||
| 	".\zconf.h"\ | ||||
| 	".\zlib.h"\ | ||||
| 	".\zutil.h"\ | ||||
| 	 | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| # End Source File | ||||
| # End Group | ||||
| # Begin Group "Header Files" | ||||
|  | ||||
| # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\deflate.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infblock.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infcodes.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\inffast.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\inftrees.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\infutil.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zconf.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zlib.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=.\zutil.h | ||||
| # End Source File | ||||
| # End Group | ||||
| # Begin Group "Resource Files" | ||||
|  | ||||
| # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" | ||||
| # End Group | ||||
| # End Target | ||||
| # End Project | ||||
| @@ -1,41 +0,0 @@ | ||||
| Microsoft Developer Studio Workspace File, Format Version 5.00 | ||||
| # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Project: "zlibstat"=.\zlibstat.dsp - Package Owner=<4> | ||||
|  | ||||
| Package=<5> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| Package=<4> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Project: "zlibvc"=.\zlibvc.dsp - Package Owner=<4> | ||||
|  | ||||
| Package=<5> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| Package=<4> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Global: | ||||
|  | ||||
| Package=<5> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| Package=<3> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| @@ -1,33 +1,33 @@ | ||||
| {*******************************************************} | ||||
| {                                                       } | ||||
| {       Delphi Supplemental Components                  } | ||||
| {       Borland Delphi Supplemental Components          } | ||||
| {       ZLIB Data Compression Interface Unit            } | ||||
| {                                                       } | ||||
| {       Copyright (c) 1997 Borland International        } | ||||
| {       Copyright (c) 1997,99 Borland Corporation       } | ||||
| {                                                       } | ||||
| {*******************************************************} | ||||
| 
 | ||||
| { Modified for zlib 1.1.3 by Davide Moretti <dave@rimini.com } | ||||
| { Updated for zlib 1.2.x by Cosmin Truta <cosmint@cs.ubbcluj.ro> } | ||||
| 
 | ||||
| unit zlib; | ||||
| unit ZLib; | ||||
| 
 | ||||
| interface | ||||
| 
 | ||||
| uses Sysutils, Classes; | ||||
| uses SysUtils, Classes; | ||||
| 
 | ||||
| type | ||||
|   TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; | ||||
|   TFree = procedure (AppData, Block: Pointer); | ||||
|   TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl; | ||||
|   TFree = procedure (AppData, Block: Pointer); cdecl; | ||||
| 
 | ||||
|   // Internal structure.  Ignore. | ||||
|   TZStreamRec = packed record | ||||
|     next_in: PChar;       // next input byte | ||||
|     avail_in: Integer;    // number of bytes available at next_in | ||||
|     total_in: Integer;    // total nb of input bytes read so far | ||||
|     total_in: Longint;    // total nb of input bytes read so far | ||||
| 
 | ||||
|     next_out: PChar;      // next output byte should be put here | ||||
|     avail_out: Integer;   // remaining free space at next_out | ||||
|     total_out: Integer;   // total nb of bytes output so far | ||||
|     total_out: Longint;   // total nb of bytes output so far | ||||
| 
 | ||||
|     msg: PChar;           // last error message, NULL if no error | ||||
|     internal: Pointer;    // not visible by applications | ||||
| @@ -37,8 +37,8 @@ type | ||||
|     AppData: Pointer;     // private data object passed to zalloc and zfree | ||||
| 
 | ||||
|     data_type: Integer;   // best guess about the data type: ascii or binary | ||||
|     adler: Integer;       // adler32 value of the uncompressed data | ||||
|     reserved: Integer;    // reserved for future use | ||||
|     adler: Longint;       // adler32 value of the uncompressed data | ||||
|     reserved: Longint;    // reserved for future use | ||||
|   end; | ||||
| 
 | ||||
|   // Abstract ancestor class | ||||
| @@ -143,18 +143,26 @@ procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; | ||||
| procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; | ||||
|  OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); | ||||
| 
 | ||||
| { DecompressToUserBuf decompresses data, buffer to buffer, in one call. | ||||
|    In: InBuf = ptr to compressed data | ||||
|        InBytes = number of bytes in InBuf | ||||
|   Out: OutBuf = ptr to user-allocated buffer to contain decompressed data | ||||
|        BufSize = number of bytes in OutBuf   } | ||||
| procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; | ||||
|   const OutBuf: Pointer; BufSize: Integer); | ||||
| 
 | ||||
| const | ||||
|   zlib_version = '1.1.3'; | ||||
|   zlib_version = '1.2.0'; | ||||
| 
 | ||||
| type | ||||
|   EZlibError = class(Exception); | ||||
|   ECompressionError = class(EZlibError); | ||||
|   EDecompressionError = class(EZlibError); | ||||
| 
 | ||||
| function adler32(adler: Integer; buf: PChar; len: Integer): Integer; | ||||
| 
 | ||||
| implementation | ||||
| 
 | ||||
| uses ZLibConst; | ||||
| 
 | ||||
| const | ||||
|   Z_NO_FLUSH      = 0; | ||||
|   Z_PARTIAL_FLUSH = 1; | ||||
| @@ -179,6 +187,7 @@ const | ||||
| 
 | ||||
|   Z_FILTERED            = 1; | ||||
|   Z_HUFFMAN_ONLY        = 2; | ||||
|   Z_RLE                 = 3; | ||||
|   Z_DEFAULT_STRATEGY    = 0; | ||||
| 
 | ||||
|   Z_BINARY   = 0; | ||||
| @@ -187,49 +196,34 @@ const | ||||
| 
 | ||||
|   Z_DEFLATED = 8; | ||||
| 
 | ||||
|   _z_errmsg: array[0..9] of PChar = ( | ||||
|     'need dictionary',      // Z_NEED_DICT      (2) | ||||
|     'stream end',           // Z_STREAM_END     (1) | ||||
|     '',                     // Z_OK             (0) | ||||
|     'file error',           // Z_ERRNO          (-1) | ||||
|     'stream error',         // Z_STREAM_ERROR   (-2) | ||||
|     'data error',           // Z_DATA_ERROR     (-3) | ||||
|     'insufficient memory',  // Z_MEM_ERROR      (-4) | ||||
|     'buffer error',         // Z_BUF_ERROR      (-5) | ||||
|     'incompatible version', // Z_VERSION_ERROR  (-6) | ||||
|     '' | ||||
|   ); | ||||
| 
 | ||||
| {$L adler32.obj} | ||||
| {$L compress.obj} | ||||
| {$L crc32.obj} | ||||
| {$L deflate.obj} | ||||
| {$L infback.obj} | ||||
| {$L inffast.obj} | ||||
| {$L inflate.obj} | ||||
| {$L inftrees.obj} | ||||
| {$L trees.obj} | ||||
| {$L adler32.obj} | ||||
| {$L infblock.obj} | ||||
| {$L infcodes.obj} | ||||
| {$L infutil.obj} | ||||
| {$L inffast.obj} | ||||
| {$L uncompr.obj} | ||||
| {$L zutil.obj} | ||||
| 
 | ||||
| procedure _tr_init; external; | ||||
| procedure _tr_tally; external; | ||||
| procedure _tr_flush_block; external; | ||||
| procedure _tr_align; external; | ||||
| procedure _tr_stored_block; external; | ||||
| function adler32; external; | ||||
| procedure inflate_blocks_new; external; | ||||
| procedure inflate_blocks; external; | ||||
| procedure inflate_blocks_reset; external; | ||||
| procedure inflate_blocks_free; external; | ||||
| procedure inflate_set_dictionary; external; | ||||
| procedure inflate_trees_bits; external; | ||||
| procedure inflate_trees_dynamic; external; | ||||
| procedure inflate_trees_fixed; external; | ||||
| procedure inflate_codes_new; external; | ||||
| procedure inflate_codes; external; | ||||
| procedure inflate_codes_free; external; | ||||
| procedure _inflate_mask; external; | ||||
| procedure inflate_flush; external; | ||||
| procedure inflate_fast; external; | ||||
| procedure adler32; external; | ||||
| procedure compressBound; external; | ||||
| procedure crc32; external; | ||||
| procedure deflateInit2_; external; | ||||
| procedure deflateParams; external; | ||||
| 
 | ||||
| function _malloc(Size: Integer): Pointer; cdecl; | ||||
| begin | ||||
|   Result := AllocMem(Size); | ||||
| end; | ||||
| 
 | ||||
| procedure _free(Block: Pointer); cdecl; | ||||
| begin | ||||
|   FreeMem(Block); | ||||
| end; | ||||
| 
 | ||||
| procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; | ||||
| begin | ||||
| @@ -257,22 +251,23 @@ function inflateEnd(var strm: TZStreamRec): Integer; external; | ||||
| function inflateReset(var strm: TZStreamRec): Integer; external; | ||||
| 
 | ||||
| 
 | ||||
| function zcalloc(AppData: Pointer; Items, Size: Integer): Pointer; | ||||
| function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; | ||||
| begin | ||||
|   GetMem(Result, Items*Size); | ||||
| //  GetMem(Result, Items*Size); | ||||
|   Result := AllocMem(Items * Size); | ||||
| end; | ||||
| 
 | ||||
| procedure zcfree(AppData, Block: Pointer); | ||||
| procedure zlibFreeMem(AppData, Block: Pointer); cdecl; | ||||
| begin | ||||
|   FreeMem(Block); | ||||
| end; | ||||
| 
 | ||||
| function zlibCheck(code: Integer): Integer; | ||||
| {function zlibCheck(code: Integer): Integer; | ||||
| begin | ||||
|   Result := code; | ||||
|   if code < 0 then | ||||
|     raise EZlibError.Create('error');    //!! | ||||
| end; | ||||
| end;} | ||||
| 
 | ||||
| function CCheck(code: Integer): Integer; | ||||
| begin | ||||
| @@ -295,6 +290,8 @@ var | ||||
|   P: Pointer; | ||||
| begin | ||||
|   FillChar(strm, sizeof(strm), 0); | ||||
|   strm.zalloc := zlibAllocMem; | ||||
|   strm.zfree := zlibFreeMem; | ||||
|   OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; | ||||
|   GetMem(OutBuf, OutBytes); | ||||
|   try | ||||
| @@ -332,6 +329,8 @@ var | ||||
|   BufInc: Integer; | ||||
| begin | ||||
|   FillChar(strm, sizeof(strm), 0); | ||||
|   strm.zalloc := zlibAllocMem; | ||||
|   strm.zfree := zlibFreeMem; | ||||
|   BufInc := (InBytes + 255) and not 255; | ||||
|   if OutEstimate = 0 then | ||||
|     OutBytes := BufInc | ||||
| @@ -364,6 +363,26 @@ begin | ||||
|   end; | ||||
| end; | ||||
| 
 | ||||
| procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; | ||||
|   const OutBuf: Pointer; BufSize: Integer); | ||||
| var | ||||
|   strm: TZStreamRec; | ||||
| begin | ||||
|   FillChar(strm, sizeof(strm), 0); | ||||
|   strm.zalloc := zlibAllocMem; | ||||
|   strm.zfree := zlibFreeMem; | ||||
|   strm.next_in := InBuf; | ||||
|   strm.avail_in := InBytes; | ||||
|   strm.next_out := OutBuf; | ||||
|   strm.avail_out := BufSize; | ||||
|   DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); | ||||
|   try | ||||
|     if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then | ||||
|       raise EZlibError.CreateRes(@sTargetBufferTooSmall); | ||||
|   finally | ||||
|     DCheck(inflateEnd(strm)); | ||||
|   end; | ||||
| end; | ||||
| 
 | ||||
| // TCustomZlibStream | ||||
| 
 | ||||
| @@ -372,6 +391,8 @@ begin | ||||
|   inherited Create; | ||||
|   FStrm := Strm; | ||||
|   FStrmPos := Strm.Position; | ||||
|   FZRec.zalloc := zlibAllocMem; | ||||
|   FZRec.zfree := zlibFreeMem; | ||||
| end; | ||||
| 
 | ||||
| procedure TCustomZLibStream.Progress(Sender: TObject); | ||||
| @@ -417,7 +438,7 @@ end; | ||||
| 
 | ||||
| function TCompressionStream.Read(var Buffer; Count: Longint): Longint; | ||||
| begin | ||||
|   raise ECompressionError.Create('Invalid stream operation'); | ||||
|   raise ECompressionError.CreateRes(@sInvalidStreamOp); | ||||
| end; | ||||
| 
 | ||||
| function TCompressionStream.Write(const Buffer; Count: Longint): Longint; | ||||
| @@ -445,7 +466,7 @@ begin | ||||
|   if (Offset = 0) and (Origin = soFromCurrent) then | ||||
|     Result := FZRec.total_in | ||||
|   else | ||||
|     raise ECompressionError.Create('Invalid stream operation'); | ||||
|     raise ECompressionError.CreateRes(@sInvalidStreamOp); | ||||
| end; | ||||
| 
 | ||||
| function TCompressionStream.GetCompressionRate: Single; | ||||
| @@ -469,6 +490,7 @@ end; | ||||
| 
 | ||||
| destructor TDecompressionStream.Destroy; | ||||
| begin | ||||
|   FStrm.Seek(-FZRec.avail_in, 1); | ||||
|   inflateEnd(FZRec); | ||||
|   inherited Destroy; | ||||
| end; | ||||
| @@ -492,14 +514,14 @@ begin | ||||
|       FStrmPos := FStrm.Position; | ||||
|       Progress(Self); | ||||
|     end; | ||||
|     DCheck(inflate(FZRec, 0)); | ||||
|     CCheck(inflate(FZRec, 0)); | ||||
|   end; | ||||
|   Result := Count; | ||||
| end; | ||||
| 
 | ||||
| function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; | ||||
| begin | ||||
|   raise EDecompressionError.Create('Invalid stream operation'); | ||||
|   raise EDecompressionError.CreateRes(@sInvalidStreamOp); | ||||
| end; | ||||
| 
 | ||||
| function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; | ||||
| @@ -527,8 +549,9 @@ begin | ||||
|     end; | ||||
|   end | ||||
|   else | ||||
|     raise EDecompressionError.Create('Invalid stream operation'); | ||||
|     raise EDecompressionError.CreateRes(@sInvalidStreamOp); | ||||
|   Result := FZRec.total_out; | ||||
| end; | ||||
| 
 | ||||
| 
 | ||||
| end. | ||||
							
								
								
									
										11
									
								
								contrib/delphi/ZLibConst.pas
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								contrib/delphi/ZLibConst.pas
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| unit ZLibConst; | ||||
|  | ||||
| interface | ||||
|  | ||||
| resourcestring | ||||
|   sTargetBufferTooSmall = 'ZLib error: target buffer may be too small'; | ||||
|   sInvalidStreamOp = 'Invalid stream operation'; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| end. | ||||
							
								
								
									
										76
									
								
								contrib/delphi/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								contrib/delphi/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
|  | ||||
| Overview | ||||
| ======== | ||||
|  | ||||
| This directory contains an update to the ZLib interface unit, | ||||
| distributed by Borland as a Delphi supplemental component. | ||||
|  | ||||
| The original ZLib unit is Copyright (c) 1997,99 Borland Corp., | ||||
| and is based on zlib version 1.0.4.  There are a series of bugs | ||||
| and security problems associated with that old zlib version, and | ||||
| we recommend the users to update their ZLib unit. | ||||
|  | ||||
|  | ||||
| Summary of modifications | ||||
| ======================== | ||||
|  | ||||
| - Improved makefile, adapted to zlib version 1.2.0. | ||||
|  | ||||
| - Some field types from TZStreamRec are changed from Integer to | ||||
|   Longint, for consistency with the zlib.h header, and for 64-bit | ||||
|   readiness. | ||||
|  | ||||
| - The zlib_version constant is updated. | ||||
|  | ||||
| - The new Z_RLE strategy has its corresponding symbolic constant. | ||||
|  | ||||
| - The allocation and deallocation functions and function types | ||||
|   (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl, | ||||
|   and _malloc and _free are added as C RTL stubs.  As a result, | ||||
|   the original C sources of zlib can be compiled out of the box, | ||||
|   and linked to the ZLib unit. | ||||
|  | ||||
|  | ||||
| Suggestions for improvements | ||||
| ============================ | ||||
|  | ||||
| Currently, the ZLib unit provides only a limited wrapper around | ||||
| the zlib library, and much of the original zlib functionality is | ||||
| missing.  Handling compressed file formats like ZIP/GZIP or PNG | ||||
| cannot be implemented without having this functionality. | ||||
| Applications that handle these formats are either using their own, | ||||
| duplicated code, or not using the ZLib unit at all. | ||||
|  | ||||
| Here are a few suggestions: | ||||
|  | ||||
| - Checksum class wrappers around adler32() and crc32(), similar | ||||
|   to the Java classes that implement the java.util.zip.Checksum | ||||
|   interface. | ||||
|  | ||||
| - The ability to read and write raw deflate streams, without the | ||||
|   zlib stream header and trailer.  Raw deflate streams are used | ||||
|   in the ZIP file format. | ||||
|  | ||||
| - The ability to read and write gzip streams, used in the GZIP | ||||
|   file format, and normally produced by the gzip program. | ||||
|  | ||||
| - The ability to select a different compression strategy, useful | ||||
|   to PNG and MNG image compression, and to multimedia compression | ||||
|   in general.  Besides the compression level | ||||
|  | ||||
|     TCompressionLevel = (clNone, clFastest, clDefault, clMax); | ||||
|  | ||||
|   which, in fact, could have used the 'z' prefix and avoided | ||||
|   TColor-like symbols | ||||
|  | ||||
|     TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax); | ||||
|  | ||||
|   there could be a compression strategy | ||||
|  | ||||
|     TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle); | ||||
|  | ||||
| - ZIP and GZIP stream handling via TStreams. | ||||
|  | ||||
|  | ||||
| -- | ||||
| Cosmin Truta <cosmint@cs.ubbcluj.ro> | ||||
| @@ -1,36 +0,0 @@ | ||||
| # Makefile for zlib32bd.lib | ||||
| # ------------- Borland C++ 4.5 ------------- | ||||
|  | ||||
| # The (32-bit) zlib32bd.lib made with this makefile is intended for use  | ||||
| # in making the (32-bit) DLL, png32bd.dll. It uses the "stdcall" calling  | ||||
| # convention. | ||||
|  | ||||
| CFLAGS= -ps -O2 -C -K -N- -k- -d -3 -r- -w-par -w-aus -WDE | ||||
| CC=f:\bc45\bin\bcc32 | ||||
| LIBFLAGS= /C | ||||
| LIB=f:\bc45\bin\tlib | ||||
| ZLIB=zlib32bd.lib | ||||
|  | ||||
| .autodepend | ||||
| .c.obj: | ||||
|         $(CC) -c $(CFLAGS) $< | ||||
|  | ||||
| OBJ1=adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj  | ||||
| OBJ2=infcodes.obj inflate.obj inftrees.obj infutil.obj inffast.obj  | ||||
| OBJ3=trees.obj uncompr.obj zutil.obj | ||||
| pOBJ1=+adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infblock.obj  | ||||
| pOBJ2=+infcodes.obj+inflate.obj+inftrees.obj+infutil.obj+inffast.obj  | ||||
| pOBJ3=+trees.obj+uncompr.obj+zutil.obj | ||||
|  | ||||
| all: $(ZLIB) | ||||
|  | ||||
| $(ZLIB): $(OBJ1) $(OBJ2) $(OBJ3) | ||||
|         @if exist $@ del $@ | ||||
|         $(LIB) @&&| | ||||
| $@ $(LIBFLAGS) & | ||||
| $(pOBJ1) & | ||||
| $(pOBJ2) & | ||||
| $(pOBJ3) | ||||
| | | ||||
|  | ||||
| # End of makefile for zlib32bd.lib | ||||
							
								
								
									
										93
									
								
								contrib/delphi/zlibd32.mak
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								contrib/delphi/zlibd32.mak
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| # Makefile for zlib | ||||
| # For use with Delphi and C++ Builder under Win32 | ||||
| # Updated for zlib 1.2.x by Cosmin Truta | ||||
|  | ||||
| # ------------ Borland C++ ------------ | ||||
|  | ||||
| # This project uses the Delphi (fastcall/register) calling convention: | ||||
| LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl | ||||
|  | ||||
| CC = bcc32 | ||||
| LD = bcc32 | ||||
| AR = tlib | ||||
| # do not use "-pr" in CFLAGS | ||||
| CFLAGS = -a -d -k- -O2 $(LOC) | ||||
| LDFLAGS = | ||||
|  | ||||
|  | ||||
| # variables | ||||
| ZLIB_LIB = zlib.lib | ||||
|  | ||||
| OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj | ||||
| OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | ||||
| OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj | ||||
| OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | ||||
|  | ||||
|  | ||||
| # targets | ||||
| all: $(ZLIB_LIB) example.exe minigzip.exe | ||||
|  | ||||
| .c.obj: | ||||
| 	$(CC) -c $(CFLAGS) $*.c | ||||
|  | ||||
| adler32.obj: adler32.c zlib.h zconf.h | ||||
|  | ||||
| compress.obj: compress.c zlib.h zconf.h | ||||
|  | ||||
| crc32.obj: crc32.c zlib.h zconf.h crc32.h | ||||
|  | ||||
| deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | ||||
|  | ||||
| gzio.obj: gzio.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h | ||||
|  | ||||
| inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h | ||||
|  | ||||
| trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h | ||||
|  | ||||
| uncompr.obj: uncompr.c zlib.h zconf.h | ||||
|  | ||||
| zutil.obj: zutil.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| example.obj: example.c zlib.h zconf.h | ||||
|  | ||||
| minigzip.obj: minigzip.c zlib.h zconf.h | ||||
|  | ||||
|  | ||||
| # For the sake of the old Borland make, | ||||
| # the command line is cut to fit in the MS-DOS 128 byte limit: | ||||
| $(ZLIB_LIB): $(OBJ1) $(OBJ2) | ||||
| 	-del $(ZLIB_LIB) | ||||
| 	$(AR) $(ZLIB_LIB) $(OBJP1) | ||||
| 	$(AR) $(ZLIB_LIB) $(OBJP2) | ||||
|  | ||||
|  | ||||
| # testing | ||||
| test: example.exe minigzip.exe | ||||
| 	example | ||||
| 	echo hello world | minigzip | minigzip -d | ||||
|  | ||||
| example.exe: example.obj $(ZLIB_LIB) | ||||
| 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) | ||||
|  | ||||
| minigzip.exe: minigzip.obj $(ZLIB_LIB) | ||||
| 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) | ||||
|  | ||||
|  | ||||
| # cleanup | ||||
| clean: | ||||
| 	-del *.obj | ||||
| 	-del *.exe | ||||
| 	-del *.lib | ||||
| 	-del *.tds | ||||
| 	-del zlib.bak | ||||
| 	-del foo.gz | ||||
|  | ||||
| @@ -1,169 +0,0 @@ | ||||
| unit zlibdef; | ||||
|  | ||||
| interface | ||||
|  | ||||
| uses | ||||
|   Windows; | ||||
|  | ||||
| const | ||||
|   ZLIB_VERSION = '1.1.3'; | ||||
|  | ||||
| type | ||||
|   voidpf = Pointer; | ||||
|   int    = Integer; | ||||
|   uInt   = Cardinal; | ||||
|   pBytef = PChar; | ||||
|   uLong  = Cardinal; | ||||
|  | ||||
|   alloc_func = function(opaque: voidpf; items, size: uInt): voidpf; | ||||
|                     stdcall; | ||||
|   free_func  = procedure(opaque, address: voidpf); | ||||
|                     stdcall; | ||||
|  | ||||
|   internal_state = Pointer; | ||||
|  | ||||
|   z_streamp = ^z_stream; | ||||
|   z_stream = packed record | ||||
|     next_in: pBytef;          // next input byte | ||||
|     avail_in: uInt;           // number of bytes available at next_in | ||||
|     total_in: uLong;          // total nb of input bytes read so far | ||||
|  | ||||
|     next_out: pBytef;         // next output byte should be put there | ||||
|     avail_out: uInt;          // remaining free space at next_out | ||||
|     total_out: uLong;         // total nb of bytes output so far | ||||
|  | ||||
|     msg: PChar;               // last error message, NULL if no error | ||||
|     state: internal_state;    // not visible by applications | ||||
|  | ||||
|     zalloc: alloc_func;       // used to allocate the internal state | ||||
|     zfree: free_func;         // used to free the internal state | ||||
|     opaque: voidpf;           // private data object passed to zalloc and zfree | ||||
|  | ||||
|     data_type: int;           // best guess about the data type: ascii or binary | ||||
|     adler: uLong;             // adler32 value of the uncompressed data | ||||
|     reserved: uLong;          // reserved for future use | ||||
|     end; | ||||
|  | ||||
| const | ||||
|   Z_NO_FLUSH      = 0; | ||||
|   Z_SYNC_FLUSH    = 2; | ||||
|   Z_FULL_FLUSH    = 3; | ||||
|   Z_FINISH        = 4; | ||||
|  | ||||
|   Z_OK            = 0; | ||||
|   Z_STREAM_END    = 1; | ||||
|  | ||||
|   Z_NO_COMPRESSION         =  0; | ||||
|   Z_BEST_SPEED             =  1; | ||||
|   Z_BEST_COMPRESSION       =  9; | ||||
|   Z_DEFAULT_COMPRESSION    = -1; | ||||
|  | ||||
|   Z_FILTERED            = 1; | ||||
|   Z_HUFFMAN_ONLY        = 2; | ||||
|   Z_DEFAULT_STRATEGY    = 0; | ||||
|  | ||||
|   Z_BINARY   = 0; | ||||
|   Z_ASCII    = 1; | ||||
|   Z_UNKNOWN  = 2; | ||||
|  | ||||
|   Z_DEFLATED    = 8; | ||||
|  | ||||
|   MAX_MEM_LEVEL = 9; | ||||
|  | ||||
| function adler32(adler: uLong; const buf: pBytef; len: uInt): uLong; | ||||
|              stdcall; | ||||
| function crc32(crc: uLong; const buf: pBytef; len: uInt): uLong; | ||||
|              stdcall; | ||||
| function deflate(strm: z_streamp; flush: int): int; | ||||
|              stdcall; | ||||
| function deflateCopy(dest, source: z_streamp): int; | ||||
|              stdcall; | ||||
| function deflateEnd(strm: z_streamp): int; | ||||
|              stdcall; | ||||
| function deflateInit2_(strm: z_streamp; level, method, | ||||
|                        windowBits, memLevel, strategy: int; | ||||
|                        const version: PChar; stream_size: int): int; | ||||
|              stdcall; | ||||
| function deflateInit_(strm: z_streamp; level: int; | ||||
|                       const version: PChar; stream_size: int): int; | ||||
|              stdcall; | ||||
| function deflateParams(strm: z_streamp; level, strategy: int): int; | ||||
|              stdcall; | ||||
| function deflateReset(strm: z_streamp): int; | ||||
|              stdcall; | ||||
| function deflateSetDictionary(strm: z_streamp; | ||||
|                               const dictionary: pBytef; | ||||
|                               dictLength: uInt): int; | ||||
|              stdcall; | ||||
| function inflate(strm: z_streamp; flush: int): int; | ||||
|              stdcall; | ||||
| function inflateEnd(strm: z_streamp): int; | ||||
|              stdcall; | ||||
| function inflateInit2_(strm: z_streamp; windowBits: int; | ||||
|                        const version: PChar; stream_size: int): int; | ||||
|              stdcall; | ||||
| function inflateInit_(strm: z_streamp; const version: PChar; | ||||
|                       stream_size: int): int; | ||||
|              stdcall; | ||||
| function inflateReset(strm: z_streamp): int; | ||||
|              stdcall; | ||||
| function inflateSetDictionary(strm: z_streamp; | ||||
|                               const dictionary: pBytef; | ||||
|                               dictLength: uInt): int; | ||||
|              stdcall; | ||||
| function inflateSync(strm: z_streamp): int; | ||||
|              stdcall; | ||||
|  | ||||
| function deflateInit(strm: z_streamp; level: int): int; | ||||
| function deflateInit2(strm: z_streamp; level, method, windowBits, | ||||
|                       memLevel, strategy: int): int; | ||||
| function inflateInit(strm: z_streamp): int; | ||||
| function inflateInit2(strm: z_streamp; windowBits: int): int; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| function deflateInit(strm: z_streamp; level: int): int; | ||||
| begin | ||||
|   Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function deflateInit2(strm: z_streamp; level, method, windowBits, | ||||
|                       memLevel, strategy: int): int; | ||||
| begin | ||||
|   Result := deflateInit2_(strm, level, method, windowBits, memLevel, | ||||
|                           strategy, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function inflateInit(strm: z_streamp): int; | ||||
| begin | ||||
|   Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function inflateInit2(strm: z_streamp; windowBits: int): int; | ||||
| begin | ||||
|   Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, | ||||
|                           sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| const | ||||
|   zlibDLL = 'png32bd.dll'; | ||||
|  | ||||
| function adler32; external zlibDLL; | ||||
| function crc32; external zlibDLL; | ||||
| function deflate; external zlibDLL; | ||||
| function deflateCopy; external zlibDLL; | ||||
| function deflateEnd; external zlibDLL; | ||||
| function deflateInit2_; external zlibDLL; | ||||
| function deflateInit_; external zlibDLL; | ||||
| function deflateParams; external zlibDLL; | ||||
| function deflateReset; external zlibDLL; | ||||
| function deflateSetDictionary; external zlibDLL; | ||||
| function inflate; external zlibDLL; | ||||
| function inflateEnd; external zlibDLL; | ||||
| function inflateInit2_; external zlibDLL; | ||||
| function inflateInit_; external zlibDLL; | ||||
| function inflateReset; external zlibDLL; | ||||
| function inflateSetDictionary; external zlibDLL; | ||||
| function inflateSync; external zlibDLL; | ||||
|  | ||||
| end. | ||||
| @@ -1,224 +0,0 @@ | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCB) | ||||
| BCB = $(MAKEDIR)\.. | ||||
| !endif | ||||
|  | ||||
| # --------------------------------------------------------------------------- | ||||
| # IDE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # The following section of the project makefile is managed by the BCB IDE. | ||||
| # It is recommended to use the IDE to change any of the values in this | ||||
| # section. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| VERSION = BCB.03 | ||||
| # --------------------------------------------------------------------------- | ||||
| PROJECT = d_zlib.lib | ||||
| OBJFILES = d_zlib.obj adler32.obj deflate.obj infblock.obj infcodes.obj inffast.obj \ | ||||
|   inflate.obj inftrees.obj infutil.obj trees.obj | ||||
| RESFILES = | ||||
| RESDEPEN = $(RESFILES) | ||||
| LIBFILES = | ||||
| LIBRARIES = VCL35.lib | ||||
| SPARELIBS = VCL35.lib | ||||
| DEFFILE = | ||||
| PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \ | ||||
|   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \ | ||||
|   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi | ||||
| # --------------------------------------------------------------------------- | ||||
| PATHCPP = .; | ||||
| PATHASM = .; | ||||
| PATHPAS = .; | ||||
| PATHRC = .; | ||||
| DEBUGLIBPATH = $(BCB)\lib\debug | ||||
| RELEASELIBPATH = $(BCB)\lib\release | ||||
| # --------------------------------------------------------------------------- | ||||
| CFLAG1 = -O2 -Ve -d -k- -vi | ||||
| CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm | ||||
| CFLAG3 = -ff -pr -5 | ||||
| PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M | ||||
| RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl  | ||||
| AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn | ||||
| LFLAGS = | ||||
| IFLAGS = -g -Gn | ||||
| # --------------------------------------------------------------------------- | ||||
| ALLOBJ = c0w32.obj $(OBJFILES) | ||||
| ALLRES = $(RESFILES) | ||||
| ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib | ||||
| # --------------------------------------------------------------------------- | ||||
| !!ifdef IDEOPTIONS | ||||
|  | ||||
| [Version Info] | ||||
| IncludeVerInfo=0 | ||||
| AutoIncBuild=0 | ||||
| MajorVer=1 | ||||
| MinorVer=0 | ||||
| Release=0 | ||||
| Build=0 | ||||
| Debug=0 | ||||
| PreRelease=0 | ||||
| Special=0 | ||||
| Private=0 | ||||
| DLL=0 | ||||
| Locale=1040 | ||||
| CodePage=1252 | ||||
|  | ||||
| [Version Info Keys] | ||||
| CompanyName= | ||||
| FileDescription= | ||||
| FileVersion=1.0.0.0 | ||||
| InternalName= | ||||
| LegalCopyright= | ||||
| LegalTrademarks= | ||||
| OriginalFilename= | ||||
| ProductName= | ||||
| ProductVersion=1.0.0.0 | ||||
| Comments= | ||||
|  | ||||
| [HistoryLists\hlIncludePath] | ||||
| Count=2 | ||||
| Item0=$(BCB)\include | ||||
| Item1=$(BCB)\include;$(BCB)\include\vcl | ||||
|  | ||||
| [HistoryLists\hlLibraryPath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\lib\obj;$(BCB)\lib | ||||
|  | ||||
| [HistoryLists\hlDebugSourcePath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\source\vcl | ||||
|  | ||||
| [Debugging] | ||||
| DebugSourceDirs= | ||||
|  | ||||
| [Parameters] | ||||
| RunParams= | ||||
| HostApplication= | ||||
|  | ||||
| !endif | ||||
|  | ||||
|  --------------------------------------------------------------------------- | ||||
| # MAKE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # This section of the project file is not used by the BCB IDE.  It is for | ||||
| # the benefit of building from the command-line using the MAKE utility. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| .autodepend | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCC32) | ||||
| BCC32 = bcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(DCC32) | ||||
| DCC32 = dcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(TASM32) | ||||
| TASM32 = tasm32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(LINKER) | ||||
| LINKER = TLib | ||||
| !endif | ||||
|  | ||||
| !if !$d(BRCC32) | ||||
| BRCC32 = brcc32 | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| !if $d(PATHCPP) | ||||
| .PATH.CPP = $(PATHCPP) | ||||
| .PATH.C   = $(PATHCPP) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHPAS) | ||||
| .PATH.PAS = $(PATHPAS) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHASM) | ||||
| .PATH.ASM = $(PATHASM) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHRC) | ||||
| .PATH.RC  = $(PATHRC) | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| !ifdef IDEOPTIONS | ||||
|  | ||||
| [Version Info] | ||||
| IncludeVerInfo=0 | ||||
| AutoIncBuild=0 | ||||
| MajorVer=1 | ||||
| MinorVer=0 | ||||
| Release=0 | ||||
| Build=0 | ||||
| Debug=0 | ||||
| PreRelease=0 | ||||
| Special=0 | ||||
| Private=0 | ||||
| DLL=0 | ||||
| Locale=1040 | ||||
| CodePage=1252 | ||||
|  | ||||
| [Version Info Keys] | ||||
| CompanyName= | ||||
| FileDescription= | ||||
| FileVersion=1.0.0.0 | ||||
| InternalName= | ||||
| LegalCopyright= | ||||
| LegalTrademarks= | ||||
| OriginalFilename= | ||||
| ProductName= | ||||
| ProductVersion=1.0.0.0 | ||||
| Comments= | ||||
|  | ||||
| [HistoryLists\hlIncludePath] | ||||
| Count=2 | ||||
| Item0=$(BCB)\include;$(BCB)\include\vcl | ||||
| Item1=$(BCB)\include | ||||
|  | ||||
| [HistoryLists\hlLibraryPath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\lib\obj;$(BCB)\lib | ||||
|  | ||||
| [HistoryLists\hlDebugSourcePath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\source\vcl | ||||
|  | ||||
| [Debugging] | ||||
| DebugSourceDirs= | ||||
|  | ||||
| [Parameters] | ||||
| RunParams= | ||||
| HostApplication= | ||||
|  | ||||
| !endif | ||||
|  | ||||
| $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) | ||||
|     $(BCB)\BIN\$(LINKER) @&&! | ||||
|     $(LFLAGS) $(IFLAGS) + | ||||
|     $(ALLOBJ), + | ||||
|     $(PROJECT),, + | ||||
|     $(ALLLIB), + | ||||
|     $(DEFFILE), + | ||||
|     $(ALLRES) | ||||
| ! | ||||
| # --------------------------------------------------------------------------- | ||||
| .pas.hpp: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .pas.obj: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .cpp.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .c.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .asm.obj: | ||||
|     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ | ||||
|  | ||||
| .rc.res: | ||||
|     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< | ||||
| # --------------------------------------------------------------------------- | ||||
| @@ -1,17 +0,0 @@ | ||||
| #include <condefs.h> | ||||
| #pragma hdrstop | ||||
| //--------------------------------------------------------------------------- | ||||
| USEUNIT("adler32.c"); | ||||
| USEUNIT("deflate.c"); | ||||
| USEUNIT("infblock.c"); | ||||
| USEUNIT("infcodes.c"); | ||||
| USEUNIT("inffast.c"); | ||||
| USEUNIT("inflate.c"); | ||||
| USEUNIT("inftrees.c"); | ||||
| USEUNIT("infutil.c"); | ||||
| USEUNIT("trees.c"); | ||||
| //--------------------------------------------------------------------------- | ||||
| #define Library | ||||
|  | ||||
| // To add a file to the library use the Project menu 'Add to Project'. | ||||
|  | ||||
| @@ -1,17 +0,0 @@ | ||||
| These are files used to compile zlib under Borland C++ Builder 3. | ||||
|  | ||||
| zlib.bpg is the main project group that can be loaded in the BCB IDE and | ||||
| loads all other *.bpr projects | ||||
|  | ||||
| zlib.bpr is a project used to create a static zlib.lib library with C calling | ||||
| convention for functions. | ||||
|  | ||||
| zlib32.bpr creates a zlib32.dll dynamic link library with Windows standard | ||||
| calling convention. | ||||
|  | ||||
| d_zlib.bpr creates a set of .obj files with register calling convention. | ||||
| These files are used by zlib.pas to create a Delphi unit containing zlib. | ||||
| The d_zlib.lib file generated isn't useful and can be deleted. | ||||
|  | ||||
| zlib.cpp, zlib32.cpp and d_zlib.cpp are used by the above projects. | ||||
|  | ||||
| @@ -1,26 +0,0 @@ | ||||
| #------------------------------------------------------------------------------ | ||||
| VERSION = BWS.01 | ||||
| #------------------------------------------------------------------------------ | ||||
| !ifndef ROOT | ||||
| ROOT = $(MAKEDIR)\.. | ||||
| !endif | ||||
| #------------------------------------------------------------------------------ | ||||
| MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** | ||||
| DCC = $(ROOT)\bin\dcc32.exe $** | ||||
| BRCC = $(ROOT)\bin\brcc32.exe $** | ||||
| #------------------------------------------------------------------------------ | ||||
| PROJECTS = zlib zlib32 d_zlib | ||||
| #------------------------------------------------------------------------------ | ||||
| default: $(PROJECTS) | ||||
| #------------------------------------------------------------------------------ | ||||
|  | ||||
| zlib: zlib.bpr | ||||
|   $(MAKE) | ||||
|  | ||||
| zlib32: zlib32.bpr | ||||
|   $(MAKE) | ||||
|  | ||||
| d_zlib: d_zlib.bpr | ||||
|   $(MAKE) | ||||
|  | ||||
|  | ||||
| @@ -1,225 +0,0 @@ | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCB) | ||||
| BCB = $(MAKEDIR)\.. | ||||
| !endif | ||||
|  | ||||
| # --------------------------------------------------------------------------- | ||||
| # IDE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # The following section of the project makefile is managed by the BCB IDE. | ||||
| # It is recommended to use the IDE to change any of the values in this | ||||
| # section. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| VERSION = BCB.03 | ||||
| # --------------------------------------------------------------------------- | ||||
| PROJECT = zlib.lib | ||||
| OBJFILES = zlib.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \ | ||||
|   infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \ | ||||
|   uncompr.obj zutil.obj | ||||
| RESFILES = | ||||
| RESDEPEN = $(RESFILES) | ||||
| LIBFILES = | ||||
| LIBRARIES = VCL35.lib | ||||
| SPARELIBS = VCL35.lib | ||||
| DEFFILE = | ||||
| PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \ | ||||
|   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \ | ||||
|   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi | ||||
| # --------------------------------------------------------------------------- | ||||
| PATHCPP = .; | ||||
| PATHASM = .; | ||||
| PATHPAS = .; | ||||
| PATHRC = .; | ||||
| DEBUGLIBPATH = $(BCB)\lib\debug | ||||
| RELEASELIBPATH = $(BCB)\lib\release | ||||
| # --------------------------------------------------------------------------- | ||||
| CFLAG1 = -O2 -Ve -d -k- -vi | ||||
| CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm | ||||
| CFLAG3 = -ff -5 | ||||
| PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M | ||||
| RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl  | ||||
| AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn | ||||
| LFLAGS = | ||||
| IFLAGS = -g -Gn | ||||
| # --------------------------------------------------------------------------- | ||||
| ALLOBJ = c0w32.obj $(OBJFILES) | ||||
| ALLRES = $(RESFILES) | ||||
| ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib | ||||
| # --------------------------------------------------------------------------- | ||||
| !!ifdef IDEOPTIONS | ||||
|  | ||||
| [Version Info] | ||||
| IncludeVerInfo=0 | ||||
| AutoIncBuild=0 | ||||
| MajorVer=1 | ||||
| MinorVer=0 | ||||
| Release=0 | ||||
| Build=0 | ||||
| Debug=0 | ||||
| PreRelease=0 | ||||
| Special=0 | ||||
| Private=0 | ||||
| DLL=0 | ||||
| Locale=1040 | ||||
| CodePage=1252 | ||||
|  | ||||
| [Version Info Keys] | ||||
| CompanyName= | ||||
| FileDescription= | ||||
| FileVersion=1.0.0.0 | ||||
| InternalName= | ||||
| LegalCopyright= | ||||
| LegalTrademarks= | ||||
| OriginalFilename= | ||||
| ProductName= | ||||
| ProductVersion=1.0.0.0 | ||||
| Comments= | ||||
|  | ||||
| [HistoryLists\hlIncludePath] | ||||
| Count=2 | ||||
| Item0=$(BCB)\include | ||||
| Item1=$(BCB)\include;$(BCB)\include\vcl | ||||
|  | ||||
| [HistoryLists\hlLibraryPath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\lib\obj;$(BCB)\lib | ||||
|  | ||||
| [HistoryLists\hlDebugSourcePath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\source\vcl | ||||
|  | ||||
| [Debugging] | ||||
| DebugSourceDirs= | ||||
|  | ||||
| [Parameters] | ||||
| RunParams= | ||||
| HostApplication= | ||||
|  | ||||
| !endif | ||||
|  | ||||
|  --------------------------------------------------------------------------- | ||||
| # MAKE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # This section of the project file is not used by the BCB IDE.  It is for | ||||
| # the benefit of building from the command-line using the MAKE utility. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| .autodepend | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCC32) | ||||
| BCC32 = bcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(DCC32) | ||||
| DCC32 = dcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(TASM32) | ||||
| TASM32 = tasm32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(LINKER) | ||||
| LINKER = TLib | ||||
| !endif | ||||
|  | ||||
| !if !$d(BRCC32) | ||||
| BRCC32 = brcc32 | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| !if $d(PATHCPP) | ||||
| .PATH.CPP = $(PATHCPP) | ||||
| .PATH.C   = $(PATHCPP) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHPAS) | ||||
| .PATH.PAS = $(PATHPAS) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHASM) | ||||
| .PATH.ASM = $(PATHASM) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHRC) | ||||
| .PATH.RC  = $(PATHRC) | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| !ifdef IDEOPTIONS | ||||
|  | ||||
| [Version Info] | ||||
| IncludeVerInfo=0 | ||||
| AutoIncBuild=0 | ||||
| MajorVer=1 | ||||
| MinorVer=0 | ||||
| Release=0 | ||||
| Build=0 | ||||
| Debug=0 | ||||
| PreRelease=0 | ||||
| Special=0 | ||||
| Private=0 | ||||
| DLL=0 | ||||
| Locale=1040 | ||||
| CodePage=1252 | ||||
|  | ||||
| [Version Info Keys] | ||||
| CompanyName= | ||||
| FileDescription= | ||||
| FileVersion=1.0.0.0 | ||||
| InternalName= | ||||
| LegalCopyright= | ||||
| LegalTrademarks= | ||||
| OriginalFilename= | ||||
| ProductName= | ||||
| ProductVersion=1.0.0.0 | ||||
| Comments= | ||||
|  | ||||
| [HistoryLists\hlIncludePath] | ||||
| Count=2 | ||||
| Item0=$(BCB)\include;$(BCB)\include\vcl | ||||
| Item1=$(BCB)\include | ||||
|  | ||||
| [HistoryLists\hlLibraryPath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\lib\obj;$(BCB)\lib | ||||
|  | ||||
| [HistoryLists\hlDebugSourcePath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\source\vcl | ||||
|  | ||||
| [Debugging] | ||||
| DebugSourceDirs= | ||||
|  | ||||
| [Parameters] | ||||
| RunParams= | ||||
| HostApplication= | ||||
|  | ||||
| !endif | ||||
|  | ||||
| $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) | ||||
|     $(BCB)\BIN\$(LINKER) @&&! | ||||
|     $(LFLAGS) $(IFLAGS) + | ||||
|     $(ALLOBJ), + | ||||
|     $(PROJECT),, + | ||||
|     $(ALLLIB), + | ||||
|     $(DEFFILE), + | ||||
|     $(ALLRES) | ||||
| ! | ||||
| # --------------------------------------------------------------------------- | ||||
| .pas.hpp: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .pas.obj: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .cpp.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .c.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .asm.obj: | ||||
|     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ | ||||
|  | ||||
| .rc.res: | ||||
|     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< | ||||
| # --------------------------------------------------------------------------- | ||||
| @@ -1,22 +0,0 @@ | ||||
| #include <condefs.h> | ||||
| #pragma hdrstop | ||||
| //--------------------------------------------------------------------------- | ||||
| USEUNIT("adler32.c"); | ||||
| USEUNIT("compress.c"); | ||||
| USEUNIT("crc32.c"); | ||||
| USEUNIT("deflate.c"); | ||||
| USEUNIT("gzio.c"); | ||||
| USEUNIT("infblock.c"); | ||||
| USEUNIT("infcodes.c"); | ||||
| USEUNIT("inffast.c"); | ||||
| USEUNIT("inflate.c"); | ||||
| USEUNIT("inftrees.c"); | ||||
| USEUNIT("infutil.c"); | ||||
| USEUNIT("trees.c"); | ||||
| USEUNIT("uncompr.c"); | ||||
| USEUNIT("zutil.c"); | ||||
| //--------------------------------------------------------------------------- | ||||
| #define Library | ||||
|  | ||||
| // To add a file to the library use the Project menu 'Add to Project'. | ||||
|  | ||||
| @@ -1,174 +0,0 @@ | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCB) | ||||
| BCB = $(MAKEDIR)\.. | ||||
| !endif | ||||
|  | ||||
| # --------------------------------------------------------------------------- | ||||
| # IDE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # The following section of the project makefile is managed by the BCB IDE. | ||||
| # It is recommended to use the IDE to change any of the values in this | ||||
| # section. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| VERSION = BCB.03 | ||||
| # --------------------------------------------------------------------------- | ||||
| PROJECT = zlib32.dll | ||||
| OBJFILES = zlib32.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \ | ||||
|   infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \ | ||||
|   uncompr.obj zutil.obj | ||||
| RESFILES = | ||||
| RESDEPEN = $(RESFILES) | ||||
| LIBFILES = | ||||
| LIBRARIES =  | ||||
| SPARELIBS =  | ||||
| DEFFILE = | ||||
| PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \ | ||||
|   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \ | ||||
|   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi | ||||
| # --------------------------------------------------------------------------- | ||||
| PATHCPP = .; | ||||
| PATHASM = .; | ||||
| PATHPAS = .; | ||||
| PATHRC = .; | ||||
| DEBUGLIBPATH = $(BCB)\lib\debug | ||||
| RELEASELIBPATH = $(BCB)\lib\release | ||||
| # --------------------------------------------------------------------------- | ||||
| CFLAG1 = -WD -O2 -Ve -d -k- -vi -c -tWD | ||||
| CFLAG2 = -D_NO_VCL;ZLIB_DLL -I$(BCB)\include | ||||
| CFLAG3 = -ff -5 | ||||
| PFLAGS = -D_NO_VCL;ZLIB_DLL -U$(BCB)\lib;$(RELEASELIBPATH) -I$(BCB)\include -$I- -v \ | ||||
|   -JPHN -M | ||||
| RFLAGS = -D_NO_VCL;ZLIB_DLL -i$(BCB)\include | ||||
| AFLAGS = /i$(BCB)\include /d_NO_VCL /dZLIB_DLL /mx /w2 /zn | ||||
| LFLAGS = -L$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gi | ||||
| IFLAGS = -Gn -g | ||||
| # --------------------------------------------------------------------------- | ||||
| ALLOBJ = c0d32.obj $(OBJFILES) | ||||
| ALLRES = $(RESFILES) | ||||
| ALLLIB = $(LIBFILES)  import32.lib cw32mt.lib | ||||
| # --------------------------------------------------------------------------- | ||||
| !ifdef IDEOPTIONS | ||||
|  | ||||
| [Version Info] | ||||
| IncludeVerInfo=0 | ||||
| AutoIncBuild=0 | ||||
| MajorVer=1 | ||||
| MinorVer=0 | ||||
| Release=0 | ||||
| Build=0 | ||||
| Debug=0 | ||||
| PreRelease=0 | ||||
| Special=0 | ||||
| Private=0 | ||||
| DLL=1 | ||||
| Locale=1040 | ||||
| CodePage=1252 | ||||
|  | ||||
| [Version Info Keys] | ||||
| CompanyName= | ||||
| FileDescription=DLL (GUI) | ||||
| FileVersion=1.0.0.0 | ||||
| InternalName= | ||||
| LegalCopyright= | ||||
| LegalTrademarks= | ||||
| OriginalFilename= | ||||
| ProductName= | ||||
| ProductVersion=1.0.0.0 | ||||
| Comments= | ||||
|  | ||||
| [HistoryLists\hlIncludePath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\include | ||||
|  | ||||
| [HistoryLists\hlLibraryPath] | ||||
| Count=1 | ||||
| Item0=$(BCB)\lib | ||||
|  | ||||
| [HistoryLists\hlConditionals] | ||||
| Count=1 | ||||
| Item0=_NO_VCL;ZLIB_DLL | ||||
|  | ||||
| [Debugging] | ||||
| DebugSourceDirs= | ||||
|  | ||||
| [Parameters] | ||||
| RunParams= | ||||
| HostApplication= | ||||
|  | ||||
| !endif | ||||
|  | ||||
| # --------------------------------------------------------------------------- | ||||
| # MAKE SECTION | ||||
| # --------------------------------------------------------------------------- | ||||
| # This section of the project file is not used by the BCB IDE.  It is for | ||||
| # the benefit of building from the command-line using the MAKE utility. | ||||
| # --------------------------------------------------------------------------- | ||||
|  | ||||
| .autodepend | ||||
| # --------------------------------------------------------------------------- | ||||
| !if !$d(BCC32) | ||||
| BCC32 = bcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(DCC32) | ||||
| DCC32 = dcc32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(TASM32) | ||||
| TASM32 = tasm32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(LINKER) | ||||
| LINKER = ilink32 | ||||
| !endif | ||||
|  | ||||
| !if !$d(BRCC32) | ||||
| BRCC32 = brcc32 | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| !if $d(PATHCPP) | ||||
| .PATH.CPP = $(PATHCPP) | ||||
| .PATH.C   = $(PATHCPP) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHPAS) | ||||
| .PATH.PAS = $(PATHPAS) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHASM) | ||||
| .PATH.ASM = $(PATHASM) | ||||
| !endif | ||||
|  | ||||
| !if $d(PATHRC) | ||||
| .PATH.RC  = $(PATHRC) | ||||
| !endif | ||||
| # --------------------------------------------------------------------------- | ||||
| $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) | ||||
|     $(BCB)\BIN\$(LINKER) @&&! | ||||
|     $(LFLAGS) $(IFLAGS) + | ||||
|     $(ALLOBJ), + | ||||
|     $(PROJECT),, + | ||||
|     $(ALLLIB), + | ||||
|     $(DEFFILE), + | ||||
|     $(ALLRES) | ||||
| ! | ||||
| # --------------------------------------------------------------------------- | ||||
| .pas.hpp: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .pas.obj: | ||||
|     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } | ||||
|  | ||||
| .cpp.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .c.obj: | ||||
|     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } | ||||
|  | ||||
| .asm.obj: | ||||
|     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ | ||||
|  | ||||
| .rc.res: | ||||
|     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< | ||||
| # --------------------------------------------------------------------------- | ||||
| @@ -1,42 +0,0 @@ | ||||
|  | ||||
| #include <windows.h> | ||||
| #pragma hdrstop | ||||
| #include <condefs.h> | ||||
|  | ||||
|  | ||||
| //--------------------------------------------------------------------------- | ||||
| //   Important note about DLL memory management in a VCL DLL: | ||||
| // | ||||
| // | ||||
| // | ||||
| // If your DLL uses VCL and exports any functions that pass VCL String objects | ||||
| // (or structs/classes containing nested Strings) as parameter or function | ||||
| // results, you will need to build both your DLL project and any EXE projects | ||||
| // that use your DLL with the dynamic RTL (the RTL DLL).  This will change your | ||||
| // DLL and its calling EXE's to use BORLNDMM.DLL as their memory manager. In | ||||
| // these cases, the file BORLNDMM.DLL should be deployed along with your DLL | ||||
| // and the RTL DLL (CP3240MT.DLL). To avoid the requiring BORLNDMM.DLL in | ||||
| // these situations, pass string information using "char *" or ShortString | ||||
| // parameters and then link with the static RTL. | ||||
| // | ||||
| //--------------------------------------------------------------------------- | ||||
| USEUNIT("adler32.c"); | ||||
| USEUNIT("compress.c"); | ||||
| USEUNIT("crc32.c"); | ||||
| USEUNIT("deflate.c"); | ||||
| USEUNIT("gzio.c"); | ||||
| USEUNIT("infblock.c"); | ||||
| USEUNIT("infcodes.c"); | ||||
| USEUNIT("inffast.c"); | ||||
| USEUNIT("inflate.c"); | ||||
| USEUNIT("inftrees.c"); | ||||
| USEUNIT("infutil.c"); | ||||
| USEUNIT("trees.c"); | ||||
| USEUNIT("uncompr.c"); | ||||
| USEUNIT("zutil.c"); | ||||
| //--------------------------------------------------------------------------- | ||||
| #pragma argsused | ||||
| int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) | ||||
| { | ||||
|         return 1; | ||||
| } | ||||
							
								
								
									
										1
									
								
								contrib/infback9/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								contrib/infback9/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| See infback9.h for what this is and how to use it. | ||||
							
								
								
									
										427
									
								
								contrib/infback9/infback9.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										427
									
								
								contrib/infback9/infback9.diff
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,427 @@ | ||||
| *** infback.c	Mon Aug 11 16:48:06 2003 | ||||
| --- infback9.c	Mon Sep  8 21:22:46 2003 | ||||
| *************** | ||||
| *** 1,19 **** | ||||
| ! /* infback.c -- inflate using a call-back interface | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
|    | ||||
| - /* | ||||
| -    This code is largely copied from inflate.c.  Normally either infback.o or | ||||
| -    inflate.o would be linked into an application--not both.  The interface | ||||
| -    with inffast.c is retained so that optimized assembler-coded versions of | ||||
| -    inflate_fast() can be used with either inflate.c or infback.c. | ||||
| -  */ | ||||
| -  | ||||
|   #include "zutil.h" | ||||
| ! #include "inftrees.h" | ||||
|   #include "inflate.h" | ||||
| - #include "inffast.h" | ||||
|    | ||||
|   /* function prototypes */ | ||||
|   local void fixedtables OF((struct inflate_state FAR *state)); | ||||
| --- 1,12 ---- | ||||
| ! /* infback9.c -- inflate deflate64 data using a call-back interface | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
|    | ||||
|   #include "zutil.h" | ||||
| ! #include "infback9.h" | ||||
| ! #include "inftree9.h" | ||||
|   #include "inflate.h" | ||||
|    | ||||
|   /* function prototypes */ | ||||
|   local void fixedtables OF((struct inflate_state FAR *state)); | ||||
| *************** | ||||
| *** 22,33 **** | ||||
|      strm provides memory allocation functions in zalloc and zfree, or | ||||
|      Z_NULL to use the library memory allocation functions. | ||||
|    | ||||
| !    windowBits is in the range 8..15, and window is a user-supplied | ||||
| !    window and output buffer that is 2**windowBits bytes. | ||||
|    */ | ||||
| ! int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) | ||||
|   z_stream FAR *strm; | ||||
| - int windowBits; | ||||
|   unsigned char FAR *window; | ||||
|   const char *version; | ||||
|   int stream_size; | ||||
| --- 15,24 ---- | ||||
|      strm provides memory allocation functions in zalloc and zfree, or | ||||
|      Z_NULL to use the library memory allocation functions. | ||||
|    | ||||
| !    window is a user-supplied window and output buffer that is 64K bytes. | ||||
|    */ | ||||
| ! int ZEXPORT inflateBack9Init_(strm, window, version, stream_size) | ||||
|   z_stream FAR *strm; | ||||
|   unsigned char FAR *window; | ||||
|   const char *version; | ||||
|   int stream_size; | ||||
| *************** | ||||
| *** 37,44 **** | ||||
|       if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || | ||||
|           stream_size != (int)(sizeof(z_stream))) | ||||
|           return Z_VERSION_ERROR; | ||||
| !     if (strm == Z_NULL || window == Z_NULL || | ||||
| !         windowBits < 8 || windowBits > 15) | ||||
|           return Z_STREAM_ERROR; | ||||
|       strm->msg = Z_NULL;                 /* in case we return an error */ | ||||
|       if (strm->zalloc == (alloc_func)0) { | ||||
| --- 28,34 ---- | ||||
|       if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || | ||||
|           stream_size != (int)(sizeof(z_stream))) | ||||
|           return Z_VERSION_ERROR; | ||||
| !     if (strm == Z_NULL || window == Z_NULL) | ||||
|           return Z_STREAM_ERROR; | ||||
|       strm->msg = Z_NULL;                 /* in case we return an error */ | ||||
|       if (strm->zalloc == (alloc_func)0) { | ||||
| *************** | ||||
| *** 51,58 **** | ||||
|       if (state == Z_NULL) return Z_MEM_ERROR; | ||||
|       Tracev((stderr, "inflate: allocated\n")); | ||||
|       strm->state = (voidpf)state; | ||||
| !     state->wbits = windowBits; | ||||
| !     state->wsize = 1U << windowBits; | ||||
|       state->window = window; | ||||
|       state->write = 0; | ||||
|       state->whave = 0; | ||||
| --- 41,48 ---- | ||||
|       if (state == Z_NULL) return Z_MEM_ERROR; | ||||
|       Tracev((stderr, "inflate: allocated\n")); | ||||
|       strm->state = (voidpf)state; | ||||
| !     state->wbits = 16; | ||||
| !     state->wsize = 1U << 16; | ||||
|       state->window = window; | ||||
|       state->write = 0; | ||||
|       state->whave = 0; | ||||
| *************** | ||||
| *** 91,110 **** | ||||
|           next = fixed; | ||||
|           lenfix = next; | ||||
|           bits = 9; | ||||
| !         inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); | ||||
|    | ||||
|           /* distance table */ | ||||
|           sym = 0; | ||||
|           while (sym < 32) state->lens[sym++] = 5; | ||||
|           distfix = next; | ||||
|           bits = 5; | ||||
| !         inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); | ||||
|    | ||||
|           /* do this just once */ | ||||
|           virgin = 0; | ||||
|       } | ||||
|   #else /* !BUILDFIXED */ | ||||
| ! #   include "inffixed.h" | ||||
|   #endif /* BUILDFIXED */ | ||||
|       state->lencode = lenfix; | ||||
|       state->lenbits = 9; | ||||
| --- 81,100 ---- | ||||
|           next = fixed; | ||||
|           lenfix = next; | ||||
|           bits = 9; | ||||
| !         inflate_table9(LENS, state->lens, 288, &(next), &(bits), state->work); | ||||
|    | ||||
|           /* distance table */ | ||||
|           sym = 0; | ||||
|           while (sym < 32) state->lens[sym++] = 5; | ||||
|           distfix = next; | ||||
|           bits = 5; | ||||
| !         inflate_table9(DISTS, state->lens, 32, &(next), &(bits), state->work); | ||||
|    | ||||
|           /* do this just once */ | ||||
|           virgin = 0; | ||||
|       } | ||||
|   #else /* !BUILDFIXED */ | ||||
| ! #   include "inffix9.h" | ||||
|   #endif /* BUILDFIXED */ | ||||
|       state->lencode = lenfix; | ||||
|       state->lenbits = 9; | ||||
| *************** | ||||
| *** 114,141 **** | ||||
|    | ||||
|   /* Macros for inflateBack(): */ | ||||
|    | ||||
| - /* Load returned state from inflate_fast() */ | ||||
| - #define LOAD() \ | ||||
| -     do { \ | ||||
| -         put = strm->next_out; \ | ||||
| -         left = strm->avail_out; \ | ||||
| -         next = strm->next_in; \ | ||||
| -         have = strm->avail_in; \ | ||||
| -         hold = state->hold; \ | ||||
| -         bits = state->bits; \ | ||||
| -     } while (0) | ||||
| -  | ||||
| - /* Set state from registers for inflate_fast() */ | ||||
| - #define RESTORE() \ | ||||
| -     do { \ | ||||
| -         strm->next_out = put; \ | ||||
| -         strm->avail_out = left; \ | ||||
| -         strm->next_in = next; \ | ||||
| -         strm->avail_in = have; \ | ||||
| -         state->hold = hold; \ | ||||
| -         state->bits = bits; \ | ||||
| -     } while (0) | ||||
| -  | ||||
|   /* Clear the input bit accumulator */ | ||||
|   #define INITBITS() \ | ||||
|       do { \ | ||||
| --- 104,109 ---- | ||||
| *************** | ||||
| *** 237,243 **** | ||||
|      inflateBack() can also return Z_STREAM_ERROR if the input parameters | ||||
|      are not correct, i.e. strm is Z_NULL or the state was not initialized. | ||||
|    */ | ||||
| ! int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) | ||||
|   z_stream FAR *strm; | ||||
|   in_func in; | ||||
|   void FAR *in_desc; | ||||
| --- 205,211 ---- | ||||
|      inflateBack() can also return Z_STREAM_ERROR if the input parameters | ||||
|      are not correct, i.e. strm is Z_NULL or the state was not initialized. | ||||
|    */ | ||||
| ! int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc) | ||||
|   z_stream FAR *strm; | ||||
|   in_func in; | ||||
|   void FAR *in_desc; | ||||
| *************** | ||||
| *** 354,366 **** | ||||
|               DROPBITS(5); | ||||
|               state->ncode = BITS(4) + 4; | ||||
|               DROPBITS(4); | ||||
| ! #ifndef PKZIP_BUG_WORKAROUND | ||||
| !             if (state->nlen > 286 || state->ndist > 30) { | ||||
| !                 strm->msg = (char *)"too many length or distance symbols"; | ||||
|                   state->mode = BAD; | ||||
|                   break; | ||||
|               } | ||||
| - #endif | ||||
|               Tracev((stderr, "inflate:       table sizes ok\n")); | ||||
|    | ||||
|               /* get code length code lengths (not a typo) */ | ||||
| --- 322,332 ---- | ||||
|               DROPBITS(5); | ||||
|               state->ncode = BITS(4) + 4; | ||||
|               DROPBITS(4); | ||||
| !             if (state->nlen > 286) { | ||||
| !                 strm->msg = (char *)"too many length symbols"; | ||||
|                   state->mode = BAD; | ||||
|                   break; | ||||
|               } | ||||
|               Tracev((stderr, "inflate:       table sizes ok\n")); | ||||
|    | ||||
|               /* get code length code lengths (not a typo) */ | ||||
| *************** | ||||
| *** 375,381 **** | ||||
|               state->next = state->codes; | ||||
|               state->lencode = (code const FAR *)(state->next); | ||||
|               state->lenbits = 7; | ||||
| !             ret = inflate_table(CODES, state->lens, 19, &(state->next), | ||||
|                                   &(state->lenbits), state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid code lengths set"; | ||||
| --- 341,347 ---- | ||||
|               state->next = state->codes; | ||||
|               state->lencode = (code const FAR *)(state->next); | ||||
|               state->lenbits = 7; | ||||
| !             ret = inflate_table9(CODES, state->lens, 19, &(state->next), | ||||
|                                   &(state->lenbits), state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid code lengths set"; | ||||
| *************** | ||||
| *** 438,445 **** | ||||
|               state->next = state->codes; | ||||
|               state->lencode = (code const FAR *)(state->next); | ||||
|               state->lenbits = 9; | ||||
| !             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), | ||||
| !                                 &(state->lenbits), state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid literal/lengths set"; | ||||
|                   state->mode = BAD; | ||||
| --- 404,411 ---- | ||||
|               state->next = state->codes; | ||||
|               state->lencode = (code const FAR *)(state->next); | ||||
|               state->lenbits = 9; | ||||
| !             ret = inflate_table9(LENS, state->lens, state->nlen, | ||||
| !                             &(state->next), &(state->lenbits), state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid literal/lengths set"; | ||||
|                   state->mode = BAD; | ||||
| *************** | ||||
| *** 447,454 **** | ||||
|               } | ||||
|               state->distcode = (code const FAR *)(state->next); | ||||
|               state->distbits = 6; | ||||
| !             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, | ||||
| !                             &(state->next), &(state->distbits), state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid distances set"; | ||||
|                   state->mode = BAD; | ||||
| --- 413,421 ---- | ||||
|               } | ||||
|               state->distcode = (code const FAR *)(state->next); | ||||
|               state->distbits = 6; | ||||
| !             ret = inflate_table9(DISTS, state->lens + state->nlen, | ||||
| !                             state->ndist, &(state->next), &(state->distbits), | ||||
| !                             state->work); | ||||
|               if (ret) { | ||||
|                   strm->msg = (char *)"invalid distances set"; | ||||
|                   state->mode = BAD; | ||||
| *************** | ||||
| *** 458,473 **** | ||||
|               state->mode = LEN; | ||||
|    | ||||
|           case LEN: | ||||
| -             /* use inflate_fast() if we have enough input and output */ | ||||
| -             if (have >= 6 && left >= 258) { | ||||
| -                 RESTORE(); | ||||
| -                 if (state->whave < state->wsize) | ||||
| -                     state->whave = state->wsize - left; | ||||
| -                 inflate_fast(strm, state->wsize); | ||||
| -                 LOAD(); | ||||
| -                 break; | ||||
| -             } | ||||
| -  | ||||
|               /* get a literal, length, or end-of-block code */ | ||||
|               for (;;) { | ||||
|                   this = state->lencode[BITS(state->lenbits)]; | ||||
| --- 425,430 ---- | ||||
| *************** | ||||
| *** 607,613 **** | ||||
|       return ret; | ||||
|   } | ||||
|    | ||||
| ! int ZEXPORT inflateBackEnd(strm) | ||||
|   z_stream FAR *strm; | ||||
|   { | ||||
|       if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) | ||||
| --- 564,570 ---- | ||||
|       return ret; | ||||
|   } | ||||
|    | ||||
| ! int ZEXPORT inflateBack9End(strm) | ||||
|   z_stream FAR *strm; | ||||
|   { | ||||
|       if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) | ||||
| *** inftrees.c	Sun Sep  7 10:59:10 2003 | ||||
| --- inftree9.c	Mon Sep  8 20:54:36 2003 | ||||
| *************** | ||||
| *** 1,15 **** | ||||
| ! /* inftrees.c -- generate Huffman trees for efficient decoding | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
|    | ||||
|   #include "zutil.h" | ||||
| ! #include "inftrees.h" | ||||
|    | ||||
|   #define MAXBITS 15 | ||||
|    | ||||
| ! const char inflate_copyright[] = | ||||
| !    " inflate 1.2.0.5 Copyright 1995-2003 Mark Adler "; | ||||
|   /* | ||||
|     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 | ||||
| --- 1,15 ---- | ||||
| ! /* inftree9.c -- generate Huffman trees for efficient decoding | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
|    | ||||
|   #include "zutil.h" | ||||
| ! #include "inftree9.h" | ||||
|    | ||||
|   #define MAXBITS 15 | ||||
|    | ||||
| ! const char inflate9_copyright[] = | ||||
| !    " inflate9 1.2.0.5 Copyright 1995-2003 Mark Adler "; | ||||
|   /* | ||||
|     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 | ||||
| *************** | ||||
| *** 29,35 **** | ||||
|      table index bits.  It will differ if the request is greater than the | ||||
|      longest code or if it is less than the shortest code. | ||||
|    */ | ||||
| ! int inflate_table(type, lens, codes, table, bits, work) | ||||
|   codetype type; | ||||
|   unsigned short FAR *lens; | ||||
|   unsigned codes; | ||||
| --- 29,35 ---- | ||||
|      table index bits.  It will differ if the request is greater than the | ||||
|      longest code or if it is less than the shortest code. | ||||
|    */ | ||||
| ! int inflate_table9(type, lens, codes, table, bits, work) | ||||
|   codetype type; | ||||
|   unsigned short FAR *lens; | ||||
|   unsigned codes; | ||||
| *************** | ||||
| *** 59,76 **** | ||||
|       unsigned short offs[MAXBITS+1];     /* offsets in table for each length */ | ||||
|       static const unsigned short lbase[31] = { /* Length codes 257..285 base */ | ||||
|           3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, | ||||
| !         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; | ||||
|       static const unsigned short lext[31] = { /* Length codes 257..285 extra */ | ||||
|           16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, | ||||
| !         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 192, 78}; | ||||
| !     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ | ||||
|           1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, | ||||
|           257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, | ||||
| !         8193, 12289, 16385, 24577, 0, 0}; | ||||
| !     static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ | ||||
|           16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, | ||||
|           23, 23, 24, 24, 25, 25, 26, 26, 27, 27, | ||||
| !         28, 28, 29, 29, 64, 64}; | ||||
|    | ||||
|       /* | ||||
|          Process a set of code lengths to create a canonical Huffman code.  The | ||||
| --- 59,76 ---- | ||||
|       unsigned short offs[MAXBITS+1];     /* offsets in table for each length */ | ||||
|       static const unsigned short lbase[31] = { /* Length codes 257..285 base */ | ||||
|           3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, | ||||
| !         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3, 0, 0}; | ||||
|       static const unsigned short lext[31] = { /* Length codes 257..285 extra */ | ||||
|           16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, | ||||
| !         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 32, 192, 78}; | ||||
| !     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ | ||||
|           1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, | ||||
|           257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, | ||||
| !         8193, 12289, 16385, 24577, 32769, 49153}; | ||||
| !     static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ | ||||
|           16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, | ||||
|           23, 23, 24, 24, 25, 25, 26, 26, 27, 27, | ||||
| !         28, 28, 29, 29, 30, 30}; | ||||
|    | ||||
|       /* | ||||
|          Process a set of code lengths to create a canonical Huffman code.  The | ||||
| *** inftrees.h	Sun Aug 10 15:15:50 2003 | ||||
| --- inftree9.h	Mon Sep  8 20:54:51 2003 | ||||
| *************** | ||||
| *** 1,4 **** | ||||
| ! /* inftrees.h -- header to use inftrees.c | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
| --- 1,4 ---- | ||||
| ! /* inftree9.h -- header to use inftree9.c | ||||
|    * Copyright (C) 1995-2003 Mark Adler | ||||
|    * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|    */ | ||||
| *************** | ||||
| *** 50,55 **** | ||||
|       DISTS | ||||
|   } codetype; | ||||
|    | ||||
| ! extern int inflate_table OF((codetype type, unsigned short FAR *lens, | ||||
|                                unsigned codes, code FAR * FAR *table, | ||||
|                                unsigned FAR *bits, unsigned short FAR *work)); | ||||
| --- 50,55 ---- | ||||
|       DISTS | ||||
|   } codetype; | ||||
|    | ||||
| ! extern int inflate_table9 OF((codetype type, unsigned short FAR *lens, | ||||
|                                unsigned codes, code FAR * FAR *table, | ||||
|                                unsigned FAR *bits, unsigned short FAR *work)); | ||||
							
								
								
									
										26
									
								
								contrib/infback9/infback9.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								contrib/infback9/infback9.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| /* infback9.h -- header for using inflateBack9 functions | ||||
|  * Copyright (C) 2003 Mark Adler | ||||
|  * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This header file and associated patches provide a decoder for PKWare's | ||||
|  * undocumented deflate64 compression method (method 9).  Use with infback9.c, | ||||
|  * inftree9.h, inftree9.c, and inffix9.h.  These patches are not supported. | ||||
|  * This code will almost certainly not work on 16-bit architectures.  See the | ||||
|  * comments in zlib.h for inflateBack() usage.  These functions are used | ||||
|  * identically, except that there is no windowBits parameter, and a 64K | ||||
|  * window must be provided.  zlib.h must be included before this header file. | ||||
|  */ | ||||
|  | ||||
| ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm, | ||||
|                                     in_func in, void FAR *in_desc, | ||||
|                                     out_func out, void FAR *out_desc)); | ||||
| ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm)); | ||||
| ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm, | ||||
|                                          unsigned char FAR *window, | ||||
|                                          const char *version, | ||||
|                                          int stream_size)); | ||||
| #define inflateBack9Init(strm, window) \ | ||||
|         inflateBack9Init_((strm), (window), \ | ||||
|         ZLIB_VERSION, sizeof(z_stream)) | ||||
							
								
								
									
										94
									
								
								contrib/infback9/inffix9.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								contrib/infback9/inffix9.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
|     /* inffix9.h -- table for decoding fixed codes | ||||
|      * Generated automatically by makefixed(). | ||||
|      */ | ||||
|  | ||||
|     /* WARNING: this file should *not* be used by applications. | ||||
|        It is part of the implementation of this library and is | ||||
|        subject to change. Applications should only use zlib.h. | ||||
|      */ | ||||
|  | ||||
|     static const code lenfix[512] = { | ||||
|         {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, | ||||
|         {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, | ||||
|         {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, | ||||
|         {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, | ||||
|         {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, | ||||
|         {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, | ||||
|         {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, | ||||
|         {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, | ||||
|         {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, | ||||
|         {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, | ||||
|         {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, | ||||
|         {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, | ||||
|         {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, | ||||
|         {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, | ||||
|         {0,8,22},{192,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, | ||||
|         {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, | ||||
|         {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, | ||||
|         {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, | ||||
|         {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, | ||||
|         {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, | ||||
|         {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, | ||||
|         {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, | ||||
|         {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, | ||||
|         {0,8,85},{0,8,21},{32,8,3},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, | ||||
|         {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, | ||||
|         {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, | ||||
|         {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, | ||||
|         {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, | ||||
|         {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, | ||||
|         {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, | ||||
|         {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, | ||||
|         {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, | ||||
|         {16,7,5},{0,8,87},{0,8,23},{78,8,0},{19,7,51},{0,8,119},{0,8,55}, | ||||
|         {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, | ||||
|         {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, | ||||
|         {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, | ||||
|         {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, | ||||
|         {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, | ||||
|         {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, | ||||
|         {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, | ||||
|         {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, | ||||
|         {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, | ||||
|         {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, | ||||
|         {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, | ||||
|         {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, | ||||
|         {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, | ||||
|         {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, | ||||
|         {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, | ||||
|         {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, | ||||
|         {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, | ||||
|         {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{192,8,0},{19,7,51}, | ||||
|         {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, | ||||
|         {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, | ||||
|         {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, | ||||
|         {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, | ||||
|         {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, | ||||
|         {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, | ||||
|         {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, | ||||
|         {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, | ||||
|         {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{32,8,3}, | ||||
|         {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, | ||||
|         {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, | ||||
|         {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, | ||||
|         {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, | ||||
|         {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, | ||||
|         {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, | ||||
|         {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, | ||||
|         {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, | ||||
|         {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, | ||||
|         {78,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, | ||||
|         {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, | ||||
|         {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, | ||||
|         {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, | ||||
|         {0,9,255} | ||||
|     }; | ||||
|  | ||||
|     static const code distfix[32] = { | ||||
|         {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, | ||||
|         {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, | ||||
|         {18,5,9},{26,5,2049},{22,5,129},{30,5,32769},{16,5,2},{23,5,385}, | ||||
|         {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, | ||||
|         {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, | ||||
|         {22,5,193},{30,5,49153} | ||||
|     }; | ||||
| @@ -61,7 +61,7 @@ | ||||
|  */ | ||||
| #if ! defined( GAS_COFF ) && ! defined( GAS_ELF ) | ||||
|  | ||||
| #if defined( __CYGWIN__ ) | ||||
| #if defined( WIN32 ) || defined( __CYGWIN__ ) | ||||
| #define GAS_COFF /* windows object format */ | ||||
| #else | ||||
| #define GAS_ELF | ||||
| @@ -151,14 +151,14 @@ | ||||
|  */ | ||||
| #define mode_state     0   /* state->mode */ | ||||
| #define wsize_state    32  /* state->wsize */ | ||||
| #define write_state    36  /* state->write */ | ||||
| #define window_state   40  /* state->window */ | ||||
| #define hold_state     44  /* state->hold */ | ||||
| #define bits_state     48  /* state->bits */ | ||||
| #define lencode_state  64  /* state->lencode */ | ||||
| #define distcode_state 68  /* state->distcode */ | ||||
| #define lenbits_state  72  /* state->lenbits */ | ||||
| #define distbits_state 76  /* state->distbits */ | ||||
| #define write_state    40  /* state->write */ | ||||
| #define window_state   44  /* state->window */ | ||||
| #define hold_state     48  /* state->hold */ | ||||
| #define bits_state     52  /* state->bits */ | ||||
| #define lencode_state  68  /* state->lencode */ | ||||
| #define distcode_state 72  /* state->distcode */ | ||||
| #define lenbits_state  76  /* state->lenbits */ | ||||
| #define distbits_state 80  /* state->distbits */ | ||||
|  | ||||
| /* | ||||
|  * inflate_fast's activation record | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
|  | ||||
| #include <memory.h> | ||||
| #include "zfstream.h" | ||||
|  | ||||
| gzfilebuf::gzfilebuf() : | ||||
| @@ -23,9 +22,7 @@ gzfilebuf *gzfilebuf::open( const char *name, | ||||
|     return NULL; | ||||
|  | ||||
|   char char_mode[10]; | ||||
|   char *p; | ||||
|   memset(char_mode,'\0',10); | ||||
|   p = char_mode; | ||||
|   char *p = char_mode; | ||||
|  | ||||
|   if ( io_mode & ios::in ) { | ||||
|     mode = ios::in; | ||||
| @@ -48,6 +45,9 @@ gzfilebuf *gzfilebuf::open( const char *name, | ||||
|     *p++ = '9'; | ||||
|   } | ||||
|  | ||||
|   // Put the end-of-string indicator | ||||
|   *p = '\0'; | ||||
|  | ||||
|   if ( (file = gzopen(name, char_mode)) == NULL ) | ||||
|     return NULL; | ||||
|  | ||||
| @@ -64,9 +64,7 @@ gzfilebuf *gzfilebuf::attach( int file_descriptor, | ||||
|     return NULL; | ||||
|  | ||||
|   char char_mode[10]; | ||||
|   char *p; | ||||
|   memset(char_mode,'\0',10); | ||||
|   p = char_mode; | ||||
|   char *p = char_mode; | ||||
|  | ||||
|   if ( io_mode & ios::in ) { | ||||
|     mode = ios::in; | ||||
| @@ -89,6 +87,9 @@ gzfilebuf *gzfilebuf::attach( int file_descriptor, | ||||
|     *p++ = '9'; | ||||
|   } | ||||
|  | ||||
|   // Put the end-of-string indicator | ||||
|   *p = '\0'; | ||||
|  | ||||
|   if ( (file = gzdopen(file_descriptor, char_mode)) == NULL ) | ||||
|     return NULL; | ||||
|  | ||||
| @@ -112,13 +113,13 @@ gzfilebuf *gzfilebuf::close() { | ||||
|  | ||||
| } | ||||
|  | ||||
| int gzfilebuf::setcompressionlevel( short comp_level ) { | ||||
| int gzfilebuf::setcompressionlevel( int comp_level ) { | ||||
|  | ||||
|   return gzsetparams(file, comp_level, -2); | ||||
|  | ||||
| } | ||||
|  | ||||
| int gzfilebuf::setcompressionstrategy( short comp_strategy ) { | ||||
| int gzfilebuf::setcompressionstrategy( int comp_strategy ) { | ||||
|  | ||||
|   return gzsetparams(file, -2, comp_strategy); | ||||
|  | ||||
| @@ -282,10 +283,9 @@ void gzfilestream_common::close() { | ||||
|  | ||||
| } | ||||
|  | ||||
| gzfilebuf *gzfilestream_common::rdbuf() { | ||||
|  | ||||
| gzfilebuf *gzfilestream_common::rdbuf() | ||||
| { | ||||
|   return &buffer; | ||||
|  | ||||
| } | ||||
|  | ||||
| gzifstream::gzifstream() : | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
|  | ||||
| #ifndef _zfstream_h | ||||
| #define _zfstream_h | ||||
| #ifndef zfstream_h | ||||
| #define zfstream_h | ||||
|  | ||||
| #include <fstream.h> | ||||
| #include "zlib.h" | ||||
| @@ -16,8 +16,8 @@ public: | ||||
|   gzfilebuf *attach( int file_descriptor, int io_mode ); | ||||
|   gzfilebuf *close(); | ||||
|  | ||||
|   int setcompressionlevel( short comp_level ); | ||||
|   int setcompressionstrategy( short comp_strategy ); | ||||
|   int setcompressionlevel( int comp_level ); | ||||
|   int setcompressionstrategy( int comp_strategy ); | ||||
|  | ||||
|   inline int is_open() const { return (file !=NULL); } | ||||
|  | ||||
| @@ -98,18 +98,19 @@ private: | ||||
|   T val; | ||||
| }; | ||||
|  | ||||
| template<class T> gzofstream &operator<<(gzofstream &s, | ||||
| 					 const gzomanip<T> &m) { | ||||
| template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m) | ||||
| { | ||||
|   return (*m.func)(s, m.val); | ||||
|    | ||||
| } | ||||
|  | ||||
| inline gzofstream &setcompressionlevel( gzofstream &s, int l ) { | ||||
| inline gzofstream &setcompressionlevel( gzofstream &s, int l ) | ||||
| { | ||||
|   (s.rdbuf())->setcompressionlevel(l); | ||||
|   return s; | ||||
| } | ||||
|  | ||||
| inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) { | ||||
| inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) | ||||
| { | ||||
|   (s.rdbuf())->setcompressionstrategy(l); | ||||
|   return s; | ||||
| } | ||||
| @@ -125,18 +126,3 @@ inline gzomanip<int> setcompressionstrategy(int l) | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										408
									
								
								contrib/masm686/match.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										408
									
								
								contrib/masm686/match.asm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,408 @@ | ||||
|  | ||||
| ; match.asm -- Pentium-Pro optimized version of longest_match() | ||||
| ; | ||||
| ; Updated for zlib 1.1.3 and converted to MASM 6.1x | ||||
| ; Copyright (C) 2000 Dan Higdon <hdan@kinesoft.com> | ||||
| ;                    and Chuck Walbourn <chuckw@kinesoft.com> | ||||
| ; Corrections by Cosmin Truta <cosmint@cs.ubbcluj.ro> | ||||
| ; | ||||
| ; This is free software; you can redistribute it and/or modify it | ||||
| ; under the terms of the GNU General Public License. | ||||
|  | ||||
| ; Based on match.S | ||||
| ; Written for zlib 1.1.2 | ||||
| ; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com> | ||||
|  | ||||
| 	.686P | ||||
| 	.MODEL	FLAT | ||||
|  | ||||
| ;=========================================================================== | ||||
| ; EQUATES | ||||
| ;=========================================================================== | ||||
|  | ||||
| MAX_MATCH	EQU 258 | ||||
| MIN_MATCH	EQU 3 | ||||
| MIN_LOOKAHEAD	EQU (MAX_MATCH + MIN_MATCH + 1) | ||||
| MAX_MATCH_8	EQU ((MAX_MATCH + 7) AND (NOT 7)) | ||||
|  | ||||
| ;=========================================================================== | ||||
| ; STRUCTURES | ||||
| ;=========================================================================== | ||||
|  | ||||
| ; This STRUCT assumes a 4-byte alignment | ||||
|  | ||||
| DEFLATE_STATE	STRUCT | ||||
| ds_strm			dd ? | ||||
| ds_status		dd ? | ||||
| ds_pending_buf		dd ? | ||||
| ds_pending_buf_size	dd ? | ||||
| ds_pending_out		dd ? | ||||
| ds_pending		dd ? | ||||
| ds_wrap			dd ? | ||||
| ds_data_type		db ? | ||||
| ds_method		db ? | ||||
| 			db ?	; padding | ||||
| 			db ?	; padding | ||||
| ds_last_flush		dd ? | ||||
| ds_w_size		dd ?	; used | ||||
| ds_w_bits		dd ? | ||||
| ds_w_mask		dd ?	; used | ||||
| ds_window		dd ?	; used | ||||
| ds_window_size		dd ? | ||||
| ds_prev			dd ?	; used | ||||
| ds_head			dd ? | ||||
| ds_ins_h		dd ? | ||||
| ds_hash_size		dd ? | ||||
| ds_hash_bits		dd ? | ||||
| ds_hash_mask		dd ? | ||||
| ds_hash_shift		dd ? | ||||
| ds_block_start		dd ? | ||||
| ds_match_length		dd ?	; used | ||||
| ds_prev_match		dd ?	; used | ||||
| ds_match_available	dd ? | ||||
| ds_strstart		dd ?	; used | ||||
| ds_match_start		dd ?	; used | ||||
| ds_lookahead		dd ?	; used | ||||
| ds_prev_length		dd ?	; used | ||||
| ds_max_chain_length	dd ?	; used | ||||
| ds_max_laxy_match	dd ? | ||||
| ds_level		dd ? | ||||
| ds_strategy		dd ? | ||||
| ds_good_match		dd ?	; used | ||||
| ds_nice_match		dd ?	; used | ||||
|  | ||||
| ; Don't need anymore of the struct for match | ||||
| DEFLATE_STATE	ENDS | ||||
|  | ||||
| ;=========================================================================== | ||||
| ; CODE | ||||
| ;=========================================================================== | ||||
| _TEXT	SEGMENT | ||||
|  | ||||
| ;--------------------------------------------------------------------------- | ||||
| ; match_init | ||||
| ;--------------------------------------------------------------------------- | ||||
| 	ALIGN	4 | ||||
| PUBLIC	_match_init | ||||
| _match_init	PROC | ||||
| 	; no initialization needed | ||||
| 	ret | ||||
| _match_init	ENDP | ||||
|  | ||||
| ;--------------------------------------------------------------------------- | ||||
| ; uInt longest_match(deflate_state *deflatestate, IPos curmatch) | ||||
| ;--------------------------------------------------------------------------- | ||||
| 	ALIGN	4 | ||||
|  | ||||
| PUBLIC	_longest_match | ||||
| _longest_match	PROC | ||||
|  | ||||
| ; Since this code uses EBP for a scratch register, the stack frame must | ||||
| ; be manually constructed and referenced relative to the ESP register. | ||||
|  | ||||
| ; Stack image | ||||
| ; Variables | ||||
| chainlenwmask	=  0	; high word: current chain len | ||||
| 			; low word: s->wmask | ||||
| window		=  4	; local copy of s->window | ||||
| windowbestlen	=  8	; s->window + bestlen | ||||
| scanend		= 12	; last two bytes of string | ||||
| scanstart	= 16	; first two bytes of string | ||||
| scanalign	= 20	; dword-misalignment of string | ||||
| nicematch	= 24	; a good enough match size | ||||
| bestlen		= 28	; size of best match so far | ||||
| scan		= 32	; ptr to string wanting match | ||||
| varsize		= 36	; number of bytes (also offset to last saved register) | ||||
|  | ||||
| ; Saved Registers (actually pushed into place) | ||||
| ebx_save	= 36 | ||||
| edi_save	= 40 | ||||
| esi_save	= 44 | ||||
| ebp_save	= 48 | ||||
|  | ||||
| ; Parameters | ||||
| retaddr		= 52 | ||||
| deflatestate	= 56 | ||||
| curmatch	= 60 | ||||
|  | ||||
| ; Save registers that the compiler may be using | ||||
| 	push	ebp | ||||
| 	push	edi | ||||
| 	push	esi | ||||
| 	push	ebx | ||||
|  | ||||
| ; Allocate local variable space | ||||
| 	sub	esp,varsize | ||||
|  | ||||
| ; Retrieve the function arguments. ecx will hold cur_match | ||||
| ; throughout the entire function. edx will hold the pointer to the | ||||
| ; deflate_state structure during the function's setup (before | ||||
| ; entering the main loop). | ||||
|  | ||||
| 	mov	edx, [esp+deflatestate] | ||||
| ASSUME	edx:PTR DEFLATE_STATE | ||||
|  | ||||
| 	mov	ecx, [esp+curmatch] | ||||
|  | ||||
| ; uInt wmask = s->w_mask; | ||||
| ; unsigned chain_length = s->max_chain_length; | ||||
| ; if (s->prev_length >= s->good_match) { | ||||
| ;     chain_length >>= 2; | ||||
| ; } | ||||
|  | ||||
| 	mov	eax, [edx].ds_prev_length | ||||
| 	mov	ebx, [edx].ds_good_match | ||||
| 	cmp	eax, ebx | ||||
| 	mov	eax, [edx].ds_w_mask | ||||
| 	mov	ebx, [edx].ds_max_chain_length | ||||
| 	jl	SHORT LastMatchGood | ||||
| 	shr	ebx, 2 | ||||
| LastMatchGood: | ||||
|  | ||||
| ; chainlen is decremented once beforehand so that the function can | ||||
| ; use the sign flag instead of the zero flag for the exit test. | ||||
| ; It is then shifted into the high word, to make room for the wmask | ||||
| ; value, which it will always accompany. | ||||
|  | ||||
| 	dec	ebx | ||||
| 	shl	ebx, 16 | ||||
| 	or	ebx, eax | ||||
| 	mov	[esp+chainlenwmask], ebx | ||||
|  | ||||
| ; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; | ||||
|  | ||||
| 	mov	eax, [edx].ds_nice_match | ||||
| 	mov	ebx, [edx].ds_lookahead | ||||
| 	cmp	ebx, eax | ||||
| 	jl	SHORT LookaheadLess | ||||
| 	mov	ebx, eax | ||||
| LookaheadLess: | ||||
| 	mov	[esp+nicematch], ebx | ||||
|  | ||||
| ;/* register Bytef *scan = s->window + s->strstart;                     */ | ||||
|  | ||||
| 	mov	esi, [edx].ds_window | ||||
| 	mov	[esp+window], esi | ||||
| 	mov	ebp, [edx].ds_strstart | ||||
| 	lea	edi, [esi+ebp] | ||||
| 	mov	[esp+scan],edi | ||||
|  | ||||
| ;/* Determine how many bytes the scan ptr is off from being             */ | ||||
| ;/* dword-aligned.                                                      */ | ||||
|  | ||||
| 	mov	eax, edi | ||||
| 	neg	eax | ||||
| 	and	eax, 3 | ||||
| 	mov	[esp+scanalign], eax | ||||
|  | ||||
| ;/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?                      */ | ||||
| ;/*     s->strstart - (IPos)MAX_DIST(s) : NIL;                          */ | ||||
|  | ||||
| 	mov	eax, [edx].ds_w_size | ||||
| 	sub	eax, MIN_LOOKAHEAD | ||||
| 	sub	ebp, eax | ||||
| 	jg	SHORT LimitPositive | ||||
| 	xor	ebp, ebp | ||||
| LimitPositive: | ||||
|  | ||||
| ;/* int best_len = s->prev_length;                                      */ | ||||
|  | ||||
| 	mov	eax, [edx].ds_prev_length | ||||
| 	mov	[esp+bestlen], eax | ||||
|  | ||||
| ;/* Store the sum of s->window + best_len in %esi locally, and in %esi. */ | ||||
|  | ||||
| 	add	esi, eax | ||||
| 	mov	[esp+windowbestlen], esi | ||||
|  | ||||
| ;/* register ush scan_start = *(ushf*)scan;                             */ | ||||
| ;/* register ush scan_end   = *(ushf*)(scan+best_len-1);                */ | ||||
| ;/* Posf *prev = s->prev;                                               */ | ||||
|  | ||||
| 	movzx	ebx, WORD PTR[edi] | ||||
| 	mov	[esp+scanstart], ebx | ||||
| 	movzx	ebx, WORD PTR[eax+edi-1] | ||||
| 	mov	[esp+scanend], ebx | ||||
| 	mov	edi, [edx].ds_prev | ||||
|  | ||||
| ;/* Jump into the main loop.                                            */ | ||||
|  | ||||
| 	mov	edx, [esp+chainlenwmask] | ||||
| 	jmp	SHORT LoopEntry | ||||
|  | ||||
| ;/* do { | ||||
| ; *     match = s->window + cur_match; | ||||
| ; *     if (*(ushf*)(match+best_len-1) != scan_end || | ||||
| ; *         *(ushf*)match != scan_start) continue; | ||||
| ; *     [...] | ||||
| ; * } while ((cur_match = prev[cur_match & wmask]) > limit | ||||
| ; *          && --chain_length != 0); | ||||
| ; * | ||||
| ; * Here is the inner loop of the function. The function will spend the | ||||
| ; * majority of its time in this loop, and majority of that time will | ||||
| ; * be spent in the first ten instructions. | ||||
| ; * | ||||
| ; * Within this loop: | ||||
| ; * %ebx = scanend | ||||
| ; * %ecx = curmatch | ||||
| ; * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) | ||||
| ; * %esi = windowbestlen - i.e., (window + bestlen) | ||||
| ; * %edi = prev | ||||
| ; * %ebp = limit | ||||
| ; */ | ||||
|  | ||||
| 	ALIGN	4 | ||||
| LookupLoop: | ||||
| 	and	ecx, edx | ||||
| 	movzx	ecx, WORD PTR[edi+ecx*2] | ||||
| 	cmp	ecx, ebp | ||||
| 	jbe	LeaveNow | ||||
| 	sub	edx, 000010000H | ||||
| 	js	LeaveNow | ||||
|  | ||||
| LoopEntry: | ||||
| 	movzx	eax, WORD PTR[esi+ecx-1] | ||||
| 	cmp	eax, ebx | ||||
| 	jnz	SHORT LookupLoop | ||||
|  | ||||
| 	mov	eax, [esp+window] | ||||
| 	movzx	eax, WORD PTR[eax+ecx] | ||||
| 	cmp	eax, [esp+scanstart] | ||||
| 	jnz	SHORT LookupLoop | ||||
|  | ||||
| ;/* Store the current value of chainlen.                                */ | ||||
|  | ||||
| 	mov	[esp+chainlenwmask], edx | ||||
|  | ||||
| ;/* Point %edi to the string under scrutiny, and %esi to the string we  */ | ||||
| ;/* are hoping to match it up with. In actuality, %esi and %edi are     */ | ||||
| ;/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is     */ | ||||
| ;/* initialized to -(MAX_MATCH_8 - scanalign).                          */ | ||||
|  | ||||
| 	mov	esi, [esp+window] | ||||
| 	mov	edi, [esp+scan] | ||||
| 	add	esi, ecx | ||||
| 	mov	eax, [esp+scanalign] | ||||
| 	mov	edx, -MAX_MATCH_8 | ||||
| 	lea	edi, [edi+eax+MAX_MATCH_8] | ||||
| 	lea	esi, [esi+eax+MAX_MATCH_8] | ||||
|  | ||||
| ;/* Test the strings for equality, 8 bytes at a time. At the end, | ||||
| ; * adjust %edx so that it is offset to the exact byte that mismatched. | ||||
| ; * | ||||
| ; * We already know at this point that the first three bytes of the | ||||
| ; * strings match each other, and they can be safely passed over before | ||||
| ; * starting the compare loop. So what this code does is skip over 0-3 | ||||
| ; * bytes, as much as necessary in order to dword-align the %edi | ||||
| ; * pointer. (%esi will still be misaligned three times out of four.) | ||||
| ; * | ||||
| ; * It should be confessed that this loop usually does not represent | ||||
| ; * much of the total running time. Replacing it with a more | ||||
| ; * straightforward "rep cmpsb" would not drastically degrade | ||||
| ; * performance. | ||||
| ; */ | ||||
|  | ||||
| LoopCmps: | ||||
| 	mov	eax, DWORD PTR[esi+edx] | ||||
| 	xor	eax, DWORD PTR[edi+edx] | ||||
| 	jnz	SHORT LeaveLoopCmps | ||||
|  | ||||
| 	mov	eax, DWORD PTR[esi+edx+4] | ||||
| 	xor	eax, DWORD PTR[edi+edx+4] | ||||
| 	jnz	SHORT LeaveLoopCmps4 | ||||
|  | ||||
| 	add	edx, 8 | ||||
| 	jnz	SHORT LoopCmps | ||||
| 	jmp	LenMaximum | ||||
| 	ALIGN	4 | ||||
|  | ||||
| LeaveLoopCmps4: | ||||
| 	add	edx, 4 | ||||
|  | ||||
| LeaveLoopCmps: | ||||
| 	test	eax, 00000FFFFH | ||||
| 	jnz	SHORT LenLower | ||||
|  | ||||
| 	add	edx, 2 | ||||
| 	shr	eax, 16 | ||||
|  | ||||
| LenLower: | ||||
| 	sub	al, 1 | ||||
| 	adc	edx, 0 | ||||
|  | ||||
| ;/* Calculate the length of the match. If it is longer than MAX_MATCH,  */ | ||||
| ;/* then automatically accept it as the best possible match and leave.  */ | ||||
|  | ||||
| 	lea	eax, [edi+edx] | ||||
| 	mov	edi, [esp+scan] | ||||
| 	sub	eax, edi | ||||
| 	cmp	eax, MAX_MATCH | ||||
| 	jge	SHORT LenMaximum | ||||
|  | ||||
| ;/* If the length of the match is not longer than the best match we     */ | ||||
| ;/* have so far, then forget it and return to the lookup loop.          */ | ||||
|  | ||||
| 	mov	edx, [esp+deflatestate] | ||||
| 	mov	ebx, [esp+bestlen] | ||||
| 	cmp	eax, ebx | ||||
| 	jg	SHORT LongerMatch | ||||
| 	mov	esi, [esp+windowbestlen] | ||||
| 	mov	edi, [edx].ds_prev | ||||
| 	mov	ebx, [esp+scanend] | ||||
| 	mov	edx, [esp+chainlenwmask] | ||||
| 	jmp	LookupLoop | ||||
| 	ALIGN	4 | ||||
|  | ||||
| ;/*         s->match_start = cur_match;                                 */ | ||||
| ;/*         best_len = len;                                             */ | ||||
| ;/*         if (len >= nice_match) break;                               */ | ||||
| ;/*         scan_end = *(ushf*)(scan+best_len-1);                       */ | ||||
|  | ||||
| LongerMatch: | ||||
| 	mov	ebx, [esp+nicematch] | ||||
| 	mov	[esp+bestlen], eax | ||||
| 	mov	[edx].ds_match_start, ecx | ||||
| 	cmp	eax, ebx | ||||
| 	jge	SHORT LeaveNow | ||||
| 	mov	esi, [esp+window] | ||||
| 	add	esi, eax | ||||
| 	mov	[esp+windowbestlen], esi | ||||
| 	movzx	ebx, WORD PTR[edi+eax-1] | ||||
| 	mov	edi, [edx].ds_prev | ||||
| 	mov	[esp+scanend], ebx | ||||
| 	mov	edx, [esp+chainlenwmask] | ||||
| 	jmp	LookupLoop | ||||
| 	ALIGN	4 | ||||
|  | ||||
| ;/* Accept the current string, with the maximum possible length.        */ | ||||
|  | ||||
| LenMaximum: | ||||
| 	mov	edx, [esp+deflatestate] | ||||
| 	mov	DWORD PTR[esp+bestlen], MAX_MATCH | ||||
| 	mov	[edx].ds_match_start, ecx | ||||
|  | ||||
| ;/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;          */ | ||||
| ;/* return s->lookahead;                                                */ | ||||
|  | ||||
| LeaveNow: | ||||
| 	mov	edx, [esp+deflatestate] | ||||
| 	mov	ebx, [esp+bestlen] | ||||
| 	mov	eax, [edx].ds_lookahead | ||||
| 	cmp	ebx, eax | ||||
| 	jg	SHORT LookaheadRet | ||||
| 	mov	eax, ebx | ||||
| LookaheadRet: | ||||
|  | ||||
| ; Restore the stack and return from whence we came. | ||||
|  | ||||
| 	add	esp, varsize | ||||
| 	pop	ebx | ||||
| 	pop	esi | ||||
| 	pop	edi | ||||
| 	pop	ebp | ||||
| 	ret | ||||
|  | ||||
| _longest_match	ENDP | ||||
|  | ||||
| _TEXT	ENDS | ||||
| END | ||||
| @@ -892,8 +892,8 @@ LookaheadRet: | ||||
| 
 | ||||
| 		ret | ||||
| ; please don't remove this string ! | ||||
| ; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary! | ||||
|         db     0dh,0ah,"asm686 with masm, code optimised assembly code from Brian Raiter, written 1998",0dh,0ah | ||||
| ; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary! | ||||
| 	db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah | ||||
| 
 | ||||
| IFDEF NOUNDERLINE | ||||
| longest_match_686   endp | ||||
| @@ -10,9 +10,6 @@ | ||||
| 
 | ||||
| #include "deflate.h" | ||||
| 
 | ||||
| #undef FAR | ||||
| //#include <windows.h>
 | ||||
| 
 | ||||
| #ifdef ASMV | ||||
| #define NIL 0 | ||||
| 
 | ||||
							
								
								
									
										1033
									
								
								contrib/masmx86/inffas32.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1033
									
								
								contrib/masmx86/inffas32.asm
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3
									
								
								contrib/masmx86/mkasm.bat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								contrib/masmx86/mkasm.bat
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| cl /I..\.. /O2 /c gvmat32c.c | ||||
| ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm | ||||
| ml /coff /Zi /c /Flinffas32.lst inffas32.asm | ||||
							
								
								
									
										21
									
								
								contrib/masmx86/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								contrib/masmx86/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
|  | ||||
| Summary | ||||
| ------- | ||||
| This directory contains ASM implementations of the functions | ||||
| longest_match() and inflate_fast(). | ||||
|  | ||||
|  | ||||
| Use instructions | ||||
| ---------------- | ||||
| Copy these files into the zlib source directory, then run the | ||||
| appropriate makefile, as suggested below. | ||||
|  | ||||
|  | ||||
| Build instructions | ||||
| ------------------ | ||||
| * With Microsoft C and MASM: | ||||
| nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" | ||||
|  | ||||
| * With Borland C and TASM: | ||||
| make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" OBJPA="+gvmat32c.obj+gvmat32.obj+inffas32.obj" | ||||
|  | ||||
| @@ -56,7 +56,7 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned lon | ||||
| #define RAND_HEAD_LEN  12 | ||||
|    /* "last resort" source for second part of crypt seed pattern */ | ||||
| #  ifndef ZCR_SEED2 | ||||
| #    define ZCR_SEED2 (unsigned long)3141592654L     /* use PI as default pattern */ | ||||
| #    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */ | ||||
| #  endif | ||||
|  | ||||
| static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) | ||||
|   | ||||
| @@ -7,7 +7,6 @@ | ||||
|    Copyright (C) 1998-2003 Gilles Vollant | ||||
| */ | ||||
|  | ||||
| #include <windows.h> | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #include "zlib.h" | ||||
| @@ -49,7 +48,7 @@ long ZCALLBACK win32_seek_file_func OF(( | ||||
|    uLong offset, | ||||
|    int origin)); | ||||
|  | ||||
| long ZCALLBACK win32_close_file_func OF(( | ||||
| int ZCALLBACK win32_close_file_func OF(( | ||||
|    voidpf opaque, | ||||
|    voidpf stream)); | ||||
|  | ||||
| @@ -225,11 +224,11 @@ long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| long ZCALLBACK win32_close_file_func (opaque, stream) | ||||
| int ZCALLBACK win32_close_file_func (opaque, stream) | ||||
|    voidpf opaque; | ||||
|    voidpf stream; | ||||
| { | ||||
|     long ret=-1; | ||||
|     int ret=-1; | ||||
|  | ||||
|     if (stream!=NULL) | ||||
|     { | ||||
|   | ||||
| @@ -7,13 +7,15 @@ | ||||
|    Copyright (C) 1998-2003 Gilles Vollant | ||||
| */ | ||||
|  | ||||
| #include <windows.h> | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|   | ||||
| @@ -59,11 +59,11 @@ woven in by Terry Thorsen 1/2003. | ||||
| /* compile with -Dlocal if your debugger can't find static symbols */ | ||||
|  | ||||
|  | ||||
|  | ||||
| #if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \ | ||||
|                       !defined(CASESENSITIVITYDEFAULT_NO) | ||||
| #ifndef CASESENSITIVITYDEFAULT_NO | ||||
| #  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) | ||||
| #    define CASESENSITIVITYDEFAULT_NO | ||||
| #  endif | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #ifndef UNZ_BUFSIZE | ||||
|   | ||||
							
								
								
									
										599
									
								
								contrib/pascal/example.pas
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										599
									
								
								contrib/pascal/example.pas
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,599 @@ | ||||
| (* example.c -- usage example of the zlib compression library | ||||
|  * Copyright (C) 1995-2003 Jean-loup Gailly. | ||||
|  * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|  * | ||||
|  * Pascal translation | ||||
|  * Copyright (C) 1998 by Jacques Nomssi Nzali. | ||||
|  * For conditions of distribution and use, see copyright notice in readme.txt | ||||
|  * | ||||
|  * Adaptation to the zlibpas interface | ||||
|  * Copyright (C) 2003 by Cosmin Truta. | ||||
|  * For conditions of distribution and use, see copyright notice in readme.txt | ||||
|  *) | ||||
|  | ||||
| program example; | ||||
|  | ||||
| {$DEFINE TEST_COMPRESS} | ||||
| {DO NOT $DEFINE TEST_GZIO} | ||||
| {$DEFINE TEST_DEFLATE} | ||||
| {$DEFINE TEST_INFLATE} | ||||
| {$DEFINE TEST_FLUSH} | ||||
| {$DEFINE TEST_SYNC} | ||||
| {$DEFINE TEST_DICT} | ||||
|  | ||||
| uses SysUtils, zlibpas; | ||||
|  | ||||
| const TESTFILE = 'foo.gz'; | ||||
|  | ||||
| (* "hello world" would be more standard, but the repeated "hello" | ||||
|  * stresses the compression code better, sorry... | ||||
|  *) | ||||
| const hello: PChar = 'hello, hello!'; | ||||
|  | ||||
| const dictionary: PChar = 'hello'; | ||||
|  | ||||
| var dictId: LongInt; (* Adler32 value of the dictionary *) | ||||
|  | ||||
| procedure CHECK_ERR(err: Integer; msg: String); | ||||
| begin | ||||
|   if err <> Z_OK then | ||||
|   begin | ||||
|     WriteLn(msg, ' error: ', err); | ||||
|     Halt(1); | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure EXIT_ERR(const msg: String); | ||||
| begin | ||||
|   WriteLn('Error: ', msg); | ||||
|   Halt(1); | ||||
| end; | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test compress and uncompress | ||||
|  *) | ||||
| {$IFDEF TEST_COMPRESS} | ||||
| procedure test_compress(compr: Pointer; comprLen: LongInt; | ||||
|                         uncompr: Pointer; uncomprLen: LongInt); | ||||
| var err: Integer; | ||||
|     len: LongInt; | ||||
| begin | ||||
|   len := StrLen(hello)+1; | ||||
|  | ||||
|   err := compress(compr, comprLen, hello, len); | ||||
|   CHECK_ERR(err, 'compress'); | ||||
|  | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   err := uncompress(uncompr, uncomprLen, compr, comprLen); | ||||
|   CHECK_ERR(err, 'uncompress'); | ||||
|  | ||||
|   if StrComp(PChar(uncompr), hello) <> 0 then | ||||
|     EXIT_ERR('bad uncompress') | ||||
|   else | ||||
|     WriteLn('uncompress(): ', PChar(uncompr)); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test read/write of .gz files | ||||
|  *) | ||||
| {$IFDEF TEST_GZIO} | ||||
| procedure test_gzio(const fname: PChar; (* compressed file name *) | ||||
|                     uncompr: Pointer; | ||||
|                     uncomprLen: LongInt); | ||||
| var err: Integer; | ||||
|     len: Integer; | ||||
|     zfile: gzFile; | ||||
|     pos: LongInt; | ||||
| begin | ||||
|   len := StrLen(hello)+1; | ||||
|  | ||||
|   zfile := gzopen(fname, 'wb'); | ||||
|   if zfile = NIL then | ||||
|   begin | ||||
|     WriteLn('gzopen error'); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   gzputc(zfile, 'h'); | ||||
|   if gzputs(zfile, 'ello') <> 4 then | ||||
|   begin | ||||
|     WriteLn('gzputs err: ', gzerror(zfile, err)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   {$IFDEF GZ_FORMAT_STRING} | ||||
|   if gzprintf(zfile, ', %s!', 'hello') <> 8 then | ||||
|   begin | ||||
|     WriteLn('gzprintf err: ', gzerror(zfile, err)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   {$ELSE} | ||||
|   if gzputs(zfile, ', hello!') <> 8 then | ||||
|   begin | ||||
|     WriteLn('gzputs err: ', gzerror(zfile, err)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   {$ENDIF} | ||||
|   gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *) | ||||
|   gzclose(zfile); | ||||
|  | ||||
|   zfile := gzopen(fname, 'rb'); | ||||
|   if zfile = NIL then | ||||
|   begin | ||||
|     WriteLn('gzopen error'); | ||||
|     Halt(1); | ||||
|   end; | ||||
|  | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   if gzread(zfile, uncompr, uncomprLen) <> len then | ||||
|   begin | ||||
|     WriteLn('gzread err: ', gzerror(zfile, err)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   if StrComp(PChar(uncompr), hello) <> 0 then | ||||
|   begin | ||||
|     WriteLn('bad gzread: ', PChar(uncompr)); | ||||
|     Halt(1); | ||||
|   end | ||||
|   else | ||||
|     WriteLn('gzread(): ', PChar(uncompr)); | ||||
|  | ||||
|   pos := gzseek(zfile, -8, SEEK_CUR); | ||||
|   if (pos <> 6) or (gztell(zfile) <> pos) then | ||||
|   begin | ||||
|     WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|  | ||||
|   if gzgetc(zfile) <> ' ' then | ||||
|   begin | ||||
|     WriteLn('gzgetc error'); | ||||
|     Halt(1); | ||||
|   end; | ||||
|  | ||||
|   if gzungetc(' ', zfile) <> ' ' then | ||||
|   begin | ||||
|     WriteLn('gzungetc error'); | ||||
|     Halt(1); | ||||
|   end; | ||||
|  | ||||
|   gzgets(zfile, PChar(uncompr), uncomprLen); | ||||
|   uncomprLen := StrLen(PChar(uncompr)); | ||||
|   if uncomprLen <> 7 then (* " hello!" *) | ||||
|   begin | ||||
|     WriteLn('gzgets err after gzseek: ', gzerror(zfile, err)); | ||||
|     Halt(1); | ||||
|   end; | ||||
|   if StrComp(PChar(uncompr), hello + 6) <> 0 then | ||||
|   begin | ||||
|     WriteLn('bad gzgets after gzseek'); | ||||
|     Halt(1); | ||||
|   end | ||||
|   else | ||||
|     WriteLn('gzgets() after gzseek: ', PChar(uncompr)); | ||||
|  | ||||
|   gzclose(zfile); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test deflate with small buffers | ||||
|  *) | ||||
| {$IFDEF TEST_DEFLATE} | ||||
| procedure test_deflate(compr: Pointer; comprLen: LongInt); | ||||
| var c_stream: z_stream; (* compression stream *) | ||||
|     err: Integer; | ||||
|     len: LongInt; | ||||
| begin | ||||
|   len := StrLen(hello)+1; | ||||
|  | ||||
|   c_stream.zalloc := NIL; | ||||
|   c_stream.zfree := NIL; | ||||
|   c_stream.opaque := NIL; | ||||
|  | ||||
|   err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); | ||||
|   CHECK_ERR(err, 'deflateInit'); | ||||
|  | ||||
|   c_stream.next_in := hello; | ||||
|   c_stream.next_out := compr; | ||||
|  | ||||
|   while (c_stream.total_in <> len) and | ||||
|         (c_stream.total_out < comprLen) do | ||||
|   begin | ||||
|     c_stream.avail_out := 1; { force small buffers } | ||||
|     c_stream.avail_in := 1; | ||||
|     err := deflate(c_stream, Z_NO_FLUSH); | ||||
|     CHECK_ERR(err, 'deflate'); | ||||
|   end; | ||||
|  | ||||
|   (* Finish the stream, still forcing small buffers: *) | ||||
|   while TRUE do | ||||
|   begin | ||||
|     c_stream.avail_out := 1; | ||||
|     err := deflate(c_stream, Z_FINISH); | ||||
|     if err = Z_STREAM_END then | ||||
|       break; | ||||
|     CHECK_ERR(err, 'deflate'); | ||||
|   end; | ||||
|  | ||||
|   err := deflateEnd(c_stream); | ||||
|   CHECK_ERR(err, 'deflateEnd'); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test inflate with small buffers | ||||
|  *) | ||||
| {$IFDEF TEST_INFLATE} | ||||
| procedure test_inflate(compr: Pointer; comprLen : LongInt; | ||||
|                        uncompr: Pointer; uncomprLen : LongInt); | ||||
| var err: Integer; | ||||
|     d_stream: z_stream; (* decompression stream *) | ||||
| begin | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   d_stream.zalloc := NIL; | ||||
|   d_stream.zfree := NIL; | ||||
|   d_stream.opaque := NIL; | ||||
|  | ||||
|   d_stream.next_in := compr; | ||||
|   d_stream.avail_in := 0; | ||||
|   d_stream.next_out := uncompr; | ||||
|  | ||||
|   err := inflateInit(d_stream); | ||||
|   CHECK_ERR(err, 'inflateInit'); | ||||
|  | ||||
|   while (d_stream.total_out < uncomprLen) and | ||||
|         (d_stream.total_in < comprLen) do | ||||
|   begin | ||||
|     d_stream.avail_out := 1; (* force small buffers *) | ||||
|     d_stream.avail_in := 1; | ||||
|     err := inflate(d_stream, Z_NO_FLUSH); | ||||
|     if err = Z_STREAM_END then | ||||
|       break; | ||||
|     CHECK_ERR(err, 'inflate'); | ||||
|   end; | ||||
|  | ||||
|   err := inflateEnd(d_stream); | ||||
|   CHECK_ERR(err, 'inflateEnd'); | ||||
|  | ||||
|   if StrComp(PChar(uncompr), hello) <> 0 then | ||||
|     EXIT_ERR('bad inflate') | ||||
|   else | ||||
|     WriteLn('inflate(): ', PChar(uncompr)); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test deflate with large buffers and dynamic change of compression level | ||||
|  *) | ||||
| {$IFDEF TEST_DEFLATE} | ||||
| procedure test_large_deflate(compr: Pointer; comprLen: LongInt; | ||||
|                              uncompr: Pointer; uncomprLen: LongInt); | ||||
| var c_stream: z_stream; (* compression stream *) | ||||
|     err: Integer; | ||||
| begin | ||||
|   c_stream.zalloc := NIL; | ||||
|   c_stream.zfree := NIL; | ||||
|   c_stream.opaque := NIL; | ||||
|  | ||||
|   err := deflateInit(c_stream, Z_BEST_SPEED); | ||||
|   CHECK_ERR(err, 'deflateInit'); | ||||
|  | ||||
|   c_stream.next_out := compr; | ||||
|   c_stream.avail_out := Integer(comprLen); | ||||
|  | ||||
|   (* At this point, uncompr is still mostly zeroes, so it should compress | ||||
|    * very well: | ||||
|    *) | ||||
|   c_stream.next_in := uncompr; | ||||
|   c_stream.avail_in := Integer(uncomprLen); | ||||
|   err := deflate(c_stream, Z_NO_FLUSH); | ||||
|   CHECK_ERR(err, 'deflate'); | ||||
|   if c_stream.avail_in <> 0 then | ||||
|     EXIT_ERR('deflate not greedy'); | ||||
|  | ||||
|   (* Feed in already compressed data and switch to no compression: *) | ||||
|   deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); | ||||
|   c_stream.next_in := compr; | ||||
|   c_stream.avail_in := Integer(comprLen div 2); | ||||
|   err := deflate(c_stream, Z_NO_FLUSH); | ||||
|   CHECK_ERR(err, 'deflate'); | ||||
|  | ||||
|   (* Switch back to compressing mode: *) | ||||
|   deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED); | ||||
|   c_stream.next_in := uncompr; | ||||
|   c_stream.avail_in := Integer(uncomprLen); | ||||
|   err := deflate(c_stream, Z_NO_FLUSH); | ||||
|   CHECK_ERR(err, 'deflate'); | ||||
|  | ||||
|   err := deflate(c_stream, Z_FINISH); | ||||
|   if err <> Z_STREAM_END then | ||||
|     EXIT_ERR('deflate should report Z_STREAM_END'); | ||||
|  | ||||
|   err := deflateEnd(c_stream); | ||||
|   CHECK_ERR(err, 'deflateEnd'); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test inflate with large buffers | ||||
|  *) | ||||
| {$IFDEF TEST_INFLATE} | ||||
| procedure test_large_inflate(compr: Pointer; comprLen: LongInt; | ||||
|                              uncompr: Pointer; uncomprLen: LongInt); | ||||
| var err: Integer; | ||||
|     d_stream: z_stream; (* decompression stream *) | ||||
| begin | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   d_stream.zalloc := NIL; | ||||
|   d_stream.zfree := NIL; | ||||
|   d_stream.opaque := NIL; | ||||
|  | ||||
|   d_stream.next_in := compr; | ||||
|   d_stream.avail_in := Integer(comprLen); | ||||
|  | ||||
|   err := inflateInit(d_stream); | ||||
|   CHECK_ERR(err, 'inflateInit'); | ||||
|  | ||||
|   while TRUE do | ||||
|   begin | ||||
|     d_stream.next_out := uncompr;            (* discard the output *) | ||||
|     d_stream.avail_out := Integer(uncomprLen); | ||||
|     err := inflate(d_stream, Z_NO_FLUSH); | ||||
|     if err = Z_STREAM_END then | ||||
|       break; | ||||
|     CHECK_ERR(err, 'large inflate'); | ||||
|   end; | ||||
|  | ||||
|   err := inflateEnd(d_stream); | ||||
|   CHECK_ERR(err, 'inflateEnd'); | ||||
|  | ||||
|   if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then | ||||
|   begin | ||||
|     WriteLn('bad large inflate: ', d_stream.total_out); | ||||
|     Halt(1); | ||||
|   end | ||||
|   else | ||||
|     WriteLn('large_inflate(): OK'); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test deflate with full flush | ||||
|  *) | ||||
| {$IFDEF TEST_FLUSH} | ||||
| procedure test_flush(compr: Pointer; var comprLen : LongInt); | ||||
| var c_stream: z_stream; (* compression stream *) | ||||
|     err: Integer; | ||||
|     len: Integer; | ||||
| begin | ||||
|   len := StrLen(hello)+1; | ||||
|  | ||||
|   c_stream.zalloc := NIL; | ||||
|   c_stream.zfree := NIL; | ||||
|   c_stream.opaque := NIL; | ||||
|  | ||||
|   err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); | ||||
|   CHECK_ERR(err, 'deflateInit'); | ||||
|  | ||||
|   c_stream.next_in := hello; | ||||
|   c_stream.next_out := compr; | ||||
|   c_stream.avail_in := 3; | ||||
|   c_stream.avail_out := Integer(comprLen); | ||||
|   err := deflate(c_stream, Z_FULL_FLUSH); | ||||
|   CHECK_ERR(err, 'deflate'); | ||||
|  | ||||
|   Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *) | ||||
|   c_stream.avail_in := len - 3; | ||||
|  | ||||
|   err := deflate(c_stream, Z_FINISH); | ||||
|   if err <> Z_STREAM_END then | ||||
|     CHECK_ERR(err, 'deflate'); | ||||
|  | ||||
|   err := deflateEnd(c_stream); | ||||
|   CHECK_ERR(err, 'deflateEnd'); | ||||
|  | ||||
|   comprLen := c_stream.total_out; | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test inflateSync() | ||||
|  *) | ||||
| {$IFDEF TEST_SYNC} | ||||
| procedure test_sync(compr: Pointer; comprLen: LongInt; | ||||
|                     uncompr: Pointer; uncomprLen : LongInt); | ||||
| var err: Integer; | ||||
|     d_stream: z_stream; (* decompression stream *) | ||||
| begin | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   d_stream.zalloc := NIL; | ||||
|   d_stream.zfree := NIL; | ||||
|   d_stream.opaque := NIL; | ||||
|  | ||||
|   d_stream.next_in := compr; | ||||
|   d_stream.avail_in := 2; (* just read the zlib header *) | ||||
|  | ||||
|   err := inflateInit(d_stream); | ||||
|   CHECK_ERR(err, 'inflateInit'); | ||||
|  | ||||
|   d_stream.next_out := uncompr; | ||||
|   d_stream.avail_out := Integer(uncomprLen); | ||||
|  | ||||
|   inflate(d_stream, Z_NO_FLUSH); | ||||
|   CHECK_ERR(err, 'inflate'); | ||||
|  | ||||
|   d_stream.avail_in := Integer(comprLen-2);   (* read all compressed data *) | ||||
|   err := inflateSync(d_stream);               (* but skip the damaged part *) | ||||
|   CHECK_ERR(err, 'inflateSync'); | ||||
|  | ||||
|   err := inflate(d_stream, Z_FINISH); | ||||
|   if err <> Z_DATA_ERROR then | ||||
|     EXIT_ERR('inflate should report DATA_ERROR'); | ||||
|     (* Because of incorrect adler32 *) | ||||
|  | ||||
|   err := inflateEnd(d_stream); | ||||
|   CHECK_ERR(err, 'inflateEnd'); | ||||
|  | ||||
|   WriteLn('after inflateSync(): hel', PChar(uncompr)); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test deflate with preset dictionary | ||||
|  *) | ||||
| {$IFDEF TEST_DICT} | ||||
| procedure test_dict_deflate(compr: Pointer; comprLen: LongInt); | ||||
| var c_stream: z_stream; (* compression stream *) | ||||
|     err: Integer; | ||||
| begin | ||||
|   c_stream.zalloc := NIL; | ||||
|   c_stream.zfree := NIL; | ||||
|   c_stream.opaque := NIL; | ||||
|  | ||||
|   err := deflateInit(c_stream, Z_BEST_COMPRESSION); | ||||
|   CHECK_ERR(err, 'deflateInit'); | ||||
|  | ||||
|   err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary)); | ||||
|   CHECK_ERR(err, 'deflateSetDictionary'); | ||||
|  | ||||
|   dictId := c_stream.adler; | ||||
|   c_stream.next_out := compr; | ||||
|   c_stream.avail_out := Integer(comprLen); | ||||
|  | ||||
|   c_stream.next_in := hello; | ||||
|   c_stream.avail_in := StrLen(hello)+1; | ||||
|  | ||||
|   err := deflate(c_stream, Z_FINISH); | ||||
|   if err <> Z_STREAM_END then | ||||
|     EXIT_ERR('deflate should report Z_STREAM_END'); | ||||
|  | ||||
|   err := deflateEnd(c_stream); | ||||
|   CHECK_ERR(err, 'deflateEnd'); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| (* =========================================================================== | ||||
|  * Test inflate with a preset dictionary | ||||
|  *) | ||||
| {$IFDEF TEST_DICT} | ||||
| procedure test_dict_inflate(compr: Pointer; comprLen: LongInt; | ||||
|                             uncompr: Pointer; uncomprLen: LongInt); | ||||
| var err: Integer; | ||||
|     d_stream: z_stream; (* decompression stream *) | ||||
| begin | ||||
|   StrCopy(PChar(uncompr), 'garbage'); | ||||
|  | ||||
|   d_stream.zalloc := NIL; | ||||
|   d_stream.zfree := NIL; | ||||
|   d_stream.opaque := NIL; | ||||
|  | ||||
|   d_stream.next_in := compr; | ||||
|   d_stream.avail_in := Integer(comprLen); | ||||
|  | ||||
|   err := inflateInit(d_stream); | ||||
|   CHECK_ERR(err, 'inflateInit'); | ||||
|  | ||||
|   d_stream.next_out := uncompr; | ||||
|   d_stream.avail_out := Integer(uncomprLen); | ||||
|  | ||||
|   while TRUE do | ||||
|   begin | ||||
|     err := inflate(d_stream, Z_NO_FLUSH); | ||||
|     if err = Z_STREAM_END then | ||||
|       break; | ||||
|     if err = Z_NEED_DICT then | ||||
|     begin | ||||
|       if d_stream.adler <> dictId then | ||||
|         EXIT_ERR('unexpected dictionary'); | ||||
|       err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary)); | ||||
|     end; | ||||
|     CHECK_ERR(err, 'inflate with dict'); | ||||
|   end; | ||||
|  | ||||
|   err := inflateEnd(d_stream); | ||||
|   CHECK_ERR(err, 'inflateEnd'); | ||||
|  | ||||
|   if StrComp(PChar(uncompr), hello) <> 0 then | ||||
|     EXIT_ERR('bad inflate with dict') | ||||
|   else | ||||
|     WriteLn('inflate with dictionary: ', PChar(uncompr)); | ||||
| end; | ||||
| {$ENDIF} | ||||
|  | ||||
| var compr, uncompr: Pointer; | ||||
|     comprLen, uncomprLen: LongInt; | ||||
|  | ||||
| begin | ||||
|   if zlibVersion^ <> ZLIB_VERSION[1] then | ||||
|     EXIT_ERR('Incompatible zlib version'); | ||||
|  | ||||
|   WriteLn('zlib version: ', zlibVersion); | ||||
|   WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags])); | ||||
|  | ||||
|   comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *) | ||||
|   uncomprLen := comprLen; | ||||
|   GetMem(compr, comprLen); | ||||
|   GetMem(uncompr, uncomprLen); | ||||
|   if (compr = NIL) or (uncompr = NIL) then | ||||
|     EXIT_ERR('Out of memory'); | ||||
|   (* compr and uncompr are cleared to avoid reading uninitialized | ||||
|    * data and to ensure that uncompr compresses well. | ||||
|    *) | ||||
|   FillChar(compr^, comprLen, 0); | ||||
|   FillChar(uncompr^, uncomprLen, 0); | ||||
|  | ||||
|   {$IFDEF TEST_COMPRESS} | ||||
|   WriteLn('** Testing compress'); | ||||
|   test_compress(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|  | ||||
|   {$IFDEF TEST_GZIO} | ||||
|   WriteLn('** Testing gzio'); | ||||
|   if ParamCount >= 1 then | ||||
|     test_gzio(ParamStr(1), uncompr, uncomprLen) | ||||
|   else | ||||
|     test_gzio(TESTFILE, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|  | ||||
|   {$IFDEF TEST_DEFLATE} | ||||
|   WriteLn('** Testing deflate with small buffers'); | ||||
|   test_deflate(compr, comprLen); | ||||
|   {$ENDIF} | ||||
|   {$IFDEF TEST_INFLATE} | ||||
|   WriteLn('** Testing inflate with small buffers'); | ||||
|   test_inflate(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|  | ||||
|   {$IFDEF TEST_DEFLATE} | ||||
|   WriteLn('** Testing deflate with large buffers'); | ||||
|   test_large_deflate(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|   {$IFDEF TEST_INFLATE} | ||||
|   WriteLn('** Testing inflate with large buffers'); | ||||
|   test_large_inflate(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|  | ||||
|   {$IFDEF TEST_FLUSH} | ||||
|   WriteLn('** Testing deflate with full flush'); | ||||
|   test_flush(compr, comprLen); | ||||
|   {$ENDIF} | ||||
|   {$IFDEF TEST_SYNC} | ||||
|   WriteLn('** Testing inflateSync'); | ||||
|   test_sync(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|   comprLen := uncomprLen; | ||||
|  | ||||
|   {$IFDEF TEST_DICT} | ||||
|   WriteLn('** Testing deflate and inflate with preset dictionary'); | ||||
|   test_dict_deflate(compr, comprLen); | ||||
|   test_dict_inflate(compr, comprLen, uncompr, uncomprLen); | ||||
|   {$ENDIF} | ||||
|  | ||||
|   FreeMem(compr, comprLen); | ||||
|   FreeMem(uncompr, uncomprLen); | ||||
| end. | ||||
							
								
								
									
										76
									
								
								contrib/pascal/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								contrib/pascal/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
|  | ||||
| This directory contains a Pascal (Delphi, Kylix) interface to the | ||||
| zlib data compression library. | ||||
|  | ||||
|  | ||||
| Directory listing | ||||
| ================= | ||||
|  | ||||
| zlibd32.mak     makefile for Borland C++ | ||||
| example.pas     usage example of zlib | ||||
| zlibpas.pas     the Pascal interface to zlib | ||||
| readme.txt      this file | ||||
|  | ||||
|  | ||||
| Compatibility notes | ||||
| =================== | ||||
|  | ||||
| - Although the name "zlib" would have been more normal for the | ||||
|   zlibpas unit, this name is already taken by Borland's ZLib unit. | ||||
|   This is somehow unfortunate, because that unit is not a genuine | ||||
|   interface to the full-fledged zlib functionality, but a suite of | ||||
|   class wrappers around zlib streams.  Other essential features, | ||||
|   such as checksums, are missing. | ||||
|   It would have been more appropriate for that unit to have a name | ||||
|   like "ZStreams", or something similar. | ||||
|  | ||||
| - The C and zlib-supplied types int, uInt, long, uLong, etc. are | ||||
|   translated directly into Pascal types of similar sizes (Integer, | ||||
|   LongInt, etc.), to avoid namespace pollution.  In particular, | ||||
|   there is no conversion of unsigned int into a Pascal unsigned | ||||
|   integer.  The Word type is non-portable and has the same size | ||||
|   (16 bits) both in a 16-bit and in a 32-bit environment, unlike | ||||
|   Integer.  Even if there is a 32-bit Cardinal type, there is no | ||||
|   real need for unsigned int in zlib under a 32-bit environment. | ||||
|  | ||||
| - Except for the callbacks, the zlib function interfaces are | ||||
|   assuming the calling convention normally used in Pascal | ||||
|   (__pascal for DOS and Windows16, __fastcall for Windows32). | ||||
|   Since the cdecl keyword is used, the old Turbo Pascal does | ||||
|   not work with this interface. | ||||
|  | ||||
| - The gz* function interfaces are not translated, to avoid | ||||
|   interfacing problems with the C runtime library.  Besides, | ||||
|     gzprintf(gzFile file, const char *format, ...) | ||||
|   cannot be translated into Pascal. | ||||
|  | ||||
|  | ||||
| Legal issues | ||||
| ============ | ||||
|  | ||||
| The zlibpas interface is: | ||||
|   Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler. | ||||
|   Copyright (C) 1998 by Bob Dellaca. | ||||
|   Copyright (C) 2003 by Cosmin Truta. | ||||
|  | ||||
| The example program is: | ||||
|   Copyright (C) 1995-2003 by Jean-loup Gailly. | ||||
|   Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali. | ||||
|   Copyright (C) 2003 by Cosmin Truta. | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the author be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
|  | ||||
							
								
								
									
										93
									
								
								contrib/pascal/zlibd32.mak
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								contrib/pascal/zlibd32.mak
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| # Makefile for zlib | ||||
| # For use with Delphi and C++ Builder under Win32 | ||||
| # Updated for zlib 1.2.x by Cosmin Truta | ||||
|  | ||||
| # ------------ Borland C++ ------------ | ||||
|  | ||||
| # This project uses the Delphi (fastcall/register) calling convention: | ||||
| LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl | ||||
|  | ||||
| CC = bcc32 | ||||
| LD = bcc32 | ||||
| AR = tlib | ||||
| # do not use "-pr" in CFLAGS | ||||
| CFLAGS = -a -d -k- -O2 $(LOC) | ||||
| LDFLAGS = | ||||
|  | ||||
|  | ||||
| # variables | ||||
| ZLIB_LIB = zlib.lib | ||||
|  | ||||
| OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj | ||||
| OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | ||||
| OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj | ||||
| OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | ||||
|  | ||||
|  | ||||
| # targets | ||||
| all: $(ZLIB_LIB) example.exe minigzip.exe | ||||
|  | ||||
| .c.obj: | ||||
| 	$(CC) -c $(CFLAGS) $*.c | ||||
|  | ||||
| adler32.obj: adler32.c zlib.h zconf.h | ||||
|  | ||||
| compress.obj: compress.c zlib.h zconf.h | ||||
|  | ||||
| crc32.obj: crc32.c zlib.h zconf.h crc32.h | ||||
|  | ||||
| deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | ||||
|  | ||||
| gzio.obj: gzio.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h | ||||
|  | ||||
| inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h | ||||
|  | ||||
| trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h | ||||
|  | ||||
| uncompr.obj: uncompr.c zlib.h zconf.h | ||||
|  | ||||
| zutil.obj: zutil.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| example.obj: example.c zlib.h zconf.h | ||||
|  | ||||
| minigzip.obj: minigzip.c zlib.h zconf.h | ||||
|  | ||||
|  | ||||
| # For the sake of the old Borland make, | ||||
| # the command line is cut to fit in the MS-DOS 128 byte limit: | ||||
| $(ZLIB_LIB): $(OBJ1) $(OBJ2) | ||||
| 	-del $(ZLIB_LIB) | ||||
| 	$(AR) $(ZLIB_LIB) $(OBJP1) | ||||
| 	$(AR) $(ZLIB_LIB) $(OBJP2) | ||||
|  | ||||
|  | ||||
| # testing | ||||
| test: example.exe minigzip.exe | ||||
| 	example | ||||
| 	echo hello world | minigzip | minigzip -d | ||||
|  | ||||
| example.exe: example.obj $(ZLIB_LIB) | ||||
| 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) | ||||
|  | ||||
| minigzip.exe: minigzip.obj $(ZLIB_LIB) | ||||
| 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) | ||||
|  | ||||
|  | ||||
| # cleanup | ||||
| clean: | ||||
| 	-del *.obj | ||||
| 	-del *.exe | ||||
| 	-del *.lib | ||||
| 	-del *.tds | ||||
| 	-del zlib.bak | ||||
| 	-del foo.gz | ||||
|  | ||||
							
								
								
									
										234
									
								
								contrib/pascal/zlibpas.pas
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								contrib/pascal/zlibpas.pas
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,234 @@ | ||||
| (* zlibpas -- Pascal interface to the zlib data compression library | ||||
|  * | ||||
|  * Copyright (C) 2003 Cosmin Truta. | ||||
|  * Derived from original sources by Bob Dellaca. | ||||
|  * For conditions of distribution and use, see copyright notice in readme.txt | ||||
|  *) | ||||
|  | ||||
| unit zlibpas; | ||||
|  | ||||
| interface | ||||
|  | ||||
| const | ||||
|   ZLIB_VERSION = '1.2.0'; | ||||
|  | ||||
| type | ||||
|   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; | ||||
|                  cdecl; | ||||
|   free_func  = procedure(opaque, address: Pointer); | ||||
|                  cdecl; | ||||
|  | ||||
|   in_func    = function(opaque: Pointer; var buf: PByte): Integer; | ||||
|                  cdecl; | ||||
|   out_func   = function(opaque: Pointer; buf: PByte; size: Integer): Integer; | ||||
|                  cdecl; | ||||
|  | ||||
|   z_streamp = ^z_stream; | ||||
|   z_stream = packed record | ||||
|     next_in: PChar;       (* next input byte *) | ||||
|     avail_in: Integer;    (* number of bytes available at next_in *) | ||||
|     total_in: LongInt;    (* total nb of input bytes read so far *) | ||||
|  | ||||
|     next_out: PChar;      (* next output byte should be put there *) | ||||
|     avail_out: Integer;   (* remaining free space at next_out *) | ||||
|     total_out: LongInt;   (* total nb of bytes output so far *) | ||||
|  | ||||
|     msg: PChar;           (* last error message, NULL if no error *) | ||||
|     state: Pointer;       (* not visible by applications *) | ||||
|  | ||||
|     zalloc: alloc_func;   (* used to allocate the internal state *) | ||||
|     zfree: free_func;     (* used to free the internal state *) | ||||
|     opaque: Pointer;      (* private data object passed to zalloc and zfree *) | ||||
|  | ||||
|     data_type: Integer;   (* best guess about the data type: ascii or binary *) | ||||
|     adler: LongInt;       (* adler32 value of the uncompressed data *) | ||||
|     reserved: LongInt;    (* reserved for future use *) | ||||
|   end; | ||||
|  | ||||
| (* constants *) | ||||
| const | ||||
|   Z_NO_FLUSH      = 0; | ||||
|   Z_PARTIAL_FLUSH = 1; | ||||
|   Z_SYNC_FLUSH    = 2; | ||||
|   Z_FULL_FLUSH    = 3; | ||||
|   Z_FINISH        = 4; | ||||
|  | ||||
|   Z_OK            =  0; | ||||
|   Z_STREAM_END    =  1; | ||||
|   Z_NEED_DICT     =  2; | ||||
|   Z_ERRNO         = -1; | ||||
|   Z_STREAM_ERROR  = -2; | ||||
|   Z_DATA_ERROR    = -3; | ||||
|   Z_MEM_ERROR     = -4; | ||||
|   Z_BUF_ERROR     = -5; | ||||
|   Z_VERSION_ERROR = -6; | ||||
|  | ||||
|   Z_NO_COMPRESSION       =  0; | ||||
|   Z_BEST_SPEED           =  1; | ||||
|   Z_BEST_COMPRESSION     =  9; | ||||
|   Z_DEFAULT_COMPRESSION  = -1; | ||||
|  | ||||
|   Z_FILTERED            = 1; | ||||
|   Z_HUFFMAN_ONLY        = 2; | ||||
|   Z_RLE                 = 3; | ||||
|   Z_DEFAULT_STRATEGY    = 0; | ||||
|  | ||||
|   Z_BINARY   = 0; | ||||
|   Z_ASCII    = 1; | ||||
|   Z_UNKNOWN  = 2; | ||||
|  | ||||
|   Z_DEFLATED = 8; | ||||
|  | ||||
| (* basic functions *) | ||||
| function zlibVersion: PChar; | ||||
| function deflateInit(var strm: z_stream; level: Integer): Integer; | ||||
| function deflate(var strm: z_stream; flush: Integer): Integer; | ||||
| function deflateEnd(var strm: z_stream): Integer; | ||||
| function inflateInit(var strm: z_stream): Integer; | ||||
| function inflate(var strm: z_stream; flush: Integer): Integer; | ||||
| function inflateEnd(var strm: z_stream): Integer; | ||||
|  | ||||
| (* advanced functions *) | ||||
| function deflateInit2(var strm: z_stream; level, method, windowBits, | ||||
|                       memLevel, strategy: Integer): Integer; | ||||
| function deflateSetDictionary(var strm: z_stream; const dictionary: PChar; | ||||
|                               dictLength: Integer): Integer; | ||||
| function deflateCopy(var dest, source: z_stream): Integer; | ||||
| function deflateReset(var strm: z_stream): Integer; | ||||
| function deflateParams(var strm: z_stream; level, strategy: Integer): Integer; | ||||
| function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt; | ||||
| function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; | ||||
| function inflateSetDictionary(var strm: z_stream; const dictionary: PChar; | ||||
|                               dictLength: Integer): Integer; | ||||
| function inflateSync(var strm: z_stream): Integer; | ||||
| function inflateCopy(var dest, source: z_stream): Integer; | ||||
| function inflateReset(var strm: z_stream): Integer; | ||||
| function inflateBackInit(var strm: z_stream; | ||||
|                          windowBits: Integer; window: PChar): Integer; | ||||
| function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer; | ||||
|                      out_fn: out_func; out_desc: Pointer): Integer; | ||||
| function inflateBackEnd(var strm: z_stream): Integer; | ||||
| function zlibCompileFlags: LongInt; | ||||
|  | ||||
| (* utility functions *) | ||||
| function compress(dest: PChar; var destLen: LongInt; | ||||
|                   const source: PChar; sourceLen: LongInt): Integer; | ||||
| function compress2(dest: PChar; var destLen: LongInt; | ||||
|                   const source: PChar; sourceLen: LongInt; | ||||
|                   level: Integer): Integer; | ||||
| function compressBound(sourceLen: LongInt): LongInt; | ||||
| function uncompress(dest: PChar; var destLen: LongInt; | ||||
|                     const source: PChar; sourceLen: LongInt): Integer; | ||||
|  | ||||
| (* checksum functions *) | ||||
| function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt; | ||||
| function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt; | ||||
|  | ||||
| (* various hacks, don't look :) *) | ||||
| function deflateInit_(var strm: z_stream; level: Integer; | ||||
|                       const version: PChar; stream_size: Integer): Integer; | ||||
| function inflateInit_(var strm: z_stream; const version: PChar; | ||||
|                       stream_size: Integer): Integer; | ||||
| function deflateInit2_(var strm: z_stream; | ||||
|                        level, method, windowBits, memLevel, strategy: Integer; | ||||
|                        const version: PChar; stream_size: Integer): Integer; | ||||
| function inflateInit2_(var strm: z_stream; windowBits: Integer; | ||||
|                        const version: PChar; stream_size: Integer): Integer; | ||||
| function inflateBackInit_(var strm: z_stream; | ||||
|                           windowBits: Integer; window: PChar; | ||||
|                           const version: PChar; stream_size: Integer): Integer; | ||||
|  | ||||
|  | ||||
| implementation | ||||
|  | ||||
| {$L adler32.obj} | ||||
| {$L compress.obj} | ||||
| {$L crc32.obj} | ||||
| {$L deflate.obj} | ||||
| {$L infback.obj} | ||||
| {$L inffast.obj} | ||||
| {$L inflate.obj} | ||||
| {$L inftrees.obj} | ||||
| {$L trees.obj} | ||||
| {$L uncompr.obj} | ||||
| {$L zutil.obj} | ||||
|  | ||||
| function adler32; external; | ||||
| function compress; external; | ||||
| function compress2; external; | ||||
| function compressBound; external; | ||||
| function crc32; external; | ||||
| function deflate; external; | ||||
| function deflateBound; external; | ||||
| function deflateCopy; external; | ||||
| function deflateEnd; external; | ||||
| function deflateInit_; external; | ||||
| function deflateInit2_; external; | ||||
| function deflateParams; external; | ||||
| function deflateReset; external; | ||||
| function deflateSetDictionary; external; | ||||
| function inflate; external; | ||||
| function inflateBack; external; | ||||
| function inflateBackEnd; external; | ||||
| function inflateBackInit_; external; | ||||
| function inflateCopy; external; | ||||
| function inflateEnd; external; | ||||
| function inflateInit_; external; | ||||
| function inflateInit2_; external; | ||||
| function inflateReset; external; | ||||
| function inflateSetDictionary; external; | ||||
| function inflateSync; external; | ||||
| function uncompress; external; | ||||
| function zlibCompileFlags; external; | ||||
| function zlibVersion; external; | ||||
|  | ||||
| function deflateInit(var strm: z_stream; level: Integer): Integer; | ||||
| begin | ||||
|   Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel, | ||||
|                       strategy: Integer): Integer; | ||||
| begin | ||||
|   Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | ||||
|                           ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function inflateInit(var strm: z_stream): Integer; | ||||
| begin | ||||
|   Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; | ||||
| begin | ||||
|   Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function inflateBackInit(var strm: z_stream; | ||||
|                          windowBits: Integer; window: PChar): Integer; | ||||
| begin | ||||
|   Result := inflateBackInit_(strm, windowBits, window, | ||||
|                              ZLIB_VERSION, sizeof(z_stream)); | ||||
| end; | ||||
|  | ||||
| function _malloc(Size: Integer): Pointer; cdecl; | ||||
| begin | ||||
|   GetMem(Result, Size); | ||||
| end; | ||||
|  | ||||
| procedure _free(Block: Pointer); cdecl; | ||||
| begin | ||||
|   FreeMem(Block); | ||||
| end; | ||||
|  | ||||
| procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; | ||||
| begin | ||||
|   FillChar(P^, count, B); | ||||
| end; | ||||
|  | ||||
| procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; | ||||
| begin | ||||
|   Move(source^, dest^, count); | ||||
| end; | ||||
|  | ||||
| end. | ||||
| @@ -19,7 +19,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;_DEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||
| 				MinimalRebuild="TRUE" | ||||
| 				BasicRuntimeChecks="3" | ||||
| 				RuntimeLibrary="5" | ||||
| @@ -63,7 +63,7 @@ | ||||
| 				Optimization="2" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				OmitFramePointers="TRUE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;NDEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||
| 				StringPooling="TRUE" | ||||
| 				RuntimeLibrary="4" | ||||
| 				EnableFunctionLevelLinking="TRUE" | ||||
| @@ -116,7 +116,7 @@ | ||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||
| 		</Filter> | ||||
| 		<File | ||||
| 			RelativePath="zlib.lib"> | ||||
| 			RelativePath="zlibwapi.lib"> | ||||
| 		</File> | ||||
| 	</Files> | ||||
| 	<Globals> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ untgz.o: untgz.c ../../zlib.h | ||||
| 	$(CC) $(CFLAGS) -c -I../.. untgz.c | ||||
|  | ||||
| ../../libz.a: | ||||
| 	cd ../..; make | ||||
| 	cd ../..; ./configure; make | ||||
|  | ||||
| clean: | ||||
| 	rm -f untgz untgz.o *~ | ||||
|   | ||||
							
								
								
									
										17
									
								
								contrib/untgz/Makefile.msc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								contrib/untgz/Makefile.msc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| CC=cl | ||||
| CFLAGS=-MD | ||||
|  | ||||
| untgz.exe: untgz.obj ..\..\zlib.lib | ||||
| 	$(CC) $(CFLAGS) untgz.obj ..\..\zlib.lib | ||||
|  | ||||
| untgz.obj: untgz.c ..\..\zlib.h | ||||
| 	$(CC) $(CFLAGS) -c -I..\.. untgz.c | ||||
|  | ||||
| ..\..\zlib.lib: | ||||
| 	cd ..\.. | ||||
| 	$(MAKE) -f win32\makefile.msc | ||||
| 	cd contrib\untgz | ||||
|  | ||||
| clean: | ||||
| 	-del untgz.obj | ||||
| 	-del untgz.exe | ||||
| @@ -1,63 +0,0 @@ | ||||
| # 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 | ||||
|  | ||||
| @@ -21,6 +21,7 @@ | ||||
| #include "zlib.h" | ||||
|  | ||||
| #ifdef WIN32 | ||||
| #include <windows.h> | ||||
| #  ifndef F_OK | ||||
| #    define F_OK (0) | ||||
| #  endif | ||||
| @@ -84,6 +85,7 @@ void TGZnotfound	OF((const char *)); | ||||
|  | ||||
| int getoct              OF((char *, int)); | ||||
| char *strtime           OF((time_t *)); | ||||
| int setftime            OF((char *, time_t)); | ||||
| int ExprMatch           OF((char *, char *)); | ||||
|  | ||||
| int makedir             OF((char *)); | ||||
| @@ -99,12 +101,12 @@ char *prog; | ||||
|  | ||||
| /* This will give a benign warning */ | ||||
|  | ||||
| static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", ".tar", NULL }; | ||||
| static char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", 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 *TGZfname (const char *fname) | ||||
| { | ||||
|   static char buffer[1024]; | ||||
|   int origlen,i; | ||||
| @@ -112,9 +114,9 @@ static char *TGZfname OF((const char *fname)) | ||||
|   strcpy(buffer,fname); | ||||
|   origlen = strlen(buffer); | ||||
|  | ||||
|   for (i=0; TGZprefix[i]; i++) | ||||
|   for (i=0; TGZsuffix[i]; i++) | ||||
|     { | ||||
|        strcpy(buffer+origlen,TGZprefix[i]); | ||||
|        strcpy(buffer+origlen,TGZsuffix[i]); | ||||
|        if (access(buffer,F_OK) == 0) | ||||
|          return buffer; | ||||
|     } | ||||
| @@ -123,15 +125,15 @@ static char *TGZfname OF((const char *fname)) | ||||
|  | ||||
| /* error message for the filename */ | ||||
|  | ||||
| void TGZnotfound OF((const char *fname)) | ||||
| void TGZnotfound (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", | ||||
|   for (i=0;TGZsuffix[i];i++) | ||||
|     fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n", | ||||
|             fname, | ||||
|             TGZprefix[i]); | ||||
|             TGZsuffix[i]); | ||||
|   exit(1); | ||||
| } | ||||
|  | ||||
| @@ -167,6 +169,46 @@ char *strtime (time_t *t) | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| int setftime (char *fname,time_t ftime) | ||||
| { | ||||
| #ifdef WIN32 | ||||
|   SYSTEMTIME st; | ||||
|   FILETIME locft, modft; | ||||
|   struct tm *loctm; | ||||
|   HANDLE hFile; | ||||
|   int result; | ||||
|  | ||||
|   loctm = localtime(&ftime); | ||||
|   if (loctm == NULL) | ||||
|     return -1; | ||||
|  | ||||
|   st.wYear         = (WORD)loctm->tm_year + 1900; | ||||
|   st.wMonth        = (WORD)loctm->tm_mon + 1; | ||||
|   st.wDayOfWeek    = (WORD)loctm->tm_wday; | ||||
|   st.wDay          = (WORD)loctm->tm_mday; | ||||
|   st.wHour         = (WORD)loctm->tm_hour; | ||||
|   st.wMinute       = (WORD)loctm->tm_min; | ||||
|   st.wSecond       = (WORD)loctm->tm_sec; | ||||
|   st.wMilliseconds = 0; | ||||
|   if (!SystemTimeToFileTime(&st, &locft) || | ||||
|       !LocalFileTimeToFileTime(&locft, &modft)) | ||||
|     return -1; | ||||
|  | ||||
|   hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE, | ||||
|                      0, NULL, OPEN_EXISTING, 0, 0); | ||||
|   if (hFile == INVALID_HANDLE_VALUE) | ||||
|     return -1; | ||||
|   result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1; | ||||
|   CloseHandle(hFile); | ||||
|   return result; | ||||
| #else | ||||
|   struct utimbuf settime; | ||||
|  | ||||
|   settime.actime = settime.modtime = ftime; | ||||
|   return utime(fname,&settime); | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| /* regular expression matching */ | ||||
|  | ||||
| @@ -375,42 +417,9 @@ int tar (gzFile in,int action,int arg,int argc,char **argv) | ||||
|               getheader = 1; | ||||
|               if ((action == TGZ_EXTRACT) && (outfile != NULL)) | ||||
|                 { | ||||
| #ifdef WIN32 | ||||
| 		  HANDLE hFile; | ||||
| 		  FILETIME ftm,ftLocal; | ||||
| 		  SYSTEMTIME st; | ||||
| 		  struct tm localt; | ||||
|   | ||||
| 		  fclose(outfile); | ||||
|  | ||||
| 		  localt = *localtime(&tartime); | ||||
|  | ||||
| 		  hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE, | ||||
| 				     0, NULL, OPEN_EXISTING, 0, NULL); | ||||
| 		   | ||||
| 		  st.wYear = (WORD)localt.tm_year+1900; | ||||
| 		  st.wMonth = (WORD)localt.tm_mon; | ||||
| 		  st.wDayOfWeek = (WORD)localt.tm_wday; | ||||
| 		  st.wDay = (WORD)localt.tm_mday; | ||||
| 		  st.wHour = (WORD)localt.tm_hour; | ||||
| 		  st.wMinute = (WORD)localt.tm_min; | ||||
| 		  st.wSecond = (WORD)localt.tm_sec; | ||||
| 		  st.wMilliseconds = 0; | ||||
| 		  SystemTimeToFileTime(&st,&ftLocal); | ||||
| 		  LocalFileTimeToFileTime(&ftLocal,&ftm); | ||||
| 		  SetFileTime(hFile,&ftm,NULL,&ftm); | ||||
| 		  CloseHandle(hFile); | ||||
|  | ||||
| 		  outfile = NULL; | ||||
| #else | ||||
| 		  struct utimbuf settime; | ||||
|  | ||||
| 		  settime.actime = settime.modtime = tartime; | ||||
|  | ||||
|                   fclose(outfile); | ||||
|                   outfile = NULL; | ||||
| 		  utime(fname,&settime); | ||||
| #endif | ||||
|                   setftime(fname,tartime); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -428,11 +437,11 @@ int tar (gzFile in,int action,int arg,int argc,char **argv) | ||||
| 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 version 0.1\n" | ||||
|           " a sample application of zlib\n\n" | ||||
|           "Usage : untgz file.tgz            to extract all files\n" | ||||
|           "        untgz file.tgz fname ...  to extract selected files\n" | ||||
|           "        untgz -l file.tgz         to list archive contents\n" | ||||
|           "        untgz -h                  to display this help\n\n"); | ||||
|   exit(exitval); | ||||
| } | ||||
|   | ||||
| @@ -1,22 +1,55 @@ | ||||
| For create the 16 and 32 bits DLL of Zlib 1.20 | ||||
| Building instructions for the DLL versions of Zlib 1.21 | ||||
| ======================================================= | ||||
|  | ||||
| For the 16 bits : | ||||
| unzip zlib120.zip and copy file from contrib\vstudio\vc15_16 and from contrib\minizip in the same directory | ||||
| open zlib16.mak with Microsoft Visual C++ 1.52 | ||||
| This directory contains projects that build zlib and minizip using | ||||
| Microsoft Visual C++ 7.0/7.1. | ||||
|  | ||||
| You don't need to build these projects yourself. You can download the | ||||
| binaries from: | ||||
|   http://www.winimage.com/zLibDll | ||||
|  | ||||
| More information can be found at this site. | ||||
|  | ||||
|  | ||||
| For the 32 bits : | ||||
| unzip zlib120.zip and copy file from contrib\vstudio\vc70_32 and from contrib\minizip in the same directory | ||||
| You can also need unzip http://www.winimage.com/zLibDll/crtdll.zip | ||||
|  | ||||
| If you are using x86, use target Release | ||||
| open zlibvc.sln with Microsoft Visual C++ 7.0 (Visual Studio .net) | ||||
| Build instructions | ||||
| ------------------ | ||||
| - Unzip zlib*.zip and copy the files from contrib\vstudio\vc7, | ||||
|   from contrib\vstudio\masmx86 and from contrib\minizip into the same | ||||
|   directory. | ||||
| - Download the crtdll library from | ||||
|     http://www.winimage.com/zLibDll/crtdll.zip | ||||
|   Unzip crtdll.zip to extract crtdll.lib. | ||||
| - If you are using x86, use the Release target. | ||||
| - Open zlibvc.sln with Microsoft Visual C++ 7.0 or 7.1 | ||||
|   (Visual Studio .Net 2002 or 2003). | ||||
|  | ||||
|  | ||||
| Note : You don't need recompile yourself. There is compiled .LIB in | ||||
|   http://www.winimage.com/zLibDll . See this page for more information | ||||
| Important | ||||
| --------- | ||||
| - To use zlibwapi.dll in your application, you must define the | ||||
|   macro ZLIB_WINAPI when compiling your application's source files. | ||||
|  | ||||
|  | ||||
| Additional notes | ||||
| ---------------- | ||||
| - This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built | ||||
|   by Gilles Vollant from the zlib 1.1.x sources, and distributed at | ||||
|     http://www.winimage.com/zLibDll | ||||
|   It uses the WINAPI calling convention for the exported functions, and | ||||
|   includes the minizip functionality. If your application needs that | ||||
|   particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll. | ||||
|  | ||||
| - The new DLL was renamed because there exist several incompatible | ||||
|   versions of zlib.dll on the Internet. | ||||
|  | ||||
| - There is also an official DLL build of zlib, named zlib1.dll. This one | ||||
|   is exporting the functions using the CDECL convention. See the file | ||||
|   win32\DLL_FAQ.txt found in this zlib distribution. | ||||
|  | ||||
| - There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol | ||||
|   has a slightly different effect. To avoid compatibility problems, do | ||||
|   not define it here. | ||||
|  | ||||
|  | ||||
| Gilles Vollant | ||||
| info@winimage.com | ||||
|   | ||||
| @@ -1,94 +0,0 @@ | ||||
| LIBRARY		"zlib" | ||||
|  | ||||
| DESCRIPTION	'"""zlib data compression library"""' | ||||
|  | ||||
| EXETYPE		WINDOWS | ||||
|  | ||||
| VERSION		1.21 | ||||
|  | ||||
| CODE    PRELOAD MOVEABLE DISCARDABLE | ||||
| DATA    PRELOAD MOVEABLE SINGLE | ||||
|  | ||||
|  | ||||
| HEAPSIZE	32768,8192 | ||||
|  | ||||
| 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 | ||||
|         compress2                                @39 | ||||
|         gzputs                                   @40 | ||||
|         gzgets                                   @41 | ||||
|         inflateCopy                              @42 | ||||
|         inflateBackInit_                         @43 | ||||
|         inflateBack                              @44 | ||||
|         inflateBackEnd                           @45 | ||||
|         compressBound                            @46 | ||||
|  | ||||
|         unzOpen                                  @61 | ||||
|         unzClose                                 @62 | ||||
|         unzGetGlobalInfo                         @63 | ||||
|         unzGetCurrentFileInfo                    @64 | ||||
|         unzGoToFirstFile                         @65 | ||||
|         unzGoToNextFile                          @66 | ||||
|         unzOpenCurrentFile                       @67 | ||||
|         unzReadCurrentFile                       @68 | ||||
|         unzOpenCurrentFile3                      @69 | ||||
|         unztell                                  @70 | ||||
|         unzeof                                   @71 | ||||
|         unzCloseCurrentFile                      @72 | ||||
|         unzGetGlobalComment                      @73 | ||||
|         unzStringFileNameCompare                 @74 | ||||
|         unzLocateFile                            @75 | ||||
|         unzGetLocalExtrafield                    @76 | ||||
|         unzOpen2                                 @77 | ||||
|         unzOpenCurrentFile2                      @78 | ||||
|         unzOpenCurrentFilePassword               @79 | ||||
|  | ||||
|         zipOpen                                  @80 | ||||
|         zipOpenNewFileInZip                      @81 | ||||
|         zipWriteInFileInZip                      @82 | ||||
|         zipCloseFileInZip                        @83 | ||||
|         zipClose                                 @84 | ||||
|         zipOpenNewFileInZip2                     @86 | ||||
|         zipCloseFileInZipRaw                     @87 | ||||
|         zipOpen2                                 @88 | ||||
|         zipOpenNewFileInZip3                     @89 | ||||
|  | ||||
|         unzGetFilePos                            @100 | ||||
|         unzGoToFilePos                           @101 | ||||
| @@ -1,259 +0,0 @@ | ||||
| # Microsoft Visual C++ generated build script - Do not modify | ||||
|  | ||||
| PROJ = ZLIB16 | ||||
| DEBUG = 0 | ||||
| PROGTYPE = 1 | ||||
| CALLER =  | ||||
| ARGS =  | ||||
| DLLS =  | ||||
| D_RCDEFINES = -d_DEBUG | ||||
| R_RCDEFINES = -dNDEBUG | ||||
| ORIGIN = MSVC | ||||
| ORIGIN_VER = 1.00 | ||||
| PROJPATH = c:\zlib\ | ||||
| USEMFC = 0 | ||||
| CC = cl | ||||
| CPP = cl | ||||
| CXX = cl | ||||
| CCREATEPCHFLAG =  | ||||
| CPPCREATEPCHFLAG =  | ||||
| CUSEPCHFLAG =  | ||||
| CPPUSEPCHFLAG =  | ||||
| FIRSTC = ADLER32.C    | ||||
| FIRSTCPP =              | ||||
| RC = rc | ||||
| CFLAGS_D_WDLL = /nologo /G2 /W3 /Zi /ALw /Od /D "_DEBUG" /D "WINDOWS" /D "ZLIB_DLL" /D "ZLIB_INTERNAL" /FR /GD /Fd"ZLIB.PDB" | ||||
| CFLAGS_R_WDLL = /nologo /W3 /ALw /O1 /D "NDEBUG" /D "WINDOWS" /D "ZLIB_DLL" /D "ZLIB_INTERNAL" /FR /GD  | ||||
| LFLAGS_D_WDLL = /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /CO /NOE /ALIGN:16 /MAP:FULL | ||||
| LFLAGS_R_WDLL = /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /NOE /ALIGN:16 /MAP:FULL | ||||
| LIBS_D_WDLL = oldnames libw commdlg shell olecli olesvr ldllcew | ||||
| LIBS_R_WDLL = oldnames libw commdlg shell olecli olesvr ldllcew | ||||
| RCFLAGS = /nologo | ||||
| RESFLAGS = /nologo | ||||
| RUNFLAGS =  | ||||
| DEFFILE = ZLIB16.DEF | ||||
| OBJS_EXT =  | ||||
| LIBS_EXT =  | ||||
| !if "$(DEBUG)" == "1" | ||||
| CFLAGS = $(CFLAGS_D_WDLL) | ||||
| LFLAGS = $(LFLAGS_D_WDLL) | ||||
| LIBS = $(LIBS_D_WDLL) | ||||
| MAPFILE = nul | ||||
| RCDEFINES = $(D_RCDEFINES) | ||||
| !else | ||||
| CFLAGS = $(CFLAGS_R_WDLL) | ||||
| LFLAGS = $(LFLAGS_R_WDLL) | ||||
| LIBS = $(LIBS_R_WDLL) | ||||
| MAPFILE = nul | ||||
| RCDEFINES = $(R_RCDEFINES) | ||||
| !endif | ||||
| !if [if exist MSVC.BND del MSVC.BND] | ||||
| !endif | ||||
| SBRS = ADLER32.SBR \ | ||||
| 		COMPRESS.SBR \ | ||||
| 		CRC32.SBR \ | ||||
| 		DEFLATE.SBR \ | ||||
| 		GZIO.SBR \ | ||||
| 		INFFAST.SBR \ | ||||
| 		INFLATE.SBR \ | ||||
| 		TREES.SBR \ | ||||
| 		UNCOMPR.SBR \ | ||||
| 		ZUTIL.SBR \ | ||||
| 		ZIP.SBR \ | ||||
| 		UNZIP.SBR \ | ||||
| 		INFBACK.SBR \ | ||||
| 		IOAPI.SBR \ | ||||
| 		INFTREES.SBR | ||||
|  | ||||
|  | ||||
| ADLER32_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| COMPRESS_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| CRC32_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\crc32.h | ||||
|  | ||||
|  | ||||
| DEFLATE_DEP = c:\zlib\deflate.h \ | ||||
| 	c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| GZIO_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| INFFAST_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\inftrees.h \ | ||||
| 	c:\zlib\inflate.h \ | ||||
| 	c:\zlib\inffast.h | ||||
|  | ||||
|  | ||||
| INFLATE_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\inftrees.h \ | ||||
| 	c:\zlib\inflate.h \ | ||||
| 	c:\zlib\inffast.h \ | ||||
| 	c:\zlib\inffixed.h | ||||
|  | ||||
|  | ||||
| TREES_DEP = c:\zlib\deflate.h \ | ||||
| 	c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\trees.h | ||||
|  | ||||
|  | ||||
| UNCOMPR_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| ZUTIL_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h | ||||
|  | ||||
|  | ||||
| ZLIB16_RCDEP =  | ||||
|  | ||||
| ZIP_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\zip.h \ | ||||
| 	c:\zlib\ioapi.h \ | ||||
| 	c:\zlib\crypt.h | ||||
|  | ||||
|  | ||||
| UNZIP_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\unzip.h \ | ||||
| 	c:\zlib\ioapi.h \ | ||||
| 	c:\zlib\crypt.h | ||||
|  | ||||
|  | ||||
| INFBACK_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\inftrees.h \ | ||||
| 	c:\zlib\inflate.h \ | ||||
| 	c:\zlib\inffast.h \ | ||||
| 	c:\zlib\inffixed.h | ||||
|  | ||||
|  | ||||
| IOAPI_DEP = c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\ioapi.h | ||||
|  | ||||
|  | ||||
| INFTREES_DEP = c:\zlib\zutil.h \ | ||||
| 	c:\zlib\zlib.h \ | ||||
| 	c:\zlib\zconf.h \ | ||||
| 	c:\zlib\inftrees.h | ||||
|  | ||||
|  | ||||
| all:	$(PROJ).DLL $(PROJ).BSC | ||||
|  | ||||
| ADLER32.OBJ:	ADLER32.C $(ADLER32_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CCREATEPCHFLAG) /c ADLER32.C | ||||
|  | ||||
| COMPRESS.OBJ:	COMPRESS.C $(COMPRESS_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c COMPRESS.C | ||||
|  | ||||
| CRC32.OBJ:	CRC32.C $(CRC32_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c CRC32.C | ||||
|  | ||||
| DEFLATE.OBJ:	DEFLATE.C $(DEFLATE_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c DEFLATE.C | ||||
|  | ||||
| GZIO.OBJ:	GZIO.C $(GZIO_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GZIO.C | ||||
|  | ||||
| INFFAST.OBJ:	INFFAST.C $(INFFAST_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c INFFAST.C | ||||
|  | ||||
| INFLATE.OBJ:	INFLATE.C $(INFLATE_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c INFLATE.C | ||||
|  | ||||
| TREES.OBJ:	TREES.C $(TREES_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c TREES.C | ||||
|  | ||||
| UNCOMPR.OBJ:	UNCOMPR.C $(UNCOMPR_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c UNCOMPR.C | ||||
|  | ||||
| ZUTIL.OBJ:	ZUTIL.C $(ZUTIL_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ZUTIL.C | ||||
|  | ||||
| ZLIB16.RES:	ZLIB16.RC $(ZLIB16_RCDEP) | ||||
| 	$(RC) $(RCFLAGS) $(RCDEFINES) -r ZLIB16.RC | ||||
|  | ||||
| ZIP.OBJ:	ZIP.C $(ZIP_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ZIP.C | ||||
|  | ||||
| UNZIP.OBJ:	UNZIP.C $(UNZIP_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c UNZIP.C | ||||
|  | ||||
| INFBACK.OBJ:	INFBACK.C $(INFBACK_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c INFBACK.C | ||||
|  | ||||
| IOAPI.OBJ:	IOAPI.C $(IOAPI_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c IOAPI.C | ||||
|  | ||||
| INFTREES.OBJ:	INFTREES.C $(INFTREES_DEP) | ||||
| 	$(CC) $(CFLAGS) $(CUSEPCHFLAG) /c INFTREES.C | ||||
|  | ||||
|  | ||||
| $(PROJ).DLL::	ZLIB16.RES | ||||
|  | ||||
| $(PROJ).DLL::	ADLER32.OBJ COMPRESS.OBJ CRC32.OBJ DEFLATE.OBJ GZIO.OBJ INFFAST.OBJ \ | ||||
| 	INFLATE.OBJ TREES.OBJ UNCOMPR.OBJ ZUTIL.OBJ ZIP.OBJ UNZIP.OBJ INFBACK.OBJ IOAPI.OBJ \ | ||||
| 	INFTREES.OBJ $(OBJS_EXT) $(DEFFILE) | ||||
| 	echo >NUL @<<$(PROJ).CRF | ||||
| ADLER32.OBJ + | ||||
| COMPRESS.OBJ + | ||||
| CRC32.OBJ + | ||||
| DEFLATE.OBJ + | ||||
| GZIO.OBJ + | ||||
| INFFAST.OBJ + | ||||
| INFLATE.OBJ + | ||||
| TREES.OBJ + | ||||
| UNCOMPR.OBJ + | ||||
| ZUTIL.OBJ + | ||||
| ZIP.OBJ + | ||||
| UNZIP.OBJ + | ||||
| INFBACK.OBJ + | ||||
| IOAPI.OBJ + | ||||
| INFTREES.OBJ + | ||||
| $(OBJS_EXT) | ||||
| $(PROJ).DLL | ||||
| $(MAPFILE) | ||||
| C:\MSVC\LIB\+ | ||||
| C:\MSVC\MFC\LIB\+ | ||||
| E:\PROGRAMFILES\MICROSOFTVISUALSTUDIO.NET\FRAMEWORKSDK\LIB\+ | ||||
| $(LIBS) | ||||
| $(DEFFILE); | ||||
| << | ||||
| 	link $(LFLAGS) @$(PROJ).CRF | ||||
| 	$(RC) $(RESFLAGS) ZLIB16.RES $@ | ||||
| 	@copy $(PROJ).CRF MSVC.BND | ||||
| 	implib /nowep $(PROJ).LIB $(PROJ).DLL | ||||
|  | ||||
| $(PROJ).DLL::	ZLIB16.RES | ||||
| 	if not exist MSVC.BND 	$(RC) $(RESFLAGS) ZLIB16.RES $@ | ||||
|  | ||||
| run: $(PROJ).DLL | ||||
| 	$(PROJ) $(RUNFLAGS) | ||||
|  | ||||
|  | ||||
| $(PROJ).BSC: $(SBRS) | ||||
| 	bscmake @<< | ||||
| /o$@ $(SBRS) | ||||
| << | ||||
| @@ -1,33 +0,0 @@ | ||||
| #include <windows.h> | ||||
| #include <ver.h> | ||||
|  | ||||
| #define IDR_VERSION1  1 | ||||
| IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE | ||||
|   FILEVERSION	 1,2,1,0 | ||||
|   PRODUCTVERSION 1,2,1,0 | ||||
|   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK | ||||
|   FILEFLAGS	0 | ||||
|   FILEOS	VOS_DOS_WINDOWS16 | ||||
|   FILETYPE	VFT_DLL | ||||
|   FILESUBTYPE	0	// not used | ||||
| BEGIN | ||||
|   BLOCK "StringFileInfo" | ||||
|   BEGIN | ||||
|     BLOCK "040904E4" | ||||
|     //language ID = U.S. English, char set = Windows, Multilingual | ||||
|  | ||||
|     BEGIN | ||||
|       VALUE "FileDescription", "zlib data compression library\0" | ||||
|       VALUE "FileVersion",	"1.2.1\0" | ||||
|       VALUE "InternalName",	"zlib16\0" | ||||
|       VALUE "OriginalFilename",	"zlib16.dll\0" | ||||
|       VALUE "ProductName",	"ZLib16.DLL\0" | ||||
|       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" | ||||
|       VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0" | ||||
|     END | ||||
|   END | ||||
|   BLOCK "VarFileInfo" | ||||
|   BEGIN | ||||
|     VALUE "Translation", 0x0409, 1252 | ||||
|   END | ||||
| END | ||||
							
								
								
									
										
											BIN
										
									
								
								contrib/vstudio/vc7/inffas32.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								contrib/vstudio/vc7/inffas32.obj
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -19,7 +19,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;_DEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||
| 				MinimalRebuild="TRUE" | ||||
| 				BasicRuntimeChecks="3" | ||||
| 				RuntimeLibrary="5" | ||||
| @@ -63,7 +63,7 @@ | ||||
| 				Optimization="2" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				OmitFramePointers="TRUE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;NDEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||
| 				StringPooling="TRUE" | ||||
| 				RuntimeLibrary="4" | ||||
| 				EnableFunctionLevelLinking="TRUE" | ||||
| @@ -116,7 +116,7 @@ | ||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||
| 		</Filter> | ||||
| 		<File | ||||
| 			RelativePath="zlib.lib"> | ||||
| 			RelativePath="zlibwapi.lib"> | ||||
| 		</File> | ||||
| 	</Files> | ||||
| 	<Globals> | ||||
| @@ -19,7 +19,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;_DEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||
| 				MinimalRebuild="TRUE" | ||||
| 				BasicRuntimeChecks="3" | ||||
| 				RuntimeLibrary="5" | ||||
| @@ -63,7 +63,7 @@ | ||||
| 				Optimization="2" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				OmitFramePointers="TRUE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL;NDEBUG;_CONSOLE" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||
| 				StringPooling="TRUE" | ||||
| 				RuntimeLibrary="4" | ||||
| 				EnableFunctionLevelLinking="TRUE" | ||||
| @@ -116,7 +116,7 @@ | ||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||
| 		</Filter> | ||||
| 		<File | ||||
| 			RelativePath="zlib.lib"> | ||||
| 			RelativePath="zlibwapi.lib"> | ||||
| 		</File> | ||||
| 	</Files> | ||||
| 	<Globals> | ||||
| @@ -20,7 +20,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="5" | ||||
| 				PrecompiledHeaderFile=".\zlibstatDebug/zlibstat.pch" | ||||
| @@ -61,7 +61,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="4" | ||||
| @@ -102,7 +102,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL,ASMV" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;ASMV;ASMINF" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="4" | ||||
| @@ -117,7 +117,7 @@ | ||||
| 				Name="VCCustomBuildTool"/> | ||||
| 			<Tool | ||||
| 				Name="VCLibrarianTool" | ||||
| 				AdditionalOptions="gvmat32.obj  inffastAsm.obj /NODEFAULTLIB " | ||||
| 				AdditionalOptions="gvmat32.obj inffas32.obj /NODEFAULTLIB " | ||||
| 				OutputFile=".\zlibstat\zlibstat.lib" | ||||
| 				SuppressStartupBanner="TRUE"/> | ||||
| 			<Tool | ||||
| @@ -144,7 +144,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_DLL" | ||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="4" | ||||
| @@ -204,17 +204,6 @@ | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\inffast.c"> | ||||
| 				<FileConfiguration | ||||
| 					Name="Release|Win32" | ||||
| 					ExcludedFromBuild="TRUE"> | ||||
| 					<Tool | ||||
| 						Name="VCCLCompilerTool"/> | ||||
| 				</FileConfiguration> | ||||
| 				<FileConfiguration | ||||
| 					Name="ReleaseWithoutAsm|Win32"> | ||||
| 					<Tool | ||||
| 						Name="VCCLCompilerTool"/> | ||||
| 				</FileConfiguration> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\inflate.c"> | ||||
| @@ -1,4 +1,3 @@ | ||||
| LIBRARY		"zlib" | ||||
| 
 | ||||
| VERSION		1.21 | ||||
| 
 | ||||
| @@ -51,6 +50,10 @@ EXPORTS | ||||
|         inflateBack                              @44 | ||||
|         inflateBackEnd                           @45 | ||||
|         compressBound                            @46 | ||||
|         deflateBound                             @47 | ||||
|         gzclearerr                               @48 | ||||
|         gzungetc                                 @49 | ||||
|         zlibCompileFlags                         @50 | ||||
| 
 | ||||
|         unzOpen                                  @61 | ||||
|         unzClose                                 @62 | ||||
| @@ -20,7 +20,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_DLL,ASMV" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="1" | ||||
| 				PrecompiledHeaderFile=".\DebugDll/zlibvc.pch" | ||||
| @@ -35,15 +35,15 @@ | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				AdditionalOptions="/MACHINE:I386" | ||||
| 				AdditionalDependencies="gvmat32.obj " | ||||
| 				OutputFile=".\DebugDll\zlib.dll" | ||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj" | ||||
| 				OutputFile=".\DebugDll\zlibwapi.dll" | ||||
| 				LinkIncremental="2" | ||||
| 				SuppressStartupBanner="TRUE" | ||||
| 				ModuleDefinitionFile=".\zlibvc.def" | ||||
| 				GenerateDebugInformation="TRUE" | ||||
| 				ProgramDatabaseFile=".\DebugDll/zlib.pdb" | ||||
| 				ProgramDatabaseFile=".\DebugDll/zlibwapi.pdb" | ||||
| 				SubSystem="2" | ||||
| 				ImportLibrary=".\DebugDll/zlib.lib"/> | ||||
| 				ImportLibrary=".\DebugDll/zlibwapi.lib"/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 				PreprocessorDefinitions="_DEBUG" | ||||
| @@ -76,7 +76,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_DLL" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="0" | ||||
| @@ -95,17 +95,17 @@ | ||||
| 				Name="VCLinkerTool" | ||||
| 				AdditionalOptions="/MACHINE:I386" | ||||
| 				AdditionalDependencies="crtdll.lib" | ||||
| 				OutputFile=".\zlibDllWithoutAsm\zlib.dll" | ||||
| 				OutputFile=".\zlibDllWithoutAsm\zlibwapi.dll" | ||||
| 				LinkIncremental="1" | ||||
| 				SuppressStartupBanner="TRUE" | ||||
| 				IgnoreAllDefaultLibraries="TRUE" | ||||
| 				ModuleDefinitionFile=".\zlibvc.def" | ||||
| 				ProgramDatabaseFile=".\zlibDllWithoutAsm/zlib.pdb" | ||||
| 				ProgramDatabaseFile=".\zlibDllWithoutAsm/zlibwapi.pdb" | ||||
| 				GenerateMapFile="TRUE" | ||||
| 				MapFileName=".\zlibDllWithoutAsm/zlib.map" | ||||
| 				MapFileName=".\zlibDllWithoutAsm/zlibwapi.map" | ||||
| 				SubSystem="2" | ||||
| 				OptimizeForWindows98="1" | ||||
| 				ImportLibrary=".\zlibDllWithoutAsm/zlib.lib"/> | ||||
| 				ImportLibrary=".\zlibDllWithoutAsm/zlibwapi.lib"/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 				PreprocessorDefinitions="NDEBUG" | ||||
| @@ -138,7 +138,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_DLL,ASMV" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="0" | ||||
| @@ -156,18 +156,18 @@ | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				AdditionalOptions="/MACHINE:I386" | ||||
| 				AdditionalDependencies="gvmat32.obj inffastAsm.obj " | ||||
| 				OutputFile=".\zlibDllWithoutCrtDll\zlib.dll" | ||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj " | ||||
| 				OutputFile=".\zlibDllWithoutCrtDll\zlibwapi.dll" | ||||
| 				LinkIncremental="1" | ||||
| 				SuppressStartupBanner="TRUE" | ||||
| 				IgnoreAllDefaultLibraries="FALSE" | ||||
| 				ModuleDefinitionFile=".\zlibvc.def" | ||||
| 				ProgramDatabaseFile=".\zlibDllWithoutCrtDll/zlib.pdb" | ||||
| 				ProgramDatabaseFile=".\zlibDllWithoutCrtDll/zlibwapi.pdb" | ||||
| 				GenerateMapFile="TRUE" | ||||
| 				MapFileName=".\zlibDllWithoutCrtDll/zlib.map" | ||||
| 				MapFileName=".\zlibDllWithoutCrtDll/zlibwapi.map" | ||||
| 				SubSystem="2" | ||||
| 				OptimizeForWindows98="1" | ||||
| 				ImportLibrary=".\zlibDllWithoutCrtDll/zlib.lib"/> | ||||
| 				ImportLibrary=".\zlibDllWithoutCrtDll/zlibwapi.lib"/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 				PreprocessorDefinitions="NDEBUG" | ||||
| @@ -200,7 +200,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_DLL" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="0" | ||||
| @@ -218,16 +218,16 @@ | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				AdditionalDependencies="crtdll.lib" | ||||
| 				OutputFile="zlibvc__\zlib.dll" | ||||
| 				OutputFile="zlibvc__\zlibwapi.dll" | ||||
| 				LinkIncremental="1" | ||||
| 				SuppressStartupBanner="TRUE" | ||||
| 				IgnoreAllDefaultLibraries="TRUE" | ||||
| 				ModuleDefinitionFile=".\zlibvc.def" | ||||
| 				ProgramDatabaseFile=".\zlibvc__/zlib.pdb" | ||||
| 				ProgramDatabaseFile=".\zlibvc__/zlibwapi.pdb" | ||||
| 				GenerateMapFile="TRUE" | ||||
| 				MapFileName=".\zlibvc__/zlib.map" | ||||
| 				MapFileName=".\zlibvc__/zlibwapi.map" | ||||
| 				SubSystem="2" | ||||
| 				ImportLibrary=".\zlibvc__/zlib.lib"/> | ||||
| 				ImportLibrary=".\zlibvc__/zlibwapi.lib"/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 				PreprocessorDefinitions="NDEBUG" | ||||
| @@ -260,7 +260,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				InlineFunctionExpansion="1" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_DLL,ASMV" | ||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||
| 				StringPooling="TRUE" | ||||
| 				ExceptionHandling="FALSE" | ||||
| 				RuntimeLibrary="0" | ||||
| @@ -278,18 +278,18 @@ | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				AdditionalOptions="/MACHINE:I386" | ||||
| 				AdditionalDependencies="gvmat32.obj inffastAsm.obj crtdll.lib" | ||||
| 				OutputFile=".\ReleaseDll\zlib.dll" | ||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj crtdll.lib" | ||||
| 				OutputFile=".\ReleaseDll\zlibwapi.dll" | ||||
| 				LinkIncremental="1" | ||||
| 				SuppressStartupBanner="TRUE" | ||||
| 				IgnoreAllDefaultLibraries="TRUE" | ||||
| 				ModuleDefinitionFile=".\zlibvc.def" | ||||
| 				ProgramDatabaseFile=".\ReleaseDll/zlib.pdb" | ||||
| 				ProgramDatabaseFile=".\ReleaseDll/zlibwapi.pdb" | ||||
| 				GenerateMapFile="TRUE" | ||||
| 				MapFileName=".\ReleaseDll/zlib.map" | ||||
| 				MapFileName=".\ReleaseDll/zlibwapi.map" | ||||
| 				SubSystem="2" | ||||
| 				OptimizeForWindows98="1" | ||||
| 				ImportLibrary=".\ReleaseDll/zlib.lib"/> | ||||
| 				ImportLibrary=".\ReleaseDll/zlibwapi.lib"/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 				PreprocessorDefinitions="NDEBUG" | ||||
| @@ -346,18 +346,6 @@ | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\inffast.c"> | ||||
| 				<FileConfiguration | ||||
| 					Name="ReleaseWithoutCrtdll|Win32" | ||||
| 					ExcludedFromBuild="TRUE"> | ||||
| 					<Tool | ||||
| 						Name="VCCLCompilerTool"/> | ||||
| 				</FileConfiguration> | ||||
| 				<FileConfiguration | ||||
| 					Name="Release|Win32" | ||||
| 					ExcludedFromBuild="TRUE"> | ||||
| 					<Tool | ||||
| 						Name="VCCLCompilerTool"/> | ||||
| 				</FileConfiguration> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\inflate.c"> | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,2 +0,0 @@ | ||||
| c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm | ||||
| c:\masm611\bin\ml /coff /Zi /c /FlinffastAsm.lst inffastAsm.asm | ||||
| @@ -1,257 +0,0 @@ | ||||
|  | ||||
|             Frequently Asked Questions about ZLIB.DLL | ||||
|  | ||||
|  | ||||
| This FAQ is about the design, the rationale, and the use of | ||||
| ZLIB.DLL. If you have general questions about zlib, you should | ||||
| check the file "FAQ" found in the zlib distribution, or at the | ||||
| location http://www.gzip.org/zlib/zlib_faq.html | ||||
|  | ||||
|  | ||||
|  1. Why am I having problems using ZLIB.DLL? My application works | ||||
|     with the static build of zlib just fine, and I didn't make any | ||||
|     modification when recompiling it for ZLIB.DLL. | ||||
|  | ||||
|   - Make sure you define ZLIB_DLL before including "zlib.h". | ||||
|     Applications that link to ZLIB.DLL will work properly if | ||||
|     the source files are compiled in this (or in a compatible) | ||||
|     way, and the executables are linked to MSVCRT.DLL. | ||||
|  | ||||
|  | ||||
|  2. Why do I have to do this? When I use other libraries, I can | ||||
|     link my code to their static or dynamic versions, without | ||||
|     needing any source code modification or recompilation. | ||||
|  | ||||
|   - In order to preserve the backwards compatibility with the | ||||
|     older versions of ZLIB.DLL, and give the ability to use zlib | ||||
|     to the non-C programmers at the same time, we had to do this | ||||
|     compromise. | ||||
|  | ||||
|  | ||||
|  3. What exactly is this mess about, and why is it happening? | ||||
|  | ||||
|   - It's about the calling convention used for the zlib functions. | ||||
|     If linked in statically, zlib uses the C (CDECL) convention. | ||||
|     If linked in dynamically (via ZLIB.DLL), it uses the STDCALL | ||||
|     convention. The ZLIB_DLL macro switches on the use of STDCALL. | ||||
|  | ||||
|     It happens because we need to preserve compatibility with the | ||||
|     old releases of ZLIB.DLL that use STDCALL, and, at the same | ||||
|     time, we must provide support for programmers who use other | ||||
|     programming languages with bindings that require CDECL. | ||||
|  | ||||
|  | ||||
|  4. Why not use the STDCALL convention all the time? | ||||
|     It's the standard convention in Win32, and I need it in my | ||||
|     Visual Basic project! | ||||
|  | ||||
|   - Most of the Win32 API functions (without varargs) use indeed | ||||
|     the STDCALL (WINAPI) convention, but the standard C functions | ||||
|     use the default CDECL. If one calls Win32 functions such as | ||||
|     CreateFile(), sometimes it makes sense to decorate one's own | ||||
|     functions with STDCALL. But if one is aiming at ANSI C or | ||||
|     POSIX portability, and calls functions such as fopen(), it is | ||||
|     not a sound decision to include <windows.h> or to use non-ANSI | ||||
|     constructs only to make one's functions STDCALL-able. This is | ||||
|     not the biggest problem, however. | ||||
|  | ||||
|     Technically, STDCALL is not bad; it is even a little faster | ||||
|     than CDECL. The problem of using STDCALL is actually a problem | ||||
|     of using any explicit calling convention. FASTCALL falls into | ||||
|     the same category. | ||||
|  | ||||
|     Explicit specification of calling conventions, whether it's | ||||
|     direct or indirect via a macro, happens commonly in Windows, | ||||
|     but it is regarded as a noisy, non-standard C quirk on other | ||||
|     platforms. It isn't possible to write an ANSI C -conforming | ||||
|     program, for example, if it is necessary to specify calling | ||||
|     conventions. Libraries can hide the dirty stuff in header | ||||
|     files, under macros, but callbacks will still remain exposed. | ||||
|     This is why the zlib callbacks will not be decorated. | ||||
|     (The old Windows callbacks, such as WndProc, are decorated, | ||||
|     but the newer ones are not.) | ||||
|  | ||||
|     There is one more problem with explicit, non-default calling | ||||
|     conventions: the ability to use zlib in other programming | ||||
|     languages. Some of them, like Ada (GNAT) and Fortran (GNU G77) | ||||
|     have C bindings implemented initially on Unix, hence relying | ||||
|     on the C calling convention. | ||||
|  | ||||
|     So we are decorating the functions using STDCALL in ZLIB.DLL | ||||
|     to maintain compatibility with the old versions, but we are | ||||
|     using the default CDECL in the static library, to allow other | ||||
|     programming languages to use zlib in a portable fashion, via | ||||
|     C bindings. | ||||
|  | ||||
|  | ||||
|  5. Why not use the default (CDECL) convention all the time? | ||||
|     It's the standard convention in C, and I need it in my Ada | ||||
|     project! | ||||
|  | ||||
|   - Originally, ZLIB.DLL was intended to run under Visual Basic, | ||||
|     and VB6 and earlier need STDCALL. | ||||
|  | ||||
|     We admit that cluttering the main zlib sources, for the sake | ||||
|     of interfacing with Visual Basic and at the expense of other | ||||
|     programming languages, is not fair. It would have been better | ||||
|     to maintain a "VB-only" project in the contrib/ directory, and | ||||
|     to build a custom ZLIBVB.DLL, for example -- as we did with | ||||
|     the Delphi projects. Another possible solution would have been | ||||
|     to build STDCALL wrappers around the CDECL-exported functions. | ||||
|  | ||||
|     But this was the accident that we have to live with, in order | ||||
|     to maintain binary compatibility with the older versions of | ||||
|     ZLIB.DLL. | ||||
|  | ||||
|  | ||||
|  6. If my application uses ZLIB.DLL, do I have to link it to | ||||
|     MSVCRT.DLL? Why? | ||||
|  | ||||
|   - The executables (.EXE, .DLL, etc.) that are involved in the | ||||
|     same process and are using the C run-time library (i.e. they | ||||
|     are calling any standard C function), must link to the same | ||||
|     library. There are several libraries in the Win32 system: | ||||
|     CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc. | ||||
|     Since ZLIB.DLL is linked to MSVCRT.DLL, the executables that | ||||
|     depend on it must also link to MSVCRT.DLL. | ||||
|  | ||||
|  | ||||
|  7. Why are you saying that ZLIB.DLL and my application must be | ||||
|     linked to the same C run-time library (CRT)? I linked my | ||||
|     application and my DLLs to different C libraries (e.g. my | ||||
|     application to a static library, and my DLLs to MSVCRT.DLL), | ||||
|     and everything works fine. | ||||
|  | ||||
|   - If a library invokes only pure Win32 API (i.e. accessible | ||||
|     via <windows.h>), its DLL build will work in any context. | ||||
|     But if a library invokes standard C functions, things get | ||||
|     more complicated. | ||||
|  | ||||
|     There is a single Win32 library in a Win32 system. Every | ||||
|     function in this library resides in a single DLL module, that | ||||
|     is safe to call from anywhere. On the other hand, there are | ||||
|     multiple versions of the C library that are all at the same | ||||
|     time in the system, and all of them have internal states, | ||||
|     therefore it is dangerous to intermix them with each other. | ||||
|  | ||||
|     Intermixing multiple C libraries is possible, as long as their | ||||
|     internal states are kept intact. The Microsoft Knowledge Base | ||||
|     article Q140584 "HOWTO: Link with the Correct C Run-Time (CRT) | ||||
|     Library" enumerates some of the potential problems raised by | ||||
|     intermixing, but does not offer a complete description of how | ||||
|     to avoid them, except by advising not to mix the C libraries. | ||||
|     If you can send us more information about this issue, we will | ||||
|     highly appreciate it. (But please do NOT send us source code | ||||
|     from Microsoft, even if it comes with your legitimate copy of | ||||
|     Visual C++!) | ||||
|  | ||||
|     If this kind of intermixing works for you, it's because your | ||||
|     application and DLLs are avoiding the corruption of the CRT's | ||||
|     internal states, due to a fortunate accident. It's not because | ||||
|     those libraries really work together. | ||||
|  | ||||
|     Also note that linking ZLIB.DLL to non-Microsoft C libraries | ||||
|     (such as Borland's) raises similar problems. | ||||
|  | ||||
|  | ||||
|  8. Why are you linking ZLIB.DLL to MSVCRT.DLL? | ||||
|  | ||||
|   - MSVCRT.DLL exists on every Windows 95 with a new service pack | ||||
|     installed, or with Microsoft Internet Explorer 4 or later, and | ||||
|     on all other Windows 4.x or later (Windows 98, Windows NT 4, | ||||
|     or later). It is freely distributable; if not present in the | ||||
|     system, it can be downloaded from Microsoft or from other | ||||
|     software provider for free. | ||||
|  | ||||
|     The fact that MSVCRT.DLL does not exist on a virgin Windows 95 | ||||
|     is not so problematic. The number of Windows 95 installations | ||||
|     is rapidly decreasing, Microsoft stopped supporting it a long | ||||
|     time ago, and many recent applications from various vendors | ||||
|     including Microsoft, do not even run on it. Even without these | ||||
|     arguments, no serious user should run Windows 95 without a | ||||
|     proper update installed. | ||||
|  | ||||
|     There is also the fact that the mainstream C compilers for | ||||
|     Windows are Microsoft Visual C++ 6.0, and gcc/MinGW. Both | ||||
|     are producing executables that link to MSVCRT.DLL by default, | ||||
|     without offering other dynamic CRTs as alternatives easy to | ||||
|     select by users. | ||||
|  | ||||
|  | ||||
|  9. Why are you not linking ZLIB.DLL to | ||||
|     <<my favorite C run-time library>> ? | ||||
|  | ||||
|   - We considered and abandoned the following alternatives: | ||||
|  | ||||
|     * Linking ZLIB.DLL to a static C library (LIBC.LIB, or | ||||
|       LIBCMT.LIB) is not a good option. People are using ZLIB.DLL | ||||
|       mainly to save disk space. If you are linking your program | ||||
|       to a static C library, you may as well consider linking zlib | ||||
|       in statically, too. | ||||
|  | ||||
|     * Linking ZLIB.DLL to CRTDLL.DLL looks very appealing, | ||||
|       because CRTDLL.DLL is present on every Win32 installation. | ||||
|       Unfortunately, it has a series of problems: it raises | ||||
|       difficulties when linking to the Microsoft C++ libraries, | ||||
|       it is not thread-safe, and Microsoft has discontinued its | ||||
|       support a long time ago. | ||||
|  | ||||
|     * Linking ZLIB.DLL to MSVCRT70.DLL, supplied with the | ||||
|       Microsoft .NET platform and Visual C++ 7.0, is not a good | ||||
|       option. Although it can be downloaded and distributed | ||||
|       freely, it is hardly present on today's Win32 installations. | ||||
|       If it will become more popular than MSVCRT.DLL, and will be | ||||
|       pre-installed on the future Win32 systems, we will probably | ||||
|       think again about it. | ||||
|  | ||||
|     * Linking ZLIB.DLL to NTDLL.DLL is not possible. | ||||
|       NTDLL.DLL exports only a part of the C library, and only | ||||
|       on Windows NT systems. | ||||
|  | ||||
|  | ||||
| 10. I understand your reasons. However, my project needs ZLIB.DLL | ||||
|     linked to something different than MSVCRT.DLL. What can I do? | ||||
|  | ||||
|     Feel free to rebuild this DLL from the zlib sources, and link | ||||
|     it the way you want. It is required, however, to clearly | ||||
|     state that your build is unofficial. Another thing that is not | ||||
|     required, but highly recommended, is to name that custom DLL | ||||
|     differently, and/or to install it in a private directory that | ||||
|     can be accessed by your application, but is not visible to the | ||||
|     others (e.g. it's not the SYSTEM or the SYSTEM32 directory, | ||||
|     and it's not in the PATH). Otherwise, your build may clash | ||||
|     with applications that link to the official build. | ||||
|  | ||||
|     For example, in Cygwin, zlib is linked to their runtime | ||||
|     CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. | ||||
|  | ||||
|  | ||||
| 11. My I include additional pieces of code that I find useful, | ||||
|     link them in ZLIB.DLL, and export them? | ||||
|  | ||||
|     No. A legitimate build of ZLIB.DLL must not include code that | ||||
|     does not originate from the official zlib sources. But you can | ||||
|     make your own private build, and give it a different name, as | ||||
|     suggested in the previous answer. | ||||
|  | ||||
|     For example, in Borland Delphi and C++ Builder, zlib is part | ||||
|     of the standard VCL library. If an application links to VCL | ||||
|     dynamically, the name of the distributable binary (VCLxx.DLL) | ||||
|     does not posess any danger of clashing with a legitimate but | ||||
|     incompatible ZLIB.DLL. | ||||
|  | ||||
|  | ||||
| 12. I see that I may have all kinds of problems if I use ZLIB.DLL. | ||||
|     Do you recommend to link zlib in statically? Do I get rid of | ||||
|     problems? | ||||
|  | ||||
|   - Yes, definitely. In fact, unless you are distributing a large | ||||
|     number of executables, each of them linking to zlib, you will | ||||
|     save space by linking zlib in statically (assuming that you | ||||
|     would otherwise distribute ZLIB.DLL with your application). | ||||
|     zlib is not a big library, and the space saved by ZLIB.DLL is | ||||
|     little. Much of the actual size of the DLL is due to the 4KB | ||||
|     alignment in the binary. | ||||
|  | ||||
|     But you may have reasons, other than size, to use the DLL. | ||||
|     That is entirely up to you. | ||||
							
								
								
									
										15
									
								
								crc32.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								crc32.c
									
									
									
									
									
								
							| @@ -5,8 +5,8 @@ | ||||
|  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster | ||||
|  * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing | ||||
|  * tables for updating the shift register in one step with three exclusive-ors | ||||
|  * instead of four steps with four exclusive-ors.  This results about a 50% | ||||
|  * increase in speed on a Power PC using gcc -O3. | ||||
|  * instead of four steps with four exclusive-ors.  This results about a factor | ||||
|  * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. | ||||
|  */ | ||||
|  | ||||
| /* @(#) $Id$ */ | ||||
| @@ -18,7 +18,7 @@ | ||||
| #  endif /* !DYNAMIC_CRC_TABLE */ | ||||
| #endif /* MAKECRCH */ | ||||
|  | ||||
| #include "zutil.h" | ||||
| #include "zutil.h"      /* for STDC and FAR definitions */ | ||||
|  | ||||
| #define local static | ||||
|  | ||||
| @@ -203,7 +203,7 @@ unsigned long ZEXPORT crc32(crc, buf, len) | ||||
| #endif /* DYNAMIC_CRC_TABLE */ | ||||
|  | ||||
| #ifdef BYFOUR | ||||
|     { | ||||
|     if (sizeof(void *) == sizeof(ptrdiff_t)) { | ||||
|         u4 endian; | ||||
|  | ||||
|         endian = 1; | ||||
| @@ -212,7 +212,7 @@ unsigned long ZEXPORT crc32(crc, buf, len) | ||||
|         else | ||||
|             return crc32_big(crc, buf, len); | ||||
|     } | ||||
| #else /* !BYFOUR */ | ||||
| #endif /* BYFOUR */ | ||||
|     crc = crc ^ 0xffffffffUL; | ||||
|     while (len >= 8) { | ||||
|         DO8; | ||||
| @@ -222,7 +222,6 @@ unsigned long ZEXPORT crc32(crc, buf, len) | ||||
|         DO1; | ||||
|     } while (--len); | ||||
|     return crc ^ 0xffffffffUL; | ||||
| #endif /* BYFOUR */ | ||||
| } | ||||
|  | ||||
| #ifdef BYFOUR | ||||
| @@ -244,7 +243,7 @@ local unsigned long crc32_little(crc, buf, len) | ||||
|  | ||||
|     c = (u4)crc; | ||||
|     c = ~c; | ||||
|     while (len && ((size_t)buf & 3)) { | ||||
|     while (len && ((ptrdiff_t)buf & 3)) { | ||||
|         c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); | ||||
|         len--; | ||||
|     } | ||||
| @@ -284,7 +283,7 @@ local unsigned long crc32_big(crc, buf, len) | ||||
|  | ||||
|     c = REV((u4)crc); | ||||
|     c = ~c; | ||||
|     while (len && ((size_t)buf & 3)) { | ||||
|     while (len && ((ptrdiff_t)buf & 3)) { | ||||
|         c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); | ||||
|         len--; | ||||
|     } | ||||
|   | ||||
							
								
								
									
										111
									
								
								deflate.c
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								deflate.c
									
									
									
									
									
								
							| @@ -52,7 +52,7 @@ | ||||
| #include "deflate.h" | ||||
|  | ||||
| const char deflate_copyright[] = | ||||
|    " deflate 1.2.0.3 Copyright 1995-2003 Jean-loup Gailly "; | ||||
|    " deflate 1.2.0.5 Copyright 1995-2003 Jean-loup Gailly "; | ||||
| /* | ||||
|   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 | ||||
| @@ -132,12 +132,12 @@ typedef struct config_s { | ||||
| local const config configuration_table[2] = { | ||||
| /*      good lazy nice chain */ | ||||
| /* 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}}; /* max speed, no lazy matches */ | ||||
| #else | ||||
| local const config configuration_table[10] = { | ||||
| /*      good lazy nice chain */ | ||||
| /* 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}, /* max speed, no lazy matches */ | ||||
| /* 2 */ {4,    5, 16,    8, deflate_fast}, | ||||
| /* 3 */ {4,    6, 32,   32, deflate_fast}, | ||||
|  | ||||
| @@ -146,7 +146,7 @@ local const config configuration_table[10] = { | ||||
| /* 6 */ {8,   16, 128, 128, deflate_slow}, | ||||
| /* 7 */ {8,   32, 128, 256, deflate_slow}, | ||||
| /* 8 */ {32, 128, 258, 1024, deflate_slow}, | ||||
| /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */ | ||||
| /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ | ||||
| #endif | ||||
|  | ||||
| /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 | ||||
| @@ -188,7 +188,7 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ | ||||
| #else | ||||
| #define INSERT_STRING(s, str, match_head) \ | ||||
|    (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ | ||||
|     s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ | ||||
|     match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ | ||||
|     s->head[s->ins_h] = (Pos)(str)) | ||||
| #endif | ||||
|  | ||||
| @@ -225,7 +225,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | ||||
|     int stream_size; | ||||
| { | ||||
|     deflate_state *s; | ||||
|     int noheader = 0; | ||||
|     int wrap = 1; | ||||
|     static const char my_version[] = ZLIB_VERSION; | ||||
|  | ||||
|     ushf *overlay; | ||||
| @@ -240,11 +240,11 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | ||||
|     if (strm == Z_NULL) return Z_STREAM_ERROR; | ||||
|  | ||||
|     strm->msg = Z_NULL; | ||||
|     if (strm->zalloc == Z_NULL) { | ||||
|     if (strm->zalloc == (alloc_func)0) { | ||||
|         strm->zalloc = zcalloc; | ||||
|         strm->opaque = (voidpf)0; | ||||
|     } | ||||
|     if (strm->zfree == Z_NULL) strm->zfree = zcfree; | ||||
|     if (strm->zfree == (free_func)0) strm->zfree = zcfree; | ||||
|  | ||||
| #ifdef FASTEST | ||||
|     if (level != 0) level = 1; | ||||
| @@ -252,10 +252,16 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | ||||
|     if (level == Z_DEFAULT_COMPRESSION) level = 6; | ||||
| #endif | ||||
|  | ||||
|     if (windowBits < 0) { /* undocumented feature: suppress zlib header */ | ||||
|         noheader = 1; | ||||
|     if (windowBits < 0) { /* suppress zlib wrapper */ | ||||
|         wrap = 0; | ||||
|         windowBits = -windowBits; | ||||
|     } | ||||
| #ifdef GZIP | ||||
|     else if (windowBits > 15) { | ||||
|         wrap = 2;       /* write gzip wrapper instead */ | ||||
|         windowBits -= 16; | ||||
|     } | ||||
| #endif | ||||
|     if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || | ||||
|         windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || | ||||
|         strategy < 0 || strategy > Z_RLE) { | ||||
| @@ -267,7 +273,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | ||||
|     strm->state = (struct internal_state FAR *)s; | ||||
|     s->strm = strm; | ||||
|  | ||||
|     s->noheader = noheader; | ||||
|     s->wrap = wrap; | ||||
|     s->w_bits = windowBits; | ||||
|     s->w_size = 1 << s->w_bits; | ||||
|     s->w_mask = s->w_size - 1; | ||||
| @@ -316,11 +322,12 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) | ||||
|     IPos hash_head = 0; | ||||
|  | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || | ||||
|         (!strm->state->noheader && strm->state->status != INIT_STATE)) | ||||
|         strm->state->wrap == 2 || | ||||
|         (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) | ||||
|         return Z_STREAM_ERROR; | ||||
|  | ||||
|     s = strm->state; | ||||
|     if (!s->noheader) | ||||
|     if (s->wrap) | ||||
|         strm->adler = adler32(strm->adler, dictionary, dictLength); | ||||
|  | ||||
|     if (length < MIN_MATCH) return Z_OK; | ||||
| @@ -354,7 +361,9 @@ int ZEXPORT deflateReset (strm) | ||||
|     deflate_state *s; | ||||
|  | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || | ||||
|         strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR; | ||||
|         strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { | ||||
|         return Z_STREAM_ERROR; | ||||
|     } | ||||
|  | ||||
|     strm->total_in = strm->total_out = 0; | ||||
|     strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ | ||||
| @@ -364,11 +373,15 @@ int ZEXPORT deflateReset (strm) | ||||
|     s->pending = 0; | ||||
|     s->pending_out = s->pending_buf; | ||||
|  | ||||
|     if (s->noheader < 0) { | ||||
|         s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ | ||||
|     if (s->wrap < 0) { | ||||
|         s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ | ||||
|     } | ||||
|     s->status = s->noheader ? BUSY_STATE : INIT_STATE; | ||||
|     strm->adler = 1; | ||||
|     s->status = s->wrap ? INIT_STATE : BUSY_STATE; | ||||
|     strm->adler = | ||||
| #ifdef GZIP | ||||
|         s->wrap == 2 ? crc32(0L, Z_NULL, 0) : | ||||
| #endif | ||||
|         adler32(0L, Z_NULL, 0); | ||||
|     s->last_flush = Z_NO_FLUSH; | ||||
|  | ||||
|     _tr_init(s); | ||||
| @@ -428,7 +441,7 @@ int ZEXPORT deflateParams(strm, level, strategy) | ||||
|  * can emit on compressed data for some combinations of the parameters. | ||||
|  * | ||||
|  * This function could be more sophisticated to provide closer upper bounds | ||||
|  * for every combination of windowBits and memLevel, as well as noheader. | ||||
|  * for every combination of windowBits and memLevel, as well as wrap. | ||||
|  * But even the conservative upper bound of about 14% expansion does not | ||||
|  * seem onerous for output buffer allocation. | ||||
|  */ | ||||
| @@ -519,9 +532,28 @@ int ZEXPORT deflate (strm, flush) | ||||
|     old_flush = s->last_flush; | ||||
|     s->last_flush = flush; | ||||
|  | ||||
|     /* Write the zlib header */ | ||||
|     /* Write the header */ | ||||
|     if (s->status == INIT_STATE) { | ||||
|  | ||||
| #ifdef GZIP | ||||
|         if (s->wrap == 2) { | ||||
|             put_byte(s, 31); | ||||
|             put_byte(s, 139); | ||||
|             put_byte(s, 8); | ||||
|             put_byte(s, 0); | ||||
|             put_byte(s, 0); | ||||
|             put_byte(s, 0); | ||||
|             put_byte(s, 0); | ||||
|             put_byte(s, 0); | ||||
|             put_byte(s, s->level == 9 ? 2 : | ||||
|                         (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? | ||||
|                          4 : 0)); | ||||
|             put_byte(s, 255); | ||||
|             s->status = BUSY_STATE; | ||||
|             strm->adler = crc32(0L, Z_NULL, 0); | ||||
|         } | ||||
|         else | ||||
| #endif | ||||
|         { | ||||
|             uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; | ||||
|             uInt level_flags; | ||||
|  | ||||
| @@ -545,7 +577,8 @@ int ZEXPORT deflate (strm, flush) | ||||
|                 putShortMSB(s, (uInt)(strm->adler >> 16)); | ||||
|                 putShortMSB(s, (uInt)(strm->adler & 0xffff)); | ||||
|             } | ||||
|         strm->adler = 1L; | ||||
|             strm->adler = adler32(0L, Z_NULL, 0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* Flush as much pending output as possible */ | ||||
| @@ -622,16 +655,31 @@ int ZEXPORT deflate (strm, flush) | ||||
|     Assert(strm->avail_out > 0, "bug2"); | ||||
|  | ||||
|     if (flush != Z_FINISH) return Z_OK; | ||||
|     if (s->noheader) return Z_STREAM_END; | ||||
|     if (s->wrap <= 0) return Z_STREAM_END; | ||||
|  | ||||
|     /* Write the zlib trailer (adler32) */ | ||||
|     /* Write the trailer */ | ||||
| #ifdef GZIP | ||||
|     if (s->wrap == 2) { | ||||
|         put_byte(s, (Byte)(strm->adler & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); | ||||
|         put_byte(s, (Byte)(strm->total_in & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); | ||||
|         put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); | ||||
|     } | ||||
|     else | ||||
| #endif | ||||
|     { | ||||
|         putShortMSB(s, (uInt)(strm->adler >> 16)); | ||||
|         putShortMSB(s, (uInt)(strm->adler & 0xffff)); | ||||
|     } | ||||
|     flush_pending(strm); | ||||
|     /* If avail_out is zero, the application will call deflate again | ||||
|      * to flush the rest. | ||||
|      */ | ||||
|     s->noheader = -1; /* write the trailer only once! */ | ||||
|     if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ | ||||
|     return s->pending != 0 ? Z_OK : Z_STREAM_END; | ||||
| } | ||||
|  | ||||
| @@ -740,9 +788,14 @@ local int read_buf(strm, buf, size) | ||||
|  | ||||
|     strm->avail_in  -= len; | ||||
|  | ||||
|     if (!strm->state->noheader) { | ||||
|     if (strm->state->wrap == 1) { | ||||
|         strm->adler = adler32(strm->adler, strm->next_in, len); | ||||
|     } | ||||
| #ifdef GZIP | ||||
|     else if (strm->state->wrap == 2) { | ||||
|         strm->adler = crc32(strm->adler, strm->next_in, len); | ||||
|     } | ||||
| #endif | ||||
|     zmemcpy(buf, strm->next_in, len); | ||||
|     strm->next_in  += len; | ||||
|     strm->total_in += len; | ||||
| @@ -1044,7 +1097,7 @@ local void fill_window(s) | ||||
|  | ||||
|             } else if (more == (unsigned)(-1)) { | ||||
|                 /* Very unlikely, but possible on 16 bit machine if | ||||
|                  * strstart == 0 && lookahead == 1 (input done one byte at time) | ||||
|                  * strstart == 0 && lookahead == 1 (input done a byte at time) | ||||
|                  */ | ||||
|                 more--; | ||||
|             } | ||||
| @@ -1271,7 +1324,7 @@ local block_state deflate_fast(s, flush) | ||||
| #ifndef FASTEST | ||||
|             if (s->match_length <= s->max_insert_length && | ||||
|                 s->lookahead >= MIN_MATCH) { | ||||
|                 s->match_length--; /* string at strstart already in hash table */ | ||||
|                 s->match_length--; /* string at strstart already in table */ | ||||
|                 do { | ||||
|                     s->strstart++; | ||||
|                     INSERT_STRING(s, s->strstart, hash_head); | ||||
| @@ -1361,7 +1414,7 @@ local block_state deflate_slow(s, flush) | ||||
|             /* longest_match() or longest_match_fast() sets match_start */ | ||||
|  | ||||
|             if (s->match_length <= 5 && (s->strategy == Z_FILTERED | ||||
| #if TOO_FAR < 32768 | ||||
| #if TOO_FAR <= 32767 | ||||
|                 || (s->match_length == MIN_MATCH && | ||||
|                     s->strstart - s->match_start > TOO_FAR) | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										10
									
								
								deflate.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								deflate.h
									
									
									
									
									
								
							| @@ -15,6 +15,14 @@ | ||||
|  | ||||
| #include "zutil.h" | ||||
|  | ||||
| /* define NO_GZIP when compiling if you want to disable gzip header and | ||||
|    trailer creation by deflate().  NO_GZIP would be used to avoid linking in | ||||
|    the crc code when it is not needed.  For shared libraries, gzip encoding | ||||
|    should be left enabled. */ | ||||
| #ifndef NO_GZIP | ||||
| #  define GZIP | ||||
| #endif | ||||
|  | ||||
| /* =========================================================================== | ||||
|  * Internal compression state. | ||||
|  */ | ||||
| @@ -86,7 +94,7 @@ typedef struct internal_state { | ||||
|     ulg   pending_buf_size; /* size of pending_buf */ | ||||
|     Bytef *pending_out;  /* next pending byte to output to the stream */ | ||||
|     int   pending;       /* nb of bytes in the pending buffer */ | ||||
|     int   noheader;      /* suppress zlib header and adler32 */ | ||||
|     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */ | ||||
|     Byte  data_type;     /* UNKNOWN, BINARY or ASCII */ | ||||
|     Byte  method;        /* STORED (for zip only) or DEFLATED */ | ||||
|     int   last_flush;    /* value of flush param for previous deflate call */ | ||||
|   | ||||
							
								
								
									
										37
									
								
								example.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								example.c
									
									
									
									
									
								
							| @@ -38,8 +38,8 @@ uLong dictId; /* Adler32 value of the dictionary */ | ||||
|  | ||||
| void test_compress      OF((Byte *compr, uLong comprLen, | ||||
|                             Byte *uncompr, uLong uncomprLen)); | ||||
| void test_gzio          OF((const char *out, const char *in, | ||||
|                             Byte *uncompr, int uncomprLen)); | ||||
| void test_gzio          OF((const char *fname, | ||||
|                             Byte *uncompr, uLong uncomprLen)); | ||||
| void test_deflate       OF((Byte *compr, uLong comprLen)); | ||||
| void test_inflate       OF((Byte *compr, uLong comprLen, | ||||
|                             Byte *uncompr, uLong uncomprLen)); | ||||
| @@ -63,7 +63,7 @@ void test_compress(compr, comprLen, uncompr, uncomprLen) | ||||
|     uLong comprLen, uncomprLen; | ||||
| { | ||||
|     int err; | ||||
|     uLong len = strlen(hello)+1; | ||||
|     uLong len = (uLong)strlen(hello)+1; | ||||
|  | ||||
|     err = compress(compr, &comprLen, (const Bytef*)hello, len); | ||||
|     CHECK_ERR(err, "compress"); | ||||
| @@ -84,18 +84,17 @@ void test_compress(compr, comprLen, uncompr, uncomprLen) | ||||
| /* =========================================================================== | ||||
|  * Test read/write of .gz files | ||||
|  */ | ||||
| void test_gzio(out, in, uncompr, uncomprLen) | ||||
|     const char *out; /* compressed output file */ | ||||
|     const char *in;  /* compressed input file */ | ||||
| void test_gzio(fname, uncompr, uncomprLen) | ||||
|     const char *fname; /* compressed file name */ | ||||
|     Byte *uncompr; | ||||
|     int  uncomprLen; | ||||
|     uLong uncomprLen; | ||||
| { | ||||
|     int err; | ||||
|     int len = strlen(hello)+1; | ||||
|     int len = (int)strlen(hello)+1; | ||||
|     gzFile file; | ||||
|     z_off_t pos; | ||||
|  | ||||
|     file = gzopen(out, "wb"); | ||||
|     file = gzopen(fname, "wb"); | ||||
|     if (file == NULL) { | ||||
|         fprintf(stderr, "gzopen error\n"); | ||||
|         exit(1); | ||||
| @@ -112,14 +111,14 @@ void test_gzio(out, in, uncompr, uncomprLen) | ||||
|     gzseek(file, 1L, SEEK_CUR); /* add one zero byte */ | ||||
|     gzclose(file); | ||||
|  | ||||
|     file = gzopen(in, "rb"); | ||||
|     file = gzopen(fname, "rb"); | ||||
|     if (file == NULL) { | ||||
|         fprintf(stderr, "gzopen error\n"); | ||||
|         exit(1); | ||||
|     } | ||||
|     strcpy((char*)uncompr, "garbage"); | ||||
|  | ||||
|     uncomprLen = gzread(file, uncompr, (unsigned)uncomprLen); | ||||
|     if (uncomprLen != len) { | ||||
|     if (gzread(file, uncompr, (unsigned)uncomprLen) != len) { | ||||
|         fprintf(stderr, "gzread err: %s\n", gzerror(file, &err)); | ||||
|         exit(1); | ||||
|     } | ||||
| @@ -147,9 +146,8 @@ void test_gzio(out, in, uncompr, uncomprLen) | ||||
|         exit(1); | ||||
|     } | ||||
|  | ||||
|     gzgets(file, (char*)uncompr, uncomprLen); | ||||
|     uncomprLen = strlen((char*)uncompr); | ||||
|     if (uncomprLen != 7) { /* " hello!" */ | ||||
|     gzgets(file, (char*)uncompr, (int)uncomprLen); | ||||
|     if (strlen((char*)uncompr) != 7) { /* " hello!" */ | ||||
|         fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err)); | ||||
|         exit(1); | ||||
|     } | ||||
| @@ -172,7 +170,7 @@ void test_deflate(compr, comprLen) | ||||
| { | ||||
|     z_stream c_stream; /* compression stream */ | ||||
|     int err; | ||||
|     int len = strlen(hello)+1; | ||||
|     uLong len = (uLong)strlen(hello)+1; | ||||
|  | ||||
|     c_stream.zalloc = (alloc_func)0; | ||||
|     c_stream.zfree = (free_func)0; | ||||
| @@ -184,7 +182,7 @@ void test_deflate(compr, comprLen) | ||||
|     c_stream.next_in  = (Bytef*)hello; | ||||
|     c_stream.next_out = compr; | ||||
|  | ||||
|     while (c_stream.total_in != (uLong)len && c_stream.total_out < comprLen) { | ||||
|     while (c_stream.total_in != len && c_stream.total_out < comprLen) { | ||||
|         c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */ | ||||
|         err = deflate(&c_stream, Z_NO_FLUSH); | ||||
|         CHECK_ERR(err, "deflate"); | ||||
| @@ -347,7 +345,7 @@ void test_flush(compr, comprLen) | ||||
| { | ||||
|     z_stream c_stream; /* compression stream */ | ||||
|     int err; | ||||
|     int len = strlen(hello)+1; | ||||
|     uInt len = (uInt)strlen(hello)+1; | ||||
|  | ||||
|     c_stream.zalloc = (alloc_func)0; | ||||
|     c_stream.zfree = (free_func)0; | ||||
| @@ -543,8 +541,7 @@ int main(argc, argv) | ||||
|     test_compress(compr, comprLen, uncompr, uncomprLen); | ||||
|  | ||||
|     test_gzio((argc > 1 ? argv[1] : TESTFILE), | ||||
|               (argc > 2 ? argv[2] : TESTFILE), | ||||
|               uncompr, (int)uncomprLen); | ||||
|               uncompr, uncomprLen); | ||||
|  | ||||
|     test_deflate(compr, comprLen); | ||||
|     test_inflate(compr, comprLen, uncompr, uncomprLen); | ||||
|   | ||||
							
								
								
									
										93
									
								
								gzio.c
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								gzio.c
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ | ||||
|  * Copyright (C) 1995-2003 Jean-loup Gailly. | ||||
|  * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|  * | ||||
|  * Compile this file with -DNO_DEFLATE to avoid the compression code. | ||||
|  * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. | ||||
|  */ | ||||
|  | ||||
| /* @(#) $Id$ */ | ||||
| @@ -11,6 +11,10 @@ | ||||
|  | ||||
| #include "zutil.h" | ||||
|  | ||||
| #ifdef NO_DEFLATE       /* for compatiblity with old definition */ | ||||
| #  define NO_GZCOMPRESS | ||||
| #endif | ||||
|  | ||||
| #ifndef NO_DUMMY_DECL | ||||
| struct internal_state {int dummy;}; /* for buggy compilers */ | ||||
| #endif | ||||
| @@ -56,7 +60,9 @@ typedef struct gz_stream { | ||||
|     char     *path;   /* path name for debugging only */ | ||||
|     int      transparent; /* 1 if input file is not a .gz file */ | ||||
|     char     mode;    /* 'w' or 'r' */ | ||||
|     long     startpos; /* start of compressed data in file (header skipped) */ | ||||
|     z_off_t  start;   /* start of compressed data in file (header skipped) */ | ||||
|     z_off_t  in;      /* bytes into deflate or inflate */ | ||||
|     z_off_t  out;     /* bytes out of deflate or inflate */ | ||||
|     int      back;    /* one character push-back */ | ||||
|     int      last;    /* true if push-back is last character */ | ||||
| } gz_stream; | ||||
| @@ -74,7 +80,7 @@ local uLong  getLong      OF((gz_stream *s)); | ||||
|      Opens a gzip (.gz) file for reading or writing. The mode parameter | ||||
|    is as in fopen ("rb" or "wb"). The file is given either by file descriptor | ||||
|    or path name (if fd == -1). | ||||
|      gz_open return NULL if the file could not be opened or if there was | ||||
|      gz_open returns NULL if the file could not be opened or if there was | ||||
|    insufficient memory to allocate the (de)compression state; errno | ||||
|    can be checked to distinguish the two cases (if errno is zero, the | ||||
|    zlib error is Z_MEM_ERROR). | ||||
| @@ -106,6 +112,8 @@ local gzFile gz_open (path, mode, fd) | ||||
|     s->file = NULL; | ||||
|     s->z_err = Z_OK; | ||||
|     s->z_eof = 0; | ||||
|     s->in = 0; | ||||
|     s->out = 0; | ||||
|     s->back = EOF; | ||||
|     s->crc = crc32(0L, Z_NULL, 0); | ||||
|     s->msg = NULL; | ||||
| @@ -136,7 +144,7 @@ local gzFile gz_open (path, mode, fd) | ||||
|     if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; | ||||
|  | ||||
|     if (s->mode == 'w') { | ||||
| #ifdef NO_DEFLATE | ||||
| #ifdef NO_GZCOMPRESS | ||||
|         err = Z_STREAM_ERROR; | ||||
| #else | ||||
|         err = deflateInit2(&(s->stream), level, | ||||
| @@ -175,15 +183,15 @@ 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], | ||||
|              Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); | ||||
|         s->startpos = 10L; | ||||
|         s->start = 10L; | ||||
|         /* We use 10L instead of ftell(s->file) to because ftell causes an | ||||
|          * fflush on some systems. This version of the library doesn't use | ||||
|          * startpos anyway in write mode, so this initialization is not | ||||
|          * start anyway in write mode, so this initialization is not | ||||
|          * necessary. | ||||
|          */ | ||||
|     } else { | ||||
|         check_header(s); /* skip the .gz header */ | ||||
|         s->startpos = (ftell(s->file) - s->stream.avail_in); | ||||
|         s->start = ftell(s->file) - s->stream.avail_in; | ||||
|     } | ||||
|  | ||||
|     return (gzFile)s; | ||||
| @@ -350,7 +358,7 @@ local int destroy (s) | ||||
|  | ||||
|     if (s->stream.state != NULL) { | ||||
|         if (s->mode == 'w') { | ||||
| #ifdef NO_DEFLATE | ||||
| #ifdef NO_GZCOMPRESS | ||||
|             err = Z_STREAM_ERROR; | ||||
| #else | ||||
|             err = deflateEnd(&(s->stream)); | ||||
| @@ -401,7 +409,7 @@ int ZEXPORT gzread (file, buf, len) | ||||
|         s->stream.next_out++; | ||||
|         s->stream.avail_out--; | ||||
|         s->back = EOF; | ||||
|         s->stream.total_out++; | ||||
|         s->out++; | ||||
|         if (s->last) { | ||||
|             s->z_err = Z_STREAM_END; | ||||
|             return 1; | ||||
| @@ -427,8 +435,8 @@ int ZEXPORT gzread (file, buf, len) | ||||
|                                              s->file); | ||||
|             } | ||||
|             len -= s->stream.avail_out; | ||||
|             s->stream.total_in  += (uLong)len; | ||||
|             s->stream.total_out += (uLong)len; | ||||
|             s->in  += len; | ||||
|             s->out += len; | ||||
|             if (len == 0) s->z_eof = 1; | ||||
|             return (int)len; | ||||
|         } | ||||
| @@ -445,7 +453,11 @@ int ZEXPORT gzread (file, buf, len) | ||||
|             } | ||||
|             s->stream.next_in = s->inbuf; | ||||
|         } | ||||
|         s->in += s->stream.avail_in; | ||||
|         s->out += s->stream.avail_out; | ||||
|         s->z_err = inflate(&(s->stream), Z_NO_FLUSH); | ||||
|         s->in -= s->stream.avail_in; | ||||
|         s->out -= s->stream.avail_out; | ||||
|  | ||||
|         if (s->z_err == Z_STREAM_END) { | ||||
|             /* Check CRC and original size */ | ||||
| @@ -456,18 +468,13 @@ int ZEXPORT gzread (file, buf, len) | ||||
|                 s->z_err = Z_DATA_ERROR; | ||||
|             } else { | ||||
|                 (void)getLong(s); | ||||
|                 /* The uncompressed length returned by above getlong() may | ||||
|                  * be different from s->stream.total_out) in case of | ||||
|                  * concatenated .gz files. Check for such files: | ||||
|                 /* The uncompressed length returned by above getlong() may be | ||||
|                  * different from s->out in case of concatenated .gz files. | ||||
|                  * Check for such files: | ||||
|                  */ | ||||
|                 check_header(s); | ||||
|                 if (s->z_err == Z_OK) { | ||||
|                     uLong total_in = s->stream.total_in; | ||||
|                     uLong total_out = s->stream.total_out; | ||||
|  | ||||
|                     inflateReset(&(s->stream)); | ||||
|                     s->stream.total_in = total_in; | ||||
|                     s->stream.total_out = total_out; | ||||
|                     s->crc = crc32(0L, Z_NULL, 0); | ||||
|                 } | ||||
|             } | ||||
| @@ -504,7 +511,7 @@ int ZEXPORT gzungetc(c, file) | ||||
|  | ||||
|     if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; | ||||
|     s->back = c; | ||||
|     s->stream.total_out--; | ||||
|     s->out--; | ||||
|     s->last = (s->z_err == Z_STREAM_END); | ||||
|     if (s->last) s->z_err = Z_OK; | ||||
|     s->z_eof = 0; | ||||
| @@ -535,7 +542,7 @@ char * ZEXPORT gzgets(file, buf, len) | ||||
| } | ||||
|  | ||||
|  | ||||
| #ifndef NO_DEFLATE | ||||
| #ifndef NO_GZCOMPRESS | ||||
| /* =========================================================================== | ||||
|      Writes the given number of uncompressed bytes into the compressed file. | ||||
|    gzwrite returns the number of bytes actually written (0 in case of error). | ||||
| @@ -563,7 +570,11 @@ int ZEXPORT gzwrite (file, buf, len) | ||||
|             } | ||||
|             s->stream.avail_out = Z_BUFSIZE; | ||||
|         } | ||||
|         s->in += s->stream.avail_in; | ||||
|         s->out += s->stream.avail_out; | ||||
|         s->z_err = deflate(&(s->stream), Z_NO_FLUSH); | ||||
|         s->in -= s->stream.avail_in; | ||||
|         s->out -= s->stream.avail_out; | ||||
|         if (s->z_err != Z_OK) break; | ||||
|     } | ||||
|     s->crc = crc32(s->crc, (const Bytef *)buf, len); | ||||
| @@ -608,7 +619,7 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) | ||||
|     va_end(va); | ||||
| #  endif | ||||
| #endif | ||||
|     if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) | ||||
|     if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) | ||||
|         return 0; | ||||
|     return gzwrite(file, buf, (unsigned)len); | ||||
| } | ||||
| @@ -706,7 +717,9 @@ local int do_flush (file, flush) | ||||
|             s->stream.avail_out = Z_BUFSIZE; | ||||
|         } | ||||
|         if (done) break; | ||||
|         s->out += s->stream.avail_out; | ||||
|         s->z_err = deflate(&(s->stream), flush); | ||||
|         s->out -= s->stream.avail_out; | ||||
|  | ||||
|         /* Ignore the second of two consecutive flushes: */ | ||||
|         if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; | ||||
| @@ -732,7 +745,7 @@ int ZEXPORT gzflush (file, flush) | ||||
|     fflush(s->file); | ||||
|     return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err; | ||||
| } | ||||
| #endif /* NO_DEFLATE */ | ||||
| #endif /* NO_GZCOMPRESS */ | ||||
|  | ||||
| /* =========================================================================== | ||||
|       Sets the starting position for the next gzread or gzwrite on the given | ||||
| @@ -755,11 +768,11 @@ z_off_t ZEXPORT gzseek (file, offset, whence) | ||||
|     } | ||||
|  | ||||
|     if (s->mode == 'w') { | ||||
| #ifdef NO_DEFLATE | ||||
| #ifdef NO_GZCOMPRESS | ||||
|         return -1L; | ||||
| #else | ||||
|         if (whence == SEEK_SET) { | ||||
|             offset -= s->stream.total_in; | ||||
|             offset -= s->in; | ||||
|         } | ||||
|         if (offset < 0) return -1L; | ||||
|  | ||||
| @@ -778,14 +791,14 @@ z_off_t ZEXPORT gzseek (file, offset, whence) | ||||
|  | ||||
|             offset -= size; | ||||
|         } | ||||
|         return (z_off_t)s->stream.total_in; | ||||
|         return s->in; | ||||
| #endif | ||||
|     } | ||||
|     /* Rest of function is for reading only */ | ||||
|  | ||||
|     /* compute absolute position */ | ||||
|     if (whence == SEEK_CUR) { | ||||
|         offset += s->stream.total_out; | ||||
|         offset += s->out; | ||||
|     } | ||||
|     if (offset < 0) return -1L; | ||||
|  | ||||
| @@ -796,13 +809,13 @@ z_off_t ZEXPORT gzseek (file, offset, whence) | ||||
|         s->stream.next_in = s->inbuf; | ||||
|         if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; | ||||
|  | ||||
|         s->stream.total_in = s->stream.total_out = (uLong)offset; | ||||
|         s->in = s->out = offset; | ||||
|         return offset; | ||||
|     } | ||||
|  | ||||
|     /* For a negative seek, rewind and use positive seek */ | ||||
|     if ((uLong)offset >= s->stream.total_out) { | ||||
|         offset -= s->stream.total_out; | ||||
|     if (offset >= s->out) { | ||||
|         offset -= s->out; | ||||
|     } else if (gzrewind(file) < 0) { | ||||
|         return -1L; | ||||
|     } | ||||
| @@ -814,7 +827,7 @@ z_off_t ZEXPORT gzseek (file, offset, whence) | ||||
|     } | ||||
|     if (offset && s->back != EOF) { | ||||
|         s->back = EOF; | ||||
|         s->stream.total_out++; | ||||
|         s->out++; | ||||
|         offset--; | ||||
|         if (s->last) s->z_err = Z_STREAM_END; | ||||
|     } | ||||
| @@ -826,7 +839,7 @@ z_off_t ZEXPORT gzseek (file, offset, whence) | ||||
|         if (size <= 0) return -1L; | ||||
|         offset -= size; | ||||
|     } | ||||
|     return (z_off_t)s->stream.total_out; | ||||
|     return s->out; | ||||
| } | ||||
|  | ||||
| /* =========================================================================== | ||||
| @@ -845,14 +858,10 @@ int ZEXPORT gzrewind (file) | ||||
|     s->stream.avail_in = 0; | ||||
|     s->stream.next_in = s->inbuf; | ||||
|     s->crc = crc32(0L, Z_NULL, 0); | ||||
|  | ||||
|     if (s->startpos == 0) { /* not a compressed file */ | ||||
|         fseek(s->file, 0L, SEEK_SET);   /* rewind() is not always available */ | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     (void) inflateReset(&s->stream); | ||||
|     return fseek(s->file, s->startpos, SEEK_SET); | ||||
|     if (!s->transparent) (void)inflateReset(&s->stream); | ||||
|     s->in = 0; | ||||
|     s->out = 0; | ||||
|     return fseek(s->file, s->start, SEEK_SET); | ||||
| } | ||||
|  | ||||
| /* =========================================================================== | ||||
| @@ -923,14 +932,14 @@ int ZEXPORT gzclose (file) | ||||
|     if (s == NULL) return Z_STREAM_ERROR; | ||||
|  | ||||
|     if (s->mode == 'w') { | ||||
| #ifdef NO_DEFLATE | ||||
| #ifdef NO_GZCOMPRESS | ||||
|         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->stream.total_in); | ||||
|         putLong (s->file, (uLong)(s->in & 0xffffffff)); | ||||
| #endif | ||||
|     } | ||||
|     return destroy((gz_stream*)file); | ||||
|   | ||||
							
								
								
									
										21
									
								
								infback.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								infback.c
									
									
									
									
									
								
							| @@ -41,11 +41,11 @@ int stream_size; | ||||
|         windowBits < 8 || windowBits > 15) | ||||
|         return Z_STREAM_ERROR; | ||||
|     strm->msg = Z_NULL;                 /* in case we return an error */ | ||||
|     if (strm->zalloc == Z_NULL) { | ||||
|     if (strm->zalloc == (alloc_func)0) { | ||||
|         strm->zalloc = zcalloc; | ||||
|         strm->opaque = (voidpf)0; | ||||
|     } | ||||
|     if (strm->zfree == Z_NULL) strm->zfree = zcfree; | ||||
|     if (strm->zfree == (free_func)0) strm->zfree = zcfree; | ||||
|     state = (struct inflate_state FAR *)ZALLOC(strm, 1, | ||||
|                                                sizeof(struct inflate_state)); | ||||
|     if (state == Z_NULL) return Z_MEM_ERROR; | ||||
| @@ -55,6 +55,7 @@ int stream_size; | ||||
|     state->wsize = 1U << windowBits; | ||||
|     state->window = window; | ||||
|     state->write = 0; | ||||
|     state->whave = 0; | ||||
|     return Z_OK; | ||||
| } | ||||
|  | ||||
| @@ -201,6 +202,7 @@ struct inflate_state FAR *state; | ||||
|         if (left == 0) { \ | ||||
|             put = state->window; \ | ||||
|             left = state->wsize; \ | ||||
|             state->whave = left; \ | ||||
|             if (out(out_desc, put, left)) { \ | ||||
|                 ret = Z_BUF_ERROR; \ | ||||
|                 goto inf_leave; \ | ||||
| @@ -216,7 +218,7 @@ struct inflate_state FAR *state; | ||||
|    in() and out() are the call-back input and output functions.  When | ||||
|    inflateBack() needs more input, it calls in().  When inflateBack() has | ||||
|    filled the window with output, or when it completes with data in the | ||||
|    window, it called out() to write out the data.  The application must not | ||||
|    window, it calls out() to write out the data.  The application must not | ||||
|    change the provided input until in() is called again or inflateBack() | ||||
|    returns.  The application must not change the window/output buffer until | ||||
|    inflateBack() returns. | ||||
| @@ -243,12 +245,13 @@ out_func out; | ||||
| void FAR *out_desc; | ||||
| { | ||||
|     struct inflate_state FAR *state; | ||||
|     unsigned char *next, *put;  /* next input and output */ | ||||
|     unsigned char FAR *next;    /* next input */ | ||||
|     unsigned char FAR *put;     /* next output */ | ||||
|     unsigned have, left;        /* available input and output */ | ||||
|     unsigned long hold;         /* bit buffer */ | ||||
|     unsigned bits;              /* bits in bit buffer */ | ||||
|     unsigned copy;              /* number of stored or match bytes to copy */ | ||||
|     unsigned char *from;        /* where to copy match bytes from */ | ||||
|     unsigned char FAR *from;    /* where to copy match bytes from */ | ||||
|     code this;                  /* current decoding table entry */ | ||||
|     code last;                  /* parent table entry */ | ||||
|     unsigned len;               /* length to copy for repeats, bits to drop */ | ||||
| @@ -265,6 +268,7 @@ void FAR *out_desc; | ||||
|     strm->msg = Z_NULL; | ||||
|     state->mode = TYPE; | ||||
|     state->last = 0; | ||||
|     state->whave = 0; | ||||
|     next = strm->next_in; | ||||
|     have = next != Z_NULL ? strm->avail_in : 0; | ||||
|     hold = 0; | ||||
| @@ -457,6 +461,8 @@ void FAR *out_desc; | ||||
|             /* use inflate_fast() if we have enough input and output */ | ||||
|             if (have >= 6 && left >= 258) { | ||||
|                 RESTORE(); | ||||
|                 if (state->whave < state->wsize) | ||||
|                     state->whave = state->wsize - left; | ||||
|                 inflate_fast(strm, state->wsize); | ||||
|                 LOAD(); | ||||
|                 break; | ||||
| @@ -547,7 +553,8 @@ void FAR *out_desc; | ||||
|                 state->offset += BITS(state->extra); | ||||
|                 DROPBITS(state->extra); | ||||
|             } | ||||
|             if (state->offset > state->wsize) { | ||||
|             if (state->offset > state->wsize - (state->whave < state->wsize ? | ||||
|                                                 left : 0)) { | ||||
|                 strm->msg = (char *)"invalid distance too far back"; | ||||
|                 state->mode = BAD; | ||||
|                 break; | ||||
| @@ -603,7 +610,7 @@ void FAR *out_desc; | ||||
| int ZEXPORT inflateBackEnd(strm) | ||||
| z_stream FAR *strm; | ||||
| { | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == Z_NULL) | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) | ||||
|         return Z_STREAM_ERROR; | ||||
|     ZFREE(strm, strm->state); | ||||
|     strm->state = Z_NULL; | ||||
|   | ||||
							
								
								
									
										10
									
								
								inffast.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								inffast.c
									
									
									
									
									
								
							| @@ -8,6 +8,8 @@ | ||||
| #include "inflate.h" | ||||
| #include "inffast.h" | ||||
|  | ||||
| #ifndef ASMINF | ||||
|  | ||||
| /* Allow machine dependent optimization for post-increment or pre-increment. | ||||
|    Based on testing to date, | ||||
|    Pre-increment preferred for: | ||||
| @@ -72,6 +74,7 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */ | ||||
|     unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */ | ||||
|     unsigned char FAR *end;     /* while out < end, enough space available */ | ||||
|     unsigned wsize;             /* window size or zero if not using window */ | ||||
|     unsigned whave;             /* valid bytes in the window */ | ||||
|     unsigned write;             /* window write index */ | ||||
|     unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */ | ||||
|     unsigned long hold;         /* local strm->hold */ | ||||
| @@ -95,6 +98,7 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */ | ||||
|     beg = out - (start - strm->avail_out); | ||||
|     end = out + (strm->avail_out - 257); | ||||
|     wsize = state->wsize; | ||||
|     whave = state->whave; | ||||
|     write = state->write; | ||||
|     window = state->window; | ||||
|     hold = state->hold; | ||||
| @@ -167,13 +171,13 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */ | ||||
|                 Tracevv((stderr, "inflate:         distance %u\n", dist)); | ||||
|                 op = (unsigned)(out - beg);     /* max distance in output */ | ||||
|                 if (dist > op) {                /* see if copy from window */ | ||||
|                     if (dist > wsize) { | ||||
|                     op = dist - op;             /* distance back in window */ | ||||
|                     if (op > whave) { | ||||
|                         strm->msg = (char *)"invalid distance too far back"; | ||||
|                         state->mode = BAD; | ||||
|                         break; | ||||
|                     } | ||||
|                     from = window - OFF; | ||||
|                     op = dist - op;             /* distance back in window */ | ||||
|                     if (write == 0) {           /* very common case */ | ||||
|                         from += wsize - op; | ||||
|                         if (op < len) {         /* some from window */ | ||||
| @@ -296,3 +300,5 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */ | ||||
|    - Larger unrolled copy loops (three is about right) | ||||
|    - Moving len -= 3 statement into middle of loop | ||||
|  */ | ||||
|  | ||||
| #endif /* !ASMINF */ | ||||
|   | ||||
							
								
								
									
										40
									
								
								inflate.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								inflate.c
									
									
									
									
									
								
							| @@ -97,7 +97,7 @@ local int updatewindow OF((z_streamp strm, unsigned out)); | ||||
| #ifdef BUILDFIXED | ||||
|    void makefixed OF((void)); | ||||
| #endif | ||||
| local unsigned syncsearch OF((unsigned *have, unsigned char FAR *buf, | ||||
| local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, | ||||
|                               unsigned len)); | ||||
|  | ||||
| int ZEXPORT inflateReset(strm) | ||||
| @@ -113,6 +113,7 @@ z_streamp strm; | ||||
|     state->last = 0; | ||||
|     state->havedict = 0; | ||||
|     state->wsize = 0; | ||||
|     state->whave = 0; | ||||
|     state->hold = 0; | ||||
|     state->bits = 0; | ||||
|     state->lencode = state->distcode = state->next = state->codes; | ||||
| @@ -133,11 +134,11 @@ int stream_size; | ||||
|         return Z_VERSION_ERROR; | ||||
|     if (strm == Z_NULL) return Z_STREAM_ERROR; | ||||
|     strm->msg = Z_NULL;                 /* in case we return an error */ | ||||
|     if (strm->zalloc == Z_NULL) { | ||||
|     if (strm->zalloc == (alloc_func)0) { | ||||
|         strm->zalloc = zcalloc; | ||||
|         strm->opaque = (voidpf)0; | ||||
|     } | ||||
|     if (strm->zfree == Z_NULL) strm->zfree = zcfree; | ||||
|     if (strm->zfree == (free_func)0) strm->zfree = zcfree; | ||||
|     state = (struct inflate_state FAR *) | ||||
|             ZALLOC(strm, 1, sizeof(struct inflate_state)); | ||||
|     if (state == Z_NULL) return Z_MEM_ERROR; | ||||
| @@ -150,7 +151,7 @@ int stream_size; | ||||
|     else { | ||||
|         state->wrap = (windowBits >> 4) + 1; | ||||
| #ifdef GUNZIP | ||||
|         windowBits &= 15; | ||||
|         if (windowBits < 48) windowBits &= 15; | ||||
| #endif | ||||
|     } | ||||
|     if (windowBits < 8 || windowBits > 15) { | ||||
| @@ -320,6 +321,7 @@ unsigned out; | ||||
|     if (state->wsize == 0) { | ||||
|         state->wsize = 1U << state->wbits; | ||||
|         state->write = 0; | ||||
|         state->whave = 0; | ||||
|     } | ||||
|  | ||||
|     /* copy state->wsize or less output bytes into the circular window */ | ||||
| @@ -327,6 +329,7 @@ unsigned out; | ||||
|     if (copy >= state->wsize) { | ||||
|         zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); | ||||
|         state->write = 0; | ||||
|         state->whave = state->wsize; | ||||
|     } | ||||
|     else { | ||||
|         dist = state->wsize - state->write; | ||||
| @@ -336,10 +339,12 @@ unsigned out; | ||||
|         if (copy) { | ||||
|             zmemcpy(state->window, strm->next_out - copy, copy); | ||||
|             state->write = copy; | ||||
|             state->whave = state->wsize; | ||||
|         } | ||||
|         else { | ||||
|             state->write += dist; | ||||
|             if (state->write == state->wsize) state->write = 0; | ||||
|             if (state->whave < state->wsize) state->whave += dist; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| @@ -531,13 +536,14 @@ z_streamp strm; | ||||
| int flush; | ||||
| { | ||||
|     struct inflate_state FAR *state; | ||||
|     unsigned char *next, *put;  /* next input and output */ | ||||
|     unsigned char FAR *next;    /* next input */ | ||||
|     unsigned char FAR *put;     /* next output */ | ||||
|     unsigned have, left;        /* available input and output */ | ||||
|     unsigned long hold;         /* bit buffer */ | ||||
|     unsigned bits;              /* bits in bit buffer */ | ||||
|     unsigned in, out;           /* save starting available input and output */ | ||||
|     unsigned copy;              /* number of stored or match bytes to copy */ | ||||
|     unsigned char *from;        /* where to copy match bytes from */ | ||||
|     unsigned char FAR *from;    /* where to copy match bytes from */ | ||||
|     code this;                  /* current decoding table entry */ | ||||
|     code last;                  /* parent table entry */ | ||||
|     unsigned len;               /* length to copy for repeats, bits to drop */ | ||||
| @@ -553,6 +559,7 @@ int flush; | ||||
|         return Z_STREAM_ERROR; | ||||
|  | ||||
|     state = (struct inflate_state FAR *)strm->state; | ||||
|     if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */ | ||||
|     LOAD(); | ||||
|     in = have; | ||||
|     out = left; | ||||
| @@ -703,6 +710,8 @@ int flush; | ||||
|             strm->adler = state->check = adler32(0L, Z_NULL, 0); | ||||
|             state->mode = TYPE; | ||||
|         case TYPE: | ||||
|             if (flush == Z_BLOCK) goto inf_leave; | ||||
|         case TYPEDO: | ||||
|             if (state->last) { | ||||
|                 BYTEBITS(); | ||||
|                 state->mode = CHECK; | ||||
| @@ -956,8 +965,7 @@ int flush; | ||||
|                 state->offset += BITS(state->extra); | ||||
|                 DROPBITS(state->extra); | ||||
|             } | ||||
|             if (state->offset > (state->wsize ? state->wsize : | ||||
|                                                 out - left)) { | ||||
|             if (state->offset > state->whave + out - left) { | ||||
|                 strm->msg = (char *)"invalid distance too far back"; | ||||
|                 state->mode = BAD; | ||||
|                 break; | ||||
| @@ -1066,6 +1074,8 @@ int flush; | ||||
|     if (state->wrap && out) | ||||
|         strm->adler = state->check = | ||||
|             UPDATE(state->check, strm->next_out - out, out); | ||||
|     strm->data_type = state->bits + (state->last ? 8 : 0) + | ||||
|                       (state->mode == TYPE ? 16 : 0); | ||||
|     if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) | ||||
|         ret = Z_BUF_ERROR; | ||||
|     return ret; | ||||
| @@ -1075,7 +1085,7 @@ int ZEXPORT inflateEnd(strm) | ||||
| z_streamp strm; | ||||
| { | ||||
|     struct inflate_state FAR *state; | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == Z_NULL) | ||||
|     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) | ||||
|         return Z_STREAM_ERROR; | ||||
|     state = (struct inflate_state FAR *)strm->state; | ||||
|     if (state->window != Z_NULL) ZFREE(strm, state->window); | ||||
| @@ -1108,12 +1118,16 @@ uInt dictLength; | ||||
|         state->mode = MEM; | ||||
|         return Z_MEM_ERROR; | ||||
|     } | ||||
|     if (dictLength > state->wsize) | ||||
|     if (dictLength > state->wsize) { | ||||
|         zmemcpy(state->window, dictionary + dictLength - state->wsize, | ||||
|                 state->wsize); | ||||
|     else | ||||
|         state->whave = state->wsize; | ||||
|     } | ||||
|     else { | ||||
|         zmemcpy(state->window + state->wsize - dictLength, dictionary, | ||||
|                 dictLength); | ||||
|         state->whave = dictLength; | ||||
|     } | ||||
|     state->havedict = 1; | ||||
|     Tracev((stderr, "inflate:   dictionary set\n")); | ||||
|     return Z_OK; | ||||
| @@ -1131,7 +1145,7 @@ uInt dictLength; | ||||
|    zero for the first call. | ||||
|  */ | ||||
| local unsigned syncsearch(have, buf, len) | ||||
| unsigned *have; | ||||
| unsigned FAR *have; | ||||
| unsigned char FAR *buf; | ||||
| unsigned len; | ||||
| { | ||||
| @@ -1224,7 +1238,7 @@ z_streamp source; | ||||
|  | ||||
|     /* check input */ | ||||
|     if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || | ||||
|         source->zalloc == Z_NULL || source->zfree == Z_NULL) | ||||
|         source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) | ||||
|         return Z_STREAM_ERROR; | ||||
|     state = (struct inflate_state FAR *)source->state; | ||||
|  | ||||
|   | ||||
| @@ -8,11 +8,11 @@ | ||||
|    subject to change. Applications should only use zlib.h. | ||||
|  */ | ||||
|  | ||||
| /* define NO_GUNZIP when compiling if you want to disable gzip header and | ||||
|    trailer decoding by inflate().  NO_GUNZIP would be used to avoid linking in | ||||
| /* define NO_GZIP when compiling if you want to disable gzip header and | ||||
|    trailer decoding by inflate().  NO_GZIP would be used to avoid linking in | ||||
|    the crc code when it is not needed.  For shared libraries, gzip decoding | ||||
|    should be left enabled. */ | ||||
| #ifndef NO_GUNZIP | ||||
| #ifndef NO_GZIP | ||||
| #  define GUNZIP | ||||
| #endif | ||||
|  | ||||
| @@ -32,6 +32,7 @@ typedef enum { | ||||
|     DICTID,     /* i: waiting for dictionary check value */ | ||||
|     DICT,       /* waiting for inflateSetDictionary() call */ | ||||
|         TYPE,       /* i: waiting for type bits, including last-flag bit */ | ||||
|         TYPEDO,     /* i: same, but skip check to exit inflate on new block */ | ||||
|         STORED,     /* i: waiting for stored size (length and complement) */ | ||||
|         COPY,       /* i/o: waiting for input or output to copy stored block */ | ||||
|         TABLE,      /* i: waiting for dynamic block table lengths */ | ||||
| @@ -88,6 +89,7 @@ struct inflate_state { | ||||
|         /* sliding window */ | ||||
|     unsigned wbits;             /* log base 2 of requested window size */ | ||||
|     unsigned wsize;             /* window size or zero if not using window */ | ||||
|     unsigned whave;             /* valid bytes in the window */ | ||||
|     unsigned write;             /* window write index */ | ||||
|     unsigned char FAR *window;  /* allocated sliding window, if needed */ | ||||
|         /* bit accumulator */ | ||||
|   | ||||
							
								
								
									
										12
									
								
								inftrees.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								inftrees.c
									
									
									
									
									
								
							| @@ -9,7 +9,7 @@ | ||||
| #define MAXBITS 15 | ||||
|  | ||||
| const char inflate_copyright[] = | ||||
|    " inflate 1.2.0.3 Copyright 1995-2003 Mark Adler "; | ||||
|    " inflate 1.2.0.5 Copyright 1995-2003 Mark Adler "; | ||||
| /* | ||||
|   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 | ||||
| @@ -33,8 +33,8 @@ int inflate_table(type, lens, codes, table, bits, work) | ||||
| codetype type; | ||||
| unsigned short FAR *lens; | ||||
| unsigned codes; | ||||
| code * FAR *table; | ||||
| unsigned *bits; | ||||
| code FAR * FAR *table; | ||||
| unsigned FAR *bits; | ||||
| unsigned short FAR *work; | ||||
| { | ||||
|     unsigned len;               /* a code's length in bits */ | ||||
| @@ -52,8 +52,8 @@ unsigned short FAR *work; | ||||
|     unsigned mask;              /* mask for low root bits */ | ||||
|     code this;                  /* table entry for duplication */ | ||||
|     code FAR *next;             /* next available space in table */ | ||||
|     const unsigned short *base; /* base value table to use */ | ||||
|     const unsigned short *extra;        /* extra bits table to use */ | ||||
|     const unsigned short FAR *base;     /* base value table to use */ | ||||
|     const unsigned short FAR *extra;    /* extra bits table to use */ | ||||
|     int end;                    /* use base and extra for symbol > end */ | ||||
|     unsigned short count[MAXBITS+1];    /* number of codes of each length */ | ||||
|     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */ | ||||
| @@ -62,7 +62,7 @@ unsigned short FAR *work; | ||||
|         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; | ||||
|     static const unsigned short lext[31] = { /* Length codes 257..285 extra */ | ||||
|         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, | ||||
|         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 193, 193}; | ||||
|         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 192, 78}; | ||||
|     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ | ||||
|         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, | ||||
|         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, | ||||
|   | ||||
| @@ -51,5 +51,5 @@ typedef enum { | ||||
| } codetype; | ||||
|  | ||||
| extern int inflate_table OF((codetype type, unsigned short FAR *lens, | ||||
|                              unsigned codes, code * FAR *table, unsigned *bits, | ||||
|                              unsigned short FAR *work)); | ||||
|                              unsigned codes, code FAR * FAR *table, | ||||
|                              unsigned FAR *bits, unsigned short FAR *work)); | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| /* minigzip.c -- simulate gzip using the zlib compression library | ||||
|  * Copyright (C) 1995-2002 Jean-loup Gailly. | ||||
|  * Adapted for Z_RLE by Cosmin Truta, 2003. | ||||
|  * For conditions of distribution and use, see copyright notice in zlib.h | ||||
|  */ | ||||
|  | ||||
| @@ -230,7 +229,7 @@ void file_uncompress(file) | ||||
|     char *infile, *outfile; | ||||
|     FILE  *out; | ||||
|     gzFile in; | ||||
|     int len = (int)strlen(file); | ||||
|     uInt len = (uInt)strlen(file); | ||||
|  | ||||
|     strcpy(buf, file); | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Makefile for zlib | ||||
| # Borland C++ | ||||
| # Updated for zlib-1.2.x by Cosmin Truta, 15-Mar-2003. | ||||
| # Last updated: 15-Mar-2003 | ||||
|  | ||||
| # To use, do "make -fmakefile.bor" | ||||
| # To compile in small model, set below: MODEL=s | ||||
| @@ -103,7 +103,7 @@ test: example.exe minigzip.exe | ||||
|  | ||||
| clean: | ||||
| 	-del *.obj | ||||
| 	-del *.exe | ||||
| 	-del *.lib | ||||
| 	-del zlib_$(MODEL).bak | ||||
| 	-del *.exe | ||||
| 	-del zlib_*.bak | ||||
| 	-del foo.gz | ||||
|   | ||||
| @@ -52,12 +52,16 @@ prefix=/usr/local | ||||
| exec_prefix = $(prefix) | ||||
| 
 | ||||
| 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 | ||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | ||||
| 
 | ||||
| OBJA = | ||||
| # to use the asm code: make OBJA=match.o
 | ||||
| 
 | ||||
| TEST_OBJS = example.o minigzip.o | ||||
| 
 | ||||
| all: example.exe minigzip.exe | ||||
| 
 | ||||
| check: test | ||||
| test: all | ||||
| 	./example | ||||
| 	echo hello world | .\minigzip | .\minigzip -d | ||||
| @@ -65,8 +69,8 @@ test: all | ||||
| %.o : %.c | ||||
| 	$(CC) $(CFLAGS) -c $< -o $@ | ||||
| 
 | ||||
| libz.a: $(OBJS) | ||||
| 	$(AR) $@ $(OBJS) | ||||
| libz.a: $(OBJS) $(OBJA) | ||||
| 	$(AR) $@ $(OBJS) $(OBJA) | ||||
| 
 | ||||
| %.exe : %.o $(LIBS) | ||||
| 	$(LD) $@ $< $(LDLIBS) | ||||
| @@ -34,7 +34,7 @@ prefix=/usr/local | ||||
| exec_prefix = $(prefix) | ||||
| 
 | ||||
| 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 | ||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | ||||
| 
 | ||||
| TEST_OBJS = example.o minigzip.o | ||||
| 
 | ||||
							
								
								
									
										106
									
								
								msdos/Makefile.msc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								msdos/Makefile.msc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| # Makefile for zlib | ||||
| # Microsoft C 5.1 or later | ||||
| # Last updated: 19-Mar-2003 | ||||
|  | ||||
| # To use, do "make makefile.msc" | ||||
| # To compile in small model, set below: MODEL=S | ||||
|  | ||||
| # If you wish to reduce the memory requirements (default 256K for big | ||||
| # objects plus a few K), you can add to the LOC macro below: | ||||
| #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 | ||||
| # See zconf.h for details about the memory requirements. | ||||
|  | ||||
| # ------------- Microsoft C 5.1 and later ------------- | ||||
|  | ||||
| #    Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) | ||||
| #    should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added | ||||
| #    to the declaration of LOC here: | ||||
| LOC = $(LOCAL_ZLIB) | ||||
|  | ||||
| # Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. | ||||
| CPU_TYP = 0 | ||||
|  | ||||
| # Memory model: one of S, M, C, L (small, medium, compact, large) | ||||
| MODEL=L | ||||
|  | ||||
| CC=cl | ||||
| CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC) | ||||
| #-Ox generates bad code with MSC 5.1 | ||||
| LIB_CFLAGS=-Zl $(CFLAGS) | ||||
|  | ||||
| LD=link | ||||
| LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode | ||||
| # "/farcall/packcode" are only useful for `large code' memory models | ||||
| # but should be a "no-op" for small code models. | ||||
|  | ||||
|  | ||||
| # variables | ||||
| ZLIB_LIB = zlib_$(MODEL).lib | ||||
|  | ||||
| OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj | ||||
| OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | ||||
|  | ||||
|  | ||||
| # targets | ||||
| all:  $(ZLIB_LIB) example.exe minigzip.exe | ||||
|  | ||||
| .c.obj: | ||||
| 	$(CC) -c $(LIB_CFLAGS) $*.c | ||||
|  | ||||
| adler32.obj: adler32.c zlib.h zconf.h | ||||
|  | ||||
| compress.obj: compress.c zlib.h zconf.h | ||||
|  | ||||
| crc32.obj: crc32.c zlib.h zconf.h crc32.h | ||||
|  | ||||
| deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | ||||
|  | ||||
| gzio.obj: gzio.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h | ||||
|  | ||||
| inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||
|  inffast.h inffixed.h | ||||
|  | ||||
| inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h | ||||
|  | ||||
| trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h | ||||
|  | ||||
| uncompr.obj: uncompr.c zlib.h zconf.h | ||||
|  | ||||
| zutil.obj: zutil.c zutil.h zlib.h zconf.h | ||||
|  | ||||
| example.obj: example.c zlib.h zconf.h | ||||
| 	$(CC) -c $(CFLAGS) $*.c | ||||
|  | ||||
| minigzip.obj: minigzip.c zlib.h zconf.h | ||||
| 	$(CC) -c $(CFLAGS) $*.c | ||||
|  | ||||
|  | ||||
| # the command line is cut to fit in the MS-DOS 128 byte limit: | ||||
| $(ZLIB_LIB): $(OBJ1) $(OBJ2) | ||||
| 	if exist $(ZLIB_LIB) del $(ZLIB_LIB) | ||||
| 	lib $(ZLIB_LIB) $(OBJ1); | ||||
| 	lib $(ZLIB_LIB) $(OBJ2); | ||||
|  | ||||
| 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 *.lib | ||||
| 	-del *.exe | ||||
| 	-del *.map | ||||
| 	-del zlib_*.bak | ||||
| 	-del foo.gz | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Makefile for zlib | ||||
| # Turbo C 2.01, Turbo C++ 1.01 | ||||
| # Updated for zlib-1.2.x by Cosmin Truta, 15-Mar-2003. | ||||
| # Last updated: 15-Mar-2003 | ||||
|  | ||||
| # To use, do "make -fmakefile.tc" | ||||
| # To compile in small model, set below: MODEL=s | ||||
| @@ -88,7 +88,7 @@ test: example.exe minigzip.exe | ||||
|  | ||||
| clean: | ||||
| 	-del *.obj | ||||
| 	-del *.exe | ||||
| 	-del *.lib | ||||
| 	-del zlib_$(MODEL).bak | ||||
| 	-del *.exe | ||||
| 	-del zlib_*.bak | ||||
| 	-del foo.gz | ||||
|   | ||||
							
								
								
									
										0
									
								
								old/Make_vms.com
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								old/Make_vms.com
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user