diff --git a/ChangeLog b/ChangeLog
index 36e05dc..ffbe1c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,16 @@
 
 		ChangeLog file for zlib
 
+Changes in 1.0.2 (23 May 96)
+- added Windows DLL support
+- added a function zlibVersion (for the DLL support)
+- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)
+- Bytef is define's instead of typedef'd only for Borland C
+- avoid reading uninitialized memory in example.c
+- mention in README that the zlib format is now RFC1950
+- updated Makefile.dj2
+- added algorithm.doc
+
 Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
 - fix array overlay in deflate.c which sometimes caused bad compressed data
 - fix inflate bug with empty stored block
diff --git a/INDEX b/INDEX
index c4a3ede..dc13753 100644
--- a/INDEX
+++ b/INDEX
@@ -11,8 +11,12 @@
 Makefile.tc	makefile for Turbo C
 Makefile.wat	makefile for Watcom C
 README		guess what
+algorithm.doc	description of the compression & decompression algorithms
 configure	configure script for Unix
 descrip.mms	makefile for Vax/VMS
+zlib.def        definition file for Windows DLL
+zlib.rc         definition file for Windows DLL
+
 
 		zlib public header files (must be kept):
 zconf.h
diff --git a/Makefile b/Makefile
index 3b41059..f2ff262 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@
 LDFLAGS=-L. -lz
 LDSHARED=$(CC)
 
-VER=1.0.1
+VER=1.0.2
 LIBS=libz.a
 
 AR=ar rc
@@ -37,7 +37,8 @@
 
 TEST_OBJS = example.o minigzip.o
 
-DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms *.[ch]
+DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
+	    zlib.def zlib.rc algorithm.doc  *.[ch]
 
 all: example minigzip
 
@@ -85,8 +86,8 @@
 
 zip:
 	mv Makefile Makefile~; cp -p Makefile.in Makefile
-	v=`sed -n -e 's/\./-/g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
-	zip -ul9 zlib-$$v $(DISTFILES)
+	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
+	zip -ul9 zlib$$v $(DISTFILES)
 	mv Makefile~ Makefile
 
 dist:
diff --git a/Makefile.dj2 b/Makefile.dj2
index 82f55ea..07a9bb1 100644
--- a/Makefile.dj2
+++ b/Makefile.dj2
@@ -2,32 +2,51 @@
 # Copyright (C) 1995-1996 Jean-loup Gailly.
 # For conditions of distribution and use, see copyright notice in zlib.h 
 
-# To compile and test, type:
+# To compile, or to compile and test, type:
+# 
 #   make -fmakefile.dj2;  make test -fmakefile.dj2
-
+# 
 # To install libz.a, zconf.h and zlib.h in the djgpp directories, type:
+# 
 #    make install -fmakefile.dj2
-# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env for [make].
-# Alternately these variables may be defined below.
+# 
+# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as
+# in the sample below if the pattern of the DJGPP distribution is to
+# be followed.  Remember that, while <sp>'es around <=> are ignored in
+# makefiles, they are *not* in batch files or in djgpp.env.
+# - - - - -
+# [make]
+# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include
+# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib
+# BUTT=-m486
+# - - - - -
+# Alternately, these variables may be defined below, overriding the values
+# in djgpp.env, as
+INCLUDE_PATH=c:\usr\include
 
 CC=gcc
 
 #CFLAGS=-MMD -O
 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
 #CFLAGS=-MMD -g -DDEBUG
-CFLAGS=-MMD -O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-           -Wstrict-prototypes -Wmissing-prototypes
+CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+             -Wstrict-prototypes -Wmissing-prototypes
+
+# If cp.exe is not found, replace with copy /Y .
+CP=cp -f
+# If install.exe is not found, replace with $(CP).
 INSTALL=install
+# The default value of RM is "rm -f."  If "rm.exe" is not found, uncomment:
+# RM=del
 LDLIBS=-L. -lz
 LD=$(CC) -s -o
 LDSHARED=$(CC)
 
-VER=1.0
+VER=1.0.2
+INCL=zlib.h zconf.h
 LIBS=libz.a
 
 AR=ar rcs
-# The default value of RM is "rm -f."  If "rm.exe" is not found, uncomment:
-# RM=del
 
 prefix=/usr/local
 exec_prefix = $(prefix)
@@ -37,10 +56,6 @@
 
 TEST_OBJS = example.o minigzip.o
 
-DISTFILES = README Change.Log configur Makefile.in Makefile Makefile.msc \
-	    Makefile.bor Makefile.tc Make_vms.com descrip.mms zlib099.pat \
-	    *.bak *.old *.[ch]
-
 all: example.exe minigzip.exe
 
 test: all
@@ -55,23 +70,27 @@
 
 libz.so.$(VER): $(OBJS)
 	$(LDSHARED) -o $@ $(OBJS)
-	rm -f libz.so; ln -s $@ libz.so
+	$(RM) libz.so; ln -s $@ libz.so
 
 %.exe : %.o $(LIBS)
 	$(LD) $@ $< $(LDLIBS)
 
-# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env
+# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .
 
-install: $(LIBS)
-	$(INSTALL) zlib.h zconf.h $(INCLUDE_PATH)
-	$(INSTALL) $(LIBS) $(LIBRARY_PATH)
+.PHONY : uninstall clean
+
+install: $(INCL) $(LIBS)
+	-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
+	-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
+	for %%f in ($(INCL)) do $(INSTALL) %%f $(INCLUDE_PATH)
+	for %%p in ($(LIBS)) do $(INSTALL) %%p $(LIBRARY_PATH)
 
 uninstall:
-	$(RM) $(LIBRARY_PATH)/$(LIBS)
-	$(RM) $(INCLUDE_PATH)/zlib.h $(INCLUDE_PATH)/zconf.h
+	for %%f in ($(INCL)) do $(RM) $(INCLUDE_PATH)\%%f
+	for %%p in ($(LIBS)) do $(RM) $(LIBRARY_PATH)\%%p
 
 clean:
-	$(RM) *.d *.o *.~ *.exe libz.a libz.so* foo.gz
+	for %%p in (*.d *.o *.exe libz.a libz.so*) do $(RM) %%p
 
 DEPS := $(wildcard *.d)
 ifneq ($(DEPS),)
diff --git a/Makefile.in b/Makefile.in
index 3b41059..f2ff262 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -22,7 +22,7 @@
 LDFLAGS=-L. -lz
 LDSHARED=$(CC)
 
-VER=1.0.1
+VER=1.0.2
 LIBS=libz.a
 
 AR=ar rc
@@ -37,7 +37,8 @@
 
 TEST_OBJS = example.o minigzip.o
 
-DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms *.[ch]
+DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
+	    zlib.def zlib.rc algorithm.doc  *.[ch]
 
 all: example minigzip
 
@@ -85,8 +86,8 @@
 
 zip:
 	mv Makefile Makefile~; cp -p Makefile.in Makefile
-	v=`sed -n -e 's/\./-/g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
-	zip -ul9 zlib-$$v $(DISTFILES)
+	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
+	zip -ul9 zlib$$v $(DISTFILES)
 	mv Makefile~ Makefile
 
 dist:
diff --git a/README b/README
index dd72d94..217f3b1 100644
--- a/README
+++ b/README
@@ -1,8 +1,9 @@
-zlib 1.0.1 is a general purpose data compression library.  All the code
+zlib 1.0.2 is a general purpose data compression library.  All the code
 is reentrant (thread safe).  The data format used by the zlib library
-is described in the files zlib-3.3.doc, deflate-1.3.doc and
-gzip-4.3.doc, available in various formats from
-ftp://swrinde.nde.swri.edu/pub/png/documents/zlib/
+is described by RFCs (Request for Comments) 1950 to 1952 in the files 
+ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
+format) and rfc1952.txt (gzip format). These documents are also available in
+other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
 
 All functions of the compression library are documented in the file
 zlib.h. A usage example of the library is given in the file example.c
@@ -18,9 +19,8 @@
 Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov> or,
 if this fails, to the addresses given below in the Copyright section.
 
-The changes made in version 1.0.1 are documented in the file ChangeLog.
-Version number 1.0 was skipped to avoid confusion with version 0.99
-which had some references to 1.0 already. The main changes since 0.99 are:
+The changes made in version 1.0.2 are documented in the file ChangeLog.
+The main changes since 0.99 are:
 
 - fix array overlay in deflate.c which sometimes caused bad compressed data
 - fix inflate bug with empty stored block
@@ -30,6 +30,14 @@
 - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
   Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
 - several portability improvements
+- added algorithm.doc
+- added Windows DLL support
+- added a function zlibVersion (for the DLL support)
+
+A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
+is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
+ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
+
 
 Notes for some targets:
 
@@ -46,9 +54,10 @@
 - zlib doesn't work on HP-UX 9.05 with one cc compiler (the one not
   accepting the -O option). It works with the other cc compiler.
 
-A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
-is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
-ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
+- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
+  and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
+  For help on building a zlib DLL, contact Alessandro Iacopetti
+  <iaco@cicladi.unial.it>
 
 
 Acknowledgments:
diff --git a/adler32.c b/adler32.c
index b6b5519..c9dcf93 100644
--- a/adler32.c
+++ b/adler32.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: adler32.c,v 1.9 1996/01/30 21:59:09 me Exp $ */
+/* $Id: adler32.c,v 1.10 1996/05/22 11:52:18 me Exp $ */
 
 #include "zlib.h"
 
diff --git a/algorithm.doc b/algorithm.doc
new file mode 100644
index 0000000..156058a
--- /dev/null
+++ b/algorithm.doc
@@ -0,0 +1,105 @@
+1. Compression algorithm (deflate)
+
+The deflation algorithm used by zlib (also zip and gzip) is a variation of
+LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
+the input data.  The second occurrence of a string is replaced by a
+pointer to the previous string, in the form of a pair (distance,
+length).  Distances are limited to 32K bytes, and lengths are limited
+to 258 bytes. When a string does not occur anywhere in the previous
+32K bytes, it is emitted as a sequence of literal bytes.  (In this
+description, 'string' must be taken as an arbitrary sequence of bytes,
+and is not restricted to printable characters.)
+
+Literals or match lengths are compressed with one Huffman tree, and
+match distances are compressed with another tree. The trees are stored
+in a compact form at the start of each block. The blocks can have any
+size (except that the compressed data for one block must fit in
+available memory). A block is terminated when deflate() determines that
+it would be useful to start another block with fresh trees. (This is
+somewhat similar to compress.)
+
+Duplicated strings are found using a hash table. All input strings of
+length 3 are inserted in the hash table. A hash index is computed for
+the next 3 bytes. If the hash chain for this index is not empty, all
+strings in the chain are compared with the current input string, and
+the longest match is selected.
+
+The hash chains are searched starting with the most recent strings, to
+favor small distances and thus take advantage of the Huffman encoding.
+The hash chains are singly linked. There are no deletions from the
+hash chains, the algorithm simply discards matches that are too old.
+
+To avoid a worst-case situation, very long hash chains are arbitrarily
+truncated at a certain length, determined by a runtime option (level
+parameter of deflateInit). So deflate() does not always find the longest
+possible match but generally finds a match which is long enough.
+
+deflate() also defers the selection of matches with a lazy evaluation
+mechanism. After a match of length N has been found, deflate() searches for a
+longer match at the next input byte. If a longer match is found, the
+previous match is truncated to a length of one (thus producing a single
+literal byte) and the longer match is emitted afterwards.  Otherwise,
+the original match is kept, and the next match search is attempted only
+N steps later.
+
+The lazy match evaluation is also subject to a runtime parameter. If
+the current match is long enough, deflate() reduces the search for a longer
+match, thus speeding up the whole process. If compression ratio is more
+important than speed, deflate() attempts a complete second search even if
+the first match is already long enough.
+
+The lazy match evaluation is not performed for the fastest compression
+modes (level parameter 1 to 3). For these fast modes, new strings
+are inserted in the hash table only when no match was found, or
+when the match is not too long. This degrades the compression ratio
+but saves time since there are both fewer insertions and fewer searches.
+
+
+2. Decompression algorithm (inflate)
+
+The real question is given a Huffman tree, how to decode fast.  The most
+important realization is that shorter codes are much more common than
+longer codes, so pay attention to decoding the short codes fast, and let
+the long codes take longer to decode.
+
+inflate() sets up a first level table that covers some number of bits of
+input less than the length of longest code.  It gets that many bits from the
+stream, and looks it up in the table.  The table will tell if the next
+code is that many bits or less and how many, and if it is, it will tell
+the value, else it will point to the next level table for which inflate()
+grabs more bits and tries to decode a longer code.
+
+How many bits to make the first lookup is a tradeoff between the time it
+takes to decode and the time it takes to build the table.  If building the
+table took no time (and if you had infinite memory), then there would only
+be a first level table to cover all the way to the longest code.  However,
+building the table ends up taking a lot longer for more bits since short
+codes are replicated many times in such a table.  What inflate() does is
+simply to make the number of bits in the first table a variable, and set it
+for the maximum speed.
+
+inflate() sends new trees relatively often, so it is possibly set for a
+smaller first level table than an application that has only one tree for
+all the data.  For inflate, which has 286 possible codes for the
+literal/length tree, the size of the first table is nine bits.  Also the
+distance trees have 30 possible values, and the size of the first table is
+six bits.  Note that for each of those cases, the table ended up one bit
+longer than the "average" code length, i.e. the code length of an
+approximately flat code which would be a little more than eight bits for
+286 symbols and a little less than five bits for 30 symbols.  It would be
+interesting to see if optimizing the first level table for other
+applications gave values within a bit or two of the flat code size.
+
+
+Jean-loup Gailly        Mark Adler
+gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
+
+
+References:
+
+[LZ77] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data
+Compression", IEEE Transactions on Information Theory", Vol. 23, No. 3,
+pp. 337-343.
+
+"DEFLATE Compressed Data Format Specification" available in
+ftp://ds.internic.net/rfc/rfc1951.txt
diff --git a/compress.c b/compress.c
index 1c58400..590c451 100644
--- a/compress.c
+++ b/compress.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: compress.c,v 1.9 1996/01/30 21:59:09 me Exp $ */
+/* $Id: compress.c,v 1.10 1996/05/23 16:51:12 me Exp $ */
 
 #include "zlib.h"
 
@@ -30,9 +30,10 @@
 
     stream.next_in = (Bytef*)source;
     stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
     /* Check for source > 64K on 16-bit machine: */
     if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
+#endif
     stream.next_out = dest;
     stream.avail_out = (uInt)*destLen;
     if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
diff --git a/deflate.c b/deflate.c
index 64710e6..f882a87 100644
--- a/deflate.c
+++ b/deflate.c
@@ -47,11 +47,11 @@
  *
  */
 
-/* $Id: deflate.c,v 1.12 1996/01/30 21:59:11 me Exp $ */
+/* $Id: deflate.c,v 1.13 1996/05/22 11:52:21 me Exp $ */
 
 #include "deflate.h"
 
-char deflate_copyright[] = " deflate 1.0.1 Copyright 1995-1996 Jean-loup Gailly ";
+char deflate_copyright[] = " deflate 1.0.2 Copyright 1995-1996 Jean-loup Gailly ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
diff --git a/example.c b/example.c
index 175fa81..5e4dc6d 100644
--- a/example.c
+++ b/example.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: example.c,v 1.13 1996/01/30 21:59:13 me Exp $ */
+/* $Id: example.c,v 1.16 1996/05/23 17:11:28 me Exp $ */
 
 #include <stdio.h>
 #include "zlib.h"
@@ -462,16 +462,19 @@
     uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
     uLong uncomprLen = comprLen;
 
-    if (zlib_version[0] != ZLIB_VERSION[0]) {
+    if (zlibVersion()[0] != ZLIB_VERSION[0]) {
         fprintf(stderr, "incompatible zlib version\n");
         exit(1);
 
-    } else if (strcmp(zlib_version, ZLIB_VERSION) != 0) {
+    } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) {
         fprintf(stderr, "warning: different zlib version\n");
     }
 
-    compr    = (Byte*)malloc((uInt)comprLen);
-    uncompr  = (Byte*)calloc((uInt)uncomprLen, 1); /* must be cleared */
+    compr    = (Byte*)calloc((uInt)comprLen, 1);
+    uncompr  = (Byte*)calloc((uInt)uncomprLen, 1);
+    /* compr and uncompr are cleared to avoid reading uninitialized
+     * data and to ensure that uncompr compresses well.
+     */
     if (compr == Z_NULL || uncompr == Z_NULL) {
         printf("out of memory\n");
 	exit(1);
diff --git a/gzio.c b/gzio.c
index 6f6832b..44ca9e8 100644
--- a/gzio.c
+++ b/gzio.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
-/* $Id: gzio.c,v 1.12 1996/01/30 21:59:14 me Exp $ */
+/* $Id: gzio.c,v 1.13 1996/05/22 11:52:24 me Exp $ */
 
 #include <stdio.h>
 
diff --git a/inftrees.c b/inftrees.c
index 3bf39a6..ebeac0d 100644
--- a/inftrees.c
+++ b/inftrees.c
@@ -6,7 +6,7 @@
 #include "zutil.h"
 #include "inftrees.h"
 
-char inflate_copyright[] = " inflate 1.0.1 Copyright 1995-1996 Mark Adler ";
+char inflate_copyright[] = " inflate 1.0.2 Copyright 1995-1996 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
diff --git a/infutil.c b/infutil.c
index 7099b6d..b56f8cd 100644
--- a/infutil.c
+++ b/infutil.c
@@ -26,7 +26,8 @@
 int r;
 {
   uInt n;
-  Bytef *p, *q;
+  Bytef *p;
+  Bytef *q;
 
   /* local copies of source and destination pointers */
   p = z->next_out;
diff --git a/minigzip.c b/minigzip.c
index eee52a5..bd0735b 100644
--- a/minigzip.c
+++ b/minigzip.c
@@ -13,7 +13,7 @@
  * or in pipe mode.
  */
 
-/* $Id: minigzip.c,v 1.8 1996/01/30 21:59:23 me Exp $ */
+/* $Id: minigzip.c,v 1.9 1996/05/22 11:52:32 me Exp $ */
 
 #include <stdio.h>
 #include "zlib.h"
diff --git a/trees.c b/trees.c
index fcfe68b..f943d06 100644
--- a/trees.c
+++ b/trees.c
@@ -29,7 +29,7 @@
  *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
  */
 
-/* $Id: trees.c,v 1.5 1995/05/03 17:27:12 jloup Exp $ */
+/* $Id: trees.c,v 1.10 1996/05/22 11:52:34 me Exp $ */
 
 #include "deflate.h"
 
diff --git a/zconf.h b/zconf.h
index 6ab1e4f..69aa21b 100644
--- a/zconf.h
+++ b/zconf.h
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: zconf.h,v 1.12 1995/05/03 17:27:12 jloup Exp $ */
+/* $Id: zconf.h,v 1.18 1996/05/23 16:51:18 me Exp $ */
 
 #ifndef _ZCONF_H
 #define _ZCONF_H
@@ -37,7 +37,7 @@
 #  define Byte		z_Byte
 #  define uInt		z_uInt
 #  define uLong		z_uLong
-/* #  define Bytef	z_Bytef */
+#  define Bytef	        z_Bytef
 #  define charf		z_charf
 #  define intf		z_intf
 #  define uIntf		z_uIntf
@@ -128,7 +128,8 @@
  * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
  * just define FAR to be empty.
  */
-#if defined(M_I86SM) || defined(M_I86MM) /* MSC small or medium model */
+#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
+   /* MSC small or medium model */
 #  define SMALL_MEDIUM
 #  ifdef _MSC_VER
 #    define FAR __far
@@ -137,14 +138,16 @@
 #  endif
 #endif
 #if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
+#  ifndef __32BIT__
 #    define SMALL_MEDIUM
 #    define FAR __far
+#  endif
 #endif
 #ifndef FAR
 #   define FAR
 #endif
 /* The Watcom compiler defines M_I86SM and __SMALL__ even in 32 bit mode */
-#if defined(__WATCOMC__) && defined(__386__)
+#if defined(__WATCOMC__) && defined(__386__) && defined(SMALL_MEDIUM)
 #  undef FAR
 #  define FAR
 #  undef SMALL_MEDIUM
@@ -154,8 +157,12 @@
 typedef unsigned int   uInt;  /* 16 bits or more */
 typedef unsigned long  uLong; /* 32 bits or more */
 
-/* "typedef Byte  FAR Bytef;" doesn't work with Borland C/C++ */
-#define Bytef Byte  FAR 
+#if defined(__BORLANDC__) && defined(SMALL_MEDIUM)
+   /* Borland C/C++ ignores FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
 typedef char  FAR charf;
 typedef int   FAR intf;
 typedef uInt  FAR uIntf;
@@ -169,4 +176,13 @@
    typedef Byte     *voidp;
 #endif
 
+
+/* Compile with -DZLIB_DLL for Windows DLL support */
+#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL)
+#  include <windows.h>
+#  define EXPORT  WINAPI
+#else
+#  define EXPORT
+#endif
+
 #endif /* _ZCONF_H */
diff --git a/zlib.def b/zlib.def
new file mode 100644
index 0000000..0f5049f
--- /dev/null
+++ b/zlib.def
@@ -0,0 +1,46 @@
+LIBRARY		"zlib"
+
+DESCRIPTION	'"""zlib data compression library"""'
+
+EXETYPE		NT
+
+SUBSYSTEM	WINDOWS
+
+STUB		'WINSTUB.EXE'
+
+VERSION		1.0.2
+
+CODE		 EXECUTE READ
+
+DATA		 READ WRITE
+
+HEAPSIZE	1048576,4096
+
+EXPORTS
+		zlibVersion
+		deflate
+		deflateEnd
+		inflate
+		inflateEnd
+		deflateSetDictionary
+		deflateCopy
+		deflateReset
+		deflateParams
+		inflateSetDictionary
+		inflateSync
+		inflateReset
+		compress
+		uncompress
+		gzopen
+		gzdopen
+		gzread
+		gzwrite
+		gzflush
+		gzclose
+		gzerror
+		adler32
+		crc32
+		deflateInit_
+		inflateInit_
+		deflateInit2_
+		inflateInit2_
diff --git a/zlib.h b/zlib.h
index 47960c2..1e61491 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.0.1, May 20th, 1996.
+  version 1.0.2, May 23rd, 1996.
 
   Copyright (C) 1995-1996 Jean-loup Gailly and Mark Adler
 
@@ -21,7 +21,12 @@
 
   Jean-loup Gailly        Mark Adler
   gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
- */
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
+  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+*/
 
 #ifndef _ZLIB_H
 #define _ZLIB_H
@@ -32,7 +37,7 @@
 
 #include "zconf.h"
 
-#define ZLIB_VERSION "1.0.1"
+#define ZLIB_VERSION "1.0.2"
 
 /* 
      The 'zlib' compression library provides in-memory compression and
@@ -156,16 +161,20 @@
 
 #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
 
-extern const char *zlib_version;
-/* The application can compare zlib_version and ZLIB_VERSION for consistency.
-   If the first character differs, the library code actually used is
-   not compatible with the zlib.h header file used by the application.
- */
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
 
                         /* basic functions */
 
+extern char EXPORT *zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is
+   not compatible with the zlib.h header file used by the application.
+   This check is automatically made by deflateInit and inflateInit.
+ */
+
 /* 
-extern int deflateInit OF((z_stream *strm, int level));
+extern int EXPORT deflateInit OF((z_stream *strm, int level));
 
      Initializes the internal stream state for compression. The fields
    zalloc, zfree and opaque must be initialized before by the caller.
@@ -187,7 +196,7 @@
 */
 
 
-extern int deflate OF((z_stream *strm, int flush));
+extern int EXPORT deflate OF((z_stream *strm, int flush));
 /*
   Performs one or both of the following actions:
 
@@ -256,7 +265,7 @@
 */
 
 
-extern int deflateEnd OF((z_stream *strm));
+extern int EXPORT deflateEnd OF((z_stream *strm));
 /*
      All dynamically allocated data structures for this stream are freed.
    This function discards any unprocessed input and does not flush any
@@ -271,7 +280,7 @@
 
 
 /* 
-extern int inflateInit OF((z_stream *strm));
+extern int EXPORT inflateInit OF((z_stream *strm));
 
      Initializes the internal stream state for decompression. The fields
    zalloc, zfree and opaque must be initialized before by the caller.  If
@@ -286,7 +295,7 @@
 */
 
 
-extern int inflate OF((z_stream *strm, int flush));
+extern int EXPORT inflate OF((z_stream *strm, int flush));
 /*
   Performs one or both of the following actions:
 
@@ -341,7 +350,7 @@
 */
 
 
-extern int inflateEnd OF((z_stream *strm));
+extern int EXPORT inflateEnd OF((z_stream *strm));
 /*
      All dynamically allocated data structures for this stream are freed.
    This function discards any unprocessed input and does not flush any
@@ -359,12 +368,12 @@
 */
 
 /*   
-extern int deflateInit2 OF((z_stream *strm,
-                            int  level,
-                            int  method,
-                            int  windowBits,
-                            int  memLevel,
-                            int  strategy));
+extern int EXPORT deflateInit2 OF((z_stream *strm,
+                                   int  level,
+                                   int  method,
+                                   int  windowBits,
+                                   int  memLevel,
+                                   int  strategy));
 
      This is another version of deflateInit with more compression options. The
    fields next_in, zalloc, zfree and opaque must be initialized before by
@@ -417,9 +426,9 @@
    deflate(). 
 */
                             
-extern int deflateSetDictionary OF((z_stream *strm,
-				    const Bytef *dictionary,
-				    uInt  dictLength));
+extern int EXPORT deflateSetDictionary OF((z_stream *strm,
+                                           const Bytef *dictionary,
+				           uInt  dictLength));
 /*
      Initializes the compression dictionary (history buffer) from the given
    byte sequence without producing any compressed output. This function must
@@ -446,8 +455,8 @@
    be done by deflate(). 
 */
 
-extern int deflateCopy OF((z_stream *dest,
-                           z_stream *source));
+extern int EXPORT deflateCopy OF((z_stream *dest,
+                                  z_stream *source));
 /*
      Sets the destination stream as a complete copy of the source stream.  If
    the source stream is using an application-supplied history buffer, a new
@@ -469,7 +478,7 @@
    destination.
 */
 
-extern int deflateReset OF((z_stream *strm));
+extern int EXPORT deflateReset OF((z_stream *strm));
 /*
      This function is equivalent to deflateEnd followed by deflateInit,
    but does not free and reallocate all the internal compression state.
@@ -480,7 +489,7 @@
    stream state was inconsistent (such as zalloc or state being NULL).
 */
 
-extern int deflateParams OF((z_stream *strm, int level, int strategy));
+extern int EXPORT deflateParams OF((z_stream *strm, int level, int strategy));
 /*
      Dynamically update the compression level and compression strategy.
    This can be used to switch between compression and straight copy of
@@ -499,8 +508,8 @@
 */
 
 /*   
-extern int inflateInit2 OF((z_stream *strm,
-                            int  windowBits));
+extern int EXPORT inflateInit2 OF((z_stream *strm,
+                                   int  windowBits));
 
      This is another version of inflateInit with more compression options. The
    fields next_out, zalloc, zfree and opaque must be initialized before by
@@ -533,9 +542,9 @@
    inflate().
 */
 
-extern int inflateSetDictionary OF((z_stream *strm,
-				    const Bytef *dictionary,
-				    uInt  dictLength));
+extern int EXPORT inflateSetDictionary OF((z_stream *strm,
+				           const Bytef *dictionary,
+					   uInt  dictLength));
 /*
      Initializes the decompression dictionary (history buffer) from the given
    uncompressed byte sequence. This function must be called immediately after
@@ -552,7 +561,7 @@
    inflate().
 */
 
-extern int inflateSync OF((z_stream *strm));
+extern int EXPORT inflateSync OF((z_stream *strm));
 /* 
     Skips invalid compressed data until the special marker (see deflate()
   above) can be found, or until all available input is skipped. No output
@@ -567,7 +576,7 @@
   until success or end of the input data.
 */
 
-extern int inflateReset OF((z_stream *strm));
+extern int EXPORT inflateReset OF((z_stream *strm));
 /*
      This function is equivalent to inflateEnd followed by inflateInit,
    but does not free and reallocate all the internal decompression state.
@@ -588,8 +597,8 @@
    utility functions can easily be modified if you need special options.
 */
 
-extern int compress OF((Bytef *dest,   uLongf *destLen,
-                        const Bytef *source, uLong sourceLen));
+extern int EXPORT compress OF((Bytef *dest,   uLongf *destLen,
+			       const Bytef *source, uLong sourceLen));
 /*
      Compresses the source buffer into the destination buffer.  sourceLen is
    the byte length of the source buffer. Upon entry, destLen is the total
@@ -603,8 +612,8 @@
    buffer.
 */
 
-extern int uncompress OF((Bytef *dest,   uLongf *destLen,
-                          const Bytef *source, uLong sourceLen));
+extern int EXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+				 const Bytef *source, uLong sourceLen));
 /*
      Decompresses the source buffer into the destination buffer.  sourceLen is
    the byte length of the source buffer. Upon entry, destLen is the total
@@ -624,7 +633,7 @@
 
 typedef voidp gzFile;
 
-extern gzFile gzopen  OF((const char *path, const char *mode));
+extern gzFile EXPORT gzopen  OF((const char *path, const char *mode));
 /*
      Opens a gzip (.gz) file for reading or writing. The mode parameter
    is as in fopen ("rb" or "wb") but can also include a compression level
@@ -636,7 +645,7 @@
    zlib error is Z_MEM_ERROR).
 */
 
-extern gzFile gzdopen  OF((int fd, const char *mode));
+extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 /*
      gzdopen() associates a gzFile with the file descriptor fd.  File
    descriptors are obtained from calls like open, dup, creat, pipe or
@@ -649,7 +658,7 @@
    the (de)compression state.
 */
 
-extern int    gzread  OF((gzFile file, voidp buf, unsigned len));
+extern int EXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
 /*
      Reads the given number of uncompressed bytes from the compressed file.
    If the input file was not in gzip format, gzread copies the given number
@@ -657,14 +666,14 @@
      gzread returns the number of uncompressed bytes actually read (0 for
    end of file, -1 for error). */
 
-extern int    gzwrite OF((gzFile file, const voidp buf, unsigned len));
+extern int EXPORT    gzwrite OF((gzFile file, const voidp buf, unsigned len));
 /*
      Writes the given number of uncompressed bytes into the compressed file.
    gzwrite returns the number of uncompressed bytes actually written
    (0 in case of error).
 */
 
-extern int    gzflush OF((gzFile file, int flush));
+extern int EXPORT    gzflush OF((gzFile file, int flush));
 /*
      Flushes all pending output into the compressed file. The parameter
    flush is as in the deflate() function. The return value is the zlib
@@ -674,14 +683,14 @@
    degrade compression.
 */
 
-extern int    gzclose OF((gzFile file));
+extern int EXPORT    gzclose OF((gzFile file));
 /*
      Flushes all pending output if necessary, closes the compressed file
    and deallocates all the (de)compression state. The return value is the zlib
    error number (see function gzerror below).
 */
 
-extern char*   gzerror OF((gzFile file, int *errnum));
+extern char EXPORT  *gzerror OF((gzFile file, int *errnum));
 /*
      Returns the error message for the last error which occurred on the
    given compressed file. errnum is set to zlib error number. If an
@@ -698,7 +707,7 @@
    compression library.
 */
 
-extern uLong adler32 OF((uLong adler, const Bytef *buf, uInt len));
+extern uLong EXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
 
 /*
      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
@@ -715,7 +724,7 @@
      if (adler != original_adler) error();
 */
 
-extern uLong crc32   OF((uLong crc, const Bytef *buf, uInt len));
+extern uLong EXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
 /*
      Update a running crc with the bytes buf[0..len-1] and return the updated
    crc. If buf is NULL, this function returns the required initial value
@@ -737,15 +746,15 @@
 /* deflateInit and inflateInit are macros to allow checking the zlib version
  * and the compiler's view of z_stream:
  */
-extern int deflateInit_ OF((z_stream *strm, int level,
-			    const char *version, int stream_size));
-extern int inflateInit_ OF((z_stream *strm,
-			    const char *version, int stream_size));
-extern int deflateInit2_ OF((z_stream *strm, int  level, int  method,
-                             int  windowBits, int  memLevel, int  strategy,
-			     const char *version, int stream_size));
-extern int inflateInit2_ OF((z_stream *strm, int  windowBits,
-			     const char *version, int stream_size));
+extern int EXPORT deflateInit_ OF((z_stream *strm, int level,
+			           const char *version, int stream_size));
+extern int EXPORT inflateInit_ OF((z_stream *strm,
+				   const char *version, int stream_size));
+extern int EXPORT deflateInit2_ OF((z_stream *strm, int  level, int  method,
+				    int windowBits, int memLevel, int strategy,
+				    const char *version, int stream_size));
+extern int EXPORT inflateInit2_ OF((z_stream *strm, int  windowBits,
+				    const char *version, int stream_size));
 #define deflateInit(strm, level) \
         deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
 #define inflateInit(strm) \
diff --git a/zlib.rc b/zlib.rc
new file mode 100644
index 0000000..5e1d0f7
--- /dev/null
+++ b/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1  1
+IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
+  FILEVERSION	 1,0,2,0
+  PRODUCTVERSION 1,0,2,0
+  FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+  FILEFLAGS	0
+  FILEOS	VOS_DOS_WINDOWS32
+  FILETYPE	VFT_DLL
+  FILESUBTYPE	0	// not used
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    //language ID = U.S. English, char set = Windows, Multilingual
+
+    BEGIN
+      VALUE "FileDescription", "zlib data compression library\0"
+      VALUE "FileVersion",	"1.0.2\0"
+      VALUE "InternalName",	"zlib\0"
+      VALUE "OriginalFilename",	"zlib.lib\0"
+      VALUE "ProductName",	"ZLib.DLL\0"
+      VALUE "Comments",	"DLL support by Alessandro Iacopetti\0"
+      VALUE "LegalCopyright", "(C) 1995-1996 Jean-loup Gailly & Mark Adler\0"
+    END
+  END
+  BLOCK "VarFileInfo"
+  BEGIN
+    VALUE "Translation", 0x0409, 1252
+  END
+END
diff --git a/zutil.c b/zutil.c
index 66ddae4..f32fda5 100644
--- a/zutil.c
+++ b/zutil.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: zutil.c,v 1.12 1996/01/30 21:59:29 me Exp $ */
+/* $Id: zutil.c,v 1.15 1996/05/23 17:11:36 me Exp $ */
 
 #include <stdio.h>
 
@@ -15,8 +15,6 @@
 extern void exit OF((int));
 #endif
 
-const char *zlib_version = ZLIB_VERSION;
-
 const char *z_errmsg[10] = {
 "need dictionary",     /* Z_NEED_DICT       2  */
 "stream end",          /* Z_STREAM_END      1  */
@@ -30,6 +28,11 @@
 ""};
 
 
+char *zlibVersion()
+{
+    return ZLIB_VERSION;
+}
+
 void z_error (m)
     char *m;
 {
diff --git a/zutil.h b/zutil.h
index 3abd8c4..5a53321 100644
--- a/zutil.h
+++ b/zutil.h
@@ -8,7 +8,7 @@
    subject to change. Applications should only use zlib.h.
  */
 
-/* $Id: zutil.h,v 1.13 1996/01/30 21:59:29 me Exp $ */
+/* $Id: zutil.h,v 1.14 1996/05/22 11:52:40 me Exp $ */
 
 #ifndef _Z_UTIL_H
 #define _Z_UTIL_H
