summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog48
-rw-r--r--FAQ72
-rw-r--r--INDEX6
-rw-r--r--Make_vms.com8
-rw-r--r--Makefile54
-rw-r--r--Makefile.in54
-rw-r--r--Makefile.riscos145
-rw-r--r--README67
-rwxr-xr-xconfigure65
-rw-r--r--contrib/README.contrib10
-rw-r--r--contrib/asm586/README.58643
-rw-r--r--contrib/asm586/match.S354
-rw-r--r--contrib/asm686/README.68634
-rw-r--r--contrib/asm686/match.S327
-rw-r--r--contrib/delphi/zlib.mak36
-rw-r--r--contrib/delphi/zlibdef.pas169
-rw-r--r--contrib/delphi2/d_zlib.bpr224
-rw-r--r--contrib/delphi2/d_zlib.cpp17
-rw-r--r--contrib/delphi2/readme.txt17
-rw-r--r--contrib/delphi2/zlib.bpg26
-rw-r--r--contrib/delphi2/zlib.bpr225
-rw-r--r--contrib/delphi2/zlib.cpp22
-rw-r--r--contrib/delphi2/zlib.pas534
-rw-r--r--contrib/delphi2/zlib32.bpr174
-rw-r--r--contrib/delphi2/zlib32.cpp42
-rw-r--r--contrib/minizip/unzip.c2
-rw-r--r--contrib/minizip/zip.c90
-rw-r--r--contrib/untgz/untgz.c64
-rw-r--r--contrib/visual-basic.txt14
-rw-r--r--deflate.c8
-rw-r--r--deflate.h6
-rw-r--r--example.c14
-rw-r--r--gzio.c14
-rw-r--r--infblock.c7
-rw-r--r--infcodes.c7
-rw-r--r--inffixed.h246
-rw-r--r--inftrees.c2
-rw-r--r--maketree.c38
-rw-r--r--minigzip.c3
-rw-r--r--msdos/Makefile.b324
-rw-r--r--msdos/Makefile.bor86
-rw-r--r--msdos/Makefile.emx69
-rw-r--r--msdos/Makefile.msc114
-rw-r--r--msdos/Makefile.tc67
-rw-r--r--msdos/Makefile.w324
-rw-r--r--msdos/Makefile.wat4
-rw-r--r--msdos/zlib.def2
-rw-r--r--msdos/zlib.rc6
-rw-r--r--nt/Makefile.emx138
-rw-r--r--nt/Makefile.gcc87
-rw-r--r--os2/Makefile.os2136
-rw-r--r--os2/zlib.def51
-rw-r--r--trees.c52
-rw-r--r--zconf.h71
-rw-r--r--zlib.34
-rw-r--r--zlib.h149
-rw-r--r--zutil.c8
-rw-r--r--zutil.h21
58 files changed, 3773 insertions, 588 deletions
diff --git a/ChangeLog b/ChangeLog
index ae49267..57386a2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,54 @@
1 1
2 ChangeLog file for zlib 2 ChangeLog file for zlib
3 3
4Changes in 1.1.3 (9 July 1998)
5- fix "an inflate input buffer bug that shows up on rare but persistent
6 occasions" (Mark)
7- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
8- fix gzseek(..., SEEK_SET) in write mode
9- fix crc check after a gzeek (Frank Faubert)
10- fix miniunzip when the last entry in a zip file is itself a zip file
11 (J Lillge)
12- add contrib/asm586 and contrib/asm686 (Brian Raiter)
13 See http://www.muppetlabs.com/~breadbox/software/assembly.html
14- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
15- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
16- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
17- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
18- added a FAQ file
19
20- Support gzdopen on Mac with Metrowerks (Jason Linhart)
21- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)
22- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)
23- avoid some warnings with Borland C (Tom Tanner)
24- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)
25- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant)
26- allow several arguments to configure (Tim Mooney, Frodo Looijaard)
27- use libdir and includedir in Makefile.in (Tim Mooney)
28- support shared libraries on OSF1 V4 (Tim Mooney)
29- remove so_locations in "make clean" (Tim Mooney)
30- fix maketree.c compilation error (Glenn, Mark)
31- Python interface to zlib now in Python 1.5 (Jeremy Hylton)
32- new Makefile.riscos (Rich Walker)
33- initialize static descriptors in trees.c for embedded targets (Nick Smith)
34- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith)
35- add the OS/2 files in Makefile.in too (Andrew Zabolotny)
36- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)
37- fix maketree.c to allow clean compilation of inffixed.h (Mark)
38- fix parameter check in deflateCopy (Gunther Nikl)
39- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)
40- Many portability patches by Christian Spieler:
41 . zutil.c, zutil.h: added "const" for zmem*
42 . Make_vms.com: fixed some typos
43 . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists
44 . msdos/Makefile.msc: remove "default rtl link library" info from obj files
45 . msdos/Makefile.*: use model-dependent name for the built zlib library
46 . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:
47 new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)
48- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)
49- replace __far with _far for better portability (Christian Spieler, Tom Lane)
50- fix test for errno.h in configure (Tim Newsham)
51
4Changes in 1.1.2 (19 March 98) 52Changes in 1.1.2 (19 March 98)
5- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) 53- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)
6 See http://www.winimage.com/zLibDll/unzip.html 54 See http://www.winimage.com/zLibDll/unzip.html
diff --git a/FAQ b/FAQ
new file mode 100644
index 0000000..0feb6d3
--- /dev/null
+++ b/FAQ
@@ -0,0 +1,72 @@
1
2 Frequently Asked Questions about zlib
3
4
5If your question is not there, please check the zlib home page
6http://www.cdrom.com/pub/infozip/zlib/ which may have more recent information.
7
8
91) I need a Windows DLL
102) I need a Visual Basic interface to zlib
113) compress() returns Z_BUF_ERROR
124) deflate or inflate returns Z_BUF_ERROR
135) Where is the zlib documentation (man pages, etc...)?
146) Why don't you use GNU autoconf, libtool, etc...?
157) There is a bug in zlib.
168) I get "undefined reference to gzputc"
17
18
19
201) I need a Windows DLL
21
22 The zlib sources can be compiled without change to produce a DLL.
23 If you want a precompiled DLL, see http://www.winimage.com/zLibDll
24
25
262) I need a Visual Basic interface to zlib
27
28 See http://www.tcfb.com/dowseware/cmp-z-it.zip
29 http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm
30 and contrib/visual-basic.txt
31
323) compress() returns Z_BUF_ERROR
33
34 Make sure that before the call of compress, the length of the
35 compressed buffer is equal to the total size of the compressed buffer
36 and not zero. For Visual Basic, check that this parameter is passed
37 by reference ("as any"), not by value ("as long").
38
39
404) deflate or inflate returns Z_BUF_ERROR
41
42 Make sure that before the call avail_in and avail_out are not zero.
43
44
455) Where is the zlib documentation (man pages, etc...)?
46
47 It's in zlib.h for the moment. Volunteers to transform this
48 to man pages, please contact jloup@gzip.org. Examples of zlib usage
49 are in the files example.c and minigzip.c.
50
51
526) Why don't you use GNU autoconf, libtool, etc...?
53
54 Because we would like to keep zlib as a very small and simple package.
55 zlib is rather portable and doesn't need much configuration.
56
57
587) There is a bug in zlib.
59
60 Most of the time, such problems are due to an incorrect usage
61 of zlib. Please try to reproduce the problem with a small
62 program and send us the corresponding source at zlib@quest.jpl.nasa.gov
63 Do not send multi-megabyte data files without prior agreement.
64
65
668) I get "undefined reference to gzputc"
67
68 If "make test" produces something like
69 example.o(.text+0x174):
70 check that you don't have old files libz.* in /usr/lib, /usr/local/lib
71 or /usr/X11R6/lib. Remove old versions then do "make install".
72
diff --git a/INDEX b/INDEX
index c405328..8a24576 100644
--- a/INDEX
+++ b/INDEX
@@ -1,9 +1,9 @@
1ChangeLog history of changes 1ChangeLog history of changes
2INDEX this file 2INDEX this file
3FAQ Frequently Asked Questions about zlib
3Make_vms.com script for Vax/VMS 4Make_vms.com script for Vax/VMS
4Makefile makefile for Unix (generated by configure) 5Makefile makefile for Unix (generated by configure)
5Makefile.in makefile for Unix (template for configure) 6Makefile.in makefile for Unix (template for configure)
6Makefile.msc makefile for Microsoft C 16-bit
7Makefile.riscos makefile for RISCOS 7Makefile.riscos makefile for RISCOS
8README guess what 8README guess what
9algorithm.txt description of the (de)compression algorithm 9algorithm.txt description of the (de)compression algorithm
@@ -19,6 +19,8 @@ msdos/Makefile.w32 makefile for Microsoft Visual C++ 32-bit
19msdos/Makefile.b32 makefile for Borland C++ 32-bit 19msdos/Makefile.b32 makefile for Borland C++ 32-bit
20msdos/Makefile.bor makefile for Borland C/C++ 16-bit 20msdos/Makefile.bor makefile for Borland C/C++ 16-bit
21msdos/Makefile.dj2 makefile for DJGPP 2.x 21msdos/Makefile.dj2 makefile for DJGPP 2.x
22msdos/Makefile.emx makefile for EMX 0.9c (32-bit DOS/OS2)
23msdos/Makefile.msc makefile for Microsoft C 16-bit
22msdos/Makefile.tc makefile for Turbo C 24msdos/Makefile.tc makefile for Turbo C
23msdos/Makefile.wat makefile for Watcom C 25msdos/Makefile.wat makefile for Watcom C
24msdos/zlib.def definition file for Windows DLL 26msdos/zlib.def definition file for Windows DLL
@@ -26,6 +28,8 @@ msdos/zlib.rc definition file for Windows DLL
26 28
27nt/Makefile.nt makefile for Windows NT 29nt/Makefile.nt makefile for Windows NT
28nt/zlib.dnt definition file for Windows NT DLL 30nt/zlib.dnt definition file for Windows NT DLL
31nt/Makefile.emx makefile for EMX 0.9c/RSXNT 1.41 (Win32 Intel)
32nt/Makefile.gcc makefile for Windows NT using GCC (mingw32)
29 33
30 34
31 zlib public header files (must be kept): 35 zlib public header files (must be kept):
diff --git a/Make_vms.com b/Make_vms.com
index 0008d00..1c57e8f 100644
--- a/Make_vms.com
+++ b/Make_vms.com
@@ -28,15 +28,15 @@ $ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
28$ then 28$ then
29$ dele example.obj;*,minigzip.obj;* 29$ dele example.obj;*,minigzip.obj;*
30$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - 30$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
31 adler32.c zutil.h zlib.h zconf.h 31 adler32.c zlib.h zconf.h
32$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - 32$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
33 compress.c zlib.h zconf.h 33 compress.c zlib.h zconf.h
34$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - 34$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
35 crc32.c zutil.h zlib.h zconf.h 35 crc32.c zlib.h zconf.h
36$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - 36$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
37 deflatec.c deflate.h zutil.h zlib.h zconf.h 37 deflate.c deflate.h zutil.h zlib.h zconf.h
38$ CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" - 38$ CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" -
39 gsio.c zutil.h zlib.h zconf.h 39 gzio.c zutil.h zlib.h zconf.h
40$ CALL MAKE infblock.OBJ "CC ''CCOPT' infblock" - 40$ CALL MAKE infblock.OBJ "CC ''CCOPT' infblock" -
41 infblock.c zutil.h zlib.h zconf.h infblock.h 41 infblock.c zutil.h zlib.h zconf.h infblock.h
42$ CALL MAKE infcodes.OBJ "CC ''CCOPT' infcodes" - 42$ CALL MAKE infcodes.OBJ "CC ''CCOPT' infcodes" -
diff --git a/Makefile b/Makefile
index c8bb6e9..3a3b116 100644
--- a/Makefile
+++ b/Makefile
@@ -22,8 +22,9 @@ CFLAGS=-O
22 22
23LDFLAGS=-L. -lz 23LDFLAGS=-L. -lz
24LDSHARED=$(CC) 24LDSHARED=$(CC)
25CPP=$(CC) -E
25 26
26VER=1.1.2 27VER=1.1.3
27LIBS=libz.a 28LIBS=libz.a
28SHAREDLIB=libz.so 29SHAREDLIB=libz.so
29 30
@@ -34,21 +35,27 @@ SHELL=/bin/sh
34 35
35prefix = /usr/local 36prefix = /usr/local
36exec_prefix = ${prefix} 37exec_prefix = ${prefix}
38libdir = ${exec_prefix}/lib
39includedir = ${prefix}/include
37 40
38OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ 41OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
39 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o 42 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
40 43
44OBJA =
45# to use the asm code: make OBJA=match.o
46
41TEST_OBJS = example.o minigzip.o 47TEST_OBJS = example.o minigzip.o
42 48
43DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ 49DISTFILES = README FAQ INDEX ChangeLog configure Make*[a-z0-9] *.[ch] *.mms \
44 algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ 50 algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
45 nt/Makefile.nt nt/zlib.dnt amiga/Make*.??? contrib/README.contrib \ 51 nt/Make*[a-z0-9] nt/zlib.dnt amiga/Make*.??? os2/M*.os2 os2/zlib.def \
46 contrib/*.txt contrib/asm386/*.asm contrib/asm386/*.c \ 52 contrib/RE*.contrib contrib/*.txt contrib/asm386/*.asm contrib/asm386/*.c \
47 contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ 53 contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/asm[56]86/*.?86 \
54 contrib/asm[56]86/*.S contrib/iostream/*.cpp \
48 contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ 55 contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \
49 contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 \ 56 contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 \
50 contrib/minizip/[CM]*[pe] contrib/minizip/*.[ch] contrib/minizip/*.[td]?? 57 contrib/minizip/[CM]*[pe] contrib/minizip/*.[ch] contrib/minizip/*.[td]?? \
51 58 contrib/delphi*/*.???
52 59
53all: example minigzip 60all: example minigzip
54 61
@@ -62,10 +69,16 @@ test: all
62 echo ' *** zlib test FAILED ***'; \ 69 echo ' *** zlib test FAILED ***'; \
63 fi 70 fi
64 71
65libz.a: $(OBJS) 72libz.a: $(OBJS) $(OBJA)
66 $(AR) $@ $(OBJS) 73 $(AR) $@ $(OBJS) $(OBJA)
67 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 74 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
68 75
76match.o: match.S
77 $(CPP) match.S > _match.s
78 $(CC) -c _match.s
79 mv _match.o match.o
80 rm -f _match.s
81
69$(SHAREDLIB).$(VER): $(OBJS) 82$(SHAREDLIB).$(VER): $(OBJS)
70 $(LDSHARED) -o $@ $(OBJS) 83 $(LDSHARED) -o $@ $(OBJS)
71 rm -f $(SHAREDLIB) $(SHAREDLIB).1 84 rm -f $(SHAREDLIB) $(SHAREDLIB).1
@@ -79,14 +92,14 @@ minigzip: minigzip.o $(LIBS)
79 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) 92 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
80 93
81install: $(LIBS) 94install: $(LIBS)
82 -@if [ ! -d $(prefix)/include ]; then mkdir $(prefix)/include; fi 95 -@if [ ! -d $(includedir) ]; then mkdir $(includedir); fi
83 -@if [ ! -d $(exec_prefix)/lib ]; then mkdir $(exec_prefix)/lib; fi 96 -@if [ ! -d $(libdir) ]; then mkdir $(libdir); fi
84 cp zlib.h zconf.h $(prefix)/include 97 cp zlib.h zconf.h $(includedir)
85 chmod 644 $(prefix)/include/zlib.h $(prefix)/include/zconf.h 98 chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h
86 cp $(LIBS) $(exec_prefix)/lib 99 cp $(LIBS) $(libdir)
87 cd $(exec_prefix)/lib; chmod 755 $(LIBS) 100 cd $(libdir); chmod 755 $(LIBS)
88 -@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1 101 -@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
89 cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \ 102 cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
90 rm -f $(SHAREDLIB) $(SHAREDLIB).1; \ 103 rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
91 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \ 104 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
92 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ 105 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
@@ -96,19 +109,20 @@ install: $(LIBS)
96# ldconfig is for Linux 109# ldconfig is for Linux
97 110
98uninstall: 111uninstall:
99 cd $(prefix)/include; \ 112 cd $(includedir); \
100 v=$(VER); \ 113 v=$(VER); \
101 if test -f zlib.h; then \ 114 if test -f zlib.h; then \
102 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \ 115 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \
103 rm -f zlib.h zconf.h; \ 116 rm -f zlib.h zconf.h; \
104 fi; \ 117 fi; \
105 cd $(exec_prefix)/lib; rm -f libz.a; \ 118 cd $(libdir); rm -f libz.a; \
106 if test -f $(SHAREDLIB).$$v; then \ 119 if test -f $(SHAREDLIB).$$v; then \
107 rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ 120 rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \
108 fi 121 fi
109 122
110clean: 123clean:
111 rm -f *.o *~ example minigzip libz.a libz.so* foo.gz 124 rm -f *.o *~ example minigzip libz.a libz.so* foo.gz so_locations \
125 _match.s maketree
112 126
113distclean: clean 127distclean: clean
114 128
diff --git a/Makefile.in b/Makefile.in
index c8bb6e9..3a3b116 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -22,8 +22,9 @@ CFLAGS=-O
22 22
23LDFLAGS=-L. -lz 23LDFLAGS=-L. -lz
24LDSHARED=$(CC) 24LDSHARED=$(CC)
25CPP=$(CC) -E
25 26
26VER=1.1.2 27VER=1.1.3
27LIBS=libz.a 28LIBS=libz.a
28SHAREDLIB=libz.so 29SHAREDLIB=libz.so
29 30
@@ -34,21 +35,27 @@ SHELL=/bin/sh
34 35
35prefix = /usr/local 36prefix = /usr/local
36exec_prefix = ${prefix} 37exec_prefix = ${prefix}
38libdir = ${exec_prefix}/lib
39includedir = ${prefix}/include
37 40
38OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ 41OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
39 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o 42 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
40 43
44OBJA =
45# to use the asm code: make OBJA=match.o
46
41TEST_OBJS = example.o minigzip.o 47TEST_OBJS = example.o minigzip.o
42 48
43DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ 49DISTFILES = README FAQ INDEX ChangeLog configure Make*[a-z0-9] *.[ch] *.mms \
44 algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ 50 algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
45 nt/Makefile.nt nt/zlib.dnt amiga/Make*.??? contrib/README.contrib \ 51 nt/Make*[a-z0-9] nt/zlib.dnt amiga/Make*.??? os2/M*.os2 os2/zlib.def \
46 contrib/*.txt contrib/asm386/*.asm contrib/asm386/*.c \ 52 contrib/RE*.contrib contrib/*.txt contrib/asm386/*.asm contrib/asm386/*.c \
47 contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ 53 contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/asm[56]86/*.?86 \
54 contrib/asm[56]86/*.S contrib/iostream/*.cpp \
48 contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ 55 contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \
49 contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 \ 56 contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 \
50 contrib/minizip/[CM]*[pe] contrib/minizip/*.[ch] contrib/minizip/*.[td]?? 57 contrib/minizip/[CM]*[pe] contrib/minizip/*.[ch] contrib/minizip/*.[td]?? \
51 58 contrib/delphi*/*.???
52 59
53all: example minigzip 60all: example minigzip
54 61
@@ -62,10 +69,16 @@ test: all
62 echo ' *** zlib test FAILED ***'; \ 69 echo ' *** zlib test FAILED ***'; \
63 fi 70 fi
64 71
65libz.a: $(OBJS) 72libz.a: $(OBJS) $(OBJA)
66 $(AR) $@ $(OBJS) 73 $(AR) $@ $(OBJS) $(OBJA)
67 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 74 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
68 75
76match.o: match.S
77 $(CPP) match.S > _match.s
78 $(CC) -c _match.s
79 mv _match.o match.o
80 rm -f _match.s
81
69$(SHAREDLIB).$(VER): $(OBJS) 82$(SHAREDLIB).$(VER): $(OBJS)
70 $(LDSHARED) -o $@ $(OBJS) 83 $(LDSHARED) -o $@ $(OBJS)
71 rm -f $(SHAREDLIB) $(SHAREDLIB).1 84 rm -f $(SHAREDLIB) $(SHAREDLIB).1
@@ -79,14 +92,14 @@ minigzip: minigzip.o $(LIBS)
79 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) 92 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
80 93
81install: $(LIBS) 94install: $(LIBS)
82 -@if [ ! -d $(prefix)/include ]; then mkdir $(prefix)/include; fi 95 -@if [ ! -d $(includedir) ]; then mkdir $(includedir); fi
83 -@if [ ! -d $(exec_prefix)/lib ]; then mkdir $(exec_prefix)/lib; fi 96 -@if [ ! -d $(libdir) ]; then mkdir $(libdir); fi
84 cp zlib.h zconf.h $(prefix)/include 97 cp zlib.h zconf.h $(includedir)
85 chmod 644 $(prefix)/include/zlib.h $(prefix)/include/zconf.h 98 chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h
86 cp $(LIBS) $(exec_prefix)/lib 99 cp $(LIBS) $(libdir)
87 cd $(exec_prefix)/lib; chmod 755 $(LIBS) 100 cd $(libdir); chmod 755 $(LIBS)
88 -@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1 101 -@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
89 cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \ 102 cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
90 rm -f $(SHAREDLIB) $(SHAREDLIB).1; \ 103 rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
91 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \ 104 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
92 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ 105 ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
@@ -96,19 +109,20 @@ install: $(LIBS)
96# ldconfig is for Linux 109# ldconfig is for Linux
97 110
98uninstall: 111uninstall:
99 cd $(prefix)/include; \ 112 cd $(includedir); \
100 v=$(VER); \ 113 v=$(VER); \
101 if test -f zlib.h; then \ 114 if test -f zlib.h; then \
102 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \ 115 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \
103 rm -f zlib.h zconf.h; \ 116 rm -f zlib.h zconf.h; \
104 fi; \ 117 fi; \
105 cd $(exec_prefix)/lib; rm -f libz.a; \ 118 cd $(libdir); rm -f libz.a; \
106 if test -f $(SHAREDLIB).$$v; then \ 119 if test -f $(SHAREDLIB).$$v; then \
107 rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ 120 rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \
108 fi 121 fi
109 122
110clean: 123clean:
111 rm -f *.o *~ example minigzip libz.a libz.so* foo.gz 124 rm -f *.o *~ example minigzip libz.a libz.so* foo.gz so_locations \
125 _match.s maketree
112 126
113distclean: clean 127distclean: clean
114 128
diff --git a/Makefile.riscos b/Makefile.riscos
index 0f10aa8..d97f449 100644
--- a/Makefile.riscos
+++ b/Makefile.riscos
@@ -1,8 +1,9 @@
1# Project: zlib_1_03 1# Project: zlib_1_03
2 2# Patched for zlib 1.1.2 rw@shadow.org.uk 19980430
3# test works out-of-the-box, installs `somewhere' on demand
3 4
4# Toolflags: 5# Toolflags:
5CCflags = -c -depend !Depend -IC: -g -throwback -DRISCOS -fnah 6CCflags = -c -depend !Depend -IC: -g -throwback -DRISCOS -fah
6C++flags = -c -depend !Depend -IC: -throwback 7C++flags = -c -depend !Depend -IC: -throwback
7Linkflags = -aif -c++ -o $@ 8Linkflags = -aif -c++ -o $@
8ObjAsmflags = -throwback -NoCache -depend !Depend 9ObjAsmflags = -throwback -NoCache -depend !Depend
@@ -10,37 +11,141 @@ CMHGflags =
10LibFileflags = -c -l -o $@ 11LibFileflags = -c -l -o $@
11Squeezeflags = -o $@ 12Squeezeflags = -o $@
12 13
14# change the line below to where _you_ want the library installed.
15libdest = lib:zlib
13 16
14# Final targets: 17# Final targets:
15@.zlib_lib: @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \ 18@.lib: @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \
16 @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \ 19 @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \
17 @.o.uncompress @.o.zutil 20 @.o.uncompr @.o.zutil
18 LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \ 21 LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \
19 @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \ 22 @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \
20 @.o.trees @.o.uncompress @.o.zutil 23 @.o.trees @.o.uncompr @.o.zutil
21@.test: @.tests.minigzip @.tests.example 24test: @.minigzip @.example @.lib
22 echo Please run "Test" in directory tests 25 @copy @.lib @.libc A~C~DF~L~N~P~Q~RS~TV
23@.tests.minigzip: @.o.minigzip @.zlib_lib C:o.Stubs 26 @echo running tests: hang on.
24 Link $(Linkflags) @.o.minigzip @.zlib_lib C:o.Stubs 27 @/@.minigzip -f -9 libc
25@.tests.example: @.o.example @.zlib_lib C:o.Stubs 28 @/@.minigzip -d libc-gz
26 Link $(Linkflags) @.o.example @.zlib_lib C:o.Stubs 29 @/@.minigzip -f -1 libc
30 @/@.minigzip -d libc-gz
31 @/@.minigzip -h -9 libc
32 @/@.minigzip -d libc-gz
33 @/@.minigzip -h -1 libc
34 @/@.minigzip -d libc-gz
35 @/@.minigzip -9 libc
36 @/@.minigzip -d libc-gz
37 @/@.minigzip -1 libc
38 @/@.minigzip -d libc-gz
39 @diff @.lib @.libc
40 @echo that should have reported '@.lib and @.libc identical' if you have diff.
41 @/@.example @.fred @.fred
42 @echo that will have given lots of hello!'s.
43
44@.minigzip: @.o.minigzip @.lib C:o.Stubs
45 Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs
46@.example: @.o.example @.lib C:o.Stubs
47 Link $(Linkflags) @.o.example @.lib C:o.Stubs
27 48
49install: @.lib
50 cdir $(libdest)
51 cdir $(libdest).h
52 @copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV
53 @copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV
54 @copy @.lib $(libdest).lib A~C~DF~L~N~P~Q~RS~TV
55 @echo okay, installed zlib in $(libdest)
56
57clean:; remove @.minigzip
58 remove @.example
59 remove @.libc
60 -wipe @.o.* F~r~cV
61 remove @.fred
28 62
29# User-editable dependencies: 63# User-editable dependencies:
30.c.o: 64.c.o:
31 cc $(ccflags) -o $@ $< 65 cc $(ccflags) -o $@ $<
32 66
33# Static dependencies: 67# Static dependencies:
34@.o.example: @.tests.c.example
35 cc $(ccflags) -o @.o.example @.tests.c.example
36@.o.minigzip: @.tests.c.minigzip
37 cc $(ccflags) -o @.o.minigzip @.tests.c.minigzip
38
39 68
40# Dynamic dependencies: 69# Dynamic dependencies:
41o.minigzip: tests.c.minigzip 70o.example: c.example
42o.minigzip: h.zlib
43o.minigzip: h.zconf
44o.example: tests.c.example
45o.example: h.zlib 71o.example: h.zlib
46o.example: h.zconf 72o.example: h.zconf
73o.minigzip: c.minigzip
74o.minigzip: h.zlib
75o.minigzip: h.zconf
76o.adler32: c.adler32
77o.adler32: h.zlib
78o.adler32: h.zconf
79o.compress: c.compress
80o.compress: h.zlib
81o.compress: h.zconf
82o.crc32: c.crc32
83o.crc32: h.zlib
84o.crc32: h.zconf
85o.deflate: c.deflate
86o.deflate: h.deflate
87o.deflate: h.zutil
88o.deflate: h.zlib
89o.deflate: h.zconf
90o.gzio: c.gzio
91o.gzio: h.zutil
92o.gzio: h.zlib
93o.gzio: h.zconf
94o.infblock: c.infblock
95o.infblock: h.zutil
96o.infblock: h.zlib
97o.infblock: h.zconf
98o.infblock: h.infblock
99o.infblock: h.inftrees
100o.infblock: h.infcodes
101o.infblock: h.infutil
102o.infcodes: c.infcodes
103o.infcodes: h.zutil
104o.infcodes: h.zlib
105o.infcodes: h.zconf
106o.infcodes: h.inftrees
107o.infcodes: h.infblock
108o.infcodes: h.infcodes
109o.infcodes: h.infutil
110o.infcodes: h.inffast
111o.inffast: c.inffast
112o.inffast: h.zutil
113o.inffast: h.zlib
114o.inffast: h.zconf
115o.inffast: h.inftrees
116o.inffast: h.infblock
117o.inffast: h.infcodes
118o.inffast: h.infutil
119o.inffast: h.inffast
120o.inflate: c.inflate
121o.inflate: h.zutil
122o.inflate: h.zlib
123o.inflate: h.zconf
124o.inflate: h.infblock
125o.inftrees: c.inftrees
126o.inftrees: h.zutil
127o.inftrees: h.zlib
128o.inftrees: h.zconf
129o.inftrees: h.inftrees
130o.inftrees: h.inffixed
131o.infutil: c.infutil
132o.infutil: h.zutil
133o.infutil: h.zlib
134o.infutil: h.zconf
135o.infutil: h.infblock
136o.infutil: h.inftrees
137o.infutil: h.infcodes
138o.infutil: h.infutil
139o.trees: c.trees
140o.trees: h.deflate
141o.trees: h.zutil
142o.trees: h.zlib
143o.trees: h.zconf
144o.trees: h.trees
145o.uncompr: c.uncompr
146o.uncompr: h.zlib
147o.uncompr: h.zconf
148o.zutil: c.zutil
149o.zutil: h.zutil
150o.zutil: h.zlib
151o.zutil: h.zconf
diff --git a/README b/README
index 2471d5c..8ff4587 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
1zlib 1.1.2 is a general purpose data compression library. All the code 1zlib 1.1.3 is a general purpose data compression library. All the code
2is thread safe. The data format used by the zlib library 2is thread safe. The data format used by the zlib library
3is described by RFCs (Request for Comments) 1950 to 1952 in the files 3is described by RFCs (Request for Comments) 1950 to 1952 in the files
4ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate 4ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
@@ -14,35 +14,41 @@ except example.c and minigzip.c.
14 14
15To compile all files and run the test program, follow the instructions 15To compile all files and run the test program, follow the instructions
16given at the top of Makefile. In short "make test; make install" 16given at the top of Makefile. In short "make test; make install"
17should work for most machines. For MSDOS, use one of the special 17should work for most machines. For Unix: "configure; make test; make install"
18makefiles such as Makefile.msc; for VMS, use Make_vms.com or descrip.mms. 18For MSDOS, use one of the special makefiles such as Makefile.msc.
19For VMS, use Make_vms.com or descrip.mms.
19 20
20Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov> or, 21Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov>, or to
21if this fails, to the addresses given below in the Copyright section. 22Gilles Vollant <info@winimage.com> for the Windows DLL version.
22The zlib home page is http://www.cdrom.com/pub/infozip/zlib/ 23The zlib home page is http://www.cdrom.com/pub/infozip/zlib/
23The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/ 24The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/
25Before reporting a problem, please check those sites to verify that
26you have the latest version of zlib; otherwise get the latest version and
27check whether the problem still exists or not.
28
24Mark Nelson <markn@tiny.com> wrote an article about zlib for the Jan. 1997 29Mark Nelson <markn@tiny.com> wrote an article about zlib for the Jan. 1997
25issue of Dr. Dobb's Journal; a copy of the article is available in 30issue of Dr. Dobb's Journal; a copy of the article is available in
26http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm 31http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm
27 32
28The changes made in version 1.1.2 are documented in the file ChangeLog. 33The changes made in version 1.1.3 are documented in the file ChangeLog.
29The main changes since 1.1.1 are: 34The main changes since 1.1.2 are:
30 35
31- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) 36- fix "an inflate input buffer bug that shows up on rare but persistent
32 See http://www.winimage.com/zLibDll/unzip.html 37 occasions" (Mark)
33- preinitialize the inflate tables for fixed codes, to make the code 38- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
34 completely thread safe (Mark) 39- fix gzseek(..., SEEK_SET) in write mode
35- some simplifications and slight speed-up to the inflate code (Mark) 40- fix crc check after a gzeek (Frank Faubert)
36- fix gzeof on non-compressed files (Allan Schrum) 41- fix miniunzip when the last entry in a zip file is itself a zip file
37- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) 42 (J Lillge)
38- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) 43- add contrib/asm586 and contrib/asm686 (Brian Raiter)
39- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) 44 See http://www.muppetlabs.com/~breadbox/software/assembly.html
40- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) 45- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
41- do not wrap extern "C" around system includes (Tom Lane) 46- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
42- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) 47- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
43- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) 48- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
44- allow "configure --prefix $HOME" (Tim Mooney) 49- added a FAQ file
45 50
51plus many changes for portability.
46 52
47Unsupported third party contributions are provided in directory "contrib". 53Unsupported third party contributions are provided in directory "contrib".
48 54
@@ -55,8 +61,8 @@ is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
55ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib* 61ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
56 62
57A Python interface to zlib written by A.M. Kuchling <amk@magnet.com> 63A Python interface to zlib written by A.M. Kuchling <amk@magnet.com>
58is available from the Python Software Association sites, such as: 64is available in Python 1.5 and later versions, see
59ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz 65http://www.python.org/doc/lib/module-zlib.html
60 66
61A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com> 67A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com>
62is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html 68is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html
@@ -77,8 +83,8 @@ Notes for some targets:
77 83
78 From Visual Basic, you can call the DLL functions which do not take 84 From Visual Basic, you can call the DLL functions which do not take
79 a structure as argument: compress, uncompress and all gz* functions. 85 a structure as argument: compress, uncompress and all gz* functions.
80 See contrib/visual-basic.txt for more information. 86 See contrib/visual-basic.txt for more information, or get
81 I don't know how to handle structures in Visual Basic, sorry. 87 http://www.tcfb.com/dowseware/cmp-z-it.zip
82 88
83- For 64-bit Irix, deflate.c must be compiled without any optimization. 89- For 64-bit Irix, deflate.c must be compiled without any optimization.
84 With -O, one libpng test fails. The test works in 32 bit mode (with 90 With -O, one libpng test fails. The test works in 32 bit mode (with
@@ -93,15 +99,14 @@ Notes for some targets:
93- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works 99- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works
94 with other compilers. Use "make test" to check your compiler. 100 with other compilers. Use "make test" to check your compiler.
95 101
96- For shared memory multiprocessors, the decompression code assumes that
97 writes to pointers are atomic. Also the functions zalloc and zfree passed
98 to deflateInit must be multi-threaded in this case.
99
100- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. 102- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
101 103
102- For Turbo C the small model is supported only with reduced performance to 104- For Turbo C the small model is supported only with reduced performance to
103 avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 105 avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
104 106
107- For PalmOs, see http://www.cs.uit.no/~perm/PASTA/pilot/software.html
108 Per Harald Myrvang <perm@stud.cs.uit.no>
109
105 110
106Acknowledgments: 111Acknowledgments:
107 112
diff --git a/configure b/configure
index d188e6f..e894235 100755
--- a/configure
+++ b/configure
@@ -24,18 +24,34 @@ VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
24AR=${AR-"ar rc"} 24AR=${AR-"ar rc"}
25RANLIB=${RANLIB-"ranlib"} 25RANLIB=${RANLIB-"ranlib"}
26prefix=${prefix-/usr/local} 26prefix=${prefix-/usr/local}
27exec_prefix=${exec_prefix-'${prefix}'}
28libdir=${libdir-'${exec_prefix}/lib'}
29includedir=${includedir-'${prefix}/include'}
27shared_ext='.so' 30shared_ext='.so'
28shared=0 31shared=0
29gcc=0 32gcc=0
30old_cc="$CC" 33old_cc="$CC"
31old_cflags="$CFLAGS" 34old_cflags="$CFLAGS"
32 35
36while test $# -ge 1
37do
33case "$1" in 38case "$1" in
34 -h* | --h*) echo 'syntax: configure [ --shared ] [--prefix PREFIX]'; exit 0;; 39 -h* | --h*)
35 -p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 40 echo 'usage:'
36 -p* | --p*) prefix="$2"; shift; shift;; 41 echo ' configure [--shared] [--prefix=PREFIX] [--exec_prefix=EXPREFIX]'
37 -s* | --s*) shared=1; shift;; 42 echo ' [--libdir=LIBDIR] [--includedir=INCLUDEDIR]'
38esac 43 exit 0;;
44 -p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
45 -e*=* | --e*=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
46 -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
47 -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;;
48 -p* | --p*) prefix="$2"; shift; shift;;
49 -e* | --e*) exec_prefix="$2"; shift; shift;;
50 -l* | --l*) libdir="$2"; shift; shift;;
51 -i* | --i*) includedir="$2"; shift; shift;;
52 -s* | --s*) shared=1; shift;;
53 esac
54done
39 55
40test=ztest$$ 56test=ztest$$
41cat > $test.c <<EOF 57cat > $test.c <<EOF
@@ -46,6 +62,7 @@ EOF
46test -z "$CC" && echo Checking for gcc... 62test -z "$CC" && echo Checking for gcc...
47cc=${CC-gcc} 63cc=${CC-gcc}
48cflags=${CFLAGS-"-O3"} 64cflags=${CFLAGS-"-O3"}
65# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
49case "$cc" in 66case "$cc" in
50 *gcc*) gcc=1;; 67 *gcc*) gcc=1;;
51esac 68esac
@@ -71,7 +88,10 @@ else
71 IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} 88 IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
72 CFLAGS=${CFLAGS-"-ansi -O2"} 89 CFLAGS=${CFLAGS-"-ansi -O2"}
73 LDSHARED=${LDSHARED-"cc -shared"};; 90 LDSHARED=${LDSHARED-"cc -shared"};;
74 OSF1) SFLAGS=${CFLAGS-"-O -std1"} 91 OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
92 CFLAGS=${CFLAGS-"-O -std1"}
93 LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,$SHAREDLIB -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};;
94 OSF1*) SFLAGS=${CFLAGS-"-O -std1"}
75 CFLAGS=${CFLAGS-"-O -std1"} 95 CFLAGS=${CFLAGS-"-O -std1"}
76 LDSHARED=${LDSHARED-"cc -shared"};; 96 LDSHARED=${LDSHARED-"cc -shared"};;
77 QNX*) SFLAGS=${CFLAGS-"-4 -O"} 97 QNX*) SFLAGS=${CFLAGS-"-4 -O"}
@@ -124,11 +144,25 @@ if test $shared -eq 0; then
124 echo Building static library $LIBS version $VER with $CC. 144 echo Building static library $LIBS version $VER with $CC.
125fi 145fi
126 146
127if test -f /usr/include/unistd.h; then 147cat > $test.c <<EOF
148#include <unistd.h>
149int main() { return 0; }
150EOF
151if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
128 CFLAGS="$CFLAGS -DHAVE_UNISTD_H" 152 CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
153 echo "Checking for unistd.h... Yes."
154else
155 echo "Checking for unistd.h... No."
129fi 156fi
130 157
131if test ! -f /usr/include/errno.h; then 158cat > $test.c <<EOF
159#include <errno.h>
160int main() { return 0; }
161EOF
162if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
163 echo "Checking for errno.h... Yes."
164else
165 echo "Checking for errno.h... No."
132 CFLAGS="$CFLAGS -DNO_ERRNO_H" 166 CFLAGS="$CFLAGS -DNO_ERRNO_H"
133fi 167fi
134 168
@@ -147,12 +181,24 @@ else
147 echo Checking for mmap support... No. 181 echo Checking for mmap support... No.
148fi 182fi
149 183
184CPP=${CPP-"$CC -E"}
185case $CFLAGS in
186 *ASMV*)
187 if test "`nm $test.o | grep _hello`" = ""; then
188 CPP="$CPP -DNO_UNDERLINE"
189 echo Checking for underline in external names... No.
190 else
191 echo Checking for underline in external names... Yes.
192 fi;;
193esac
194
150rm -f $test.[co] $test$shared_ext 195rm -f $test.[co] $test$shared_ext
151 196
152# udpate Makefile 197# udpate Makefile
153sed < Makefile.in " 198sed < Makefile.in "
154/^CC *=/s%=.*%=$CC% 199/^CC *=/s%=.*%=$CC%
155/^CFLAGS *=/s%=.*%=$CFLAGS% 200/^CFLAGS *=/s%=.*%=$CFLAGS%
201/^CPP *=/s%=.*%=$CPP%
156/^LDSHARED *=/s%=.*%=$LDSHARED% 202/^LDSHARED *=/s%=.*%=$LDSHARED%
157/^LIBS *=/s%=.*%=$LIBS% 203/^LIBS *=/s%=.*%=$LIBS%
158/^SHAREDLIB *=/s%=.*%=$SHAREDLIB% 204/^SHAREDLIB *=/s%=.*%=$SHAREDLIB%
@@ -160,4 +206,7 @@ sed < Makefile.in "
160/^RANLIB *=/s%=.*%=$RANLIB% 206/^RANLIB *=/s%=.*%=$RANLIB%
161/^VER *=/s%=.*%=$VER% 207/^VER *=/s%=.*%=$VER%
162/^prefix *=/s%=.*%=$prefix% 208/^prefix *=/s%=.*%=$prefix%
209/^exec_prefix *=/s%=.*%=$exec_prefix%
210/^libdir *=/s%=.*%=$libdir%
211/^includedir *=/s%=.*%=$includedir%
163" > Makefile 212" > Makefile
diff --git a/contrib/README.contrib b/contrib/README.contrib
index dfe9031..7ad191c 100644
--- a/contrib/README.contrib
+++ b/contrib/README.contrib
@@ -7,6 +7,16 @@ for help about these, not the zlib authors. Thanks.
7asm386/ by Gilles Vollant <info@winimage.com> 7asm386/ by Gilles Vollant <info@winimage.com>
8 386 asm code replacing longest_match(), for Visual C++ 4.2 and ML 6.11c 8 386 asm code replacing longest_match(), for Visual C++ 4.2 and ML 6.11c
9 9
10asm586/ and asm686/ by Brian Raiter <breadbox@muppetlabs.com>
11 asm code for Pentium and Pentium Pro
12 See http://www.muppetlabs.com/~breadbox/software/assembly.html
13
14delphi/ by Bob Dellaca <bobdl@xtra.co.nz>
15 Support for Delphi
16
17delphi2/ by Davide Moretti <dave@rimini.com>
18 Another support for C++Builder and Delphi
19
10minizip/ by Gilles Vollant <info@winimage.com> 20minizip/ by Gilles Vollant <info@winimage.com>
11 Mini zip and unzip based on zlib 21 Mini zip and unzip based on zlib
12 See http://www.winimage.com/zLibDll/unzip.html 22 See http://www.winimage.com/zLibDll/unzip.html
diff --git a/contrib/asm586/README.586 b/contrib/asm586/README.586
new file mode 100644
index 0000000..6bb78f3
--- /dev/null
+++ b/contrib/asm586/README.586
@@ -0,0 +1,43 @@
1This is a patched version of zlib modified to use
2Pentium-optimized assembly code in the deflation algorithm. The files
3changed/added by this patch are:
4
5README.586
6match.S
7
8The effectiveness of these modifications is a bit marginal, as the the
9program's bottleneck seems to be mostly L1-cache contention, for which
10there is no real way to work around without rewriting the basic
11algorithm. The speedup on average is around 5-10% (which is generally
12less than the amount of variance between subsequent executions).
13However, when used at level 9 compression, the cache contention can
14drop enough for the assembly version to achieve 10-20% speedup (and
15sometimes more, depending on the amount of overall redundancy in the
16files). Even here, though, cache contention can still be the limiting
17factor, depending on the nature of the program using the zlib library.
18This may also mean that better improvements will be seen on a Pentium
19with MMX, which suffers much less from L1-cache contention, but I have
20not yet verified this.
21
22Note that this code has been tailored for the Pentium in particular,
23and will not perform well on the Pentium Pro (due to the use of a
24partial register in the inner loop).
25
26If you are using an assembler other than GNU as, you will have to
27translate match.S to use your assembler's syntax. (Have fun.)
28
29Brian Raiter
30breadbox@muppetlabs.com
31April, 1998
32
33
34Added for zlib 1.1.3:
35
36The patches come from
37http://www.muppetlabs.com/~breadbox/software/assembly.html
38
39To compile zlib with this asm file, copy match.S to the zlib directory
40then do:
41
42CFLAGS="-O3 -DASMV" ./configure
43make OBJA=match.o
diff --git a/contrib/asm586/match.S b/contrib/asm586/match.S
new file mode 100644
index 0000000..8f16140
--- /dev/null
+++ b/contrib/asm586/match.S
@@ -0,0 +1,354 @@
1/* match.s -- Pentium-optimized version of longest_match()
2 * Written for zlib 1.1.2
3 * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
4 *
5 * This is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License.
7 */
8
9#ifndef NO_UNDERLINE
10#define match_init _match_init
11#define longest_match _longest_match
12#endif
13
14#define MAX_MATCH (258)
15#define MIN_MATCH (3)
16#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
17#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
18
19/* stack frame offsets */
20
21#define wmask 0 /* local copy of s->wmask */
22#define window 4 /* local copy of s->window */
23#define windowbestlen 8 /* s->window + bestlen */
24#define chainlenscanend 12 /* high word: current chain len */
25 /* low word: last bytes sought */
26#define scanstart 16 /* first two bytes of string */
27#define scanalign 20 /* dword-misalignment of string */
28#define nicematch 24 /* a good enough match size */
29#define bestlen 28 /* size of best match so far */
30#define scan 32 /* ptr to string wanting match */
31
32#define LocalVarsSize (36)
33/* saved ebx 36 */
34/* saved edi 40 */
35/* saved esi 44 */
36/* saved ebp 48 */
37/* return address 52 */
38#define deflatestate 56 /* the function arguments */
39#define curmatch 60
40
41/* Offsets for fields in the deflate_state structure. These numbers
42 * are calculated from the definition of deflate_state, with the
43 * assumption that the compiler will dword-align the fields. (Thus,
44 * changing the definition of deflate_state could easily cause this
45 * program to crash horribly, without so much as a warning at
46 * compile time. Sigh.)
47 */
48#define dsWSize 36
49#define dsWMask 44
50#define dsWindow 48
51#define dsPrev 56
52#define dsMatchLen 88
53#define dsPrevMatch 92
54#define dsStrStart 100
55#define dsMatchStart 104
56#define dsLookahead 108
57#define dsPrevLen 112
58#define dsMaxChainLen 116
59#define dsGoodMatch 132
60#define dsNiceMatch 136
61
62
63.file "match.S"
64
65.globl match_init, longest_match
66
67.text
68
69/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
70
71longest_match:
72
73/* Save registers that the compiler may be using, and adjust %esp to */
74/* make room for our stack frame. */
75
76 pushl %ebp
77 pushl %edi
78 pushl %esi
79 pushl %ebx
80 subl $LocalVarsSize, %esp
81
82/* Retrieve the function arguments. %ecx will hold cur_match */
83/* throughout the entire function. %edx will hold the pointer to the */
84/* deflate_state structure during the function's setup (before */
85/* entering the main loop). */
86
87 movl deflatestate(%esp), %edx
88 movl curmatch(%esp), %ecx
89
90/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
91
92 movl dsNiceMatch(%edx), %eax
93 movl dsLookahead(%edx), %ebx
94 cmpl %eax, %ebx
95 jl LookaheadLess
96 movl %eax, %ebx
97LookaheadLess: movl %ebx, nicematch(%esp)
98
99/* register Bytef *scan = s->window + s->strstart; */
100
101 movl dsWindow(%edx), %esi
102 movl %esi, window(%esp)
103 movl dsStrStart(%edx), %ebp
104 lea (%esi,%ebp), %edi
105 movl %edi, scan(%esp)
106
107/* Determine how many bytes the scan ptr is off from being */
108/* dword-aligned. */
109
110 movl %edi, %eax
111 negl %eax
112 andl $3, %eax
113 movl %eax, scanalign(%esp)
114
115/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
116/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
117
118 movl dsWSize(%edx), %eax
119 subl $MIN_LOOKAHEAD, %eax
120 subl %eax, %ebp
121 jg LimitPositive
122 xorl %ebp, %ebp
123LimitPositive:
124
125/* unsigned chain_length = s->max_chain_length; */
126/* if (s->prev_length >= s->good_match) { */
127/* chain_length >>= 2; */
128/* } */
129
130 movl dsPrevLen(%edx), %eax
131 movl dsGoodMatch(%edx), %ebx
132 cmpl %ebx, %eax
133 movl dsMaxChainLen(%edx), %ebx
134 jl LastMatchGood
135 shrl $2, %ebx
136LastMatchGood:
137
138/* chainlen is decremented once beforehand so that the function can */
139/* use the sign flag instead of the zero flag for the exit test. */
140/* It is then shifted into the high word, to make room for the scanend */
141/* scanend value, which it will always accompany. */
142
143 decl %ebx
144 shll $16, %ebx
145
146/* int best_len = s->prev_length; */
147
148 movl dsPrevLen(%edx), %eax
149 movl %eax, bestlen(%esp)
150
151/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
152
153 addl %eax, %esi
154 movl %esi, windowbestlen(%esp)
155
156/* register ush scan_start = *(ushf*)scan; */
157/* register ush scan_end = *(ushf*)(scan+best_len-1); */
158
159 movw (%edi), %bx
160 movw %bx, scanstart(%esp)
161 movw -1(%edi,%eax), %bx
162 movl %ebx, chainlenscanend(%esp)
163
164/* Posf *prev = s->prev; */
165/* uInt wmask = s->w_mask; */
166
167 movl dsPrev(%edx), %edi
168 movl dsWMask(%edx), %edx
169 mov %edx, wmask(%esp)
170
171/* Jump into the main loop. */
172
173 jmp LoopEntry
174
175.balign 16
176
177/* do {
178 * match = s->window + cur_match;
179 * if (*(ushf*)(match+best_len-1) != scan_end ||
180 * *(ushf*)match != scan_start) continue;
181 * [...]
182 * } while ((cur_match = prev[cur_match & wmask]) > limit
183 * && --chain_length != 0);
184 *
185 * Here is the inner loop of the function. The function will spend the
186 * majority of its time in this loop, and majority of that time will
187 * be spent in the first ten instructions.
188 *
189 * Within this loop:
190 * %ebx = chainlenscanend - i.e., ((chainlen << 16) | scanend)
191 * %ecx = curmatch
192 * %edx = curmatch & wmask
193 * %esi = windowbestlen - i.e., (window + bestlen)
194 * %edi = prev
195 * %ebp = limit
196 *
197 * Two optimization notes on the choice of instructions:
198 *
199 * The first instruction uses a 16-bit address, which costs an extra,
200 * unpairable cycle. This is cheaper than doing a 32-bit access and
201 * zeroing the high word, due to the 3-cycle misalignment penalty which
202 * would occur half the time. This also turns out to be cheaper than
203 * doing two separate 8-bit accesses, as the memory is so rarely in the
204 * L1 cache.
205 *
206 * The window buffer, however, apparently spends a lot of time in the
207 * cache, and so it is faster to retrieve the word at the end of the
208 * match string with two 8-bit loads. The instructions that test the
209 * word at the beginning of the match string, however, are executed
210 * much less frequently, and there it was cheaper to use 16-bit
211 * instructions, which avoided the necessity of saving off and
212 * subsequently reloading one of the other registers.
213 */
214LookupLoop:
215 /* 1 U & V */
216 movw (%edi,%edx,2), %cx /* 2 U pipe */
217 movl wmask(%esp), %edx /* 2 V pipe */
218 cmpl %ebp, %ecx /* 3 U pipe */
219 jbe LeaveNow /* 3 V pipe */
220 subl $0x00010000, %ebx /* 4 U pipe */
221 js LeaveNow /* 4 V pipe */
222LoopEntry: movb -1(%esi,%ecx), %al /* 5 U pipe */
223 andl %ecx, %edx /* 5 V pipe */
224 cmpb %bl, %al /* 6 U pipe */
225 jnz LookupLoop /* 6 V pipe */
226 movb (%esi,%ecx), %ah
227 cmpb %bh, %ah
228 jnz LookupLoop
229 movl window(%esp), %eax
230 movw (%eax,%ecx), %ax
231 cmpw scanstart(%esp), %ax
232 jnz LookupLoop
233
234/* Store the current value of chainlen. */
235
236 movl %ebx, chainlenscanend(%esp)
237
238/* Point %edi to the string under scrutiny, and %esi to the string we */
239/* are hoping to match it up with. In actuality, %esi and %edi are */
240/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
241/* initialized to -(MAX_MATCH_8 - scanalign). */
242
243 movl window(%esp), %esi
244 movl scan(%esp), %edi
245 addl %ecx, %esi
246 movl scanalign(%esp), %eax
247 movl $(-MAX_MATCH_8), %edx
248 lea MAX_MATCH_8(%edi,%eax), %edi
249 lea MAX_MATCH_8(%esi,%eax), %esi
250
251/* Test the strings for equality, 8 bytes at a time. At the end,
252 * adjust %edx so that it is offset to the exact byte that mismatched.
253 *
254 * We already know at this point that the first three bytes of the
255 * strings match each other, and they can be safely passed over before
256 * starting the compare loop. So what this code does is skip over 0-3
257 * bytes, as much as necessary in order to dword-align the %edi
258 * pointer. (%esi will still be misaligned three times out of four.)
259 *
260 * It should be confessed that this loop usually does not represent
261 * much of the total running time. Replacing it with a more
262 * straightforward "rep cmpsb" would not drastically degrade
263 * performance.
264 */
265LoopCmps:
266 movl (%esi,%edx), %eax
267 movl (%edi,%edx), %ebx
268 xorl %ebx, %eax
269 jnz LeaveLoopCmps
270 movl 4(%esi,%edx), %eax
271 movl 4(%edi,%edx), %ebx
272 xorl %ebx, %eax
273 jnz LeaveLoopCmps4
274 addl $8, %edx
275 jnz LoopCmps
276 jmp LenMaximum
277LeaveLoopCmps4: addl $4, %edx
278LeaveLoopCmps: testl $0x0000FFFF, %eax
279 jnz LenLower
280 addl $2, %edx
281 shrl $16, %eax
282LenLower: subb $1, %al
283 adcl $0, %edx
284
285/* Calculate the length of the match. If it is longer than MAX_MATCH, */
286/* then automatically accept it as the best possible match and leave. */
287
288 lea (%edi,%edx), %eax
289 movl scan(%esp), %edi
290 subl %edi, %eax
291 cmpl $MAX_MATCH, %eax
292 jge LenMaximum
293
294/* If the length of the match is not longer than the best match we */
295/* have so far, then forget it and return to the lookup loop. */
296
297 movl deflatestate(%esp), %edx
298 movl bestlen(%esp), %ebx
299 cmpl %ebx, %eax
300 jg LongerMatch
301 movl chainlenscanend(%esp), %ebx
302 movl windowbestlen(%esp), %esi
303 movl dsPrev(%edx), %edi
304 movl wmask(%esp), %edx
305 andl %ecx, %edx
306 jmp LookupLoop
307
308/* s->match_start = cur_match; */
309/* best_len = len; */
310/* if (len >= nice_match) break; */
311/* scan_end = *(ushf*)(scan+best_len-1); */
312
313LongerMatch: movl nicematch(%esp), %ebx
314 movl %eax, bestlen(%esp)
315 movl %ecx, dsMatchStart(%edx)
316 cmpl %ebx, %eax
317 jge LeaveNow
318 movl window(%esp), %esi
319 addl %eax, %esi
320 movl %esi, windowbestlen(%esp)
321 movl chainlenscanend(%esp), %ebx
322 movw -1(%edi,%eax), %bx
323 movl dsPrev(%edx), %edi
324 movl %ebx, chainlenscanend(%esp)
325 movl wmask(%esp), %edx
326 andl %ecx, %edx
327 jmp LookupLoop
328
329/* Accept the current string, with the maximum possible length. */
330
331LenMaximum: movl deflatestate(%esp), %edx
332 movl $MAX_MATCH, bestlen(%esp)
333 movl %ecx, dsMatchStart(%edx)
334
335/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
336/* return s->lookahead; */
337
338LeaveNow:
339 movl deflatestate(%esp), %edx
340 movl bestlen(%esp), %ebx
341 movl dsLookahead(%edx), %eax
342 cmpl %eax, %ebx
343 jg LookaheadRet
344 movl %ebx, %eax
345LookaheadRet:
346
347/* Restore the stack and return from whence we came. */
348
349 addl $LocalVarsSize, %esp
350 popl %ebx
351 popl %esi
352 popl %edi
353 popl %ebp
354match_init: ret
diff --git a/contrib/asm686/README.686 b/contrib/asm686/README.686
new file mode 100644
index 0000000..a593f23
--- /dev/null
+++ b/contrib/asm686/README.686
@@ -0,0 +1,34 @@
1This is a patched version of zlib, modified to use
2Pentium-Pro-optimized assembly code in the deflation algorithm. The
3files changed/added by this patch are:
4
5README.686
6match.S
7
8The speedup that this patch provides varies, depending on whether the
9compiler used to build the original version of zlib falls afoul of the
10PPro's speed traps. My own tests show a speedup of around 10-20% at
11the default compression level, and 20-30% using -9, against a version
12compiled using gcc 2.7.2.3. Your mileage may vary.
13
14Note that this code has been tailored for the PPro/PII in particular,
15and will not perform particuarly well on a Pentium.
16
17If you are using an assembler other than GNU as, you will have to
18translate match.S to use your assembler's syntax. (Have fun.)
19
20Brian Raiter
21breadbox@muppetlabs.com
22April, 1998
23
24
25Added for zlib 1.1.3:
26
27The patches come from
28http://www.muppetlabs.com/~breadbox/software/assembly.html
29
30To compile zlib with this asm file, copy match.S to the zlib directory
31then do:
32
33CFLAGS="-O3 -DASMV" ./configure
34make OBJA=match.o
diff --git a/contrib/asm686/match.S b/contrib/asm686/match.S
new file mode 100644
index 0000000..8e86c33
--- /dev/null
+++ b/contrib/asm686/match.S
@@ -0,0 +1,327 @@
1/* match.s -- Pentium-Pro-optimized version of longest_match()
2 * Written for zlib 1.1.2
3 * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
4 *
5 * This is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License.
7 */
8
9#ifndef NO_UNDERLINE
10#define match_init _match_init
11#define longest_match _longest_match
12#endif
13
14#define MAX_MATCH (258)
15#define MIN_MATCH (3)
16#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
17#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
18
19/* stack frame offsets */
20
21#define chainlenwmask 0 /* high word: current chain len */
22 /* low word: s->wmask */
23#define window 4 /* local copy of s->window */
24#define windowbestlen 8 /* s->window + bestlen */
25#define scanstart 16 /* first two bytes of string */
26#define scanend 12 /* last two bytes of string */
27#define scanalign 20 /* dword-misalignment of string */
28#define nicematch 24 /* a good enough match size */
29#define bestlen 28 /* size of best match so far */
30#define scan 32 /* ptr to string wanting match */
31
32#define LocalVarsSize (36)
33/* saved ebx 36 */
34/* saved edi 40 */
35/* saved esi 44 */
36/* saved ebp 48 */
37/* return address 52 */
38#define deflatestate 56 /* the function arguments */
39#define curmatch 60
40
41/* Offsets for fields in the deflate_state structure. These numbers
42 * are calculated from the definition of deflate_state, with the
43 * assumption that the compiler will dword-align the fields. (Thus,
44 * changing the definition of deflate_state could easily cause this
45 * program to crash horribly, without so much as a warning at
46 * compile time. Sigh.)
47 */
48#define dsWSize 36
49#define dsWMask 44
50#define dsWindow 48
51#define dsPrev 56
52#define dsMatchLen 88
53#define dsPrevMatch 92
54#define dsStrStart 100
55#define dsMatchStart 104
56#define dsLookahead 108
57#define dsPrevLen 112
58#define dsMaxChainLen 116
59#define dsGoodMatch 132
60#define dsNiceMatch 136
61
62
63.file "match.S"
64
65.globl match_init, longest_match
66
67.text
68
69/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
70
71longest_match:
72
73/* Save registers that the compiler may be using, and adjust %esp to */
74/* make room for our stack frame. */
75
76 pushl %ebp
77 pushl %edi
78 pushl %esi
79 pushl %ebx
80 subl $LocalVarsSize, %esp
81
82/* Retrieve the function arguments. %ecx will hold cur_match */
83/* throughout the entire function. %edx will hold the pointer to the */
84/* deflate_state structure during the function's setup (before */
85/* entering the main loop). */
86
87 movl deflatestate(%esp), %edx
88 movl curmatch(%esp), %ecx
89
90/* uInt wmask = s->w_mask; */
91/* unsigned chain_length = s->max_chain_length; */
92/* if (s->prev_length >= s->good_match) { */
93/* chain_length >>= 2; */
94/* } */
95
96 movl dsPrevLen(%edx), %eax
97 movl dsGoodMatch(%edx), %ebx
98 cmpl %ebx, %eax
99 movl dsWMask(%edx), %eax
100 movl dsMaxChainLen(%edx), %ebx
101 jl LastMatchGood
102 shrl $2, %ebx
103LastMatchGood:
104
105/* chainlen is decremented once beforehand so that the function can */
106/* use the sign flag instead of the zero flag for the exit test. */
107/* It is then shifted into the high word, to make room for the wmask */
108/* value, which it will always accompany. */
109
110 decl %ebx
111 shll $16, %ebx
112 orl %eax, %ebx
113 movl %ebx, chainlenwmask(%esp)
114
115/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
116
117 movl dsNiceMatch(%edx), %eax
118 movl dsLookahead(%edx), %ebx
119 cmpl %eax, %ebx
120 jl LookaheadLess
121 movl %eax, %ebx
122LookaheadLess: movl %ebx, nicematch(%esp)
123
124/* register Bytef *scan = s->window + s->strstart; */
125
126 movl dsWindow(%edx), %esi
127 movl %esi, window(%esp)
128 movl dsStrStart(%edx), %ebp
129 lea (%esi,%ebp), %edi
130 movl %edi, scan(%esp)
131
132/* Determine how many bytes the scan ptr is off from being */
133/* dword-aligned. */
134
135 movl %edi, %eax
136 negl %eax
137 andl $3, %eax
138 movl %eax, scanalign(%esp)
139
140/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
141/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
142
143 movl dsWSize(%edx), %eax
144 subl $MIN_LOOKAHEAD, %eax
145 subl %eax, %ebp
146 jg LimitPositive
147 xorl %ebp, %ebp
148LimitPositive:
149
150/* int best_len = s->prev_length; */
151
152 movl dsPrevLen(%edx), %eax
153 movl %eax, bestlen(%esp)
154
155/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
156
157 addl %eax, %esi
158 movl %esi, windowbestlen(%esp)
159
160/* register ush scan_start = *(ushf*)scan; */
161/* register ush scan_end = *(ushf*)(scan+best_len-1); */
162/* Posf *prev = s->prev; */
163
164 movzwl (%edi), %ebx
165 movl %ebx, scanstart(%esp)
166 movzwl -1(%edi,%eax), %ebx
167 movl %ebx, scanend(%esp)
168 movl dsPrev(%edx), %edi
169
170/* Jump into the main loop. */
171
172 movl chainlenwmask(%esp), %edx
173 jmp LoopEntry
174
175.balign 16
176
177/* do {
178 * match = s->window + cur_match;
179 * if (*(ushf*)(match+best_len-1) != scan_end ||
180 * *(ushf*)match != scan_start) continue;
181 * [...]
182 * } while ((cur_match = prev[cur_match & wmask]) > limit
183 * && --chain_length != 0);
184 *
185 * Here is the inner loop of the function. The function will spend the
186 * majority of its time in this loop, and majority of that time will
187 * be spent in the first ten instructions.
188 *
189 * Within this loop:
190 * %ebx = scanend
191 * %ecx = curmatch
192 * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
193 * %esi = windowbestlen - i.e., (window + bestlen)
194 * %edi = prev
195 * %ebp = limit
196 */
197LookupLoop:
198 andl %edx, %ecx
199 movzwl (%edi,%ecx,2), %ecx
200 cmpl %ebp, %ecx
201 jbe LeaveNow
202 subl $0x00010000, %edx
203 js LeaveNow
204LoopEntry: movzwl -1(%esi,%ecx), %eax
205 cmpl %ebx, %eax
206 jnz LookupLoop
207 movl window(%esp), %eax
208 movzwl (%eax,%ecx), %eax
209 cmpl scanstart(%esp), %eax
210 jnz LookupLoop
211
212/* Store the current value of chainlen. */
213
214 movl %edx, chainlenwmask(%esp)
215
216/* Point %edi to the string under scrutiny, and %esi to the string we */
217/* are hoping to match it up with. In actuality, %esi and %edi are */
218/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
219/* initialized to -(MAX_MATCH_8 - scanalign). */
220
221 movl window(%esp), %esi
222 movl scan(%esp), %edi
223 addl %ecx, %esi
224 movl scanalign(%esp), %eax
225 movl $(-MAX_MATCH_8), %edx
226 lea MAX_MATCH_8(%edi,%eax), %edi
227 lea MAX_MATCH_8(%esi,%eax), %esi
228
229/* Test the strings for equality, 8 bytes at a time. At the end,
230 * adjust %edx so that it is offset to the exact byte that mismatched.
231 *
232 * We already know at this point that the first three bytes of the
233 * strings match each other, and they can be safely passed over before
234 * starting the compare loop. So what this code does is skip over 0-3
235 * bytes, as much as necessary in order to dword-align the %edi
236 * pointer. (%esi will still be misaligned three times out of four.)
237 *
238 * It should be confessed that this loop usually does not represent
239 * much of the total running time. Replacing it with a more
240 * straightforward "rep cmpsb" would not drastically degrade
241 * performance.
242 */
243LoopCmps:
244 movl (%esi,%edx), %eax
245 xorl (%edi,%edx), %eax
246 jnz LeaveLoopCmps
247 movl 4(%esi,%edx), %eax
248 xorl 4(%edi,%edx), %eax
249 jnz LeaveLoopCmps4
250 addl $8, %edx
251 jnz LoopCmps
252 jmp LenMaximum
253LeaveLoopCmps4: addl $4, %edx
254LeaveLoopCmps: testl $0x0000FFFF, %eax
255 jnz LenLower
256 addl $2, %edx
257 shrl $16, %eax
258LenLower: subb $1, %al
259 adcl $0, %edx
260
261/* Calculate the length of the match. If it is longer than MAX_MATCH, */
262/* then automatically accept it as the best possible match and leave. */
263
264 lea (%edi,%edx), %eax
265 movl scan(%esp), %edi
266 subl %edi, %eax
267 cmpl $MAX_MATCH, %eax
268 jge LenMaximum
269
270/* If the length of the match is not longer than the best match we */
271/* have so far, then forget it and return to the lookup loop. */
272
273 movl deflatestate(%esp), %edx
274 movl bestlen(%esp), %ebx
275 cmpl %ebx, %eax
276 jg LongerMatch
277 movl windowbestlen(%esp), %esi
278 movl dsPrev(%edx), %edi
279 movl scanend(%esp), %ebx
280 movl chainlenwmask(%esp), %edx
281 jmp LookupLoop
282
283/* s->match_start = cur_match; */
284/* best_len = len; */
285/* if (len >= nice_match) break; */
286/* scan_end = *(ushf*)(scan+best_len-1); */
287
288LongerMatch: movl nicematch(%esp), %ebx
289 movl %eax, bestlen(%esp)
290 movl %ecx, dsMatchStart(%edx)
291 cmpl %ebx, %eax
292 jge LeaveNow
293 movl window(%esp), %esi
294 addl %eax, %esi
295 movl %esi, windowbestlen(%esp)
296 movzwl -1(%edi,%eax), %ebx
297 movl dsPrev(%edx), %edi
298 movl %ebx, scanend(%esp)
299 movl chainlenwmask(%esp), %edx
300 jmp LookupLoop
301
302/* Accept the current string, with the maximum possible length. */
303
304LenMaximum: movl deflatestate(%esp), %edx
305 movl $MAX_MATCH, bestlen(%esp)
306 movl %ecx, dsMatchStart(%edx)
307
308/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
309/* return s->lookahead; */
310
311LeaveNow:
312 movl deflatestate(%esp), %edx
313 movl bestlen(%esp), %ebx
314 movl dsLookahead(%edx), %eax
315 cmpl %eax, %ebx
316 jg LookaheadRet
317 movl %ebx, %eax
318LookaheadRet:
319
320/* Restore the stack and return from whence we came. */
321
322 addl $LocalVarsSize, %esp
323 popl %ebx
324 popl %esi
325 popl %edi
326 popl %ebp
327match_init: ret
diff --git a/contrib/delphi/zlib.mak b/contrib/delphi/zlib.mak
new file mode 100644
index 0000000..ba557e2
--- /dev/null
+++ b/contrib/delphi/zlib.mak
@@ -0,0 +1,36 @@
1# Makefile for zlib32bd.lib
2# ------------- Borland C++ 4.5 -------------
3
4# The (32-bit) zlib32bd.lib made with this makefile is intended for use
5# in making the (32-bit) DLL, png32bd.dll. It uses the "stdcall" calling
6# convention.
7
8CFLAGS= -ps -O2 -C -K -N- -k- -d -3 -r- -w-par -w-aus -WDE
9CC=f:\bc45\bin\bcc32
10LIBFLAGS= /C
11LIB=f:\bc45\bin\tlib
12ZLIB=zlib32bd.lib
13
14.autodepend
15.c.obj:
16 $(CC) -c $(CFLAGS) $<
17
18OBJ1=adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj
19OBJ2=infcodes.obj inflate.obj inftrees.obj infutil.obj inffast.obj
20OBJ3=trees.obj uncompr.obj zutil.obj
21pOBJ1=+adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infblock.obj
22pOBJ2=+infcodes.obj+inflate.obj+inftrees.obj+infutil.obj+inffast.obj
23pOBJ3=+trees.obj+uncompr.obj+zutil.obj
24
25all: $(ZLIB)
26
27$(ZLIB): $(OBJ1) $(OBJ2) $(OBJ3)
28 @if exist $@ del $@
29 $(LIB) @&&|
30$@ $(LIBFLAGS) &
31$(pOBJ1) &
32$(pOBJ2) &
33$(pOBJ3)
34|
35
36# End of makefile for zlib32bd.lib
diff --git a/contrib/delphi/zlibdef.pas b/contrib/delphi/zlibdef.pas
new file mode 100644
index 0000000..4f96b7d
--- /dev/null
+++ b/contrib/delphi/zlibdef.pas
@@ -0,0 +1,169 @@
1unit zlibdef;
2
3interface
4
5uses
6 Windows;
7
8const
9 ZLIB_VERSION = '1.1.3';
10
11type
12 voidpf = Pointer;
13 int = Integer;
14 uInt = Cardinal;
15 pBytef = PChar;
16 uLong = Cardinal;
17
18 alloc_func = function(opaque: voidpf; items, size: uInt): voidpf;
19 stdcall;
20 free_func = procedure(opaque, address: voidpf);
21 stdcall;
22
23 internal_state = Pointer;
24
25 z_streamp = ^z_stream;
26 z_stream = packed record
27 next_in: pBytef; // next input byte
28 avail_in: uInt; // number of bytes available at next_in
29 total_in: uLong; // total nb of input bytes read so far
30
31 next_out: pBytef; // next output byte should be put there
32 avail_out: uInt; // remaining free space at next_out
33 total_out: uLong; // total nb of bytes output so far
34
35 msg: PChar; // last error message, NULL if no error
36 state: internal_state; // not visible by applications
37
38 zalloc: alloc_func; // used to allocate the internal state
39 zfree: free_func; // used to free the internal state
40 opaque: voidpf; // private data object passed to zalloc and zfree
41
42 data_type: int; // best guess about the data type: ascii or binary
43 adler: uLong; // adler32 value of the uncompressed data
44 reserved: uLong; // reserved for future use
45 end;
46
47const
48 Z_NO_FLUSH = 0;
49 Z_SYNC_FLUSH = 2;
50 Z_FULL_FLUSH = 3;
51 Z_FINISH = 4;
52
53 Z_OK = 0;
54 Z_STREAM_END = 1;
55
56 Z_NO_COMPRESSION = 0;
57 Z_BEST_SPEED = 1;
58 Z_BEST_COMPRESSION = 9;
59 Z_DEFAULT_COMPRESSION = -1;
60
61 Z_FILTERED = 1;
62 Z_HUFFMAN_ONLY = 2;
63 Z_DEFAULT_STRATEGY = 0;
64
65 Z_BINARY = 0;
66 Z_ASCII = 1;
67 Z_UNKNOWN = 2;
68
69 Z_DEFLATED = 8;
70
71 MAX_MEM_LEVEL = 9;
72
73function adler32(adler: uLong; const buf: pBytef; len: uInt): uLong;
74 stdcall;
75function crc32(crc: uLong; const buf: pBytef; len: uInt): uLong;
76 stdcall;
77function deflate(strm: z_streamp; flush: int): int;
78 stdcall;
79function deflateCopy(dest, source: z_streamp): int;
80 stdcall;
81function deflateEnd(strm: z_streamp): int;
82 stdcall;
83function deflateInit2_(strm: z_streamp; level, method,
84 windowBits, memLevel, strategy: int;
85 const version: PChar; stream_size: int): int;
86 stdcall;
87function deflateInit_(strm: z_streamp; level: int;
88 const version: PChar; stream_size: int): int;
89 stdcall;
90function deflateParams(strm: z_streamp; level, strategy: int): int;
91 stdcall;
92function deflateReset(strm: z_streamp): int;
93 stdcall;
94function deflateSetDictionary(strm: z_streamp;
95 const dictionary: pBytef;
96 dictLength: uInt): int;
97 stdcall;
98function inflate(strm: z_streamp; flush: int): int;
99 stdcall;
100function inflateEnd(strm: z_streamp): int;
101 stdcall;
102function inflateInit2_(strm: z_streamp; windowBits: int;
103 const version: PChar; stream_size: int): int;
104 stdcall;
105function inflateInit_(strm: z_streamp; const version: PChar;
106 stream_size: int): int;
107 stdcall;
108function inflateReset(strm: z_streamp): int;
109 stdcall;
110function inflateSetDictionary(strm: z_streamp;
111 const dictionary: pBytef;
112 dictLength: uInt): int;
113 stdcall;
114function inflateSync(strm: z_streamp): int;
115 stdcall;
116
117function deflateInit(strm: z_streamp; level: int): int;
118function deflateInit2(strm: z_streamp; level, method, windowBits,
119 memLevel, strategy: int): int;
120function inflateInit(strm: z_streamp): int;
121function inflateInit2(strm: z_streamp; windowBits: int): int;
122
123implementation
124
125function deflateInit(strm: z_streamp; level: int): int;
126begin
127 Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));
128end;
129
130function deflateInit2(strm: z_streamp; level, method, windowBits,
131 memLevel, strategy: int): int;
132begin
133 Result := deflateInit2_(strm, level, method, windowBits, memLevel,
134 strategy, ZLIB_VERSION, sizeof(z_stream));
135end;
136
137function inflateInit(strm: z_streamp): int;
138begin
139 Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));
140end;
141
142function inflateInit2(strm: z_streamp; windowBits: int): int;
143begin
144 Result := inflateInit2_(strm, windowBits, ZLIB_VERSION,
145 sizeof(z_stream));
146end;
147
148const
149 zlibDLL = 'png32bd.dll';
150
151function adler32; external zlibDLL;
152function crc32; external zlibDLL;
153function deflate; external zlibDLL;
154function deflateCopy; external zlibDLL;
155function deflateEnd; external zlibDLL;
156function deflateInit2_; external zlibDLL;
157function deflateInit_; external zlibDLL;
158function deflateParams; external zlibDLL;
159function deflateReset; external zlibDLL;
160function deflateSetDictionary; external zlibDLL;
161function inflate; external zlibDLL;
162function inflateEnd; external zlibDLL;
163function inflateInit2_; external zlibDLL;
164function inflateInit_; external zlibDLL;
165function inflateReset; external zlibDLL;
166function inflateSetDictionary; external zlibDLL;
167function inflateSync; external zlibDLL;
168
169end.
diff --git a/contrib/delphi2/d_zlib.bpr b/contrib/delphi2/d_zlib.bpr
new file mode 100644
index 0000000..78bb254
--- /dev/null
+++ b/contrib/delphi2/d_zlib.bpr
@@ -0,0 +1,224 @@
1# ---------------------------------------------------------------------------
2!if !$d(BCB)
3BCB = $(MAKEDIR)\..
4!endif
5
6# ---------------------------------------------------------------------------
7# IDE SECTION
8# ---------------------------------------------------------------------------
9# The following section of the project makefile is managed by the BCB IDE.
10# It is recommended to use the IDE to change any of the values in this
11# section.
12# ---------------------------------------------------------------------------
13
14VERSION = BCB.03
15# ---------------------------------------------------------------------------
16PROJECT = d_zlib.lib
17OBJFILES = d_zlib.obj adler32.obj deflate.obj infblock.obj infcodes.obj inffast.obj \
18 inflate.obj inftrees.obj infutil.obj trees.obj
19RESFILES =
20RESDEPEN = $(RESFILES)
21LIBFILES =
22LIBRARIES = VCL35.lib
23SPARELIBS = VCL35.lib
24DEFFILE =
25PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
26 dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
27 NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
28# ---------------------------------------------------------------------------
29PATHCPP = .;
30PATHASM = .;
31PATHPAS = .;
32PATHRC = .;
33DEBUGLIBPATH = $(BCB)\lib\debug
34RELEASELIBPATH = $(BCB)\lib\release
35# ---------------------------------------------------------------------------
36CFLAG1 = -O2 -Ve -d -k- -vi
37CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm
38CFLAG3 = -ff -pr -5
39PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M
40RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl
41AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn
42LFLAGS =
43IFLAGS = -g -Gn
44# ---------------------------------------------------------------------------
45ALLOBJ = c0w32.obj $(OBJFILES)
46ALLRES = $(RESFILES)
47ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib
48# ---------------------------------------------------------------------------
49!!ifdef IDEOPTIONS
50
51[Version Info]
52IncludeVerInfo=0
53AutoIncBuild=0
54MajorVer=1
55MinorVer=0
56Release=0
57Build=0
58Debug=0
59PreRelease=0
60Special=0
61Private=0
62DLL=0
63Locale=1040
64CodePage=1252
65
66[Version Info Keys]
67CompanyName=
68FileDescription=
69FileVersion=1.0.0.0
70InternalName=
71LegalCopyright=
72LegalTrademarks=
73OriginalFilename=
74ProductName=
75ProductVersion=1.0.0.0
76Comments=
77
78[HistoryLists\hlIncludePath]
79Count=2
80Item0=$(BCB)\include
81Item1=$(BCB)\include;$(BCB)\include\vcl
82
83[HistoryLists\hlLibraryPath]
84Count=1
85Item0=$(BCB)\lib\obj;$(BCB)\lib
86
87[HistoryLists\hlDebugSourcePath]
88Count=1
89Item0=$(BCB)\source\vcl
90
91[Debugging]
92DebugSourceDirs=
93
94[Parameters]
95RunParams=
96HostApplication=
97
98!endif
99
100 ---------------------------------------------------------------------------
101# MAKE SECTION
102# ---------------------------------------------------------------------------
103# This section of the project file is not used by the BCB IDE. It is for
104# the benefit of building from the command-line using the MAKE utility.
105# ---------------------------------------------------------------------------
106
107.autodepend
108# ---------------------------------------------------------------------------
109!if !$d(BCC32)
110BCC32 = bcc32
111!endif
112
113!if !$d(DCC32)
114DCC32 = dcc32
115!endif
116
117!if !$d(TASM32)
118TASM32 = tasm32
119!endif
120
121!if !$d(LINKER)
122LINKER = TLib
123!endif
124
125!if !$d(BRCC32)
126BRCC32 = brcc32
127!endif
128# ---------------------------------------------------------------------------
129!if $d(PATHCPP)
130.PATH.CPP = $(PATHCPP)
131.PATH.C = $(PATHCPP)
132!endif
133
134!if $d(PATHPAS)
135.PATH.PAS = $(PATHPAS)
136!endif
137
138!if $d(PATHASM)
139.PATH.ASM = $(PATHASM)
140!endif
141
142!if $d(PATHRC)
143.PATH.RC = $(PATHRC)
144!endif
145# ---------------------------------------------------------------------------
146!ifdef IDEOPTIONS
147
148[Version Info]
149IncludeVerInfo=0
150AutoIncBuild=0
151MajorVer=1
152MinorVer=0
153Release=0
154Build=0
155Debug=0
156PreRelease=0
157Special=0
158Private=0
159DLL=0
160Locale=1040
161CodePage=1252
162
163[Version Info Keys]
164CompanyName=
165FileDescription=
166FileVersion=1.0.0.0
167InternalName=
168LegalCopyright=
169LegalTrademarks=
170OriginalFilename=
171ProductName=
172ProductVersion=1.0.0.0
173Comments=
174
175[HistoryLists\hlIncludePath]
176Count=2
177Item0=$(BCB)\include;$(BCB)\include\vcl
178Item1=$(BCB)\include
179
180[HistoryLists\hlLibraryPath]
181Count=1
182Item0=$(BCB)\lib\obj;$(BCB)\lib
183
184[HistoryLists\hlDebugSourcePath]
185Count=1
186Item0=$(BCB)\source\vcl
187
188[Debugging]
189DebugSourceDirs=
190
191[Parameters]
192RunParams=
193HostApplication=
194
195!endif
196
197$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
198 $(BCB)\BIN\$(LINKER) @&&!
199 $(LFLAGS) $(IFLAGS) +
200 $(ALLOBJ), +
201 $(PROJECT),, +
202 $(ALLLIB), +
203 $(DEFFILE), +
204 $(ALLRES)
205!
206# ---------------------------------------------------------------------------
207.pas.hpp:
208 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
209
210.pas.obj:
211 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
212
213.cpp.obj:
214 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
215
216.c.obj:
217 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
218
219.asm.obj:
220 $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
221
222.rc.res:
223 $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
224# ---------------------------------------------------------------------------
diff --git a/contrib/delphi2/d_zlib.cpp b/contrib/delphi2/d_zlib.cpp
new file mode 100644
index 0000000..f5dea59
--- /dev/null
+++ b/contrib/delphi2/d_zlib.cpp
@@ -0,0 +1,17 @@
1#include <condefs.h>
2#pragma hdrstop
3//---------------------------------------------------------------------------
4USEUNIT("adler32.c");
5USEUNIT("deflate.c");
6USEUNIT("infblock.c");
7USEUNIT("infcodes.c");
8USEUNIT("inffast.c");
9USEUNIT("inflate.c");
10USEUNIT("inftrees.c");
11USEUNIT("infutil.c");
12USEUNIT("trees.c");
13//---------------------------------------------------------------------------
14#define Library
15
16// To add a file to the library use the Project menu 'Add to Project'.
17
diff --git a/contrib/delphi2/readme.txt b/contrib/delphi2/readme.txt
new file mode 100644
index 0000000..cbd3162
--- /dev/null
+++ b/contrib/delphi2/readme.txt
@@ -0,0 +1,17 @@
1These are files used to compile zlib under Borland C++ Builder 3.
2
3zlib.bpg is the main project group that can be loaded in the BCB IDE and
4loads all other *.bpr projects
5
6zlib.bpr is a project used to create a static zlib.lib library with C calling
7convention for functions.
8
9zlib32.bpr creates a zlib32.dll dynamic link library with Windows standard
10calling convention.
11
12d_zlib.bpr creates a set of .obj files with register calling convention.
13These files are used by zlib.pas to create a Delphi unit containing zlib.
14The d_zlib.lib file generated isn't useful and can be deleted.
15
16zlib.cpp, zlib32.cpp and d_zlib.cpp are used by the above projects.
17
diff --git a/contrib/delphi2/zlib.bpg b/contrib/delphi2/zlib.bpg
new file mode 100644
index 0000000..b6c9acd
--- /dev/null
+++ b/contrib/delphi2/zlib.bpg
@@ -0,0 +1,26 @@
1#------------------------------------------------------------------------------
2VERSION = BWS.01
3#------------------------------------------------------------------------------
4!ifndef ROOT
5ROOT = $(MAKEDIR)\..
6!endif
7#------------------------------------------------------------------------------
8MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
9DCC = $(ROOT)\bin\dcc32.exe $**
10BRCC = $(ROOT)\bin\brcc32.exe $**
11#------------------------------------------------------------------------------
12PROJECTS = zlib zlib32 d_zlib
13#------------------------------------------------------------------------------
14default: $(PROJECTS)
15#------------------------------------------------------------------------------
16
17zlib: zlib.bpr
18 $(MAKE)
19
20zlib32: zlib32.bpr
21 $(MAKE)
22
23d_zlib: d_zlib.bpr
24 $(MAKE)
25
26
diff --git a/contrib/delphi2/zlib.bpr b/contrib/delphi2/zlib.bpr
new file mode 100644
index 0000000..cf3945b
--- /dev/null
+++ b/contrib/delphi2/zlib.bpr
@@ -0,0 +1,225 @@
1# ---------------------------------------------------------------------------
2!if !$d(BCB)
3BCB = $(MAKEDIR)\..
4!endif
5
6# ---------------------------------------------------------------------------
7# IDE SECTION
8# ---------------------------------------------------------------------------
9# The following section of the project makefile is managed by the BCB IDE.
10# It is recommended to use the IDE to change any of the values in this
11# section.
12# ---------------------------------------------------------------------------
13
14VERSION = BCB.03
15# ---------------------------------------------------------------------------
16PROJECT = zlib.lib
17OBJFILES = zlib.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \
18 infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \
19 uncompr.obj zutil.obj
20RESFILES =
21RESDEPEN = $(RESFILES)
22LIBFILES =
23LIBRARIES = VCL35.lib
24SPARELIBS = VCL35.lib
25DEFFILE =
26PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
27 dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
28 NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
29# ---------------------------------------------------------------------------
30PATHCPP = .;
31PATHASM = .;
32PATHPAS = .;
33PATHRC = .;
34DEBUGLIBPATH = $(BCB)\lib\debug
35RELEASELIBPATH = $(BCB)\lib\release
36# ---------------------------------------------------------------------------
37CFLAG1 = -O2 -Ve -d -k- -vi
38CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm
39CFLAG3 = -ff -5
40PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M
41RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl
42AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn
43LFLAGS =
44IFLAGS = -g -Gn
45# ---------------------------------------------------------------------------
46ALLOBJ = c0w32.obj $(OBJFILES)
47ALLRES = $(RESFILES)
48ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib
49# ---------------------------------------------------------------------------
50!!ifdef IDEOPTIONS
51
52[Version Info]
53IncludeVerInfo=0
54AutoIncBuild=0
55MajorVer=1
56MinorVer=0
57Release=0
58Build=0
59Debug=0
60PreRelease=0
61Special=0
62Private=0
63DLL=0
64Locale=1040
65CodePage=1252
66
67[Version Info Keys]
68CompanyName=
69FileDescription=
70FileVersion=1.0.0.0
71InternalName=
72LegalCopyright=
73LegalTrademarks=
74OriginalFilename=
75ProductName=
76ProductVersion=1.0.0.0
77Comments=
78
79[HistoryLists\hlIncludePath]
80Count=2
81Item0=$(BCB)\include
82Item1=$(BCB)\include;$(BCB)\include\vcl
83
84[HistoryLists\hlLibraryPath]
85Count=1
86Item0=$(BCB)\lib\obj;$(BCB)\lib
87
88[HistoryLists\hlDebugSourcePath]
89Count=1
90Item0=$(BCB)\source\vcl
91
92[Debugging]
93DebugSourceDirs=
94
95[Parameters]
96RunParams=
97HostApplication=
98
99!endif
100
101 ---------------------------------------------------------------------------
102# MAKE SECTION
103# ---------------------------------------------------------------------------
104# This section of the project file is not used by the BCB IDE. It is for
105# the benefit of building from the command-line using the MAKE utility.
106# ---------------------------------------------------------------------------
107
108.autodepend
109# ---------------------------------------------------------------------------
110!if !$d(BCC32)
111BCC32 = bcc32
112!endif
113
114!if !$d(DCC32)
115DCC32 = dcc32
116!endif
117
118!if !$d(TASM32)
119TASM32 = tasm32
120!endif
121
122!if !$d(LINKER)
123LINKER = TLib
124!endif
125
126!if !$d(BRCC32)
127BRCC32 = brcc32
128!endif
129# ---------------------------------------------------------------------------
130!if $d(PATHCPP)
131.PATH.CPP = $(PATHCPP)
132.PATH.C = $(PATHCPP)
133!endif
134
135!if $d(PATHPAS)
136.PATH.PAS = $(PATHPAS)
137!endif
138
139!if $d(PATHASM)
140.PATH.ASM = $(PATHASM)
141!endif
142
143!if $d(PATHRC)
144.PATH.RC = $(PATHRC)
145!endif
146# ---------------------------------------------------------------------------
147!ifdef IDEOPTIONS
148
149[Version Info]
150IncludeVerInfo=0
151AutoIncBuild=0
152MajorVer=1
153MinorVer=0
154Release=0
155Build=0
156Debug=0
157PreRelease=0
158Special=0
159Private=0
160DLL=0
161Locale=1040
162CodePage=1252
163
164[Version Info Keys]
165CompanyName=
166FileDescription=
167FileVersion=1.0.0.0
168InternalName=
169LegalCopyright=
170LegalTrademarks=
171OriginalFilename=
172ProductName=
173ProductVersion=1.0.0.0
174Comments=
175
176[HistoryLists\hlIncludePath]
177Count=2
178Item0=$(BCB)\include;$(BCB)\include\vcl
179Item1=$(BCB)\include
180
181[HistoryLists\hlLibraryPath]
182Count=1
183Item0=$(BCB)\lib\obj;$(BCB)\lib
184
185[HistoryLists\hlDebugSourcePath]
186Count=1
187Item0=$(BCB)\source\vcl
188
189[Debugging]
190DebugSourceDirs=
191
192[Parameters]
193RunParams=
194HostApplication=
195
196!endif
197
198$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
199 $(BCB)\BIN\$(LINKER) @&&!
200 $(LFLAGS) $(IFLAGS) +
201 $(ALLOBJ), +
202 $(PROJECT),, +
203 $(ALLLIB), +
204 $(DEFFILE), +
205 $(ALLRES)
206!
207# ---------------------------------------------------------------------------
208.pas.hpp:
209 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
210
211.pas.obj:
212 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
213
214.cpp.obj:
215 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
216
217.c.obj:
218 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
219
220.asm.obj:
221 $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
222
223.rc.res:
224 $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
225# ---------------------------------------------------------------------------
diff --git a/contrib/delphi2/zlib.cpp b/contrib/delphi2/zlib.cpp
new file mode 100644
index 0000000..bf6953b
--- /dev/null
+++ b/contrib/delphi2/zlib.cpp
@@ -0,0 +1,22 @@
1#include <condefs.h>
2#pragma hdrstop
3//---------------------------------------------------------------------------
4USEUNIT("adler32.c");
5USEUNIT("compress.c");
6USEUNIT("crc32.c");
7USEUNIT("deflate.c");
8USEUNIT("gzio.c");
9USEUNIT("infblock.c");
10USEUNIT("infcodes.c");
11USEUNIT("inffast.c");
12USEUNIT("inflate.c");
13USEUNIT("inftrees.c");
14USEUNIT("infutil.c");
15USEUNIT("trees.c");
16USEUNIT("uncompr.c");
17USEUNIT("zutil.c");
18//---------------------------------------------------------------------------
19#define Library
20
21// To add a file to the library use the Project menu 'Add to Project'.
22
diff --git a/contrib/delphi2/zlib.pas b/contrib/delphi2/zlib.pas
new file mode 100644
index 0000000..10ae4ca
--- /dev/null
+++ b/contrib/delphi2/zlib.pas
@@ -0,0 +1,534 @@
1{*******************************************************}
2{ }
3{ Delphi Supplemental Components }
4{ ZLIB Data Compression Interface Unit }
5{ }
6{ Copyright (c) 1997 Borland International }
7{ }
8{*******************************************************}
9
10{ Modified for zlib 1.1.3 by Davide Moretti <dave@rimini.com }
11
12unit zlib;
13
14interface
15
16uses Sysutils, Classes;
17
18type
19 TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer;
20 TFree = procedure (AppData, Block: Pointer);
21
22 // Internal structure. Ignore.
23 TZStreamRec = packed record
24 next_in: PChar; // next input byte
25 avail_in: Integer; // number of bytes available at next_in
26 total_in: Integer; // total nb of input bytes read so far
27
28 next_out: PChar; // next output byte should be put here
29 avail_out: Integer; // remaining free space at next_out
30 total_out: Integer; // total nb of bytes output so far
31
32 msg: PChar; // last error message, NULL if no error
33 internal: Pointer; // not visible by applications
34
35 zalloc: TAlloc; // used to allocate the internal state
36 zfree: TFree; // used to free the internal state
37 AppData: Pointer; // private data object passed to zalloc and zfree
38
39 data_type: Integer; // best guess about the data type: ascii or binary
40 adler: Integer; // adler32 value of the uncompressed data
41 reserved: Integer; // reserved for future use
42 end;
43
44 // Abstract ancestor class
45 TCustomZlibStream = class(TStream)
46 private
47 FStrm: TStream;
48 FStrmPos: Integer;
49 FOnProgress: TNotifyEvent;
50 FZRec: TZStreamRec;
51 FBuffer: array [Word] of Char;
52 protected
53 procedure Progress(Sender: TObject); dynamic;
54 property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
55 constructor Create(Strm: TStream);
56 end;
57
58{ TCompressionStream compresses data on the fly as data is written to it, and
59 stores the compressed data to another stream.
60
61 TCompressionStream is write-only and strictly sequential. Reading from the
62 stream will raise an exception. Using Seek to move the stream pointer
63 will raise an exception.
64
65 Output data is cached internally, written to the output stream only when
66 the internal output buffer is full. All pending output data is flushed
67 when the stream is destroyed.
68
69 The Position property returns the number of uncompressed bytes of
70 data that have been written to the stream so far.
71
72 CompressionRate returns the on-the-fly percentage by which the original
73 data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100
74 If raw data size = 100 and compressed data size = 25, the CompressionRate
75 is 75%
76
77 The OnProgress event is called each time the output buffer is filled and
78 written to the output stream. This is useful for updating a progress
79 indicator when you are writing a large chunk of data to the compression
80 stream in a single call.}
81
82
83 TCompressionLevel = (clNone, clFastest, clDefault, clMax);
84
85 TCompressionStream = class(TCustomZlibStream)
86 private
87 function GetCompressionRate: Single;
88 public
89 constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
90 destructor Destroy; override;
91 function Read(var Buffer; Count: Longint): Longint; override;
92 function Write(const Buffer; Count: Longint): Longint; override;
93 function Seek(Offset: Longint; Origin: Word): Longint; override;
94 property CompressionRate: Single read GetCompressionRate;
95 property OnProgress;
96 end;
97
98{ TDecompressionStream decompresses data on the fly as data is read from it.
99
100 Compressed data comes from a separate source stream. TDecompressionStream
101 is read-only and unidirectional; you can seek forward in the stream, but not
102 backwards. The special case of setting the stream position to zero is
103 allowed. Seeking forward decompresses data until the requested position in
104 the uncompressed data has been reached. Seeking backwards, seeking relative
105 to the end of the stream, requesting the size of the stream, and writing to
106 the stream will raise an exception.
107
108 The Position property returns the number of bytes of uncompressed data that
109 have been read from the stream so far.
110
111 The OnProgress event is called each time the internal input buffer of
112 compressed data is exhausted and the next block is read from the input stream.
113 This is useful for updating a progress indicator when you are reading a
114 large chunk of data from the decompression stream in a single call.}
115
116 TDecompressionStream = class(TCustomZlibStream)
117 public
118 constructor Create(Source: TStream);
119 destructor Destroy; override;
120 function Read(var Buffer; Count: Longint): Longint; override;
121 function Write(const Buffer; Count: Longint): Longint; override;
122 function Seek(Offset: Longint; Origin: Word): Longint; override;
123 property OnProgress;
124 end;
125
126
127
128{ CompressBuf compresses data, buffer to buffer, in one call.
129 In: InBuf = ptr to compressed data
130 InBytes = number of bytes in InBuf
131 Out: OutBuf = ptr to newly allocated buffer containing decompressed data
132 OutBytes = number of bytes in OutBuf }
133procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
134 out OutBuf: Pointer; out OutBytes: Integer);
135
136
137{ DecompressBuf decompresses data, buffer to buffer, in one call.
138 In: InBuf = ptr to compressed data
139 InBytes = number of bytes in InBuf
140 OutEstimate = zero, or est. size of the decompressed data
141 Out: OutBuf = ptr to newly allocated buffer containing decompressed data
142 OutBytes = number of bytes in OutBuf }
143procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
144 OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
145
146const
147 zlib_version = '1.1.3';
148
149type
150 EZlibError = class(Exception);
151 ECompressionError = class(EZlibError);
152 EDecompressionError = class(EZlibError);
153
154function adler32(adler: Integer; buf: PChar; len: Integer): Integer;
155
156implementation
157
158const
159 Z_NO_FLUSH = 0;
160 Z_PARTIAL_FLUSH = 1;
161 Z_SYNC_FLUSH = 2;
162 Z_FULL_FLUSH = 3;
163 Z_FINISH = 4;
164
165 Z_OK = 0;
166 Z_STREAM_END = 1;
167 Z_NEED_DICT = 2;
168 Z_ERRNO = (-1);
169 Z_STREAM_ERROR = (-2);
170 Z_DATA_ERROR = (-3);
171 Z_MEM_ERROR = (-4);
172 Z_BUF_ERROR = (-5);
173 Z_VERSION_ERROR = (-6);
174
175 Z_NO_COMPRESSION = 0;
176 Z_BEST_SPEED = 1;
177 Z_BEST_COMPRESSION = 9;
178 Z_DEFAULT_COMPRESSION = (-1);
179
180 Z_FILTERED = 1;
181 Z_HUFFMAN_ONLY = 2;
182 Z_DEFAULT_STRATEGY = 0;
183
184 Z_BINARY = 0;
185 Z_ASCII = 1;
186 Z_UNKNOWN = 2;
187
188 Z_DEFLATED = 8;
189
190 _z_errmsg: array[0..9] of PChar = (
191 'need dictionary', // Z_NEED_DICT (2)
192 'stream end', // Z_STREAM_END (1)
193 '', // Z_OK (0)
194 'file error', // Z_ERRNO (-1)
195 'stream error', // Z_STREAM_ERROR (-2)
196 'data error', // Z_DATA_ERROR (-3)
197 'insufficient memory', // Z_MEM_ERROR (-4)
198 'buffer error', // Z_BUF_ERROR (-5)
199 'incompatible version', // Z_VERSION_ERROR (-6)
200 ''
201 );
202
203{$L deflate.obj}
204{$L inflate.obj}
205{$L inftrees.obj}
206{$L trees.obj}
207{$L adler32.obj}
208{$L infblock.obj}
209{$L infcodes.obj}
210{$L infutil.obj}
211{$L inffast.obj}
212
213procedure _tr_init; external;
214procedure _tr_tally; external;
215procedure _tr_flush_block; external;
216procedure _tr_align; external;
217procedure _tr_stored_block; external;
218function adler32; external;
219procedure inflate_blocks_new; external;
220procedure inflate_blocks; external;
221procedure inflate_blocks_reset; external;
222procedure inflate_blocks_free; external;
223procedure inflate_set_dictionary; external;
224procedure inflate_trees_bits; external;
225procedure inflate_trees_dynamic; external;
226procedure inflate_trees_fixed; external;
227procedure inflate_codes_new; external;
228procedure inflate_codes; external;
229procedure inflate_codes_free; external;
230procedure _inflate_mask; external;
231procedure inflate_flush; external;
232procedure inflate_fast; external;
233
234procedure _memset(P: Pointer; B: Byte; count: Integer);cdecl;
235begin
236 FillChar(P^, count, B);
237end;
238
239procedure _memcpy(dest, source: Pointer; count: Integer);cdecl;
240begin
241 Move(source^, dest^, count);
242end;
243
244
245
246// deflate compresses data
247function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
248 recsize: Integer): Integer; external;
249function deflate(var strm: TZStreamRec; flush: Integer): Integer; external;
250function deflateEnd(var strm: TZStreamRec): Integer; external;
251
252// inflate decompresses data
253function inflateInit_(var strm: TZStreamRec; version: PChar;
254 recsize: Integer): Integer; external;
255function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
256function inflateEnd(var strm: TZStreamRec): Integer; external;
257function inflateReset(var strm: TZStreamRec): Integer; external;
258
259
260function zcalloc(AppData: Pointer; Items, Size: Integer): Pointer;
261begin
262 GetMem(Result, Items*Size);
263end;
264
265procedure zcfree(AppData, Block: Pointer);
266begin
267 FreeMem(Block);
268end;
269
270function zlibCheck(code: Integer): Integer;
271begin
272 Result := code;
273 if code < 0 then
274 raise EZlibError.Create('error'); //!!
275end;
276
277function CCheck(code: Integer): Integer;
278begin
279 Result := code;
280 if code < 0 then
281 raise ECompressionError.Create('error'); //!!
282end;
283
284function DCheck(code: Integer): Integer;
285begin
286 Result := code;
287 if code < 0 then
288 raise EDecompressionError.Create('error'); //!!
289end;
290
291procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
292 out OutBuf: Pointer; out OutBytes: Integer);
293var
294 strm: TZStreamRec;
295 P: Pointer;
296begin
297 FillChar(strm, sizeof(strm), 0);
298 OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
299 GetMem(OutBuf, OutBytes);
300 try
301 strm.next_in := InBuf;
302 strm.avail_in := InBytes;
303 strm.next_out := OutBuf;
304 strm.avail_out := OutBytes;
305 CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));
306 try
307 while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do
308 begin
309 P := OutBuf;
310 Inc(OutBytes, 256);
311 ReallocMem(OutBuf, OutBytes);
312 strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
313 strm.avail_out := 256;
314 end;
315 finally
316 CCheck(deflateEnd(strm));
317 end;
318 ReallocMem(OutBuf, strm.total_out);
319 OutBytes := strm.total_out;
320 except
321 FreeMem(OutBuf);
322 raise
323 end;
324end;
325
326
327procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
328 OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
329var
330 strm: TZStreamRec;
331 P: Pointer;
332 BufInc: Integer;
333begin
334 FillChar(strm, sizeof(strm), 0);
335 BufInc := (InBytes + 255) and not 255;
336 if OutEstimate = 0 then
337 OutBytes := BufInc
338 else
339 OutBytes := OutEstimate;
340 GetMem(OutBuf, OutBytes);
341 try
342 strm.next_in := InBuf;
343 strm.avail_in := InBytes;
344 strm.next_out := OutBuf;
345 strm.avail_out := OutBytes;
346 DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
347 try
348 while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do
349 begin
350 P := OutBuf;
351 Inc(OutBytes, BufInc);
352 ReallocMem(OutBuf, OutBytes);
353 strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
354 strm.avail_out := BufInc;
355 end;
356 finally
357 DCheck(inflateEnd(strm));
358 end;
359 ReallocMem(OutBuf, strm.total_out);
360 OutBytes := strm.total_out;
361 except
362 FreeMem(OutBuf);
363 raise
364 end;
365end;
366
367
368// TCustomZlibStream
369
370constructor TCustomZLibStream.Create(Strm: TStream);
371begin
372 inherited Create;
373 FStrm := Strm;
374 FStrmPos := Strm.Position;
375end;
376
377procedure TCustomZLibStream.Progress(Sender: TObject);
378begin
379 if Assigned(FOnProgress) then FOnProgress(Sender);
380end;
381
382
383// TCompressionStream
384
385constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;
386 Dest: TStream);
387const
388 Levels: array [TCompressionLevel] of ShortInt =
389 (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);
390begin
391 inherited Create(Dest);
392 FZRec.next_out := FBuffer;
393 FZRec.avail_out := sizeof(FBuffer);
394 CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));
395end;
396
397destructor TCompressionStream.Destroy;
398begin
399 FZRec.next_in := nil;
400 FZRec.avail_in := 0;
401 try
402 if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
403 while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)
404 and (FZRec.avail_out = 0) do
405 begin
406 FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
407 FZRec.next_out := FBuffer;
408 FZRec.avail_out := sizeof(FBuffer);
409 end;
410 if FZRec.avail_out < sizeof(FBuffer) then
411 FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);
412 finally
413 deflateEnd(FZRec);
414 end;
415 inherited Destroy;
416end;
417
418function TCompressionStream.Read(var Buffer; Count: Longint): Longint;
419begin
420 raise ECompressionError.Create('Invalid stream operation');
421end;
422
423function TCompressionStream.Write(const Buffer; Count: Longint): Longint;
424begin
425 FZRec.next_in := @Buffer;
426 FZRec.avail_in := Count;
427 if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
428 while (FZRec.avail_in > 0) do
429 begin
430 CCheck(deflate(FZRec, 0));
431 if FZRec.avail_out = 0 then
432 begin
433 FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
434 FZRec.next_out := FBuffer;
435 FZRec.avail_out := sizeof(FBuffer);
436 FStrmPos := FStrm.Position;
437 Progress(Self);
438 end;
439 end;
440 Result := Count;
441end;
442
443function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
444begin
445 if (Offset = 0) and (Origin = soFromCurrent) then
446 Result := FZRec.total_in
447 else
448 raise ECompressionError.Create('Invalid stream operation');
449end;
450
451function TCompressionStream.GetCompressionRate: Single;
452begin
453 if FZRec.total_in = 0 then
454 Result := 0
455 else
456 Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;
457end;
458
459
460// TDecompressionStream
461
462constructor TDecompressionStream.Create(Source: TStream);
463begin
464 inherited Create(Source);
465 FZRec.next_in := FBuffer;
466 FZRec.avail_in := 0;
467 DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));
468end;
469
470destructor TDecompressionStream.Destroy;
471begin
472 inflateEnd(FZRec);
473 inherited Destroy;
474end;
475
476function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
477begin
478 FZRec.next_out := @Buffer;
479 FZRec.avail_out := Count;
480 if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
481 while (FZRec.avail_out > 0) do
482 begin
483 if FZRec.avail_in = 0 then
484 begin
485 FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
486 if FZRec.avail_in = 0 then
487 begin
488 Result := Count - FZRec.avail_out;
489 Exit;
490 end;
491 FZRec.next_in := FBuffer;
492 FStrmPos := FStrm.Position;
493 Progress(Self);
494 end;
495 DCheck(inflate(FZRec, 0));
496 end;
497 Result := Count;
498end;
499
500function TDecompressionStream.Write(const Buffer; Count: Longint): Longint;
501begin
502 raise EDecompressionError.Create('Invalid stream operation');
503end;
504
505function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
506var
507 I: Integer;
508 Buf: array [0..4095] of Char;
509begin
510 if (Offset = 0) and (Origin = soFromBeginning) then
511 begin
512 DCheck(inflateReset(FZRec));
513 FZRec.next_in := FBuffer;
514 FZRec.avail_in := 0;
515 FStrm.Position := 0;
516 FStrmPos := 0;
517 end
518 else if ( (Offset >= 0) and (Origin = soFromCurrent)) or
519 ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then
520 begin
521 if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);
522 if Offset > 0 then
523 begin
524 for I := 1 to Offset div sizeof(Buf) do
525 ReadBuffer(Buf, sizeof(Buf));
526 ReadBuffer(Buf, Offset mod sizeof(Buf));
527 end;
528 end
529 else
530 raise EDecompressionError.Create('Invalid stream operation');
531 Result := FZRec.total_out;
532end;
533
534end.
diff --git a/contrib/delphi2/zlib32.bpr b/contrib/delphi2/zlib32.bpr
new file mode 100644
index 0000000..cabcec4
--- /dev/null
+++ b/contrib/delphi2/zlib32.bpr
@@ -0,0 +1,174 @@
1# ---------------------------------------------------------------------------
2!if !$d(BCB)
3BCB = $(MAKEDIR)\..
4!endif
5
6# ---------------------------------------------------------------------------
7# IDE SECTION
8# ---------------------------------------------------------------------------
9# The following section of the project makefile is managed by the BCB IDE.
10# It is recommended to use the IDE to change any of the values in this
11# section.
12# ---------------------------------------------------------------------------
13
14VERSION = BCB.03
15# ---------------------------------------------------------------------------
16PROJECT = zlib32.dll
17OBJFILES = zlib32.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \
18 infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \
19 uncompr.obj zutil.obj
20RESFILES =
21RESDEPEN = $(RESFILES)
22LIBFILES =
23LIBRARIES =
24SPARELIBS =
25DEFFILE =
26PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
27 dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
28 NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
29# ---------------------------------------------------------------------------
30PATHCPP = .;
31PATHASM = .;
32PATHPAS = .;
33PATHRC = .;
34DEBUGLIBPATH = $(BCB)\lib\debug
35RELEASELIBPATH = $(BCB)\lib\release
36# ---------------------------------------------------------------------------
37CFLAG1 = -WD -O2 -Ve -d -k- -vi -c -tWD
38CFLAG2 = -D_NO_VCL;ZLIB_DLL -I$(BCB)\include
39CFLAG3 = -ff -5
40PFLAGS = -D_NO_VCL;ZLIB_DLL -U$(BCB)\lib;$(RELEASELIBPATH) -I$(BCB)\include -$I- -v \
41 -JPHN -M
42RFLAGS = -D_NO_VCL;ZLIB_DLL -i$(BCB)\include
43AFLAGS = /i$(BCB)\include /d_NO_VCL /dZLIB_DLL /mx /w2 /zn
44LFLAGS = -L$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gi
45IFLAGS = -Gn -g
46# ---------------------------------------------------------------------------
47ALLOBJ = c0d32.obj $(OBJFILES)
48ALLRES = $(RESFILES)
49ALLLIB = $(LIBFILES) import32.lib cw32mt.lib
50# ---------------------------------------------------------------------------
51!ifdef IDEOPTIONS
52
53[Version Info]
54IncludeVerInfo=0
55AutoIncBuild=0
56MajorVer=1
57MinorVer=0
58Release=0
59Build=0
60Debug=0
61PreRelease=0
62Special=0
63Private=0
64DLL=1
65Locale=1040
66CodePage=1252
67
68[Version Info Keys]
69CompanyName=
70FileDescription=DLL (GUI)
71FileVersion=1.0.0.0
72InternalName=
73LegalCopyright=
74LegalTrademarks=
75OriginalFilename=
76ProductName=
77ProductVersion=1.0.0.0
78Comments=
79
80[HistoryLists\hlIncludePath]
81Count=1
82Item0=$(BCB)\include
83
84[HistoryLists\hlLibraryPath]
85Count=1
86Item0=$(BCB)\lib
87
88[HistoryLists\hlConditionals]
89Count=1
90Item0=_NO_VCL;ZLIB_DLL
91
92[Debugging]
93DebugSourceDirs=
94
95[Parameters]
96RunParams=
97HostApplication=
98
99!endif
100
101# ---------------------------------------------------------------------------
102# MAKE SECTION
103# ---------------------------------------------------------------------------
104# This section of the project file is not used by the BCB IDE. It is for
105# the benefit of building from the command-line using the MAKE utility.
106# ---------------------------------------------------------------------------
107
108.autodepend
109# ---------------------------------------------------------------------------
110!if !$d(BCC32)
111BCC32 = bcc32
112!endif
113
114!if !$d(DCC32)
115DCC32 = dcc32
116!endif
117
118!if !$d(TASM32)
119TASM32 = tasm32
120!endif
121
122!if !$d(LINKER)
123LINKER = ilink32
124!endif
125
126!if !$d(BRCC32)
127BRCC32 = brcc32
128!endif
129# ---------------------------------------------------------------------------
130!if $d(PATHCPP)
131.PATH.CPP = $(PATHCPP)
132.PATH.C = $(PATHCPP)
133!endif
134
135!if $d(PATHPAS)
136.PATH.PAS = $(PATHPAS)
137!endif
138
139!if $d(PATHASM)
140.PATH.ASM = $(PATHASM)
141!endif
142
143!if $d(PATHRC)
144.PATH.RC = $(PATHRC)
145!endif
146# ---------------------------------------------------------------------------
147$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
148 $(BCB)\BIN\$(LINKER) @&&!
149 $(LFLAGS) $(IFLAGS) +
150 $(ALLOBJ), +
151 $(PROJECT),, +
152 $(ALLLIB), +
153 $(DEFFILE), +
154 $(ALLRES)
155!
156# ---------------------------------------------------------------------------
157.pas.hpp:
158 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
159
160.pas.obj:
161 $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
162
163.cpp.obj:
164 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
165
166.c.obj:
167 $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
168
169.asm.obj:
170 $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
171
172.rc.res:
173 $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
174# ---------------------------------------------------------------------------
diff --git a/contrib/delphi2/zlib32.cpp b/contrib/delphi2/zlib32.cpp
new file mode 100644
index 0000000..7372f6b
--- /dev/null
+++ b/contrib/delphi2/zlib32.cpp
@@ -0,0 +1,42 @@
1
2#include <windows.h>
3#pragma hdrstop
4#include <condefs.h>
5
6
7//---------------------------------------------------------------------------
8// Important note about DLL memory management in a VCL DLL:
9//
10//
11//
12// If your DLL uses VCL and exports any functions that pass VCL String objects
13// (or structs/classes containing nested Strings) as parameter or function
14// results, you will need to build both your DLL project and any EXE projects
15// that use your DLL with the dynamic RTL (the RTL DLL). This will change your
16// DLL and its calling EXE's to use BORLNDMM.DLL as their memory manager. In
17// these cases, the file BORLNDMM.DLL should be deployed along with your DLL
18// and the RTL DLL (CP3240MT.DLL). To avoid the requiring BORLNDMM.DLL in
19// these situations, pass string information using "char *" or ShortString
20// parameters and then link with the static RTL.
21//
22//---------------------------------------------------------------------------
23USEUNIT("adler32.c");
24USEUNIT("compress.c");
25USEUNIT("crc32.c");
26USEUNIT("deflate.c");
27USEUNIT("gzio.c");
28USEUNIT("infblock.c");
29USEUNIT("infcodes.c");
30USEUNIT("inffast.c");
31USEUNIT("inflate.c");
32USEUNIT("inftrees.c");
33USEUNIT("infutil.c");
34USEUNIT("trees.c");
35USEUNIT("uncompr.c");
36USEUNIT("zutil.c");
37//---------------------------------------------------------------------------
38#pragma argsused
39int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
40{
41 return 1;
42}
diff --git a/contrib/minizip/unzip.c b/contrib/minizip/unzip.c
index 78a8473..ff71a47 100644
--- a/contrib/minizip/unzip.c
+++ b/contrib/minizip/unzip.c
@@ -315,7 +315,7 @@ local uLong unzlocal_SearchCentralDir(fin)
315 if (fread(buf,(uInt)uReadSize,1,fin)!=1) 315 if (fread(buf,(uInt)uReadSize,1,fin)!=1)
316 break; 316 break;
317 317
318 for (i=0;i<(int)uReadSize-3;i++) 318 for (i=(int)uReadSize-3; (i--)>0;)
319 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && 319 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
320 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) 320 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
321 { 321 {
diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c
index ddb2334..0cae64a 100644
--- a/contrib/minizip/zip.c
+++ b/contrib/minizip/zip.c
@@ -242,6 +242,8 @@ local int write_datablock(fout,ll)
242 Outputs a long in LSB order to the given file 242 Outputs a long in LSB order to the given file
243 nbByte == 1, 2 or 4 (byte, short or long) 243 nbByte == 1, 2 or 4 (byte, short or long)
244*/ 244*/
245
246local int ziplocal_putValue OF((FILE *file, uLong x, int nbByte));
245local int ziplocal_putValue (file, x, nbByte) 247local int ziplocal_putValue (file, x, nbByte)
246 FILE *file; 248 FILE *file;
247 uLong x; 249 uLong x;
@@ -259,7 +261,7 @@ local int ziplocal_putValue (file, x, nbByte)
259 return ZIP_OK; 261 return ZIP_OK;
260} 262}
261 263
262 264local void ziplocal_putValue_inmemory OF((void* dest, uLong x, int nbByte));
263local void ziplocal_putValue_inmemory (dest, x, nbByte) 265local void ziplocal_putValue_inmemory (dest, x, nbByte)
264 void* dest; 266 void* dest;
265 uLong x; 267 uLong x;
@@ -390,34 +392,34 @@ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
390 zi->ci.pos_local_header = ftell(zi->filezip); 392 zi->ci.pos_local_header = ftell(zi->filezip);
391 zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + 393 zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename +
392 size_extrafield_global + size_comment; 394 size_extrafield_global + size_comment;
393 zi->ci.central_header = (char*)ALLOC(zi->ci.size_centralheader); 395 zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader);
394 396
395 ziplocal_putValue_inmemory(zi->ci.central_header,CENTRALHEADERMAGIC,4); 397 ziplocal_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
396 /* version info */ 398 /* version info */
397 ziplocal_putValue_inmemory(zi->ci.central_header+4,VERSIONMADEBY,2); 399 ziplocal_putValue_inmemory(zi->ci.central_header+4,(uLong)VERSIONMADEBY,2);
398 ziplocal_putValue_inmemory(zi->ci.central_header+6,20,2); 400 ziplocal_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
399 ziplocal_putValue_inmemory(zi->ci.central_header+8,zi->ci.flag,2); 401 ziplocal_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
400 ziplocal_putValue_inmemory(zi->ci.central_header+10,zi->ci.method,2); 402 ziplocal_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
401 ziplocal_putValue_inmemory(zi->ci.central_header+12,zi->ci.dosDate,4); 403 ziplocal_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
402 ziplocal_putValue_inmemory(zi->ci.central_header+16,0,4); /*crc*/ 404 ziplocal_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
403 ziplocal_putValue_inmemory(zi->ci.central_header+20,0,4); /*compr size*/ 405 ziplocal_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
404 ziplocal_putValue_inmemory(zi->ci.central_header+24,0,4); /*uncompr size*/ 406 ziplocal_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
405 ziplocal_putValue_inmemory(zi->ci.central_header+28,size_filename,2); 407 ziplocal_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
406 ziplocal_putValue_inmemory(zi->ci.central_header+30,size_extrafield_global,2); 408 ziplocal_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
407 ziplocal_putValue_inmemory(zi->ci.central_header+32,size_comment,2); 409 ziplocal_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
408 ziplocal_putValue_inmemory(zi->ci.central_header+34,0,2); /*disk nm start*/ 410 ziplocal_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
409 411
410 if (zipfi==NULL) 412 if (zipfi==NULL)
411 ziplocal_putValue_inmemory(zi->ci.central_header+36,0,2); 413 ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
412 else 414 else
413 ziplocal_putValue_inmemory(zi->ci.central_header+36,zipfi->internal_fa,2); 415 ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
414 416
415 if (zipfi==NULL) 417 if (zipfi==NULL)
416 ziplocal_putValue_inmemory(zi->ci.central_header+38,0,4); 418 ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
417 else 419 else
418 ziplocal_putValue_inmemory(zi->ci.central_header+38,zipfi->external_fa,4); 420 ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
419 421
420 ziplocal_putValue_inmemory(zi->ci.central_header+42,zi->ci.pos_local_header,4); 422 ziplocal_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header,4);
421 423
422 for (i=0;i<size_filename;i++) 424 for (i=0;i<size_filename;i++)
423 *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i); 425 *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
@@ -433,25 +435,25 @@ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
433 return ZIP_INTERNALERROR; 435 return ZIP_INTERNALERROR;
434 436
435 /* write the local header */ 437 /* write the local header */
436 err = ziplocal_putValue(zi->filezip,LOCALHEADERMAGIC,4); 438 err = ziplocal_putValue(zi->filezip,(uLong)LOCALHEADERMAGIC,4);
437 439
438 if (err==ZIP_OK) 440 if (err==ZIP_OK)
439 err = ziplocal_putValue(zi->filezip,20,2);/* version needed to extract */ 441 err = ziplocal_putValue(zi->filezip,(uLong)20,2);/* version needed to extract */
440 if (err==ZIP_OK) 442 if (err==ZIP_OK)
441 err = ziplocal_putValue(zi->filezip,zi->ci.flag,2); 443 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.flag,2);
442 444
443 if (err==ZIP_OK) 445 if (err==ZIP_OK)
444 err = ziplocal_putValue(zi->filezip,zi->ci.method,2); 446 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.method,2);
445 447
446 if (err==ZIP_OK) 448 if (err==ZIP_OK)
447 err = ziplocal_putValue(zi->filezip,zi->ci.dosDate,4); 449 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.dosDate,4);
448 450
449 if (err==ZIP_OK) 451 if (err==ZIP_OK)
450 err = ziplocal_putValue(zi->filezip,0,4); /* crc 32, unknown */ 452 err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* crc 32, unknown */
451 if (err==ZIP_OK) 453 if (err==ZIP_OK)
452 err = ziplocal_putValue(zi->filezip,0,4); /* compressed size, unknown */ 454 err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* compressed size, unknown */
453 if (err==ZIP_OK) 455 if (err==ZIP_OK)
454 err = ziplocal_putValue(zi->filezip,0,4); /* uncompressed size, unknown */ 456 err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* uncompressed size, unknown */
455 457
456 if (err==ZIP_OK) 458 if (err==ZIP_OK)
457 err = ziplocal_putValue(zi->filezip,(uLong)size_filename,2); 459 err = ziplocal_putValue(zi->filezip,(uLong)size_filename,2);
@@ -481,7 +483,7 @@ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
481 zi->ci.stream.opaque = (voidpf)0; 483 zi->ci.stream.opaque = (voidpf)0;
482 484
483 err = deflateInit2(&zi->ci.stream, level, 485 err = deflateInit2(&zi->ci.stream, level,
484 Z_DEFLATED, -MAX_WBITS, /*DEF_MEM_LEVEL*/8, 0); 486 Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0);
485 487
486 if (err==Z_OK) 488 if (err==Z_OK)
487 zi->ci.stream_initialised = 1; 489 zi->ci.stream_initialised = 1;
@@ -528,7 +530,7 @@ extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
528 { 530 {
529 uLong uTotalOutBefore = zi->ci.stream.total_out; 531 uLong uTotalOutBefore = zi->ci.stream.total_out;
530 err=deflate(&zi->ci.stream, Z_NO_FLUSH); 532 err=deflate(&zi->ci.stream, Z_NO_FLUSH);
531 zi->ci.pos_in_buffered_data += zi->ci.stream.total_out - uTotalOutBefore ; 533 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
532 534
533 } 535 }
534 else 536 else
@@ -585,7 +587,7 @@ extern int ZEXPORT zipCloseFileInZip (file)
585 } 587 }
586 uTotalOutBefore = zi->ci.stream.total_out; 588 uTotalOutBefore = zi->ci.stream.total_out;
587 err=deflate(&zi->ci.stream, Z_FINISH); 589 err=deflate(&zi->ci.stream, Z_FINISH);
588 zi->ci.pos_in_buffered_data += zi->ci.stream.total_out - uTotalOutBefore ; 590 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
589 } 591 }
590 592
591 if (err==Z_STREAM_END) 593 if (err==Z_STREAM_END)
@@ -602,11 +604,11 @@ extern int ZEXPORT zipCloseFileInZip (file)
602 zi->ci.stream_initialised = 0; 604 zi->ci.stream_initialised = 0;
603 } 605 }
604 606
605 ziplocal_putValue_inmemory(zi->ci.central_header+16,zi->ci.crc32,4); /*crc*/ 607 ziplocal_putValue_inmemory(zi->ci.central_header+16,(uLong)zi->ci.crc32,4); /*crc*/
606 ziplocal_putValue_inmemory(zi->ci.central_header+20, 608 ziplocal_putValue_inmemory(zi->ci.central_header+20,
607 zi->ci.stream.total_out,4); /*compr size*/ 609 (uLong)zi->ci.stream.total_out,4); /*compr size*/
608 ziplocal_putValue_inmemory(zi->ci.central_header+24, 610 ziplocal_putValue_inmemory(zi->ci.central_header+24,
609 zi->ci.stream.total_in,4); /*uncompr size*/ 611 (uLong)zi->ci.stream.total_in,4); /*uncompr size*/
610 612
611 if (err==ZIP_OK) 613 if (err==ZIP_OK)
612 err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header, 614 err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header,
@@ -621,13 +623,13 @@ extern int ZEXPORT zipCloseFileInZip (file)
621 err = ZIP_ERRNO; 623 err = ZIP_ERRNO;
622 624
623 if (err==ZIP_OK) 625 if (err==ZIP_OK)
624 err = ziplocal_putValue(zi->filezip,zi->ci.crc32,4); /* crc 32, unknown */ 626 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.crc32,4); /* crc 32, unknown */
625 627
626 if (err==ZIP_OK) /* compressed size, unknown */ 628 if (err==ZIP_OK) /* compressed size, unknown */
627 err = ziplocal_putValue(zi->filezip,zi->ci.stream.total_out,4); 629 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.stream.total_out,4);
628 630
629 if (err==ZIP_OK) /* uncompressed size, unknown */ 631 if (err==ZIP_OK) /* uncompressed size, unknown */
630 err = ziplocal_putValue(zi->filezip,zi->ci.stream.total_in,4); 632 err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.stream.total_in,4);
631 633
632 if (fseek(zi->filezip, 634 if (fseek(zi->filezip,
633 cur_pos_inzip,SEEK_SET)!=0) 635 cur_pos_inzip,SEEK_SET)!=0)
@@ -682,26 +684,26 @@ extern int ZEXPORT zipClose (file, global_comment)
682 free_datablock(zi->central_dir.first_block); 684 free_datablock(zi->central_dir.first_block);
683 685
684 if (err==ZIP_OK) /* Magic End */ 686 if (err==ZIP_OK) /* Magic End */
685 err = ziplocal_putValue(zi->filezip,ENDHEADERMAGIC,4); 687 err = ziplocal_putValue(zi->filezip,(uLong)ENDHEADERMAGIC,4);
686 688
687 if (err==ZIP_OK) /* number of this disk */ 689 if (err==ZIP_OK) /* number of this disk */
688 err = ziplocal_putValue(zi->filezip,0,2); 690 err = ziplocal_putValue(zi->filezip,(uLong)0,2);
689 691
690 if (err==ZIP_OK) /* number of the disk with the start of the central directory */ 692 if (err==ZIP_OK) /* number of the disk with the start of the central directory */
691 err = ziplocal_putValue(zi->filezip,0,2); 693 err = ziplocal_putValue(zi->filezip,(uLong)0,2);
692 694
693 if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ 695 if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
694 err = ziplocal_putValue(zi->filezip,zi->number_entry,2); 696 err = ziplocal_putValue(zi->filezip,(uLong)zi->number_entry,2);
695 697
696 if (err==ZIP_OK) /* total number of entries in the central dir */ 698 if (err==ZIP_OK) /* total number of entries in the central dir */
697 err = ziplocal_putValue(zi->filezip,zi->number_entry,2); 699 err = ziplocal_putValue(zi->filezip,(uLong)zi->number_entry,2);
698 700
699 if (err==ZIP_OK) /* size of the central directory */ 701 if (err==ZIP_OK) /* size of the central directory */
700 err = ziplocal_putValue(zi->filezip,size_centraldir,4); 702 err = ziplocal_putValue(zi->filezip,(uLong)size_centraldir,4);
701 703
702 if (err==ZIP_OK) /* offset of start of central directory with respect to the 704 if (err==ZIP_OK) /* offset of start of central directory with respect to the
703 starting disk number */ 705 starting disk number */
704 err = ziplocal_putValue(zi->filezip,centraldir_pos_inzip ,4); 706 err = ziplocal_putValue(zi->filezip,(uLong)centraldir_pos_inzip ,4);
705 707
706 if (err==ZIP_OK) /* zipfile comment length */ 708 if (err==ZIP_OK) /* zipfile comment length */
707 err = ziplocal_putValue(zi->filezip,(uLong)size_global_comment,2); 709 err = ziplocal_putValue(zi->filezip,(uLong)size_global_comment,2);
diff --git a/contrib/untgz/untgz.c b/contrib/untgz/untgz.c
index 6fa9a5d..4a431ff 100644
--- a/contrib/untgz/untgz.c
+++ b/contrib/untgz/untgz.c
@@ -9,7 +9,6 @@
9#include <stdlib.h> 9#include <stdlib.h>
10#include <string.h> 10#include <string.h>
11#include <time.h> 11#include <time.h>
12#include <utime.h>
13#include <errno.h> 12#include <errno.h>
14#include <fcntl.h> 13#include <fcntl.h>
15#ifdef unix 14#ifdef unix
@@ -21,6 +20,23 @@
21 20
22#include "zlib.h" 21#include "zlib.h"
23 22
23#ifdef WIN32
24# ifndef F_OK
25# define F_OK (0)
26# endif
27# ifdef _MSC_VER
28# define mkdir(dirname,mode) _mkdir(dirname)
29# define strdup(str) _strdup(str)
30# define unlink(fn) _unlink(fn)
31# define access(path,mode) _access(path,mode)
32# else
33# define mkdir(dirname,mode) _mkdir(dirname)
34# endif
35#else
36# include <utime.h>
37#endif
38
39
24/* Values used in typeflag field. */ 40/* Values used in typeflag field. */
25 41
26#define REGTYPE '0' /* regular file */ 42#define REGTYPE '0' /* regular file */
@@ -83,7 +99,7 @@ char *prog;
83 99
84/* This will give a benign warning */ 100/* This will give a benign warning */
85 101
86static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", NULL }; 102static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", ".tar", NULL };
87 103
88/* Return the real name of the TGZ archive */ 104/* Return the real name of the TGZ archive */
89/* or NULL if it does not exist. */ 105/* or NULL if it does not exist. */
@@ -272,14 +288,6 @@ int tar (gzFile in,int action,int arg,int argc,char **argv)
272 if (len < 0) 288 if (len < 0)
273 error (gzerror(in, &err)); 289 error (gzerror(in, &err));
274 /* 290 /*
275 * if we met the end of the tar
276 * or the end-of-tar block,
277 * we are done
278 */
279 if ((len == 0) || (buffer.header.name[0]== 0))
280 break;
281
282 /*
283 * Always expect complete blocks to process 291 * Always expect complete blocks to process
284 * the tar information. 292 * the tar information.
285 */ 293 */
@@ -291,6 +299,13 @@ int tar (gzFile in,int action,int arg,int argc,char **argv)
291 */ 299 */
292 if (getheader == 1) 300 if (getheader == 1)
293 { 301 {
302 /*
303 * if we met the end of the tar
304 * or the end-of-tar block,
305 * we are done
306 */
307 if ((len == 0) || (buffer.header.name[0]== 0)) break;
308
294 tartime = (time_t)getoct(buffer.header.mtime,12); 309 tartime = (time_t)getoct(buffer.header.mtime,12);
295 strcpy(fname,buffer.header.name); 310 strcpy(fname,buffer.header.name);
296 311
@@ -360,6 +375,34 @@ int tar (gzFile in,int action,int arg,int argc,char **argv)
360 getheader = 1; 375 getheader = 1;
361 if ((action == TGZ_EXTRACT) && (outfile != NULL)) 376 if ((action == TGZ_EXTRACT) && (outfile != NULL))
362 { 377 {
378#ifdef WIN32
379 HANDLE hFile;
380 FILETIME ftm,ftLocal;
381 SYSTEMTIME st;
382 struct tm localt;
383
384 fclose(outfile);
385
386 localt = *localtime(&tartime);
387
388 hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE,
389 0, NULL, OPEN_EXISTING, 0, NULL);
390
391 st.wYear = (WORD)localt.tm_year+1900;
392 st.wMonth = (WORD)localt.tm_mon;
393 st.wDayOfWeek = (WORD)localt.tm_wday;
394 st.wDay = (WORD)localt.tm_mday;
395 st.wHour = (WORD)localt.tm_hour;
396 st.wMinute = (WORD)localt.tm_min;
397 st.wSecond = (WORD)localt.tm_sec;
398 st.wMilliseconds = 0;
399 SystemTimeToFileTime(&st,&ftLocal);
400 LocalFileTimeToFileTime(&ftLocal,&ftm);
401 SetFileTime(hFile,&ftm,NULL,&ftm);
402 CloseHandle(hFile);
403
404 outfile = NULL;
405#else
363 struct utimbuf settime; 406 struct utimbuf settime;
364 407
365 settime.actime = settime.modtime = tartime; 408 settime.actime = settime.modtime = tartime;
@@ -367,6 +410,7 @@ int tar (gzFile in,int action,int arg,int argc,char **argv)
367 fclose(outfile); 410 fclose(outfile);
368 outfile = NULL; 411 outfile = NULL;
369 utime(fname,&settime); 412 utime(fname,&settime);
413#endif
370 } 414 }
371 } 415 }
372 } 416 }
diff --git a/contrib/visual-basic.txt b/contrib/visual-basic.txt
index 18aa084..10fb44b 100644
--- a/contrib/visual-basic.txt
+++ b/contrib/visual-basic.txt
@@ -1,5 +1,17 @@
1See below some functions declarations for Visual Basic.
2
3Frequently Asked Question:
4
5Q: Each time I use the compress function I get the -5 error (not enough
6 room in the output buffer).
7
8A: Make sure that the length of the compressed buffer is passed by
9 reference ("as any"), not by value ("as long"). Also check that
10 before the call of compress this length is equal to the total size of
11 the compressed buffer and not zero.
12
13
1From: "Jon Caruana" <jon-net@usa.net> 14From: "Jon Caruana" <jon-net@usa.net>
2To: "Jean-loup Gailly" <gzip@prep.ai.mit.edu>
3Subject: Re: How to port zlib declares to vb? 15Subject: Re: How to port zlib declares to vb?
4Date: Mon, 28 Oct 1996 18:33:03 -0600 16Date: Mon, 28 Oct 1996 18:33:03 -0600
5 17
diff --git a/deflate.c b/deflate.c
index 490813f..25d5818 100644
--- a/deflate.c
+++ b/deflate.c
@@ -52,7 +52,7 @@
52#include "deflate.h" 52#include "deflate.h"
53 53
54const char deflate_copyright[] = 54const char deflate_copyright[] =
55 " deflate 1.1.2 Copyright 1995-1998 Jean-loup Gailly "; 55 " deflate 1.1.3 Copyright 1995-1998 Jean-loup Gailly ";
56/* 56/*
57 If you use the zlib library in a product, an acknowledgment is welcome 57 If you use the zlib library in a product, an acknowledgment is welcome
58 in the documentation of your product. If for some reason you cannot 58 in the documentation of your product. If for some reason you cannot
@@ -608,11 +608,13 @@ int ZEXPORT deflateCopy (dest, source)
608 deflate_state *ss; 608 deflate_state *ss;
609 ushf *overlay; 609 ushf *overlay;
610 610
611 ss = source->state;
612 611
613 if (source == Z_NULL || dest == Z_NULL || ss == Z_NULL) { 612 if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
614 return Z_STREAM_ERROR; 613 return Z_STREAM_ERROR;
615 } 614 }
615
616 ss = source->state;
617
616 *dest = *source; 618 *dest = *source;
617 619
618 ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); 620 ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
diff --git a/deflate.h b/deflate.h
index 0483016..962676d 100644
--- a/deflate.h
+++ b/deflate.h
@@ -230,12 +230,12 @@ typedef struct internal_state {
230 230
231 ulg opt_len; /* bit length of current block with optimal trees */ 231 ulg opt_len; /* bit length of current block with optimal trees */
232 ulg static_len; /* bit length of current block with static trees */ 232 ulg static_len; /* bit length of current block with static trees */
233 ulg compressed_len; /* total bit length of compressed file */
234 uInt matches; /* number of string matches in current block */ 233 uInt matches; /* number of string matches in current block */
235 int last_eob_len; /* bit length of EOB code for last block */ 234 int last_eob_len; /* bit length of EOB code for last block */
236 235
237#ifdef DEBUG 236#ifdef DEBUG
238 ulg bits_sent; /* bit length of the compressed data */ 237 ulg compressed_len; /* total bit length of compressed file mod 2^32 */
238 ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
239#endif 239#endif
240 240
241 ush bi_buf; 241 ush bi_buf;
@@ -268,7 +268,7 @@ typedef struct internal_state {
268 /* in trees.c */ 268 /* in trees.c */
269void _tr_init OF((deflate_state *s)); 269void _tr_init OF((deflate_state *s));
270int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); 270int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
271ulg _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, 271void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
272 int eof)); 272 int eof));
273void _tr_align OF((deflate_state *s)); 273void _tr_align OF((deflate_state *s));
274void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, 274void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
diff --git a/example.c b/example.c
index 073ce76..8307c84 100644
--- a/example.c
+++ b/example.c
@@ -15,6 +15,12 @@
15 extern void exit OF((int)); 15 extern void exit OF((int));
16#endif 16#endif
17 17
18#if defined(VMS) || defined(RISCOS)
19# define TESTFILE "foo-gz"
20#else
21# define TESTFILE "foo.gz"
22#endif
23
18#define CHECK_ERR(err, msg) { \ 24#define CHECK_ERR(err, msg) { \
19 if (err != Z_OK) { \ 25 if (err != Z_OK) { \
20 fprintf(stderr, "%s error: %d\n", msg, err); \ 26 fprintf(stderr, "%s error: %d\n", msg, err); \
@@ -79,8 +85,8 @@ void test_compress(compr, comprLen, uncompr, uncomprLen)
79 * Test read/write of .gz files 85 * Test read/write of .gz files
80 */ 86 */
81void test_gzio(out, in, uncompr, uncomprLen) 87void test_gzio(out, in, uncompr, uncomprLen)
82 const char *out; /* output file */ 88 const char *out; /* compressed output file */
83 const char *in; /* input file */ 89 const char *in; /* compressed input file */
84 Byte *uncompr; 90 Byte *uncompr;
85 int uncomprLen; 91 int uncomprLen;
86{ 92{
@@ -528,8 +534,8 @@ int main(argc, argv)
528 } 534 }
529 test_compress(compr, comprLen, uncompr, uncomprLen); 535 test_compress(compr, comprLen, uncompr, uncomprLen);
530 536
531 test_gzio((argc > 1 ? argv[1] : "foo.gz"), 537 test_gzio((argc > 1 ? argv[1] : TESTFILE),
532 (argc > 2 ? argv[2] : "foo.gz"), 538 (argc > 2 ? argv[2] : TESTFILE),
533 uncompr, (int)uncomprLen); 539 uncompr, (int)uncomprLen);
534 540
535 test_deflate(compr, comprLen); 541 test_deflate(compr, comprLen);
diff --git a/gzio.c b/gzio.c
index e29198a..f7c336a 100644
--- a/gzio.c
+++ b/gzio.c
@@ -414,10 +414,14 @@ int ZEXPORT gzread (file, buf, len)
414 s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); 414 s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
415 start = s->stream.next_out; 415 start = s->stream.next_out;
416 416
417 if (getLong(s) != s->crc || getLong(s) != s->stream.total_out) { 417 if (getLong(s) != s->crc) {
418 s->z_err = Z_DATA_ERROR; 418 s->z_err = Z_DATA_ERROR;
419 } else { 419 } else {
420 /* Check for concatenated .gz files: */ 420 (void)getLong(s);
421 /* The uncompressed length returned by above getlong() may
422 * be different from s->stream.total_out) in case of
423 * concatenated .gz files. Check for such files:
424 */
421 check_header(s); 425 check_header(s);
422 if (s->z_err == Z_OK) { 426 if (s->z_err == Z_OK) {
423 uLong total_in = s->stream.total_in; 427 uLong total_in = s->stream.total_in;
@@ -670,7 +674,7 @@ z_off_t ZEXPORT gzseek (file, offset, whence)
670 return -1L; 674 return -1L;
671#else 675#else
672 if (whence == SEEK_SET) { 676 if (whence == SEEK_SET) {
673 offset -= s->stream.total_out; 677 offset -= s->stream.total_in;
674 } 678 }
675 if (offset < 0) return -1L; 679 if (offset < 0) return -1L;
676 680
@@ -745,6 +749,7 @@ int ZEXPORT gzrewind (file)
745 s->z_eof = 0; 749 s->z_eof = 0;
746 s->stream.avail_in = 0; 750 s->stream.avail_in = 0;
747 s->stream.next_in = s->inbuf; 751 s->stream.next_in = s->inbuf;
752 s->crc = crc32(0L, Z_NULL, 0);
748 753
749 if (s->startpos == 0) { /* not a compressed file */ 754 if (s->startpos == 0) { /* not a compressed file */
750 rewind(s->file); 755 rewind(s->file);
@@ -793,7 +798,8 @@ local void putLong (file, x)
793} 798}
794 799
795/* =========================================================================== 800/* ===========================================================================
796 Reads a long in LSB order from the given gz_stream. Sets 801 Reads a long in LSB order from the given gz_stream. Sets z_err in case
802 of error.
797*/ 803*/
798local uLong getLong (s) 804local uLong getLong (s)
799 gz_stream *s; 805 gz_stream *s;
diff --git a/infblock.c b/infblock.c
index f8940c7..f4920fa 100644
--- a/infblock.c
+++ b/infblock.c
@@ -345,13 +345,6 @@ int r;
345 s->mode = TYPE; 345 s->mode = TYPE;
346 break; 346 break;
347 } 347 }
348 if (k > 7) /* return unused byte, if any */
349 {
350 Assert(k < 16, "inflate_codes grabbed too many bytes")
351 k -= 8;
352 n++;
353 p--; /* can always return one */
354 }
355 s->mode = DRY; 348 s->mode = DRY;
356 case DRY: 349 case DRY:
357 FLUSH 350 FLUSH
diff --git a/infcodes.c b/infcodes.c
index 1d3baa9..d4e5ee9 100644
--- a/infcodes.c
+++ b/infcodes.c
@@ -221,6 +221,13 @@ int r;
221 c->mode = START; 221 c->mode = START;
222 break; 222 break;
223 case WASH: /* o: got eob, possibly more output */ 223 case WASH: /* o: got eob, possibly more output */
224 if (k > 7) /* return unused byte, if any */
225 {
226 Assert(k < 16, "inflate_codes grabbed too many bytes")
227 k -= 8;
228 n++;
229 p--; /* can always return one */
230 }
224 FLUSH 231 FLUSH
225 if (s->read != s->write) 232 if (s->read != s->write)
226 LEAVE 233 LEAVE
diff --git a/inffixed.h b/inffixed.h
index 644ef6c..77f7e76 100644
--- a/inffixed.h
+++ b/inffixed.h
@@ -10,116 +10,142 @@
10local uInt fixed_bl = 9; 10local uInt fixed_bl = 9;
11local uInt fixed_bd = 5; 11local uInt fixed_bd = 5;
12local inflate_huft fixed_tl[] = { 12local inflate_huft fixed_tl[] = {
13 {{96,7},256}, {{0,8},80}, {{0,8},16}, {{84,8},115}, {{82,7},31}, 13 {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
14 {{0,8},112}, {{0,8},48}, {{0,9},192}, {{80,7},10}, {{0,8},96}, 14 {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
15 {{0,8},32}, {{0,9},160}, {{0,8},0}, {{0,8},128}, {{0,8},64}, 15 {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
16 {{0,9},224}, {{80,7},6}, {{0,8},88}, {{0,8},24}, {{0,9},144}, 16 {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
17 {{83,7},59}, {{0,8},120}, {{0,8},56}, {{0,9},208}, {{81,7},17}, 17 {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
18 {{0,8},104}, {{0,8},40}, {{0,9},176}, {{0,8},8}, {{0,8},136}, 18 {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
19 {{0,8},72}, {{0,9},240}, {{80,7},4}, {{0,8},84}, {{0,8},20}, 19 {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
20 {{85,8},227}, {{83,7},43}, {{0,8},116}, {{0,8},52}, {{0,9},200}, 20 {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
21 {{81,7},13}, {{0,8},100}, {{0,8},36}, {{0,9},168}, {{0,8},4}, 21 {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
22 {{0,8},132}, {{0,8},68}, {{0,9},232}, {{80,7},8}, {{0,8},92}, 22 {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
23 {{0,8},28}, {{0,9},152}, {{84,7},83}, {{0,8},124}, {{0,8},60}, 23 {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
24 {{0,9},216}, {{82,7},23}, {{0,8},108}, {{0,8},44}, {{0,9},184}, 24 {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
25 {{0,8},12}, {{0,8},140}, {{0,8},76}, {{0,9},248}, {{80,7},3}, 25 {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
26 {{0,8},82}, {{0,8},18}, {{85,8},163}, {{83,7},35}, {{0,8},114}, 26 {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
27 {{0,8},50}, {{0,9},196}, {{81,7},11}, {{0,8},98}, {{0,8},34}, 27 {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
28 {{0,9},164}, {{0,8},2}, {{0,8},130}, {{0,8},66}, {{0,9},228}, 28 {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
29 {{80,7},7}, {{0,8},90}, {{0,8},26}, {{0,9},148}, {{84,7},67}, 29 {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
30 {{0,8},122}, {{0,8},58}, {{0,9},212}, {{82,7},19}, {{0,8},106}, 30 {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
31 {{0,8},42}, {{0,9},180}, {{0,8},10}, {{0,8},138}, {{0,8},74}, 31 {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
32 {{0,9},244}, {{80,7},5}, {{0,8},86}, {{0,8},22}, {{192,8},0}, 32 {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
33 {{83,7},51}, {{0,8},118}, {{0,8},54}, {{0,9},204}, {{81,7},15}, 33 {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
34 {{0,8},102}, {{0,8},38}, {{0,9},172}, {{0,8},6}, {{0,8},134}, 34 {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
35 {{0,8},70}, {{0,9},236}, {{80,7},9}, {{0,8},94}, {{0,8},30}, 35 {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
36 {{0,9},156}, {{84,7},99}, {{0,8},126}, {{0,8},62}, {{0,9},220}, 36 {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
37 {{82,7},27}, {{0,8},110}, {{0,8},46}, {{0,9},188}, {{0,8},14}, 37 {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
38 {{0,8},142}, {{0,8},78}, {{0,9},252}, {{96,7},256}, {{0,8},81}, 38 {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
39 {{0,8},17}, {{85,8},131}, {{82,7},31}, {{0,8},113}, {{0,8},49}, 39 {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
40 {{0,9},194}, {{80,7},10}, {{0,8},97}, {{0,8},33}, {{0,9},162}, 40 {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
41 {{0,8},1}, {{0,8},129}, {{0,8},65}, {{0,9},226}, {{80,7},6}, 41 {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
42 {{0,8},89}, {{0,8},25}, {{0,9},146}, {{83,7},59}, {{0,8},121}, 42 {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
43 {{0,8},57}, {{0,9},210}, {{81,7},17}, {{0,8},105}, {{0,8},41}, 43 {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
44 {{0,9},178}, {{0,8},9}, {{0,8},137}, {{0,8},73}, {{0,9},242}, 44 {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
45 {{80,7},4}, {{0,8},85}, {{0,8},21}, {{80,8},258}, {{83,7},43}, 45 {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
46 {{0,8},117}, {{0,8},53}, {{0,9},202}, {{81,7},13}, {{0,8},101}, 46 {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
47 {{0,8},37}, {{0,9},170}, {{0,8},5}, {{0,8},133}, {{0,8},69}, 47 {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
48 {{0,9},234}, {{80,7},8}, {{0,8},93}, {{0,8},29}, {{0,9},154}, 48 {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
49 {{84,7},83}, {{0,8},125}, {{0,8},61}, {{0,9},218}, {{82,7},23}, 49 {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
50 {{0,8},109}, {{0,8},45}, {{0,9},186}, {{0,8},13}, {{0,8},141}, 50 {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
51 {{0,8},77}, {{0,9},250}, {{80,7},3}, {{0,8},83}, {{0,8},19}, 51 {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
52 {{85,8},195}, {{83,7},35}, {{0,8},115}, {{0,8},51}, {{0,9},198}, 52 {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
53 {{81,7},11}, {{0,8},99}, {{0,8},35}, {{0,9},166}, {{0,8},3}, 53 {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
54 {{0,8},131}, {{0,8},67}, {{0,9},230}, {{80,7},7}, {{0,8},91}, 54 {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
55 {{0,8},27}, {{0,9},150}, {{84,7},67}, {{0,8},123}, {{0,8},59}, 55 {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
56 {{0,9},214}, {{82,7},19}, {{0,8},107}, {{0,8},43}, {{0,9},182}, 56 {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
57 {{0,8},11}, {{0,8},139}, {{0,8},75}, {{0,9},246}, {{80,7},5}, 57 {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
58 {{0,8},87}, {{0,8},23}, {{192,8},0}, {{83,7},51}, {{0,8},119}, 58 {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
59 {{0,8},55}, {{0,9},206}, {{81,7},15}, {{0,8},103}, {{0,8},39}, 59 {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
60 {{0,9},174}, {{0,8},7}, {{0,8},135}, {{0,8},71}, {{0,9},238}, 60 {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
61 {{80,7},9}, {{0,8},95}, {{0,8},31}, {{0,9},158}, {{84,7},99}, 61 {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
62 {{0,8},127}, {{0,8},63}, {{0,9},222}, {{82,7},27}, {{0,8},111}, 62 {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
63 {{0,8},47}, {{0,9},190}, {{0,8},15}, {{0,8},143}, {{0,8},79}, 63 {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
64 {{0,9},254}, {{96,7},256}, {{0,8},80}, {{0,8},16}, {{84,8},115}, 64 {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
65 {{82,7},31}, {{0,8},112}, {{0,8},48}, {{0,9},193}, {{80,7},10}, 65 {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
66 {{0,8},96}, {{0,8},32}, {{0,9},161}, {{0,8},0}, {{0,8},128}, 66 {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
67 {{0,8},64}, {{0,9},225}, {{80,7},6}, {{0,8},88}, {{0,8},24}, 67 {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
68 {{0,9},145}, {{83,7},59}, {{0,8},120}, {{0,8},56}, {{0,9},209}, 68 {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
69 {{81,7},17}, {{0,8},104}, {{0,8},40}, {{0,9},177}, {{0,8},8}, 69 {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
70 {{0,8},136}, {{0,8},72}, {{0,9},241}, {{80,7},4}, {{0,8},84}, 70 {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
71 {{0,8},20}, {{85,8},227}, {{83,7},43}, {{0,8},116}, {{0,8},52}, 71 {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
72 {{0,9},201}, {{81,7},13}, {{0,8},100}, {{0,8},36}, {{0,9},169}, 72 {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
73 {{0,8},4}, {{0,8},132}, {{0,8},68}, {{0,9},233}, {{80,7},8}, 73 {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
74 {{0,8},92}, {{0,8},28}, {{0,9},153}, {{84,7},83}, {{0,8},124}, 74 {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
75 {{0,8},60}, {{0,9},217}, {{82,7},23}, {{0,8},108}, {{0,8},44}, 75 {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
76 {{0,9},185}, {{0,8},12}, {{0,8},140}, {{0,8},76}, {{0,9},249}, 76 {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
77 {{80,7},3}, {{0,8},82}, {{0,8},18}, {{85,8},163}, {{83,7},35}, 77 {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
78 {{0,8},114}, {{0,8},50}, {{0,9},197}, {{81,7},11}, {{0,8},98}, 78 {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
79 {{0,8},34}, {{0,9},165}, {{0,8},2}, {{0,8},130}, {{0,8},66}, 79 {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
80 {{0,9},229}, {{80,7},7}, {{0,8},90}, {{0,8},26}, {{0,9},149}, 80 {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
81 {{84,7},67}, {{0,8},122}, {{0,8},58}, {{0,9},213}, {{82,7},19}, 81 {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
82 {{0,8},106}, {{0,8},42}, {{0,9},181}, {{0,8},10}, {{0,8},138}, 82 {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
83 {{0,8},74}, {{0,9},245}, {{80,7},5}, {{0,8},86}, {{0,8},22}, 83 {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
84 {{192,8},0}, {{83,7},51}, {{0,8},118}, {{0,8},54}, {{0,9},205}, 84 {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
85 {{81,7},15}, {{0,8},102}, {{0,8},38}, {{0,9},173}, {{0,8},6}, 85 {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
86 {{0,8},134}, {{0,8},70}, {{0,9},237}, {{80,7},9}, {{0,8},94}, 86 {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
87 {{0,8},30}, {{0,9},157}, {{84,7},99}, {{0,8},126}, {{0,8},62}, 87 {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
88 {{0,9},221}, {{82,7},27}, {{0,8},110}, {{0,8},46}, {{0,9},189}, 88 {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
89 {{0,8},14}, {{0,8},142}, {{0,8},78}, {{0,9},253}, {{96,7},256}, 89 {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
90 {{0,8},81}, {{0,8},17}, {{85,8},131}, {{82,7},31}, {{0,8},113}, 90 {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
91 {{0,8},49}, {{0,9},195}, {{80,7},10}, {{0,8},97}, {{0,8},33}, 91 {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
92 {{0,9},163}, {{0,8},1}, {{0,8},129}, {{0,8},65}, {{0,9},227}, 92 {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
93 {{80,7},6}, {{0,8},89}, {{0,8},25}, {{0,9},147}, {{83,7},59}, 93 {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
94 {{0,8},121}, {{0,8},57}, {{0,9},211}, {{81,7},17}, {{0,8},105}, 94 {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
95 {{0,8},41}, {{0,9},179}, {{0,8},9}, {{0,8},137}, {{0,8},73}, 95 {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
96 {{0,9},243}, {{80,7},4}, {{0,8},85}, {{0,8},21}, {{80,8},258}, 96 {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
97 {{83,7},43}, {{0,8},117}, {{0,8},53}, {{0,9},203}, {{81,7},13}, 97 {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
98 {{0,8},101}, {{0,8},37}, {{0,9},171}, {{0,8},5}, {{0,8},133}, 98 {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
99 {{0,8},69}, {{0,9},235}, {{80,7},8}, {{0,8},93}, {{0,8},29}, 99 {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
100 {{0,9},155}, {{84,7},83}, {{0,8},125}, {{0,8},61}, {{0,9},219}, 100 {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
101 {{82,7},23}, {{0,8},109}, {{0,8},45}, {{0,9},187}, {{0,8},13}, 101 {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
102 {{0,8},141}, {{0,8},77}, {{0,9},251}, {{80,7},3}, {{0,8},83}, 102 {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
103 {{0,8},19}, {{85,8},195}, {{83,7},35}, {{0,8},115}, {{0,8},51}, 103 {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
104 {{0,9},199}, {{81,7},11}, {{0,8},99}, {{0,8},35}, {{0,9},167}, 104 {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
105 {{0,8},3}, {{0,8},131}, {{0,8},67}, {{0,9},231}, {{80,7},7}, 105 {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
106 {{0,8},91}, {{0,8},27}, {{0,9},151}, {{84,7},67}, {{0,8},123}, 106 {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
107 {{0,8},59}, {{0,9},215}, {{82,7},19}, {{0,8},107}, {{0,8},43}, 107 {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
108 {{0,9},183}, {{0,8},11}, {{0,8},139}, {{0,8},75}, {{0,9},247}, 108 {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
109 {{80,7},5}, {{0,8},87}, {{0,8},23}, {{192,8},0}, {{83,7},51}, 109 {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
110 {{0,8},119}, {{0,8},55}, {{0,9},207}, {{81,7},15}, {{0,8},103}, 110 {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
111 {{0,8},39}, {{0,9},175}, {{0,8},7}, {{0,8},135}, {{0,8},71}, 111 {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
112 {{0,9},239}, {{80,7},9}, {{0,8},95}, {{0,8},31}, {{0,9},159}, 112 {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
113 {{84,7},99}, {{0,8},127}, {{0,8},63}, {{0,9},223}, {{82,7},27}, 113 {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
114 {{0,8},111}, {{0,8},47}, {{0,9},191}, {{0,8},15}, {{0,8},143}, 114 {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
115 {{0,8},79}, {{0,9},255} 115 {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
116 {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
117 {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
118 {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
119 {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
120 {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
121 {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
122 {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
123 {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
124 {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
125 {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
126 {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
127 {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
128 {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
129 {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
130 {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
131 {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
132 {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
133 {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
134 {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
135 {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
136 {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
137 {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
138 {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
139 {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
140 {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
116 }; 141 };
117local inflate_huft fixed_td[] = { 142local inflate_huft fixed_td[] = {
118 {{80,5},1}, {{87,5},257}, {{83,5},17}, {{91,5},4097}, {{81,5},5}, 143 {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
119 {{89,5},1025}, {{85,5},65}, {{93,5},16385}, {{80,5},3}, {{88,5},513}, 144 {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
120 {{84,5},33}, {{92,5},8193}, {{82,5},9}, {{90,5},2049}, {{86,5},129}, 145 {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
121 {{192,5},24577}, {{80,5},2}, {{87,5},385}, {{83,5},25}, {{91,5},6145}, 146 {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
122 {{81,5},7}, {{89,5},1537}, {{85,5},97}, {{93,5},24577}, {{80,5},4}, 147 {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
123 {{88,5},769}, {{84,5},49}, {{92,5},12289}, {{82,5},13}, {{90,5},3073}, 148 {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
124 {{86,5},193}, {{192,5},24577} 149 {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
150 {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
125 }; 151 };
diff --git a/inftrees.c b/inftrees.c
index 6876ab5..ef1e0b6 100644
--- a/inftrees.c
+++ b/inftrees.c
@@ -11,7 +11,7 @@
11#endif 11#endif
12 12
13const char inflate_copyright[] = 13const char inflate_copyright[] =
14 " inflate 1.1.2 Copyright 1995-1998 Mark Adler "; 14 " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
15/* 15/*
16 If you use the zlib library in a product, an acknowledgment is welcome 16 If you use the zlib library in a product, an acknowledgment is welcome
17 in the documentation of your product. If for some reason you cannot 17 in the documentation of your product. If for some reason you cannot
diff --git a/maketree.c b/maketree.c
index 66dd828..949d786 100644
--- a/maketree.c
+++ b/maketree.c
@@ -24,36 +24,6 @@
24#define exop word.what.Exop 24#define exop word.what.Exop
25#define bits word.what.Bits 25#define bits word.what.Bits
26 26
27/* showtree is only used for debugging purposes */
28void showtree(uInt b, inflate_huft *t, int d)
29{
30 int i, e;
31 char p[2*d+1];
32
33 for (i = 0; i < 2*d; i++)
34 p[i] = ' ';
35 p[i] = 0;
36 printf("%s[%d]\n", p, 1<<b);
37 for (i = 0; i < (1<<b); i++)
38 {
39 e = t[i].exop;
40 if (e == 0) /* simple code */
41 printf("%s%d(%d): literal=%d\n", p, i, t[i].bits, t[i].base);
42 else if (e & 16) /* length */
43 printf("%s%d(%d): length/distance=%d+(%d)\n",
44 p, i, t[i].bits, t[i].base, e & 15);
45 else if ((e & 64) == 0) /* next table */
46 {
47 printf("%s%d(%d): *sub table*\n", p, i, t[i].bits);
48 showtree(e, t + t[i].base, d + 1);
49 }
50 else if (e & 32) /* end of block */
51 printf("%s%d(%d): end of block\n", p, i, t[i].bits);
52 else /* bad code */
53 printf("%s%d: bad code\n", p, i);
54 }
55}
56
57/* generate initialization table for an inflate_huft structure array */ 27/* generate initialization table for an inflate_huft structure array */
58void maketree(uInt b, inflate_huft *t) 28void maketree(uInt b, inflate_huft *t)
59{ 29{
@@ -68,9 +38,9 @@ void maketree(uInt b, inflate_huft *t)
68 fprintf(stderr, "maketree: cannot initialize sub-tables!\n"); 38 fprintf(stderr, "maketree: cannot initialize sub-tables!\n");
69 exit(1); 39 exit(1);
70 } 40 }
71 if (i % 5 == 0) 41 if (i % 4 == 0)
72 printf("\n "); 42 printf("\n ");
73 printf(" {{%u,%u},%u}", t[i].exop, t[i].bits, t[i].base); 43 printf(" {{{%u,%u}},%u}", t[i].exop, t[i].bits, t[i].base);
74 if (++i == (1<<b)) 44 if (++i == (1<<b))
75 break; 45 break;
76 putchar(','); 46 putchar(',');
@@ -95,10 +65,6 @@ void main(void)
95 fprintf(stderr, "inflate_trees_fixed error %d\n", r); 65 fprintf(stderr, "inflate_trees_fixed error %d\n", r);
96 return; 66 return;
97 } 67 }
98 /* puts("Literal/Length Tree:");
99 showtree(bl, tl, 1);
100 puts("Distance Tree:");
101 showtree(bd, td, 1); */
102 puts("/* inffixed.h -- table for decoding fixed codes"); 68 puts("/* inffixed.h -- table for decoding fixed codes");
103 puts(" * Generated automatically by the maketree.c program"); 69 puts(" * Generated automatically by the maketree.c program");
104 puts(" */"); 70 puts(" */");
diff --git a/minigzip.c b/minigzip.c
index c05d0ea..7215eae 100644
--- a/minigzip.c
+++ b/minigzip.c
@@ -48,6 +48,9 @@
48# define GZ_SUFFIX "-gz" 48# define GZ_SUFFIX "-gz"
49# define fileno(file) file->__file 49# define fileno(file) file->__file
50#endif 50#endif
51#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
52# include <unix.h> /* for fileno */
53#endif
51 54
52#ifndef WIN32 /* unlink already in stdio.h for WIN32 */ 55#ifndef WIN32 /* unlink already in stdio.h for WIN32 */
53 extern int unlink OF((const char *)); 56 extern int unlink OF((const char *));
diff --git a/msdos/Makefile.b32 b/msdos/Makefile.b32
index fc3ac68..f476da9 100644
--- a/msdos/Makefile.b32
+++ b/msdos/Makefile.b32
@@ -33,13 +33,13 @@ OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
33 33
34all: test 34all: test
35 35
36adler32.obj: adler32.c zutil.h zlib.h zconf.h 36adler32.obj: adler32.c zlib.h zconf.h
37 $(CC) -c $(CFLAGS) $*.c 37 $(CC) -c $(CFLAGS) $*.c
38 38
39compress.obj: compress.c zlib.h zconf.h 39compress.obj: compress.c zlib.h zconf.h
40 $(CC) -c $(CFLAGS) $*.c 40 $(CC) -c $(CFLAGS) $*.c
41 41
42crc32.obj: crc32.c zutil.h zlib.h zconf.h 42crc32.obj: crc32.c zlib.h zconf.h
43 $(CC) -c $(CFLAGS) $*.c 43 $(CC) -c $(CFLAGS) $*.c
44 44
45deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 45deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
diff --git a/msdos/Makefile.bor b/msdos/Makefile.bor
index 2116563..f5651b4 100644
--- a/msdos/Makefile.bor
+++ b/msdos/Makefile.bor
@@ -2,24 +2,40 @@
2# Borland C++ ************ UNTESTED *********** 2# Borland C++ ************ UNTESTED ***********
3 3
4# To use, do "make -fmakefile.bor" 4# To use, do "make -fmakefile.bor"
5# To compile in small model, set below: MODEL=-ms 5# To compile in small model, set below: MODEL=s
6 6
7# WARNING: the small model is supported but only for small values of 7# WARNING: the small model is supported but only for small values of
8# MAX_WBITS and MAX_MEM_LEVEL. For example: 8# MAX_WBITS and MAX_MEM_LEVEL. For example:
9# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3 9# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3
10# If you wish to reduce the memory requirements (default 256K for big 10# If you wish to reduce the memory requirements (default 256K for big
11# objects plus a few K), you can add to CFLAGS below: 11# objects plus a few K), you can add to the LOC macro below:
12# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 12# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
13# See zconf.h for details about the memory requirements. 13# See zconf.h for details about the memory requirements.
14 14
15# ------------- Turbo C++, Borland C++ ------------- 15# ------------- Turbo C++, Borland C++ -------------
16MODEL=-ml 16
17CFLAGS=-O2 -Z $(MODEL) 17# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
18# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
19# to the declaration of LOC here:
20LOC = $(LOCAL_ZLIB)
21
22# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
23CPU_TYP = 0
24
25# Memory model: one of s, m, c, l (small, medium, compact, large)
26MODEL=l
27
18CC=bcc 28CC=bcc
19LD=bcc
20LIB=tlib
21# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version 29# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version
22LDFLAGS=$(MODEL) 30LD=$(CC)
31AR=tlib
32
33# compiler flags
34CFLAGS=-O2 -Z -m$(MODEL) $(LOC)
35# replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0
36
37LDFLAGS=-m$(MODEL)
38
23O=.obj 39O=.obj
24 40
25# variables 41# variables
@@ -32,69 +48,73 @@ OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
32OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\ 48OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
33 infutil$(O)+inffast$(O) 49 infutil$(O)+inffast$(O)
34 50
51ZLIB_H = zlib.h zconf.h
52ZUTIL_H = zutil.h $(ZLIB_H)
53
54ZLIB_LIB = zlib_$(MODEL).lib
55
35all: test 56all: test
36 57
37adler32.obj: adler32.c zutil.h zlib.h zconf.h 58# individual dependencies and action rules:
59adler32.obj: adler32.c $(ZLIB_H)
38 $(CC) -c $(CFLAGS) $*.c 60 $(CC) -c $(CFLAGS) $*.c
39 61
40compress.obj: compress.c zlib.h zconf.h 62compress.obj: compress.c $(ZLIB_H)
41 $(CC) -c $(CFLAGS) $*.c 63 $(CC) -c $(CFLAGS) $*.c
42 64
43crc32.obj: crc32.c zutil.h zlib.h zconf.h 65crc32.obj: crc32.c $(ZLIB_H)
44 $(CC) -c $(CFLAGS) $*.c 66 $(CC) -c $(CFLAGS) $*.c
45 67
46deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 68deflate.obj: deflate.c deflate.h $(ZUTIL_H)
47 $(CC) -c $(CFLAGS) $*.c 69 $(CC) -c $(CFLAGS) $*.c
48 70
49gzio.obj: gzio.c zutil.h zlib.h zconf.h 71gzio.obj: gzio.c $(ZUTIL_H)
50 $(CC) -c $(CFLAGS) $*.c 72 $(CC) -c $(CFLAGS) $*.c
51 73
52infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\ 74infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
53 infcodes.h infutil.h
54 $(CC) -c $(CFLAGS) $*.c 75 $(CC) -c $(CFLAGS) $*.c
55 76
56infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\ 77infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
57 infcodes.h inffast.h
58 $(CC) -c $(CFLAGS) $*.c 78 $(CC) -c $(CFLAGS) $*.c
59 79
60inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h 80inflate.obj: inflate.c $(ZUTIL_H) infblock.h
61 $(CC) -c $(CFLAGS) $*.c 81 $(CC) -c $(CFLAGS) $*.c
62 82
63inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h 83inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
64 $(CC) -c $(CFLAGS) $*.c 84 $(CC) -c $(CFLAGS) $*.c
65 85
66infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h 86infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
67 $(CC) -c $(CFLAGS) $*.c 87 $(CC) -c $(CFLAGS) $*.c
68 88
69inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h 89inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
70 $(CC) -c $(CFLAGS) $*.c 90 $(CC) -c $(CFLAGS) $*.c
71 91
72trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h 92trees.obj: trees.c deflate.h $(ZUTIL_H)
73 $(CC) -c $(CFLAGS) $*.c 93 $(CC) -c $(CFLAGS) $*.c
74 94
75uncompr.obj: uncompr.c zlib.h zconf.h 95uncompr.obj: uncompr.c $(ZLIB_H)
76 $(CC) -c $(CFLAGS) $*.c 96 $(CC) -c $(CFLAGS) $*.c
77 97
78zutil.obj: zutil.c zutil.h zlib.h zconf.h 98zutil.obj: zutil.c $(ZUTIL_H)
79 $(CC) -c $(CFLAGS) $*.c 99 $(CC) -c $(CFLAGS) $*.c
80 100
81example.obj: example.c zlib.h zconf.h 101example.obj: example.c $(ZLIB_H)
82 $(CC) -c $(CFLAGS) $*.c 102 $(CC) -c $(CFLAGS) $*.c
83 103
84minigzip.obj: minigzip.c zlib.h zconf.h 104minigzip.obj: minigzip.c $(ZLIB_H)
85 $(CC) -c $(CFLAGS) $*.c 105 $(CC) -c $(CFLAGS) $*.c
86 106
87# we must cut the command line to fit in the MS/DOS 128 byte limit: 107# we must cut the command line to fit in the MS/DOS 128 byte limit:
88zlib.lib: $(OBJ1) $(OBJ2) 108$(ZLIB_LIB): $(OBJ1) $(OBJ2)
89 del zlib.lib 109 del $(ZLIB_LIB)
90 $(LIB) zlib +$(OBJP1) 110 $(AR) $(ZLIB_LIB) +$(OBJP1)
91 $(LIB) zlib +$(OBJP2) 111 $(AR) $(ZLIB_LIB) +$(OBJP2)
92 112
93example.exe: example.obj zlib.lib 113example.exe: example.obj $(ZLIB_LIB)
94 $(LD) $(LDFLAGS) example.obj zlib.lib 114 $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
95 115
96minigzip.exe: minigzip.obj zlib.lib 116minigzip.exe: minigzip.obj $(ZLIB_LIB)
97 $(LD) $(LDFLAGS) minigzip.obj zlib.lib 117 $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
98 118
99test: example.exe minigzip.exe 119test: example.exe minigzip.exe
100 example 120 example
diff --git a/msdos/Makefile.emx b/msdos/Makefile.emx
new file mode 100644
index 0000000..0e5e5cc
--- /dev/null
+++ b/msdos/Makefile.emx
@@ -0,0 +1,69 @@
1# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98.
2# Copyright (C) 1995-1998 Jean-loup Gailly.
3# For conditions of distribution and use, see copyright notice in zlib.h
4
5# To compile, or to compile and test, type:
6#
7# make -fmakefile.emx; make test -fmakefile.emx
8#
9
10CC=gcc
11
12#CFLAGS=-MMD -O
13#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
14#CFLAGS=-MMD -g -DDEBUG
15CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
16 -Wstrict-prototypes -Wmissing-prototypes
17
18# If cp.exe is available, replace "copy /Y" with "cp -fp" .
19CP=copy /Y
20# If gnu install.exe is available, replace $(CP) with ginstall.
21INSTALL=$(CP)
22# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
23RM=del
24LDLIBS=-L. -lzlib
25LD=$(CC) -s -o
26LDSHARED=$(CC)
27
28INCL=zlib.h zconf.h
29LIBS=zlib.a
30
31AR=ar rcs
32
33prefix=/usr/local
34exec_prefix = $(prefix)
35
36OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
37 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
38
39TEST_OBJS = example.o minigzip.o
40
41all: example.exe minigzip.exe
42
43test: all
44 ./example
45 echo hello world | .\minigzip | .\minigzip -d
46
47%.o : %.c
48 $(CC) $(CFLAGS) -c $< -o $@
49
50zlib.a: $(OBJS)
51 $(AR) $@ $(OBJS)
52
53%.exe : %.o $(LIBS)
54 $(LD) $@ $< $(LDLIBS)
55
56
57.PHONY : clean
58
59clean:
60 $(RM) *.d
61 $(RM) *.o
62 $(RM) *.exe
63 $(RM) zlib.a
64 $(RM) foo.gz
65
66DEPS := $(wildcard *.d)
67ifneq ($(DEPS),)
68include $(DEPS)
69endif
diff --git a/msdos/Makefile.msc b/msdos/Makefile.msc
index 1a6d663..562201d 100644
--- a/msdos/Makefile.msc
+++ b/msdos/Makefile.msc
@@ -2,20 +2,36 @@
2# Microsoft C 5.1 or later 2# Microsoft C 5.1 or later
3 3
4# To use, do "make makefile.msc" 4# To use, do "make makefile.msc"
5# To compile in small model, set below: MODEL=-AS 5# To compile in small model, set below: MODEL=S
6 6
7# If you wish to reduce the memory requirements (default 256K for big 7# If you wish to reduce the memory requirements (default 256K for big
8# objects plus a few K), you can add to CFLAGS below: 8# objects plus a few K), you can add to the LOC macro below:
9# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 9# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
10# See zconf.h for details about the memory requirements. 10# See zconf.h for details about the memory requirements.
11 11
12# ------------- Microsoft C 5.1 and later ------------- 12# ------------- Microsoft C 5.1 and later -------------
13MODEL=-AL 13
14CFLAGS=-Oait -Gs -nologo -W3 $(MODEL) 14# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
15#-Ox generates bad code with MSC 5.1 15# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
16# to the declaration of LOC here:
17LOC = $(LOCAL_ZLIB)
18
19# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
20CPU_TYP = 0
21
22# Memory model: one of S, M, C, L (small, medium, compact, large)
23MODEL=L
24
16CC=cl 25CC=cl
26CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC)
27#-Ox generates bad code with MSC 5.1
28LIB_CFLAGS=-Zl $(CFLAGS)
29
17LD=link 30LD=link
18LDFLAGS=/e/st:0x1500/noe 31LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode
32# "/farcall/packcode" are only useful for `large code' memory models
33# but should be a "no-op" for small code models.
34
19O=.obj 35O=.obj
20 36
21# variables 37# variables
@@ -28,69 +44,73 @@ OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
28OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\ 44OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
29 infutil$(O)+inffast$(O) 45 infutil$(O)+inffast$(O)
30 46
31all: zlib.lib example.exe minigzip.exe 47ZLIB_H = zlib.h zconf.h
48ZUTIL_H = zutil.h $(ZLIB_H)
32 49
33adler32.obj: adler32.c zutil.h zlib.h zconf.h 50ZLIB_LIB = zlib_$(MODEL).lib
34 $(CC) -c $(CFLAGS) $*.c
35 51
36compress.obj: compress.c zlib.h zconf.h 52all: $(ZLIB_LIB) example.exe minigzip.exe
37 $(CC) -c $(CFLAGS) $*.c
38 53
39crc32.obj: crc32.c zutil.h zlib.h zconf.h 54# individual dependencies and action rules:
40 $(CC) -c $(CFLAGS) $*.c 55adler32.obj: adler32.c $(ZLIB_H)
56 $(CC) -c $(LIB_CFLAGS) $*.c
41 57
42deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 58compress.obj: compress.c $(ZLIB_H)
43 $(CC) -c $(CFLAGS) $*.c 59 $(CC) -c $(LIB_CFLAGS) $*.c
44 60
45gzio.obj: gzio.c zutil.h zlib.h zconf.h 61crc32.obj: crc32.c $(ZLIB_H)
46 $(CC) -c $(CFLAGS) $*.c 62 $(CC) -c $(LIB_CFLAGS) $*.c
47 63
48infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\ 64deflate.obj: deflate.c deflate.h $(ZUTIL_H)
49 infcodes.h infutil.h 65 $(CC) -c $(LIB_CFLAGS) $*.c
50 $(CC) -c $(CFLAGS) $*.c
51 66
52infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\ 67gzio.obj: gzio.c $(ZUTIL_H)
53 infcodes.h inffast.h 68 $(CC) -c $(LIB_CFLAGS) $*.c
54 $(CC) -c $(CFLAGS) $*.c
55 69
56inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h 70infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
57 $(CC) -c $(CFLAGS) $*.c 71 $(CC) -c $(LIB_CFLAGS) $*.c
58 72
59inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h 73infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
60 $(CC) -c $(CFLAGS) $*.c 74 $(CC) -c $(LIB_CFLAGS) $*.c
61 75
62infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h 76inflate.obj: inflate.c $(ZUTIL_H) infblock.h
63 $(CC) -c $(CFLAGS) $*.c 77 $(CC) -c $(LIB_CFLAGS) $*.c
64 78
65inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h 79inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
66 $(CC) -c $(CFLAGS) $*.c 80 $(CC) -c $(LIB_CFLAGS) $*.c
67 81
68trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h 82infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
69 $(CC) -c $(CFLAGS) $*.c 83 $(CC) -c $(LIB_CFLAGS) $*.c
70 84
71uncompr.obj: uncompr.c zlib.h zconf.h 85inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
72 $(CC) -c $(CFLAGS) $*.c 86 $(CC) -c $(LIB_CFLAGS) $*.c
73 87
74zutil.obj: zutil.c zutil.h zlib.h zconf.h 88trees.obj: trees.c deflate.h $(ZUTIL_H)
75 $(CC) -c $(CFLAGS) $*.c 89 $(CC) -c $(LIB_CFLAGS) $*.c
90
91uncompr.obj: uncompr.c $(ZLIB_H)
92 $(CC) -c $(LIB_CFLAGS) $*.c
93
94zutil.obj: zutil.c $(ZUTIL_H)
95 $(CC) -c $(LIB_CFLAGS) $*.c
76 96
77example.obj: example.c zlib.h zconf.h 97example.obj: example.c $(ZLIB_H)
78 $(CC) -c $(CFLAGS) $*.c 98 $(CC) -c $(CFLAGS) $*.c
79 99
80minigzip.obj: minigzip.c zlib.h zconf.h 100minigzip.obj: minigzip.c $(ZLIB_H)
81 $(CC) -c $(CFLAGS) $*.c 101 $(CC) -c $(CFLAGS) $*.c
82 102
83# we must cut the command line to fit in the MS/DOS 128 byte limit: 103# we must cut the command line to fit in the MS/DOS 128 byte limit:
84zlib.lib: $(OBJ1) $(OBJ2) 104$(ZLIB_LIB): $(OBJ1) $(OBJ2)
85 if exist zlib.lib del zlib.lib 105 if exist $(ZLIB_LIB) del $(ZLIB_LIB)
86 lib zlib $(OBJ1); 106 lib $(ZLIB_LIB) $(OBJ1);
87 lib zlib $(OBJ2); 107 lib $(ZLIB_LIB) $(OBJ2);
88 108
89example.exe: example.obj zlib.lib 109example.exe: example.obj $(ZLIB_LIB)
90 $(LD) $(LDFLAGS) example.obj,,,zlib.lib; 110 $(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB);
91 111
92minigzip.exe: minigzip.obj zlib.lib 112minigzip.exe: minigzip.obj $(ZLIB_LIB)
93 $(LD) $(LDFLAGS) minigzip.obj,,,zlib.lib; 113 $(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB);
94 114
95test: example.exe minigzip.exe 115test: example.exe minigzip.exe
96 example 116 example
diff --git a/msdos/Makefile.tc b/msdos/Makefile.tc
index a46ce73..63e0550 100644
--- a/msdos/Makefile.tc
+++ b/msdos/Makefile.tc
@@ -8,18 +8,18 @@
8# MAX_WBITS and MAX_MEM_LEVEL. For example: 8# MAX_WBITS and MAX_MEM_LEVEL. For example:
9# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 9# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
10# If you wish to reduce the memory requirements (default 256K for big 10# If you wish to reduce the memory requirements (default 256K for big
11# objects plus a few K), you can add to CFLAGS below: 11# objects plus a few K), you can add to CFLAGS below:
12# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 12# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
13# See zconf.h for details about the memory requirements. 13# See zconf.h for details about the memory requirements.
14 14
15# ------------- Turbo C 2.0 ------------- 15# ------------- Turbo C 2.0 -------------
16MODEL=-ml 16MODEL=l
17# CFLAGS=-O2 -G -Z $(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 17# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
18CFLAGS=-O2 -G -Z $(MODEL) 18CFLAGS=-O2 -G -Z -m$(MODEL)
19CC=tcc -I\tc\include 19CC=tcc -I\tc\include
20LD=tcc -L\tc\lib 20LD=tcc -L\tc\lib
21LIB=tlib 21AR=tlib
22LDFLAGS=$(MODEL) -f- 22LDFLAGS=-m$(MODEL) -f-
23O=.obj 23O=.obj
24 24
25# variables 25# variables
@@ -32,69 +32,72 @@ OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
32OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\ 32OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
33 infutil$(O)+inffast$(O) 33 infutil$(O)+inffast$(O)
34 34
35ZLIB_H = zlib.h zconf.h
36ZUTIL_H = zutil.h $(ZLIB_H)
37
38ZLIB_LIB = zlib_$(MODEL).lib
39
35all: test 40all: test
36 41
37adler32.obj: adler32.c zutil.h zlib.h zconf.h 42adler32.obj: adler32.c $(ZLIB_H)
38 $(CC) -c $(CFLAGS) $*.c 43 $(CC) -c $(CFLAGS) $*.c
39 44
40compress.obj: compress.c zlib.h zconf.h 45compress.obj: compress.c $(ZLIB_H)
41 $(CC) -c $(CFLAGS) $*.c 46 $(CC) -c $(CFLAGS) $*.c
42 47
43crc32.obj: crc32.c zutil.h zlib.h zconf.h 48crc32.obj: crc32.c $(ZLIB_H)
44 $(CC) -c $(CFLAGS) $*.c 49 $(CC) -c $(CFLAGS) $*.c
45 50
46deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 51deflate.obj: deflate.c deflate.h $(ZUTIL_H)
47 $(CC) -c $(CFLAGS) $*.c 52 $(CC) -c $(CFLAGS) $*.c
48 53
49gzio.obj: gzio.c zutil.h zlib.h zconf.h 54gzio.obj: gzio.c $(ZUTIL_H)
50 $(CC) -c $(CFLAGS) $*.c 55 $(CC) -c $(CFLAGS) $*.c
51 56
52infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\ 57infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
53 infcodes.h infutil.h
54 $(CC) -c $(CFLAGS) $*.c 58 $(CC) -c $(CFLAGS) $*.c
55 59
56infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\ 60infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
57 infcodes.h inffast.h
58 $(CC) -c $(CFLAGS) $*.c 61 $(CC) -c $(CFLAGS) $*.c
59 62
60inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h 63inflate.obj: inflate.c $(ZUTIL_H) infblock.h
61 $(CC) -c $(CFLAGS) $*.c 64 $(CC) -c $(CFLAGS) $*.c
62 65
63inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h 66inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
64 $(CC) -c $(CFLAGS) $*.c 67 $(CC) -c $(CFLAGS) $*.c
65 68
66infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h 69infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
67 $(CC) -c $(CFLAGS) $*.c 70 $(CC) -c $(CFLAGS) $*.c
68 71
69inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h 72inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
70 $(CC) -c $(CFLAGS) $*.c 73 $(CC) -c $(CFLAGS) $*.c
71 74
72trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h 75trees.obj: trees.c deflate.h $(ZUTIL_H)
73 $(CC) -c $(CFLAGS) $*.c 76 $(CC) -c $(CFLAGS) $*.c
74 77
75uncompr.obj: uncompr.c zlib.h zconf.h 78uncompr.obj: uncompr.c $(ZLIB_H)
76 $(CC) -c $(CFLAGS) $*.c 79 $(CC) -c $(CFLAGS) $*.c
77 80
78zutil.obj: zutil.c zutil.h zlib.h zconf.h 81zutil.obj: zutil.c $(ZUTIL_H)
79 $(CC) -c $(CFLAGS) $*.c 82 $(CC) -c $(CFLAGS) $*.c
80 83
81example.obj: example.c zlib.h zconf.h 84example.obj: example.c $(ZLIB_H)
82 $(CC) -c $(CFLAGS) $*.c 85 $(CC) -c $(CFLAGS) $*.c
83 86
84minigzip.obj: minigzip.c zlib.h zconf.h 87minigzip.obj: minigzip.c $(ZLIB_H)
85 $(CC) -c $(CFLAGS) $*.c 88 $(CC) -c $(CFLAGS) $*.c
86 89
87# we must cut the command line to fit in the MS/DOS 128 byte limit: 90# we must cut the command line to fit in the MS/DOS 128 byte limit:
88zlib.lib: $(OBJ1) $(OBJ2) 91$(ZLIB_LIB): $(OBJ1) $(OBJ2)
89 del zlib.lib 92 del $(ZLIB_LIB)
90 $(LIB) zlib +$(OBJP1) 93 $(AR) $(ZLIB_LIB) +$(OBJP1)
91 $(LIB) zlib +$(OBJP2) 94 $(AR) $(ZLIB_LIB) +$(OBJP2)
92 95
93example.exe: example.obj zlib.lib 96example.exe: example.obj $(ZLIB_LIB)
94 $(LD) $(LDFLAGS) -eexample.exe example.obj zlib.lib 97 $(LD) $(LDFLAGS) -eexample.exe example.obj $(ZLIB_LIB)
95 98
96minigzip.exe: minigzip.obj zlib.lib 99minigzip.exe: minigzip.obj $(ZLIB_LIB)
97 $(LD) $(LDFLAGS) -eminigzip.exe minigzip.obj zlib.lib 100 $(LD) $(LDFLAGS) -eminigzip.exe minigzip.obj $(ZLIB_LIB)
98 101
99test: example.exe minigzip.exe 102test: example.exe minigzip.exe
100 example 103 example
diff --git a/msdos/Makefile.w32 b/msdos/Makefile.w32
index d513c81..0a05fa9 100644
--- a/msdos/Makefile.w32
+++ b/msdos/Makefile.w32
@@ -28,13 +28,13 @@ OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
28 28
29all: zlib.lib example.exe minigzip.exe 29all: zlib.lib example.exe minigzip.exe
30 30
31adler32.obj: adler32.c zutil.h zlib.h zconf.h 31adler32.obj: adler32.c zlib.h zconf.h
32 $(CC) -c $(CFLAGS) $*.c 32 $(CC) -c $(CFLAGS) $*.c
33 33
34compress.obj: compress.c zlib.h zconf.h 34compress.obj: compress.c zlib.h zconf.h
35 $(CC) -c $(CFLAGS) $*.c 35 $(CC) -c $(CFLAGS) $*.c
36 36
37crc32.obj: crc32.c zutil.h zlib.h zconf.h 37crc32.obj: crc32.c zlib.h zconf.h
38 $(CC) -c $(CFLAGS) $*.c 38 $(CC) -c $(CFLAGS) $*.c
39 39
40deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 40deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
diff --git a/msdos/Makefile.wat b/msdos/Makefile.wat
index 2a3b629..44bf860 100644
--- a/msdos/Makefile.wat
+++ b/msdos/Makefile.wat
@@ -30,13 +30,13 @@ OBJP3=infutil$(O)+inffast$(O)
30 30
31all: test 31all: test
32 32
33adler32.obj: adler32.c zutil.h zlib.h zconf.h 33adler32.obj: adler32.c zlib.h zconf.h
34 $(CC) $(CFLAGS) $*.c 34 $(CC) $(CFLAGS) $*.c
35 35
36compress.obj: compress.c zlib.h zconf.h 36compress.obj: compress.c zlib.h zconf.h
37 $(CC) $(CFLAGS) $*.c 37 $(CC) $(CFLAGS) $*.c
38 38
39crc32.obj: crc32.c zutil.h zlib.h zconf.h 39crc32.obj: crc32.c zlib.h zconf.h
40 $(CC) $(CFLAGS) $*.c 40 $(CC) $(CFLAGS) $*.c
41 41
42deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h 42deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
diff --git a/msdos/zlib.def b/msdos/zlib.def
index e4edaad..6c04412 100644
--- a/msdos/zlib.def
+++ b/msdos/zlib.def
@@ -8,7 +8,7 @@ SUBSYSTEM WINDOWS
8 8
9STUB 'WINSTUB.EXE' 9STUB 'WINSTUB.EXE'
10 10
11VERSION 1.11 11VERSION 1.13
12 12
13CODE EXECUTE READ 13CODE EXECUTE READ
14 14
diff --git a/msdos/zlib.rc b/msdos/zlib.rc
index 0a38186..556d4ff 100644
--- a/msdos/zlib.rc
+++ b/msdos/zlib.rc
@@ -2,8 +2,8 @@
2 2
3#define IDR_VERSION1 1 3#define IDR_VERSION1 1
4IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE 4IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1,1,2,0 5 FILEVERSION 1,1,3,0
6 PRODUCTVERSION 1,1,2,0 6 PRODUCTVERSION 1,1,3,0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0 8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32 9 FILEOS VOS_DOS_WINDOWS32
@@ -17,7 +17,7 @@ BEGIN
17 17
18 BEGIN 18 BEGIN
19 VALUE "FileDescription", "zlib data compression library\0" 19 VALUE "FileDescription", "zlib data compression library\0"
20 VALUE "FileVersion", "1.1.2\0" 20 VALUE "FileVersion", "1.1.3\0"
21 VALUE "InternalName", "zlib\0" 21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlib.dll\0" 22 VALUE "OriginalFilename", "zlib.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0" 23 VALUE "ProductName", "ZLib.DLL\0"
diff --git a/nt/Makefile.emx b/nt/Makefile.emx
new file mode 100644
index 0000000..2d475b1
--- /dev/null
+++ b/nt/Makefile.emx
@@ -0,0 +1,138 @@
1# Makefile for zlib. Modified for emx/rsxnt by Chr. Spieler, 6/16/98.
2# Copyright (C) 1995-1998 Jean-loup Gailly.
3# For conditions of distribution and use, see copyright notice in zlib.h
4
5# To compile, or to compile and test, type:
6#
7# make -fmakefile.emx; make test -fmakefile.emx
8#
9
10CC=gcc -Zwin32
11
12#CFLAGS=-MMD -O
13#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
14#CFLAGS=-MMD -g -DDEBUG
15CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
16 -Wstrict-prototypes -Wmissing-prototypes
17
18# If cp.exe is available, replace "copy /Y" with "cp -fp" .
19CP=copy /Y
20# If gnu install.exe is available, replace $(CP) with ginstall.
21INSTALL=$(CP)
22# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
23RM=del
24LDLIBS=-L. -lzlib
25LD=$(CC) -s -o
26LDSHARED=$(CC)
27
28INCL=zlib.h zconf.h
29LIBS=zlib.a
30
31AR=ar rcs
32
33prefix=/usr/local
34exec_prefix = $(prefix)
35
36OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
37 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
38
39TEST_OBJS = example.o minigzip.o
40
41all: example.exe minigzip.exe
42
43test: all
44 ./example
45 echo hello world | .\minigzip | .\minigzip -d
46
47%.o : %.c
48 $(CC) $(CFLAGS) -c $< -o $@
49
50zlib.a: $(OBJS)
51 $(AR) $@ $(OBJS)
52
53%.exe : %.o $(LIBS)
54 $(LD) $@ $< $(LDLIBS)
55
56
57.PHONY : clean
58
59clean:
60 $(RM) *.d
61 $(RM) *.o
62 $(RM) *.exe
63 $(RM) zlib.a
64 $(RM) foo.gz
65
66DEPS := $(wildcard *.d)
67ifneq ($(DEPS),)
68include $(DEPS)
69endif
70# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98.
71# Copyright (C) 1995-1998 Jean-loup Gailly.
72# For conditions of distribution and use, see copyright notice in zlib.h
73
74# To compile, or to compile and test, type:
75#
76# make -fmakefile.emx; make test -fmakefile.emx
77#
78
79CC=gcc
80
81#CFLAGS=-MMD -O
82#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
83#CFLAGS=-MMD -g -DDEBUG
84CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
85 -Wstrict-prototypes -Wmissing-prototypes
86
87# If cp.exe is available, replace "copy /Y" with "cp -fp" .
88CP=copy /Y
89# If gnu install.exe is available, replace $(CP) with ginstall.
90INSTALL=$(CP)
91# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
92RM=del
93LDLIBS=-L. -lzlib
94LD=$(CC) -s -o
95LDSHARED=$(CC)
96
97INCL=zlib.h zconf.h
98LIBS=zlib.a
99
100AR=ar rcs
101
102prefix=/usr/local
103exec_prefix = $(prefix)
104
105OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
106 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
107
108TEST_OBJS = example.o minigzip.o
109
110all: example.exe minigzip.exe
111
112test: all
113 ./example
114 echo hello world | .\minigzip | .\minigzip -d
115
116%.o : %.c
117 $(CC) $(CFLAGS) -c $< -o $@
118
119zlib.a: $(OBJS)
120 $(AR) $@ $(OBJS)
121
122%.exe : %.o $(LIBS)
123 $(LD) $@ $< $(LDLIBS)
124
125
126.PHONY : clean
127
128clean:
129 $(RM) *.d
130 $(RM) *.o
131 $(RM) *.exe
132 $(RM) zlib.a
133 $(RM) foo.gz
134
135DEPS := $(wildcard *.d)
136ifneq ($(DEPS),)
137include $(DEPS)
138endif
diff --git a/nt/Makefile.gcc b/nt/Makefile.gcc
new file mode 100644
index 0000000..cdd652f
--- /dev/null
+++ b/nt/Makefile.gcc
@@ -0,0 +1,87 @@
1# Makefile for zlib. Modified for mingw32 by C. Spieler, 6/16/98.
2# (This Makefile is directly derived from Makefile.dj2)
3# Copyright (C) 1995-1998 Jean-loup Gailly.
4# For conditions of distribution and use, see copyright notice in zlib.h
5
6# To compile, or to compile and test, type:
7#
8# make -fmakefile.gcc; make test -fmakefile.gcc
9#
10# To install libz.a, zconf.h and zlib.h in the mingw32 directories, type:
11#
12# make install -fmakefile.gcc
13#
14
15CC=gcc
16
17#CFLAGS=-MMD -O
18#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
19#CFLAGS=-MMD -g -DDEBUG
20CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
21 -Wstrict-prototypes -Wmissing-prototypes
22
23# If cp.exe is available, replace "copy /Y" with "cp -fp" .
24CP=copy /Y
25# If gnu install.exe is available, replace $(CP) with ginstall.
26INSTALL=$(CP)
27# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
28RM=del
29LDLIBS=-L. -lz
30LD=$(CC) -s -o
31LDSHARED=$(CC)
32
33INCL=zlib.h zconf.h
34LIBS=libz.a
35
36AR=ar rcs
37
38prefix=/usr/local
39exec_prefix = $(prefix)
40
41OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
42 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
43
44TEST_OBJS = example.o minigzip.o
45
46all: example.exe minigzip.exe
47
48test: all
49 ./example
50 echo hello world | .\minigzip | .\minigzip -d
51
52%.o : %.c
53 $(CC) $(CFLAGS) -c $< -o $@
54
55libz.a: $(OBJS)
56 $(AR) $@ $(OBJS)
57
58%.exe : %.o $(LIBS)
59 $(LD) $@ $< $(LDLIBS)
60
61# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .
62
63.PHONY : uninstall clean
64
65install: $(INCL) $(LIBS)
66 -@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
67 -@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
68 $(INSTALL) zlib.h $(INCLUDE_PATH)
69 $(INSTALL) zconf.h $(INCLUDE_PATH)
70 $(INSTALL) libz.a $(LIBRARY_PATH)
71
72uninstall:
73 $(RM) $(INCLUDE_PATH)\zlib.h
74 $(RM) $(INCLUDE_PATH)\zconf.h
75 $(RM) $(LIBRARY_PATH)\libz.a
76
77clean:
78 $(RM) *.d
79 $(RM) *.o
80 $(RM) *.exe
81 $(RM) libz.a
82 $(RM) foo.gz
83
84DEPS := $(wildcard *.d)
85ifneq ($(DEPS),)
86include $(DEPS)
87endif
diff --git a/os2/Makefile.os2 b/os2/Makefile.os2
new file mode 100644
index 0000000..4f56947
--- /dev/null
+++ b/os2/Makefile.os2
@@ -0,0 +1,136 @@
1# Makefile for zlib under OS/2 using GCC (PGCC)
2# For conditions of distribution and use, see copyright notice in zlib.h
3
4# To compile and test, type:
5# cp Makefile.os2 ..
6# cd ..
7# make -f Makefile.os2 test
8
9# This makefile will build a static library z.lib, a shared library
10# z.dll and a import library zdll.lib. You can use either z.lib or
11# zdll.lib by specifying either -lz or -lzdll on gcc's command line
12
13CC=gcc -Zomf -s
14
15CFLAGS=-O6 -Wall
16#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
17#CFLAGS=-g -DDEBUG
18#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
19# -Wstrict-prototypes -Wmissing-prototypes
20
21#################### BUG WARNING: #####################
22## infcodes.c hits a bug in pgcc-1.0, so you have to use either
23## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem)
24## This bug is reportedly fixed in pgcc >1.0, but this was not tested
25CFLAGS+=-fno-force-mem
26
27LDFLAGS=-s -L. -lzdll -Zcrtdll
28LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll
29
30VER=1.1.0
31ZLIB=z.lib
32SHAREDLIB=z.dll
33SHAREDLIBIMP=zdll.lib
34LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP)
35
36AR=emxomfar cr
37IMPLIB=emximp
38RANLIB=echo
39TAR=tar
40SHELL=bash
41
42prefix=/usr/local
43exec_prefix = $(prefix)
44
45OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
46 zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
47
48TEST_OBJS = example.o minigzip.o
49
50DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
51 algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
52 nt/Makefile.nt nt/zlib.dnt contrib/README.contrib contrib/*.txt \
53 contrib/asm386/*.asm contrib/asm386/*.c \
54 contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \
55 contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \
56 contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
57
58all: example.exe minigzip.exe
59
60test: all
61 @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
62 echo hello world | ./minigzip | ./minigzip -d || \
63 echo ' *** minigzip test FAILED ***' ; \
64 if ./example; then \
65 echo ' *** zlib test OK ***'; \
66 else \
67 echo ' *** zlib test FAILED ***'; \
68 fi
69
70$(ZLIB): $(OBJS)
71 $(AR) $@ $(OBJS)
72 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
73
74$(SHAREDLIB): $(OBJS) os2/z.def
75 $(LDSHARED) -o $@ $^
76
77$(SHAREDLIBIMP): os2/z.def
78 $(IMPLIB) -o $@ $^
79
80example.exe: example.o $(LIBS)
81 $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
82
83minigzip.exe: minigzip.o $(LIBS)
84 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
85
86clean:
87 rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
88
89distclean: clean
90
91zip:
92 mv Makefile Makefile~; cp -p Makefile.in Makefile
93 rm -f test.c ztest*.c
94 v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
95 zip -ul9 zlib$$v $(DISTFILES)
96 mv Makefile~ Makefile
97
98dist:
99 mv Makefile Makefile~; cp -p Makefile.in Makefile
100 rm -f test.c ztest*.c
101 d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
102 rm -f $$d.tar.gz; \
103 if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \
104 files=""; \
105 for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \
106 cd ..; \
107 GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \
108 if test ! -d $$d; then rm -f $$d; fi
109 mv Makefile~ Makefile
110
111tags:
112 etags *.[ch]
113
114depend:
115 makedepend -- $(CFLAGS) -- *.[ch]
116
117# DO NOT DELETE THIS LINE -- make depend depends on it.
118
119adler32.o: zlib.h zconf.h
120compress.o: zlib.h zconf.h
121crc32.o: zlib.h zconf.h
122deflate.o: deflate.h zutil.h zlib.h zconf.h
123example.o: zlib.h zconf.h
124gzio.o: zutil.h zlib.h zconf.h
125infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h
126infcodes.o: zutil.h zlib.h zconf.h
127infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h
128inffast.o: zutil.h zlib.h zconf.h inftrees.h
129inffast.o: infblock.h infcodes.h infutil.h inffast.h
130inflate.o: zutil.h zlib.h zconf.h infblock.h
131inftrees.o: zutil.h zlib.h zconf.h inftrees.h
132infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
133minigzip.o: zlib.h zconf.h
134trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
135uncompr.o: zlib.h zconf.h
136zutil.o: zutil.h zlib.h zconf.h
diff --git a/os2/zlib.def b/os2/zlib.def
new file mode 100644
index 0000000..4c753f1
--- /dev/null
+++ b/os2/zlib.def
@@ -0,0 +1,51 @@
1;
2; Slightly modified version of ../nt/zlib.dnt :-)
3;
4
5LIBRARY Z
6DESCRIPTION "Zlib compression library for OS/2"
7CODE PRELOAD MOVEABLE DISCARDABLE
8DATA PRELOAD MOVEABLE MULTIPLE
9
10EXPORTS
11 adler32
12 compress
13 crc32
14 deflate
15 deflateCopy
16 deflateEnd
17 deflateInit2_
18 deflateInit_
19 deflateParams
20 deflateReset
21 deflateSetDictionary
22 gzclose
23 gzdopen
24 gzerror
25 gzflush
26 gzopen
27 gzread
28 gzwrite
29 inflate
30 inflateEnd
31 inflateInit2_
32 inflateInit_
33 inflateReset
34 inflateSetDictionary
35 inflateSync
36 uncompress
37 zlibVersion
38 gzprintf
39 gzputc
40 gzgetc
41 gzseek
42 gzrewind
43 gztell
44 gzeof
45 gzsetparams
46 zError
47 inflateSyncPoint
48 get_crc_table
49 compress2
50 gzputs
51 gzgets
diff --git a/trees.c b/trees.c
index ef31043..f01fb30 100644
--- a/trees.c
+++ b/trees.c
@@ -250,6 +250,13 @@ local void tr_static_init()
250 250
251 if (static_init_done) return; 251 if (static_init_done) return;
252 252
253 /* For some embedded targets, global variables are not initialized: */
254 static_l_desc.static_tree = static_ltree;
255 static_l_desc.extra_bits = extra_lbits;
256 static_d_desc.static_tree = static_dtree;
257 static_d_desc.extra_bits = extra_dbits;
258 static_bl_desc.extra_bits = extra_blbits;
259
253 /* Initialize the mapping length (0..255) -> length code (0..28) */ 260 /* Initialize the mapping length (0..255) -> length code (0..28) */
254 length = 0; 261 length = 0;
255 for (code = 0; code < LENGTH_CODES-1; code++) { 262 for (code = 0; code < LENGTH_CODES-1; code++) {
@@ -378,8 +385,6 @@ void _tr_init(s)
378{ 385{
379 tr_static_init(); 386 tr_static_init();
380 387
381 s->compressed_len = 0L;
382
383 s->l_desc.dyn_tree = s->dyn_ltree; 388 s->l_desc.dyn_tree = s->dyn_ltree;
384 s->l_desc.stat_desc = &static_l_desc; 389 s->l_desc.stat_desc = &static_l_desc;
385 390
@@ -393,6 +398,7 @@ void _tr_init(s)
393 s->bi_valid = 0; 398 s->bi_valid = 0;
394 s->last_eob_len = 8; /* enough lookahead for inflate */ 399 s->last_eob_len = 8; /* enough lookahead for inflate */
395#ifdef DEBUG 400#ifdef DEBUG
401 s->compressed_len = 0L;
396 s->bits_sent = 0L; 402 s->bits_sent = 0L;
397#endif 403#endif
398 404
@@ -865,9 +871,10 @@ void _tr_stored_block(s, buf, stored_len, eof)
865 int eof; /* true if this is the last block for a file */ 871 int eof; /* true if this is the last block for a file */
866{ 872{
867 send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ 873 send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
874#ifdef DEBUG
868 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; 875 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
869 s->compressed_len += (stored_len + 4) << 3; 876 s->compressed_len += (stored_len + 4) << 3;
870 877#endif
871 copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ 878 copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
872} 879}
873 880
@@ -887,7 +894,9 @@ void _tr_align(s)
887{ 894{
888 send_bits(s, STATIC_TREES<<1, 3); 895 send_bits(s, STATIC_TREES<<1, 3);
889 send_code(s, END_BLOCK, static_ltree); 896 send_code(s, END_BLOCK, static_ltree);
897#ifdef DEBUG
890 s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ 898 s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
899#endif
891 bi_flush(s); 900 bi_flush(s);
892 /* Of the 10 bits for the empty block, we have already sent 901 /* Of the 10 bits for the empty block, we have already sent
893 * (10 - bi_valid) bits. The lookahead for the last real code (before 902 * (10 - bi_valid) bits. The lookahead for the last real code (before
@@ -897,7 +906,9 @@ void _tr_align(s)
897 if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { 906 if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
898 send_bits(s, STATIC_TREES<<1, 3); 907 send_bits(s, STATIC_TREES<<1, 3);
899 send_code(s, END_BLOCK, static_ltree); 908 send_code(s, END_BLOCK, static_ltree);
909#ifdef DEBUG
900 s->compressed_len += 10L; 910 s->compressed_len += 10L;
911#endif
901 bi_flush(s); 912 bi_flush(s);
902 } 913 }
903 s->last_eob_len = 7; 914 s->last_eob_len = 7;
@@ -905,10 +916,9 @@ void _tr_align(s)
905 916
906/* =========================================================================== 917/* ===========================================================================
907 * Determine the best encoding for the current block: dynamic trees, static 918 * Determine the best encoding for the current block: dynamic trees, static
908 * trees or store, and output the encoded block to the zip file. This function 919 * trees or store, and output the encoded block to the zip file.
909 * returns the total compressed length for the file so far.
910 */ 920 */
911ulg _tr_flush_block(s, buf, stored_len, eof) 921void _tr_flush_block(s, buf, stored_len, eof)
912 deflate_state *s; 922 deflate_state *s;
913 charf *buf; /* input block, or NULL if too old */ 923 charf *buf; /* input block, or NULL if too old */
914 ulg stored_len; /* length of input block */ 924 ulg stored_len; /* length of input block */
@@ -955,25 +965,6 @@ ulg _tr_flush_block(s, buf, stored_len, eof)
955 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ 965 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
956 } 966 }
957 967
958 /* If compression failed and this is the first and last block,
959 * and if the .zip file can be seeked (to rewrite the local header),
960 * the whole file is transformed into a stored file:
961 */
962#ifdef STORED_FILE_OK
963# ifdef FORCE_STORED_FILE
964 if (eof && s->compressed_len == 0L) { /* force stored file */
965# else
966 if (stored_len <= opt_lenb && eof && s->compressed_len==0L && seekable()) {
967# endif
968 /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
969 if (buf == (charf*)0) error ("block vanished");
970
971 copy_block(buf, (unsigned)stored_len, 0); /* without header */
972 s->compressed_len = stored_len << 3;
973 s->method = STORED;
974 } else
975#endif /* STORED_FILE_OK */
976
977#ifdef FORCE_STORED 968#ifdef FORCE_STORED
978 if (buf != (char*)0) { /* force stored block */ 969 if (buf != (char*)0) { /* force stored block */
979#else 970#else
@@ -995,25 +986,32 @@ ulg _tr_flush_block(s, buf, stored_len, eof)
995#endif 986#endif
996 send_bits(s, (STATIC_TREES<<1)+eof, 3); 987 send_bits(s, (STATIC_TREES<<1)+eof, 3);
997 compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); 988 compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
989#ifdef DEBUG
998 s->compressed_len += 3 + s->static_len; 990 s->compressed_len += 3 + s->static_len;
991#endif
999 } else { 992 } else {
1000 send_bits(s, (DYN_TREES<<1)+eof, 3); 993 send_bits(s, (DYN_TREES<<1)+eof, 3);
1001 send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, 994 send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
1002 max_blindex+1); 995 max_blindex+1);
1003 compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); 996 compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
997#ifdef DEBUG
1004 s->compressed_len += 3 + s->opt_len; 998 s->compressed_len += 3 + s->opt_len;
999#endif
1005 } 1000 }
1006 Assert (s->compressed_len == s->bits_sent, "bad compressed size"); 1001 Assert (s->compressed_len == s->bits_sent, "bad compressed size");
1002 /* The above check is made mod 2^32, for files larger than 512 MB
1003 * and uLong implemented on 32 bits.
1004 */
1007 init_block(s); 1005 init_block(s);
1008 1006
1009 if (eof) { 1007 if (eof) {
1010 bi_windup(s); 1008 bi_windup(s);
1009#ifdef DEBUG
1011 s->compressed_len += 7; /* align on byte boundary */ 1010 s->compressed_len += 7; /* align on byte boundary */
1011#endif
1012 } 1012 }
1013 Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, 1013 Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
1014 s->compressed_len-7*eof)); 1014 s->compressed_len-7*eof));
1015
1016 return s->compressed_len >> 3;
1017} 1015}
1018 1016
1019/* =========================================================================== 1017/* ===========================================================================
diff --git a/zconf.h b/zconf.h
index 89e1a16..6d450fc 100644
--- a/zconf.h
+++ b/zconf.h
@@ -91,8 +91,8 @@
91# define NO_DUMMY_DECL 91# define NO_DUMMY_DECL
92#endif 92#endif
93 93
94/* Borland C incorrectly complains about missing returns: */ 94/* Old Borland C incorrectly complains about missing returns: */
95#if defined(__BORLANDC__) 95#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
96# define NEED_DUMMY_RETURN 96# define NEED_DUMMY_RETURN
97#endif 97#endif
98 98
@@ -148,7 +148,7 @@
148 /* MSC small or medium model */ 148 /* MSC small or medium model */
149# define SMALL_MEDIUM 149# define SMALL_MEDIUM
150# ifdef _MSC_VER 150# ifdef _MSC_VER
151# define FAR __far 151# define FAR _far
152# else 152# else
153# define FAR far 153# define FAR far
154# endif 154# endif
@@ -156,42 +156,68 @@
156#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) 156#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
157# ifndef __32BIT__ 157# ifndef __32BIT__
158# define SMALL_MEDIUM 158# define SMALL_MEDIUM
159# define FAR __far 159# define FAR _far
160# endif 160# endif
161#endif 161#endif
162 162
163/* Compile with -DZLIB_DLL for Windows DLL support */ 163/* Compile with -DZLIB_DLL for Windows DLL support */
164#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL) 164#if defined(ZLIB_DLL)
165# ifdef FAR 165# if defined(_WINDOWS) || defined(WINDOWS)
166# undef FAR 166# ifdef FAR
167# undef FAR
168# endif
169# include <windows.h>
170# define ZEXPORT WINAPI
171# ifdef WIN32
172# define ZEXPORTVA WINAPIV
173# else
174# define ZEXPORTVA FAR _cdecl _export
175# endif
167# endif 176# endif
168# include <windows.h> 177# if defined (__BORLANDC__)
169# define ZEXPORT WINAPI 178# if (__BORLANDC__ >= 0x0500) && defined (WIN32)
170# ifdef WIN32 179# include <windows.h>
171# define ZEXPORTVA WINAPIV 180# define ZEXPORT __declspec(dllexport) WINAPI
181# define ZEXPORTRVA __declspec(dllexport) WINAPIV
182# else
183# if defined (_Windows) && defined (__DLL__)
184# define ZEXPORT _export
185# define ZEXPORTVA _export
186# endif
187# endif
188# endif
189#endif
190
191#if defined (__BEOS__)
192# if defined (ZLIB_DLL)
193# define ZEXTERN extern __declspec(dllexport)
172# else 194# else
173# define ZEXPORTVA FAR _cdecl _export 195# define ZEXTERN extern __declspec(dllimport)
174# endif 196# endif
175#else 197#endif
176# if defined (__BORLANDC__) && defined (_Windows) && defined (__DLL__) 198
177# define ZEXPORT _export 199#ifndef ZEXPORT
178# define ZEXPORTVA _export 200# define ZEXPORT
179# else 201#endif
180# define ZEXPORT 202#ifndef ZEXPORTVA
181# define ZEXPORTVA 203# define ZEXPORTVA
182# endif 204#endif
205#ifndef ZEXTERN
206# define ZEXTERN extern
183#endif 207#endif
184 208
185#ifndef FAR 209#ifndef FAR
186# define FAR 210# define FAR
187#endif 211#endif
188 212
213#if !defined(MACOS) && !defined(TARGET_OS_MAC)
189typedef unsigned char Byte; /* 8 bits */ 214typedef unsigned char Byte; /* 8 bits */
215#endif
190typedef unsigned int uInt; /* 16 bits or more */ 216typedef unsigned int uInt; /* 16 bits or more */
191typedef unsigned long uLong; /* 32 bits or more */ 217typedef unsigned long uLong; /* 32 bits or more */
192 218
193#if defined(__BORLANDC__) && defined(SMALL_MEDIUM) 219#ifdef SMALL_MEDIUM
194 /* Borland C/C++ ignores FAR inside typedef */ 220 /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
195# define Bytef Byte FAR 221# define Bytef Byte FAR
196#else 222#else
197 typedef Byte FAR Bytef; 223 typedef Byte FAR Bytef;
@@ -217,6 +243,7 @@ typedef uLong FAR uLongf;
217#ifndef SEEK_SET 243#ifndef SEEK_SET
218# define SEEK_SET 0 /* Seek from beginning of file. */ 244# define SEEK_SET 0 /* Seek from beginning of file. */
219# define SEEK_CUR 1 /* Seek from current position. */ 245# define SEEK_CUR 1 /* Seek from current position. */
246# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
220#endif 247#endif
221#ifndef z_off_t 248#ifndef z_off_t
222# define z_off_t long 249# define z_off_t long
diff --git a/zlib.3 b/zlib.3
index d08d0e0..25c8495 100644
--- a/zlib.3
+++ b/zlib.3
@@ -1,4 +1,4 @@
1.TH ZLIB 3 "19 March 1998" 1.TH ZLIB 3 "9 July 1998"
2.SH NAME 2.SH NAME
3zlib \- compression/decompression library 3zlib \- compression/decompression library
4.SH SYNOPSIS 4.SH SYNOPSIS
@@ -81,7 +81,7 @@ These documents are also available in other formats from:
81.IP 81.IP
82ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html 82ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
83.SH AUTHORS 83.SH AUTHORS
84Version 1.1.2 84Version 1.1.3
85Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org) 85Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org)
86and Mark Adler (madler@alumni.caltech.edu). 86and Mark Adler (madler@alumni.caltech.edu).
87.LP 87.LP
diff --git a/zlib.h b/zlib.h
index 787b5fd..49f56b4 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
1/* zlib.h -- interface of the 'zlib' general purpose compression library 1/* zlib.h -- interface of the 'zlib' general purpose compression library
2 version 1.1.2, March 19th, 1998 2 version 1.1.3, July 9th, 1998
3 3
4 Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler 4 Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
5 5
@@ -37,7 +37,7 @@
37extern "C" { 37extern "C" {
38#endif 38#endif
39 39
40#define ZLIB_VERSION "1.1.2" 40#define ZLIB_VERSION "1.1.3"
41 41
42/* 42/*
43 The 'zlib' compression library provides in-memory compression and 43 The 'zlib' compression library provides in-memory compression and
@@ -168,7 +168,7 @@ typedef z_stream FAR *z_streamp;
168 168
169 /* basic functions */ 169 /* basic functions */
170 170
171extern const char * ZEXPORT zlibVersion OF((void)); 171ZEXTERN const char * ZEXPORT zlibVersion OF((void));
172/* The application can compare zlibVersion and ZLIB_VERSION for consistency. 172/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
173 If the first character differs, the library code actually used is 173 If the first character differs, the library code actually used is
174 not compatible with the zlib.h header file used by the application. 174 not compatible with the zlib.h header file used by the application.
@@ -176,7 +176,7 @@ extern const char * ZEXPORT zlibVersion OF((void));
176 */ 176 */
177 177
178/* 178/*
179extern int ZEXPORT deflateInit OF((z_streamp strm, int level)); 179ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
180 180
181 Initializes the internal stream state for compression. The fields 181 Initializes the internal stream state for compression. The fields
182 zalloc, zfree and opaque must be initialized before by the caller. 182 zalloc, zfree and opaque must be initialized before by the caller.
@@ -198,7 +198,7 @@ extern int ZEXPORT deflateInit OF((z_streamp strm, int level));
198*/ 198*/
199 199
200 200
201extern int ZEXPORT deflate OF((z_streamp strm, int flush)); 201ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
202/* 202/*
203 deflate compresses as much data as possible, and stops when the input 203 deflate compresses as much data as possible, and stops when the input
204 buffer becomes empty or the output buffer becomes full. It may introduce some 204 buffer becomes empty or the output buffer becomes full. It may introduce some
@@ -271,11 +271,12 @@ extern int ZEXPORT deflate OF((z_streamp strm, int flush));
271 processed or more output produced), Z_STREAM_END if all input has been 271 processed or more output produced), Z_STREAM_END if all input has been
272 consumed and all output has been produced (only when flush is set to 272 consumed and all output has been produced (only when flush is set to
273 Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example 273 Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
274 if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible. 274 if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
275 (for example avail_in or avail_out was zero).
275*/ 276*/
276 277
277 278
278extern int ZEXPORT deflateEnd OF((z_streamp strm)); 279ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
279/* 280/*
280 All dynamically allocated data structures for this stream are freed. 281 All dynamically allocated data structures for this stream are freed.
281 This function discards any unprocessed input and does not flush any 282 This function discards any unprocessed input and does not flush any
@@ -290,7 +291,7 @@ extern int ZEXPORT deflateEnd OF((z_streamp strm));
290 291
291 292
292/* 293/*
293extern int ZEXPORT inflateInit OF((z_streamp strm)); 294ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
294 295
295 Initializes the internal stream state for decompression. The fields 296 Initializes the internal stream state for decompression. The fields
296 next_in, avail_in, zalloc, zfree and opaque must be initialized before by 297 next_in, avail_in, zalloc, zfree and opaque must be initialized before by
@@ -310,7 +311,7 @@ extern int ZEXPORT inflateInit OF((z_streamp strm));
310*/ 311*/
311 312
312 313
313extern int ZEXPORT inflate OF((z_streamp strm, int flush)); 314ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
314/* 315/*
315 inflate decompresses as much data as possible, and stops when the input 316 inflate decompresses as much data as possible, and stops when the input
316 buffer becomes empty or the output buffer becomes full. It may some 317 buffer becomes empty or the output buffer becomes full. It may some
@@ -379,7 +380,7 @@ extern int ZEXPORT inflate OF((z_streamp strm, int flush));
379*/ 380*/
380 381
381 382
382extern int ZEXPORT inflateEnd OF((z_streamp strm)); 383ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
383/* 384/*
384 All dynamically allocated data structures for this stream are freed. 385 All dynamically allocated data structures for this stream are freed.
385 This function discards any unprocessed input and does not flush any 386 This function discards any unprocessed input and does not flush any
@@ -397,12 +398,12 @@ extern int ZEXPORT inflateEnd OF((z_streamp strm));
397*/ 398*/
398 399
399/* 400/*
400extern int ZEXPORT deflateInit2 OF((z_streamp strm, 401ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
401 int level, 402 int level,
402 int method, 403 int method,
403 int windowBits, 404 int windowBits,
404 int memLevel, 405 int memLevel,
405 int strategy)); 406 int strategy));
406 407
407 This is another version of deflateInit with more compression options. The 408 This is another version of deflateInit with more compression options. The
408 fields next_in, zalloc, zfree and opaque must be initialized before by 409 fields next_in, zalloc, zfree and opaque must be initialized before by
@@ -440,14 +441,14 @@ extern int ZEXPORT deflateInit2 OF((z_streamp strm,
440 not perform any compression: this will be done by deflate(). 441 not perform any compression: this will be done by deflate().
441*/ 442*/
442 443
443extern int ZEXPORT deflateSetDictionary OF((z_streamp strm, 444ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
444 const Bytef *dictionary, 445 const Bytef *dictionary,
445 uInt dictLength)); 446 uInt dictLength));
446/* 447/*
447 Initializes the compression dictionary from the given byte sequence 448 Initializes the compression dictionary from the given byte sequence
448 without producing any compressed output. This function must be called 449 without producing any compressed output. This function must be called
449 immediately after deflateInit or deflateInit2, before any call of 450 immediately after deflateInit, deflateInit2 or deflateReset, before any
450 deflate. The compressor and decompressor must use exactly the same 451 call of deflate. The compressor and decompressor must use exactly the same
451 dictionary (see inflateSetDictionary). 452 dictionary (see inflateSetDictionary).
452 453
453 The dictionary should consist of strings (byte sequences) that are likely 454 The dictionary should consist of strings (byte sequences) that are likely
@@ -476,8 +477,8 @@ extern int ZEXPORT deflateSetDictionary OF((z_streamp strm,
476 perform any compression: this will be done by deflate(). 477 perform any compression: this will be done by deflate().
477*/ 478*/
478 479
479extern int ZEXPORT deflateCopy OF((z_streamp dest, 480ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
480 z_streamp source)); 481 z_streamp source));
481/* 482/*
482 Sets the destination stream as a complete copy of the source stream. 483 Sets the destination stream as a complete copy of the source stream.
483 484
@@ -494,7 +495,7 @@ extern int ZEXPORT deflateCopy OF((z_streamp dest,
494 destination. 495 destination.
495*/ 496*/
496 497
497extern int ZEXPORT deflateReset OF((z_streamp strm)); 498ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
498/* 499/*
499 This function is equivalent to deflateEnd followed by deflateInit, 500 This function is equivalent to deflateEnd followed by deflateInit,
500 but does not free and reallocate all the internal compression state. 501 but does not free and reallocate all the internal compression state.
@@ -505,7 +506,9 @@ extern int ZEXPORT deflateReset OF((z_streamp strm));
505 stream state was inconsistent (such as zalloc or state being NULL). 506 stream state was inconsistent (such as zalloc or state being NULL).
506*/ 507*/
507 508
508extern int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy)); 509ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
510 int level,
511 int strategy));
509/* 512/*
510 Dynamically update the compression level and compression strategy. The 513 Dynamically update the compression level and compression strategy. The
511 interpretation of level and strategy is as in deflateInit2. This can be 514 interpretation of level and strategy is as in deflateInit2. This can be
@@ -525,8 +528,8 @@ extern int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy));
525*/ 528*/
526 529
527/* 530/*
528extern int ZEXPORT inflateInit2 OF((z_streamp strm, 531ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
529 int windowBits)); 532 int windowBits));
530 533
531 This is another version of inflateInit with an extra parameter. The 534 This is another version of inflateInit with an extra parameter. The
532 fields next_in, avail_in, zalloc, zfree and opaque must be initialized 535 fields next_in, avail_in, zalloc, zfree and opaque must be initialized
@@ -547,9 +550,9 @@ extern int ZEXPORT inflateInit2 OF((z_streamp strm,
547 modified, but next_out and avail_out are unchanged.) 550 modified, but next_out and avail_out are unchanged.)
548*/ 551*/
549 552
550extern int ZEXPORT inflateSetDictionary OF((z_streamp strm, 553ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
551 const Bytef *dictionary, 554 const Bytef *dictionary,
552 uInt dictLength)); 555 uInt dictLength));
553/* 556/*
554 Initializes the decompression dictionary from the given uncompressed byte 557 Initializes the decompression dictionary from the given uncompressed byte
555 sequence. This function must be called immediately after a call of inflate 558 sequence. This function must be called immediately after a call of inflate
@@ -566,7 +569,7 @@ extern int ZEXPORT inflateSetDictionary OF((z_streamp strm,
566 inflate(). 569 inflate().
567*/ 570*/
568 571
569extern int ZEXPORT inflateSync OF((z_streamp strm)); 572ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
570/* 573/*
571 Skips invalid compressed data until a full flush point (see above the 574 Skips invalid compressed data until a full flush point (see above the
572 description of deflate with Z_FULL_FLUSH) can be found, or until all 575 description of deflate with Z_FULL_FLUSH) can be found, or until all
@@ -581,7 +584,7 @@ extern int ZEXPORT inflateSync OF((z_streamp strm));
581 until success or end of the input data. 584 until success or end of the input data.
582*/ 585*/
583 586
584extern int ZEXPORT inflateReset OF((z_streamp strm)); 587ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
585/* 588/*
586 This function is equivalent to inflateEnd followed by inflateInit, 589 This function is equivalent to inflateEnd followed by inflateInit,
587 but does not free and reallocate all the internal decompression state. 590 but does not free and reallocate all the internal decompression state.
@@ -602,8 +605,8 @@ extern int ZEXPORT inflateReset OF((z_streamp strm));
602 utility functions can easily be modified if you need special options. 605 utility functions can easily be modified if you need special options.
603*/ 606*/
604 607
605extern int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, 608ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
606 const Bytef *source, uLong sourceLen)); 609 const Bytef *source, uLong sourceLen));
607/* 610/*
608 Compresses the source buffer into the destination buffer. sourceLen is 611 Compresses the source buffer into the destination buffer. sourceLen is
609 the byte length of the source buffer. Upon entry, destLen is the total 612 the byte length of the source buffer. Upon entry, destLen is the total
@@ -617,9 +620,9 @@ extern int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
617 buffer. 620 buffer.
618*/ 621*/
619 622
620extern int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, 623ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
621 const Bytef *source, uLong sourceLen, 624 const Bytef *source, uLong sourceLen,
622 int level)); 625 int level));
623/* 626/*
624 Compresses the source buffer into the destination buffer. The level 627 Compresses the source buffer into the destination buffer. The level
625 parameter has the same meaning as in deflateInit. sourceLen is the byte 628 parameter has the same meaning as in deflateInit. sourceLen is the byte
@@ -632,8 +635,8 @@ extern int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
632 Z_STREAM_ERROR if the level parameter is invalid. 635 Z_STREAM_ERROR if the level parameter is invalid.
633*/ 636*/
634 637
635extern int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, 638ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
636 const Bytef *source, uLong sourceLen)); 639 const Bytef *source, uLong sourceLen));
637/* 640/*
638 Decompresses the source buffer into the destination buffer. sourceLen is 641 Decompresses the source buffer into the destination buffer. sourceLen is
639 the byte length of the source buffer. Upon entry, destLen is the total 642 the byte length of the source buffer. Upon entry, destLen is the total
@@ -653,7 +656,7 @@ extern int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
653 656
654typedef voidp gzFile; 657typedef voidp gzFile;
655 658
656extern gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); 659ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
657/* 660/*
658 Opens a gzip (.gz) file for reading or writing. The mode parameter 661 Opens a gzip (.gz) file for reading or writing. The mode parameter
659 is as in fopen ("rb" or "wb") but can also include a compression level 662 is as in fopen ("rb" or "wb") but can also include a compression level
@@ -669,7 +672,7 @@ extern gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
669 can be checked to distinguish the two cases (if errno is zero, the 672 can be checked to distinguish the two cases (if errno is zero, the
670 zlib error is Z_MEM_ERROR). */ 673 zlib error is Z_MEM_ERROR). */
671 674
672extern gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); 675ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
673/* 676/*
674 gzdopen() associates a gzFile with the file descriptor fd. File 677 gzdopen() associates a gzFile with the file descriptor fd. File
675 descriptors are obtained from calls like open, dup, creat, pipe or 678 descriptors are obtained from calls like open, dup, creat, pipe or
@@ -682,7 +685,7 @@ extern gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
682 the (de)compression state. 685 the (de)compression state.
683*/ 686*/
684 687
685extern int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); 688ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
686/* 689/*
687 Dynamically update the compression level or strategy. See the description 690 Dynamically update the compression level or strategy. See the description
688 of deflateInit2 for the meaning of these parameters. 691 of deflateInit2 for the meaning of these parameters.
@@ -690,7 +693,7 @@ extern int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
690 opened for writing. 693 opened for writing.
691*/ 694*/
692 695
693extern int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); 696ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
694/* 697/*
695 Reads the given number of uncompressed bytes from the compressed file. 698 Reads the given number of uncompressed bytes from the compressed file.
696 If the input file was not in gzip format, gzread copies the given number 699 If the input file was not in gzip format, gzread copies the given number
@@ -698,28 +701,29 @@ extern int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
698 gzread returns the number of uncompressed bytes actually read (0 for 701 gzread returns the number of uncompressed bytes actually read (0 for
699 end of file, -1 for error). */ 702 end of file, -1 for error). */
700 703
701extern int ZEXPORT gzwrite OF((gzFile file, const voidp buf, unsigned len)); 704ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
705 const voidp buf, unsigned len));
702/* 706/*
703 Writes the given number of uncompressed bytes into the compressed file. 707 Writes the given number of uncompressed bytes into the compressed file.
704 gzwrite returns the number of uncompressed bytes actually written 708 gzwrite returns the number of uncompressed bytes actually written
705 (0 in case of error). 709 (0 in case of error).
706*/ 710*/
707 711
708extern int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); 712ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
709/* 713/*
710 Converts, formats, and writes the args to the compressed file under 714 Converts, formats, and writes the args to the compressed file under
711 control of the format string, as in fprintf. gzprintf returns the number of 715 control of the format string, as in fprintf. gzprintf returns the number of
712 uncompressed bytes actually written (0 in case of error). 716 uncompressed bytes actually written (0 in case of error).
713*/ 717*/
714 718
715extern int ZEXPORT gzputs OF((gzFile file, const char *s)); 719ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
716/* 720/*
717 Writes the given null-terminated string to the compressed file, excluding 721 Writes the given null-terminated string to the compressed file, excluding
718 the terminating null character. 722 the terminating null character.
719 gzputs returns the number of characters written, or -1 in case of error. 723 gzputs returns the number of characters written, or -1 in case of error.
720*/ 724*/
721 725
722extern char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); 726ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
723/* 727/*
724 Reads bytes from the compressed file until len-1 characters are read, or 728 Reads bytes from the compressed file until len-1 characters are read, or
725 a newline character is read and transferred to buf, or an end-of-file 729 a newline character is read and transferred to buf, or an end-of-file
@@ -728,19 +732,19 @@ extern char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
728 gzgets returns buf, or Z_NULL in case of error. 732 gzgets returns buf, or Z_NULL in case of error.
729*/ 733*/
730 734
731extern int ZEXPORT gzputc OF((gzFile file, int c)); 735ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
732/* 736/*
733 Writes c, converted to an unsigned char, into the compressed file. 737 Writes c, converted to an unsigned char, into the compressed file.
734 gzputc returns the value that was written, or -1 in case of error. 738 gzputc returns the value that was written, or -1 in case of error.
735*/ 739*/
736 740
737extern int ZEXPORT gzgetc OF((gzFile file)); 741ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
738/* 742/*
739 Reads one byte from the compressed file. gzgetc returns this byte 743 Reads one byte from the compressed file. gzgetc returns this byte
740 or -1 in case of end of file or error. 744 or -1 in case of end of file or error.
741*/ 745*/
742 746
743extern int ZEXPORT gzflush OF((gzFile file, int flush)); 747ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
744/* 748/*
745 Flushes all pending output into the compressed file. The parameter 749 Flushes all pending output into the compressed file. The parameter
746 flush is as in the deflate() function. The return value is the zlib 750 flush is as in the deflate() function. The return value is the zlib
@@ -750,10 +754,11 @@ extern int ZEXPORT gzflush OF((gzFile file, int flush));
750 degrade compression. 754 degrade compression.
751*/ 755*/
752 756
753extern z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); 757ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
758 z_off_t offset, int whence));
754/* 759/*
755 Sets the starting position for the next gzread or gzwrite on the given 760 Sets the starting position for the next gzread or gzwrite on the
756 compressed file. The offset represents a number of bytes in the 761 given compressed file. The offset represents a number of bytes in the
757 uncompressed data stream. The whence parameter is defined as in lseek(2); 762 uncompressed data stream. The whence parameter is defined as in lseek(2);
758 the value SEEK_END is not supported. 763 the value SEEK_END is not supported.
759 If the file is opened for reading, this function is emulated but can be 764 If the file is opened for reading, this function is emulated but can be
@@ -767,14 +772,14 @@ extern z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence));
767 would be before the current position. 772 would be before the current position.
768*/ 773*/
769 774
770extern int ZEXPORT gzrewind OF((gzFile file)); 775ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
771/* 776/*
772 Rewinds the given file. This function is supported only for reading. 777 Rewinds the given file. This function is supported only for reading.
773 778
774 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) 779 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
775*/ 780*/
776 781
777extern z_off_t ZEXPORT gztell OF((gzFile file)); 782ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
778/* 783/*
779 Returns the starting position for the next gzread or gzwrite on the 784 Returns the starting position for the next gzread or gzwrite on the
780 given compressed file. This position represents a number of bytes in the 785 given compressed file. This position represents a number of bytes in the
@@ -783,20 +788,20 @@ extern z_off_t ZEXPORT gztell OF((gzFile file));
783 gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) 788 gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
784*/ 789*/
785 790
786extern int ZEXPORT gzeof OF((gzFile file)); 791ZEXTERN int ZEXPORT gzeof OF((gzFile file));
787/* 792/*
788 Returns 1 when EOF has previously been detected reading the given 793 Returns 1 when EOF has previously been detected reading the given
789 input stream, otherwise zero. 794 input stream, otherwise zero.
790*/ 795*/
791 796
792extern int ZEXPORT gzclose OF((gzFile file)); 797ZEXTERN int ZEXPORT gzclose OF((gzFile file));
793/* 798/*
794 Flushes all pending output if necessary, closes the compressed file 799 Flushes all pending output if necessary, closes the compressed file
795 and deallocates all the (de)compression state. The return value is the zlib 800 and deallocates all the (de)compression state. The return value is the zlib
796 error number (see function gzerror below). 801 error number (see function gzerror below).
797*/ 802*/
798 803
799extern const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); 804ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
800/* 805/*
801 Returns the error message for the last error which occurred on the 806 Returns the error message for the last error which occurred on the
802 given compressed file. errnum is set to zlib error number. If an 807 given compressed file. errnum is set to zlib error number. If an
@@ -813,7 +818,7 @@ extern const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
813 compression library. 818 compression library.
814*/ 819*/
815 820
816extern uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); 821ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
817 822
818/* 823/*
819 Update a running Adler-32 checksum with the bytes buf[0..len-1] and 824 Update a running Adler-32 checksum with the bytes buf[0..len-1] and
@@ -830,7 +835,7 @@ extern uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
830 if (adler != original_adler) error(); 835 if (adler != original_adler) error();
831*/ 836*/
832 837
833extern uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); 838ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
834/* 839/*
835 Update a running crc with the bytes buf[0..len-1] and return the updated 840 Update a running crc with the bytes buf[0..len-1] and return the updated
836 crc. If buf is NULL, this function returns the required initial value 841 crc. If buf is NULL, this function returns the required initial value
@@ -852,16 +857,16 @@ extern uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
852/* deflateInit and inflateInit are macros to allow checking the zlib version 857/* deflateInit and inflateInit are macros to allow checking the zlib version
853 * and the compiler's view of z_stream: 858 * and the compiler's view of z_stream:
854 */ 859 */
855extern int ZEXPORT deflateInit_ OF((z_streamp strm, int level, 860ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
856 const char *version, int stream_size));
857extern int ZEXPORT inflateInit_ OF((z_streamp strm,
858 const char *version, int stream_size));
859extern int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
860 int windowBits, int memLevel,
861 int strategy, const char *version,
862 int stream_size));
863extern int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
864 const char *version, int stream_size)); 861 const char *version, int stream_size));
862ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
863 const char *version, int stream_size));
864ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
865 int windowBits, int memLevel,
866 int strategy, const char *version,
867 int stream_size));
868ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
869 const char *version, int stream_size));
865#define deflateInit(strm, level) \ 870#define deflateInit(strm, level) \
866 deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) 871 deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
867#define inflateInit(strm) \ 872#define inflateInit(strm) \
@@ -877,9 +882,9 @@ extern int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
877 struct internal_state {int dummy;}; /* hack for buggy compilers */ 882 struct internal_state {int dummy;}; /* hack for buggy compilers */
878#endif 883#endif
879 884
880extern const char * ZEXPORT zError OF((int err)); 885ZEXTERN const char * ZEXPORT zError OF((int err));
881extern int ZEXPORT inflateSyncPoint OF((z_streamp z)); 886ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z));
882extern const uLongf * ZEXPORT get_crc_table OF((void)); 887ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
883 888
884#ifdef __cplusplus 889#ifdef __cplusplus
885} 890}
diff --git a/zutil.c b/zutil.c
index 5a3fe6e..b3de4e8 100644
--- a/zutil.c
+++ b/zutil.c
@@ -60,7 +60,7 @@ const char * ZEXPORT zError(err)
60 60
61void zmemcpy(dest, source, len) 61void zmemcpy(dest, source, len)
62 Bytef* dest; 62 Bytef* dest;
63 Bytef* source; 63 const Bytef* source;
64 uInt len; 64 uInt len;
65{ 65{
66 if (len == 0) return; 66 if (len == 0) return;
@@ -70,8 +70,8 @@ void zmemcpy(dest, source, len)
70} 70}
71 71
72int zmemcmp(s1, s2, len) 72int zmemcmp(s1, s2, len)
73 Bytef* s1; 73 const Bytef* s1;
74 Bytef* s2; 74 const Bytef* s2;
75 uInt len; 75 uInt len;
76{ 76{
77 uInt j; 77 uInt j;
@@ -178,7 +178,7 @@ void zcfree (voidpf opaque, voidpf ptr)
178 178
179# define MY_ZCALLOC 179# define MY_ZCALLOC
180 180
181#if (!defined(_MSC_VER) || (_MSC_VER < 600)) 181#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
182# define _halloc halloc 182# define _halloc halloc
183# define _hfree hfree 183# define _hfree hfree
184#endif 184#endif
diff --git a/zutil.h b/zutil.h
index 5e403d1..6f2cb97 100644
--- a/zutil.h
+++ b/zutil.h
@@ -75,7 +75,7 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
75 75
76#ifdef MSDOS 76#ifdef MSDOS
77# define OS_CODE 0x00 77# define OS_CODE 0x00
78# ifdef __TURBOC__ 78# if defined(__TURBOC__) || defined(__BORLANDC__)
79# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) 79# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
80 /* Allow compilation with ANSI keywords only enabled */ 80 /* Allow compilation with ANSI keywords only enabled */
81 void _Cdecl farfree( void *block ); 81 void _Cdecl farfree( void *block );
@@ -112,13 +112,12 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
112 112
113#if defined(MACOS) || defined(TARGET_OS_MAC) 113#if defined(MACOS) || defined(TARGET_OS_MAC)
114# define OS_CODE 0x07 114# define OS_CODE 0x07
115# ifndef fdopen 115# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
116# define fdopen(fd,mode) NULL /* No fdopen() */ 116# include <unix.h> /* for fdopen */
117# endif 117# else
118#endif 118# ifndef fdopen
119#if defined(__MWERKS__) && !defined(fdopen) 119# define fdopen(fd,mode) NULL /* No fdopen() */
120# if __dest_os != __be_os && __dest_os != __win32_os 120# endif
121# define fdopen(fd,mode) NULL
122# endif 121# endif
123#endif 122#endif
124 123
@@ -134,7 +133,7 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
134# define fdopen(fd,mode) NULL /* No fdopen() */ 133# define fdopen(fd,mode) NULL /* No fdopen() */
135#endif 134#endif
136 135
137#if (defined(_MSC_VER) && (_MSC_VER >= 600)) 136#if (defined(_MSC_VER) && (_MSC_VER > 600))
138# define fdopen(fd,type) _fdopen(fd,type) 137# define fdopen(fd,type) _fdopen(fd,type)
139#endif 138#endif
140 139
@@ -182,8 +181,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
182# define zmemzero(dest, len) memset(dest, 0, len) 181# define zmemzero(dest, len) memset(dest, 0, len)
183# endif 182# endif
184#else 183#else
185 extern void zmemcpy OF((Bytef* dest, Bytef* source, uInt len)); 184 extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
186 extern int zmemcmp OF((Bytef* s1, Bytef* s2, uInt len)); 185 extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
187 extern void zmemzero OF((Bytef* dest, uInt len)); 186 extern void zmemzero OF((Bytef* dest, uInt len));
188#endif 187#endif
189 188