diff --git a/Makefile.msc b/Makefile.msc
new file mode 100644
index 0000000..acd73fb
--- /dev/null
+++ b/Makefile.msc
@@ -0,0 +1,57 @@
+# Sample makefile for pngcrush using Microsoft (Visual) C compiler.
+# Author: Cosmin Truta
+# Derived from Makefile.gcc by Glenn Randers-Pehrson
+# Last modified: 14 January 2000
+#
+# Invoke this makefile from a console prompt in the usual way; for example:
+#
+#	nmake -f Makefile.msc
+#
+# This makefile builds a statically linked executable.
+
+# macros --------------------------------------------------------------------
+
+CC = cl -nologo
+LD = link -nologo
+RM = del
+CFLAGS = -DPNG_ZBUF_SIZE=0x080000 -DWIN32 -O2
+LDFLAGS =
+O = .obj
+E = .exe
+
+PNGCRUSH = pngcrush
+
+LIBS =
+
+OBJS  = $(PNGCRUSH)$(O) adler32$(O) crc32$(O) deflate$(O) gzio$(O) \
+	infblock$(O) infcodes$(O) inffast$(O) inflate$(O) inftrees$(O) \
+	infutil$(O) png$(O) pngerror$(O) pngget$(O) pngmem$(O) \
+	pngpread$(O) pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) \
+	pngset$(O) pngtrans$(O) pngvcrd$(O) pngwio$(O) pngwrite$(O) \
+	pngwtran$(O) pngwutil$(O) trees$(O) zutil$(O)
+
+EXES = $(PNGCRUSH)$(E)
+
+
+# implicit make rules -------------------------------------------------------
+
+.c$(O):
+	$(CC) -c $(CFLAGS) $<
+
+
+# dependencies --------------------------------------------------------------
+
+all: $(EXES)
+
+
+$(PNGCRUSH)$(E): $(OBJS)
+	$(LD) $(LDFLAGS) -out:$@ $(OBJS) $(LIBS)
+
+$(PNGCRUSH)$(O): $(PNGCRUSH).c png.h pngconf.h zlib.h pngcrush.h
+
+# maintenance ---------------------------------------------------------------
+
+clean:
+	$(RM) *$(O)
+	$(RM) $(PNGCRUSH)$(E)
+
diff --git a/README.txt b/README.txt
index cec2ae9..eec2e6b 100644
--- a/README.txt
+++ b/README.txt
@@ -30,13 +30,14 @@
 This is the output of "pngcrush" and "pngcrush -help":
 
 
- | pngcrush 1.3.4, Copyright (C) 1998, 1999, 2000, Glenn Randers-Pehrson
+
+ | pngcrush 1.3.5, Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson
  | This is a free, open-source program.  Permission is
  | granted to everyone to use pngcrush without fee.
- | This program was built with libpng version 1.0.5m,
+ | This program was built with libpng version 1.1.0a,
  |    Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
  |    Copyright (C) 1996, 1997 Andreas Dilger,
- |    Copyright (C) 1998, 1999, Glenn Randers-Pehrson,
+ |    Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson,
  | and zlib version 1.1.3, Copyright (c) 1998,
  |    Jean-loup Gailly and Mark Adler.
 
@@ -44,7 +45,6 @@
 usage: pngcrush [options] infile.png outfile.png
        pngcrush -e ext [other options] files.png ...
        pngcrush -d dir [other options] files.png ...
-
 options:
         -brute (Use brute-force, try 114 different methods [11-124])
             -c color_type of output file [0, 2, 4, or 6]
@@ -73,6 +73,11 @@
             -h (help)
             -p (pause)
 
+
+usage: pngcrush [options] infile.png outfile.png
+       pngcrush -e ext [other options] files.png ...
+       pngcrush -d dir [other options] files.png ...
+
 options:
         -brute (Use brute-force, try 114 different methods [11-124])
 
diff --git a/deflate.c b/deflate.c
index 8a0d646..d69e88a 100644
--- a/deflate.c
+++ b/deflate.c
@@ -101,7 +101,7 @@
 /* Tail of hash chains */
 
 #ifndef TOO_FAR
-#  define TOO_FAR 4096
+#  define TOO_FAR 32767
 #endif
 /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
 
@@ -1279,9 +1279,12 @@
             }
             /* longest_match() sets match_start */
 
-            if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
-                 (s->match_length == MIN_MATCH &&
-                  s->strstart - s->match_start > TOO_FAR))) {
+            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if (TOO_FAR > 0 && TOO_FAR < 32767)
+                 || (s->match_length == MIN_MATCH &&
+                  s->strstart - s->match_start > TOO_FAR)
+#endif
+                  )) {
 
                 /* If prev_match is also MIN_MATCH, match_start is garbage
                  * but we will ignore the current match anyway.
diff --git a/name_to_int.c b/name_to_int.c
new file mode 100644
index 0000000..1c3bcb3
--- /dev/null
+++ b/name_to_int.c
@@ -0,0 +1,35 @@
+
+#include <stdio.h>
+convert(char * name)
+{
+  unsigned long number;
+  number=name[3]+name[2]*256+name[1]*256*256+name[0]*256*256*256;
+  printf(" #define PNG_%s 0x%xL\n",name, number);
+}
+main()
+{
+   convert("AAAA");
+   convert("IDAT");
+   convert("IEND");
+   convert("IHDR");
+   convert("PLTE");
+   convert("bKGD");
+   convert("cHRM");
+   convert("gAMA");
+   convert("hIST");
+   convert("iCCP");
+   convert("iTXt");
+   convert("oFFs");
+   convert("pCAL");
+   convert("pHYs");
+   convert("sBIT");
+   convert("sCAL");
+   convert("sPLT");
+   convert("sRGB");
+   convert("tEXt");
+   convert("tIME");
+   convert("tRNS");
+   convert("zTXt");
+   convert("zzzz");
+}
+
diff --git a/png.c b/png.c
index 20dae04..77e7eaa 100644
--- a/png.c
+++ b/png.c
@@ -1,7 +1,7 @@
 
 /* png.c - location for general purpose libpng functions
  *
- * libpng version 1.0.5m - January 7, 2000
+ * libpng version 1.0.5s - February 18, 2000
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
  * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
@@ -19,7 +19,7 @@
 
 #ifdef PNG_USE_GLOBAL_ARRAYS
 /* png_libpng_ver was changed to a function in version 1.0.5c */
-char png_libpng_ver[12] = "1.0.5m";
+char png_libpng_ver[12] = "1.0.5s";
 
 /* png_sig was changed to a function in version 1.0.5c */
 /* Place to hold the signature string for a PNG file. */
@@ -62,10 +62,10 @@
 /* offset to next interlace block in the y direction */
 int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
 
-/* Width of interlace block.  This is not currently used - if you need
- * it, uncomment it here and in png.h
+/* width of interlace block (used in assembler routines only) */
+#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
 int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
-*/
+#endif
 
 /* Height of interlace block.  This is not currently used - if you need
  * it, uncomment it here and in png.h
@@ -259,13 +259,16 @@
    png_memset(info_ptr, 0, sizeof (png_info));
 }
 
-#if defined(PNG_TEXT_SUPPORTED)
-/* free text item num or (if num == -1) all text items */
 void
-png_free_text(png_structp png_ptr, png_infop info_ptr, int num)
+png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, int num)
 {
    if (png_ptr == NULL || info_ptr == NULL)
       return;
+
+#if defined(PNG_TEXT_SUPPORTED)
+/* free text item num or (if num == -1) all text items */
+if (mask & PNG_FREE_TEXT)
+{
    if (num != -1)
    {
      if (info_ptr->text[num].key)
@@ -277,13 +280,10 @@
    else if (info_ptr->text != NULL)
    {
      int i;
-     if(info_ptr->text != NULL)
-     {
-       for (i = 0; i < info_ptr->num_text; i++)
-           png_free_text(png_ptr, info_ptr, i);
-       png_free(png_ptr, info_ptr->text);
-       info_ptr->text = NULL;
-     }
+     for (i = 0; i < info_ptr->num_text; i++)
+         png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
+     png_free(png_ptr, info_ptr->text);
+     info_ptr->text = NULL;
      info_ptr->num_text=0;
    }
 }
@@ -291,14 +291,12 @@
 
 #if defined(PNG_tRNS_SUPPORTED)
 /* free any tRNS entry */
-void
-png_free_tRNS(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_TRNS)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (info_ptr->valid & PNG_INFO_tRNS)
    {
-       png_free(png_ptr, info_ptr->trans);
+       if (info_ptr->free_me & PNG_FREE_TRNS)
+         png_free(png_ptr, info_ptr->trans);
        info_ptr->valid &= ~PNG_INFO_tRNS;
    }
 }
@@ -306,19 +304,13 @@
 
 #if defined(PNG_sCAL_SUPPORTED)
 /* free any sCAL entry */
-void
-png_free_sCAL(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_SCAL)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (info_ptr->valid & PNG_INFO_sCAL)
    {
 #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
        png_free(png_ptr, info_ptr->scal_s_width);
        png_free(png_ptr, info_ptr->scal_s_height);
-#else
-       if(png_ptr != NULL)
-          /* silence a compiler warning */ ;
 #endif
           info_ptr->valid &= ~PNG_INFO_sCAL;
    }
@@ -327,11 +319,8 @@
 
 #if defined(PNG_pCAL_SUPPORTED)
 /* free any pCAL entry */
-void
-png_free_pCAL(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_PCAL)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (info_ptr->valid & PNG_INFO_pCAL)
    {
        png_free(png_ptr, info_ptr->pcal_purpose);
@@ -352,15 +341,15 @@
 
 #if defined(PNG_iCCP_SUPPORTED)
 /* free any iCCP entry */
-void
-png_free_iCCP(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_ICCP)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (info_ptr->valid & PNG_INFO_iCCP)
    {
-       png_free(png_ptr, info_ptr->iccp_name);
-       png_free(png_ptr, info_ptr->iccp_profile);
+       if (info_ptr->free_me & PNG_FREE_ICCP)
+       {
+         png_free(png_ptr, info_ptr->iccp_name);
+         png_free(png_ptr, info_ptr->iccp_profile);
+       }
        info_ptr->valid &= ~PNG_INFO_iCCP;
    }
 }
@@ -368,39 +357,32 @@
 
 #if defined(PNG_sPLT_SUPPORTED)
 /* free a given sPLT entry, or (if num == -1) all sPLT entries */
-void
-png_free_spalettes(png_structp png_ptr, png_infop info_ptr, int num)
+if (mask & PNG_FREE_SPLT)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (num != -1)
    {
        png_free(png_ptr, info_ptr->splt_palettes[num].name);
        png_free(png_ptr, info_ptr->splt_palettes[num].entries);
-       info_ptr->valid &=~ PNG_INFO_sPLT;
+       info_ptr->valid &= ~PNG_INFO_sPLT;
    }
    else
    {
-       int i;
+       if(info_ptr->splt_palettes_num)
+       {
+         int i;
+         for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
+            png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i);
 
-       if(info_ptr->splt_palettes_num == 0)
-          return;
-
-       for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
-          png_free_spalettes(png_ptr, info_ptr, i);
-
-       png_free(png_ptr, info_ptr->splt_palettes);
-       info_ptr->splt_palettes_num = 0;
+         png_free(png_ptr, info_ptr->splt_palettes);
+         info_ptr->splt_palettes_num = 0;
+       }
    }
 }
 #endif
 
 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-void
-png_free_unknown_chunks(png_structp png_ptr, png_infop info_ptr, int num)
+if (mask & PNG_FREE_UNKN)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (num != -1)
    {
        png_free(png_ptr, info_ptr->unknown_chunks[num].data);
@@ -410,62 +392,60 @@
    {
        int i;
 
-       if(info_ptr->unknown_chunks_num == 0)
-          return;
+       if(info_ptr->unknown_chunks_num)
+       {
+         for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++)
+            png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i);
 
-       for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++)
-          png_free_unknown_chunks(png_ptr, info_ptr, i);
-
-       png_free(png_ptr, info_ptr->unknown_chunks);
-       info_ptr->unknown_chunks_num = 0;
-   }
-}
-void
-png_free_chunk_list(png_structp png_ptr)
-{
-   if (png_ptr == NULL)
-       return;
-   if (png_ptr->num_chunk_list)
-   {
-       png_free(png_ptr, png_ptr->chunk_list);
-       png_ptr->num_chunk_list=0;
+         png_free(png_ptr, info_ptr->unknown_chunks);
+         info_ptr->unknown_chunks_num = 0;
+       }
    }
 }
 #endif
 
 #if defined(PNG_hIST_SUPPORTED)
 /* free any hIST entry */
-void
-png_free_hIST(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_HIST)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
    if (info_ptr->valid & PNG_INFO_hIST)
    {
-       png_free(png_ptr, info_ptr->hist);
+       if (info_ptr->free_me & PNG_FREE_HIST)
+         png_free(png_ptr, info_ptr->hist);
        info_ptr->valid &= ~PNG_INFO_hIST;
    }
 }
 #endif
 
+/* free any PLTE entry that was internally allocated */
+if (mask & PNG_FREE_PLTE)
+{
+   if (info_ptr->valid & PNG_INFO_PLTE)
+   {
+       if (info_ptr->free_me & PNG_FREE_PLTE)
+          png_zfree(png_ptr, info_ptr->palette);
+       info_ptr->valid &= ~(PNG_INFO_PLTE);
+       info_ptr->num_palette = 0;
+   }
+}
+
 #if defined(PNG_INFO_IMAGE_SUPPORTED)
 /* free any image bits attached to the info structure */
-void
-png_free_pixels(png_structp png_ptr, png_infop info_ptr)
+if (mask & PNG_FREE_ROWS)
 {
-   if (png_ptr == NULL || info_ptr == NULL)
-       return;
-   if (info_ptr->valid & PNG_INFO_IDAT)
+   if (info_ptr->free_me & PNG_FREE_ROWS)
    {
        int row;
 
        for (row = 0; row < (int)info_ptr->height; row++)
-	   png_free(png_ptr, info_ptr->row_pointers[row]);
+          png_free(png_ptr, info_ptr->row_pointers[row]);
        png_free(png_ptr, info_ptr->row_pointers);
-       info_ptr->valid &= ~PNG_INFO_IDAT;
    }
 }
 #endif
+   if(num == -1)
+     info_ptr->free_me &= ~mask;
+}
 
 /* This is an internal routine to free any memory that the info struct is
  * pointing to before re-using it or freeing the struct itself.  Recall
@@ -475,34 +455,17 @@
 png_info_destroy(png_structp png_ptr, png_infop info_ptr)
 {
    png_debug(1, "in png_info_destroy\n");
-#if defined(PNG_READ_TEXT_SUPPORTED)
-   png_free_text(png_ptr, info_ptr, -1);
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
-   png_free_tRNS(png_ptr, info_ptr);
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
-   png_free_sCAL(png_ptr, info_ptr);
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
-   png_free_pCAL(png_ptr, info_ptr);
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
-   png_free_iCCP(png_ptr, info_ptr);
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
-   png_free_spalettes(png_ptr, info_ptr, -1);
-#endif
+
+   png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
+    
 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-   png_free_unknown_chunks(png_ptr, info_ptr, -1);
-   png_free_chunk_list(png_ptr);
+   if (png_ptr->num_chunk_list)
+   {
+       png_free(png_ptr, png_ptr->chunk_list);
+       png_ptr->num_chunk_list=0;
+   }
 #endif
-#if defined(PNG_hIST_SUPPORTED)
-   png_free_hIST(png_ptr, info_ptr);
-#endif
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-   png_free_pixels(png_ptr, info_ptr);
-#endif
+
    png_info_init(info_ptr);
 }
 
@@ -580,7 +543,7 @@
 png_get_copyright(png_structp png_ptr)
 {
    if (png_ptr != NULL || png_ptr == NULL)  /* silence compiler warning */
-   return ("\n libpng version 1.0.5m - January 7, 2000\n\
+   return ("\n libpng version 1.0.5s - February 18, 2000\n\
    Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n\
    Copyright (c) 1996, 1997 Andreas Dilger\n\
    Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson\n");
@@ -598,8 +561,8 @@
 {
    /* Version of *.c files used when building libpng */
    if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
-      return("1.0.5m");
-   return("1.0.5m");
+      return("1.0.5s");
+   return("1.0.5s");
 }
 
 png_charp
@@ -623,9 +586,9 @@
 /* Generate a compiler error if there is an old png.h in the search path. */
 void
 png_check_version
-   (version_1_0_5m png_h_is_not_version_1_0_5m)
+   (version_1_0_5s png_h_is_not_version_1_0_5s)
 {
-   if(png_h_is_not_version_1_0_5m == NULL)
+   if(png_h_is_not_version_1_0_5s == NULL)
      return;
 }
 
diff --git a/png.h b/png.h
index 5dba046..2c969e2 100644
--- a/png.h
+++ b/png.h
@@ -1,7 +1,7 @@
 
 /* png.h - header file for PNG reference library
  *
- * libpng version 1.0.5m - January 7, 2000
+ * libpng version 1.0.5s - February 18, 2000
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
  * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
@@ -9,19 +9,19 @@
  * Authors and maintainers:
  *  libpng versions 0.71, May 1995, through 0.89c, May 1996: Guy Schalnat
  *  libpng versions 0.90, December 1996, through 0.96, May 1997: Andreas Dilger
- *  libpng versions 0.97, January 1998, through 1.0.5m - January 7, 2000: Glenn
+ *  libpng versions 0.97, January 1998, through 1.0.5s - February 18, 2000: Glenn
  *  See also "Contributing Authors", below.
  *
  * Y2K compliance in libpng:
  * =========================
  *
- *    January 7, 2000
+ *    February 18, 2000
  *
  *    Since the PNG Development group is an ad-hoc body, we can't make
  *    an official declaration.
  *
  *    This is your unofficial assurance that libpng from version 0.71 and
- *    upward through 1.0.5m are Y2K compliant.  It is my belief that earlier
+ *    upward through 1.0.5s are Y2K compliant.  It is my belief that earlier
  *    versions were also Y2K compliant.
  *
  *    Libpng only has three year fields.  One is a 2-byte unsigned integer
@@ -98,8 +98,9 @@
  *    1.0.4a-f                 1.0.4a-f 10005  2.1.0.4a-f
  *    1.0.5                    1.0.5    10005  2.1.0.5
  *    1.0.5a-d                 1.0.5a-d 10006  2.1.0.5a-d
- *    1.0.5e-m                 1.0.5e-m 10100  2.1.0.5e-m
- *    1.1.0                    1.1.0    10100  3.1.0.0
+ *    1.0.5e-r                 1.0.5e-r 10100  2.1.0.5e-r (not compatible)
+ *    1.0.5s                   1.0.5s   10006  2.1.0.5s   (compatible)
+ *    1.3.0                    1.3.0    10300  3.1.3.0
  *
  *    Henceforth the source version will match the shared-library minor
  *    and patch numbers; the shared-library major version number will be
@@ -123,7 +124,7 @@
  * Copyright (c) 1996, 1997 Andreas Dilger
  * (libpng versions 0.90, December 1996, through 0.96, May 1997)
  * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
- * (libpng versions 0.97, January 1998, through 1.0.5m, January 7, 2000)
+ * (libpng versions 0.97, January 1998, through 1.0.5s, February 18, 2000)
  *
  * For the purposes of this copyright and license, "Contributing Authors"
  * is defined as the following set of individuals:
@@ -212,6 +213,11 @@
 /* include all user configurable info */
 #include "pngconf.h"
 
+/* macros for optional assembler routines */
+#if defined(PNG_INTERNAL) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
+#  include "pngasmrd.h"
+#endif
+
 /* Inhibit C++ name-mangling for libpng functions but not for system calls. */
 #ifdef __cplusplus
 extern "C" {
@@ -224,14 +230,14 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.0.5m"
+#define PNG_LIBPNG_VER_STRING "1.0.5s"
 
 /* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
  * We must not include leading zeros.
  * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
  * version 1.0.0 was mis-numbered 100 instead of 10000).  From
  * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=bugfix */
-#define PNG_LIBPNG_VER    10100  /* 1.1.0 */
+#define PNG_LIBPNG_VER    10006  /* 1.0.6 */
 
 /* Note to maintainer: update this number in scripts/pngdef.pas as well */
 
@@ -255,9 +261,11 @@
 PNG_EXPORT_VAR (int FARDATA) png_pass_yinc[7];
 PNG_EXPORT_VAR (int FARDATA) png_pass_mask[7];
 PNG_EXPORT_VAR (int FARDATA) png_pass_dsp_mask[7];
-/* These aren't currently used.  If you need them, see png.c for more details
-PNG_EXPORT_VAR (int FARDATA) png_pass_width[7];
-PNG_EXPORT_VAR (int FARDATA) png_pass_height[7];
+#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
+extern int FARDATA png_pass_width[7];   /* now used in pngvcrd.c, pnggccrd.c */
+#endif
+/* This isn't currently used.  If you need it, see png.c for more details.
+extern int FARDATA png_pass_height[7];
 */
 #endif
 
@@ -418,9 +426,8 @@
  * The following members may have allocated storage attached that should be
  * cleaned up before the structure is discarded: palette, trans, text,
  * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
- * splt_palettes, scal_unit, and row_pointers.  Of these, the text, pcal_*,
- * hist, iccp_*, splt_*, scal_unit, and row_pointers members are automatically
- * freed when the info structure is deallocated. The palette member is not.
+ * splt_palettes, scal_unit, and row_pointers.   These are automatically
+ * freed when the info structure is deallocated.
  *
  * More allocation details: all the chunk-reading functions that change these
  * members go through the corresponding png_set_* functions.  Functions to
@@ -447,7 +454,7 @@
    png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
 
    /* The following is informational only on read, and not used on writes. */
-   png_byte channels;       /* number of data channels per pixel (1, 3, 4)*/
+   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4)*/
    png_byte pixel_depth;    /* number of bits per pixel */
    png_byte spare_byte;     /* to align the data, and for future use */
    png_byte signature[8];   /* magic bytes read by libpng from start of file */
@@ -458,6 +465,8 @@
     * and initialize the appropriate fields below.
     */
 
+   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
+
 #if defined(PNG_gAMA_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
    /* The gAMA chunk describes the gamma characteristics of the system
     * on which the image was created, normally in the range [1.0, 2.5].
@@ -657,8 +666,9 @@
 #endif
 
 #if defined(PNG_INFO_IMAGE_SUPPORTED)
+   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
    /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
-   png_bytepp row_pointers;		/* the image bits */
+   png_bytepp row_pointers;        /* the image bits */
 #endif
 } png_info;
 
@@ -748,7 +758,7 @@
 #define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
 #define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
 #define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
-#define PNG_INFO_IDAT 0x8000   /* ESR, 1.0.6 */
+#define PNG_INFO_IDAT 0x8000L  /* ESR, 1.0.6 */
 
 /* This is used for the transformation routines, as some of them
  * change these values for the row.  It also should enable using
@@ -803,19 +813,19 @@
 #endif
 
 /* Transform masks for the high-level interface */
-#define PNG_TRANSFORM_IDENTITY		0x0000	/* read and write */
-#define PNG_TRANSFORM_STRIP_16		0x0001  /* read only */
-#define PNG_TRANSFORM_STRIP_ALPHA	0x0002	/* read only */
-#define PNG_TRANSFORM_PACKING		0x0004	/* read and write */
-#define PNG_TRANSFORM_PACKSWAP		0x0008	/* read and write */
-#define PNG_TRANSFORM_EXPAND		0x0010	/* read only */
-#define PNG_TRANSFORM_INVERT_MONO	0x0020	/* read and write */
-#define PNG_TRANSFORM_SHIFT		0x0040	/* read and write */
-#define PNG_TRANSFORM_BGR		0x0080	/* read and write */
-#define PNG_TRANSFORM_SWAP_ALPHA	0x0100	/* read and write */
-#define PNG_TRANSFORM_SWAP_ENDIAN	0x0200	/* read and write */
-#define PNG_TRANSFORM_INVERT_ALPHA	0x0200	/* read and write */
-#define PNG_TRANSFORM_STRIP_FILLER	0x0800	/* WRITE only */
+#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
+#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
+#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
+#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
+#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
+#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
+#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
+#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
+#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
+#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
+#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
+#define PNG_TRANSFORM_INVERT_ALPHA   0x0200    /* read and write */
+#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* WRITE only */
 
 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
 typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
@@ -829,8 +839,9 @@
 
 struct png_struct_def
 {
+#ifdef PNG_SETJMP_SUPPORTED
    jmp_buf jmpbuf;            /* used in png_error */
-
+#endif
    png_error_ptr error_fn;    /* function for printing errors and aborting */
    png_error_ptr warning_fn;  /* function for printing warnings */
    png_voidp error_ptr;       /* user supplied struct for error functions */
@@ -860,6 +871,7 @@
 
    png_uint_32 mode;          /* tells us where we are in the PNG file */
    png_uint_32 flags;         /* flags indicating various things to libpng */
+   png_uint_32 free_me;       /* flags items libpng is responsible for freeing */
    png_uint_32 transformations; /* which transformations to perform */
 
    z_stream zstream;          /* pointer to decompression structure (below) */
@@ -1044,16 +1056,16 @@
 };
 
 /* This prevents a compiler error in png_get_copyright() in png.c if png.c
-and png.h are both at * version 1.0.5m
+and png.h are both at * version 1.0.5s
  */
-typedef png_structp version_1_0_5m;
+typedef png_structp version_1_0_5s;
 
 typedef png_struct FAR * FAR * png_structpp;
 
 /* Here are the function definitions most commonly used.  This is not
  * the place to find out how to use libpng.  See libpng.txt for the
  * full explanation, see example.c for the summary.  This just provides
- * a simple one line of the use of each function.
+ * a simple one line description of the use of each function.
  */
 
 /* Tell lib we have already handled the first <num_bytes> magic bytes.
@@ -1576,6 +1588,23 @@
 /* frees a pointer allocated by png_malloc() */
 extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
 
+/* free data that was allocated internally */
+extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 free_me, int num));
+/* flags for png_ptr->free_me and info_ptr->free_me */
+#define PNG_FREE_PLTE 0x0001
+#define PNG_FREE_TRNS 0x0002
+#define PNG_FREE_TEXT 0x0004
+#define PNG_FREE_HIST 0x0008
+#define PNG_FREE_ICCP 0x0010
+#define PNG_FREE_SPLT 0x0020
+#define PNG_FREE_ROWS 0x0040
+#define PNG_FREE_PCAL 0x0080
+#define PNG_FREE_SCAL 0x0100
+#define PNG_FREE_UNKN 0x0200
+#define PNG_FREE_LIST 0x0400
+#define PNG_FREE_ALL  0x07ff
+
 #ifdef PNG_USER_MEM_SUPPORTED
 extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
    png_uint_32 size));
@@ -1630,6 +1659,17 @@
 extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
 png_infop info_ptr));
 
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+/* Returns row_pointers, which is an array of pointers to scanlines that was
+returned from png_read_png(). */
+extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
+png_infop info_ptr));
+/* Set row_pointers, which is an array of pointers to scanlines for use
+by png_write_png(). */
+extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_bytepp row_pointers));
+#endif
+
 /* Returns number of color channels in image. */
 extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
 png_infop info_ptr));
@@ -1795,11 +1835,6 @@
    int type, int nparams, png_charp units, png_charpp params));
 #endif
 
-#if defined(PNG_pCAL_SUPPORTED)
-extern PNG_EXPORT(void,png_free_pCAL) PNGARG((png_structp png_ptr,
-   png_infop info_ptr));
-#endif
-
 #if defined(PNG_READ_pHYs_SUPPORTED)
 extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
@@ -1848,26 +1883,16 @@
 extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_charp name, int compression_type,
    png_charp profile, png_uint_32 proflen));
-extern PNG_EXPORT(void,png_free_iCCP) PNGARG((png_structp png_ptr,
-   png_infop info_ptr));
 #endif
 
 #if defined(PNG_READ_sPLT_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_spalettes) PNGARG((png_structp png_ptr,
+extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_spalette_pp entries));
 #endif
 
 #if defined(PNG_sPLT_SUPPORTED)
-extern PNG_EXPORT(void,png_set_spalettes) PNGARG((png_structp png_ptr,
+extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_spalette_p entries, int nentries));
-extern PNG_EXPORT(void,png_free_spalettes) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, int num));
-#endif
-
-#if defined(PNG_READ_iTXt_SUPPORTED)
-/* png_get_itxt also returns the number of text chunks in *num_text */
-extern PNG_EXPORT(png_uint_32,png_get_itxt) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, png_textp *text_ptr, int *num_text));
 #endif
 
 #if defined(PNG_TEXT_SUPPORTED)
@@ -1885,8 +1910,6 @@
 #if defined(PNG_TEXT_SUPPORTED)
 extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_textp text_ptr, int num_text));
-extern PNG_EXPORT(void,png_free_text) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, int num_text_old));
 #endif
 
 #if defined(PNG_READ_tIME_SUPPORTED)
@@ -1912,15 +1935,13 @@
 #endif
 
 #if defined(PNG_tRNS_SUPPORTED)
-extern PNG_EXPORT(void,png_free_tRNS) PNGARG((png_structp png_ptr,
-   png_infop info_ptr));
 #endif
 
 #if defined(PNG_READ_sCAL_SUPPORTED)
 #ifdef PNG_FLOATING_POINT_SUPPORTED
 extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
    png_infop info_ptr, int *unit, double *width, double *height));
-#else 
+#else
 #ifdef PNG_FIXED_POINT_SUPPORTED
 extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
    png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
@@ -1939,11 +1960,6 @@
 #endif
 #endif /* PNG_READ_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
 
-#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED)
-extern PNG_EXPORT(void,png_free_sCAL) PNGARG((png_structp png_ptr,
-   png_infop info_ptr));
-#endif /* PNG_READ_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
-
 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 /* provide a list of chunks and how they are to be handled, if the built-in
    handling or default unknown chunk handling is not desired.  Any chunks not
@@ -1958,24 +1974,19 @@
    png_ptr, int keep, png_bytep chunk_list, int num_chunks));
 extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
    png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
-extern PNG_EXPORT(void,png_free_unknown_chunks) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, int num));
 extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
    png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
-extern PNG_EXPORT(void,png_free_chunk_list) PNGARG((png_structp png_ptr));
 #endif
 
 #if defined(PNG_INFO_IMAGE_SUPPORTED)
 extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
-						png_infop info_ptr,
-						int transforms,
-						voidp params));
+                        png_infop info_ptr,
+                        int transforms,
+                        voidp params));
 extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
-						png_infop info_ptr,
-						int transforms,
-						voidp params));
-extern PNG_EXPORT(void, png_free_pixels) PNGARG((png_structp png_ptr,
-					      png_infop info_ptr));
+                        png_infop info_ptr,
+                        int transforms,
+                        voidp params));
 #endif
 
 /* Define PNG_DEBUG at compile time for debugging information.  Higher
@@ -2018,7 +2029,7 @@
 extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
 
 #define PNG_HEADER_VERSION_STRING \
-   " libpng version 1.0.5m - January 7, 2000 (header)\n"
+   " libpng version 1.0.5s - February 18, 2000 (header)\n"
 
 #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
 /* With these routines we avoid an integer divide, which will be slower on
@@ -2135,16 +2146,13 @@
 #define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
 #define PNG_FLAG_CRC_CRITICAL_USE         0x0400
 #define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
-#define PNG_FLAG_FREE_PALETTE             0x1000
-#define PNG_FLAG_FREE_TRANS               0x2000
-#define PNG_FLAG_FREE_HIST                0x4000
-#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
-#define PNG_FLAG_KEEP_UNSAFE_CHUNKS      0x10000L
+#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x1000 
+#define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x2000
 
 /* For use in png_set_keep_unknown, png_handle_as_unknown */
-#define HANDLE_CHUNK_AS_DEFAULT   0              
-#define HANDLE_CHUNK_NEVER        1              
-#define HANDLE_CHUNK_IF_SAFE      2              
+#define HANDLE_CHUNK_AS_DEFAULT   0
+#define HANDLE_CHUNK_NEVER        1
+#define HANDLE_CHUNK_IF_SAFE      2
 #define HANDLE_CHUNK_ALWAYS       3
 
 #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
@@ -2414,11 +2422,6 @@
    int num_hist));
 #endif
 
-#if defined(PNG_hIST_SUPPORTED)
-extern PNG_EXPORT(void,png_free_hIST) PNGARG((png_structp png_ptr,
-   png_infop info_ptr));
-#endif
-
 #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
     defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
 PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
diff --git a/pngasmrd.h b/pngasmrd.h
index 07a8d73..63b4aef 100644
--- a/pngasmrd.h
+++ b/pngasmrd.h
@@ -1,6 +1,6 @@
 /* pngasmrd.h - assembler version of utilities to read a PNG file
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1999, 2000 Glenn Randers-Pehrson
  *
@@ -9,24 +9,27 @@
 #ifdef PNG_ASSEMBLER_CODE_SUPPORTED
 
 /* Set this in the makefile for VC++ on Pentium, not in pngconf.h */
-#ifdef PNG_USE_PNGVCRD
 /* Platform must be Pentium.  Makefile must assemble and load pngvcrd.c .
  * MMX will be detected at run time and used if present.
  */
-#define PNG_HAVE_ASSEMBLER_COMBINE_ROW
-#define PNG_HAVE_ASSEMBLER_READ_INTERLACE
-#define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
+#ifdef PNG_USE_PNGVCRD
+#  define PNG_HAVE_ASSEMBLER_COMBINE_ROW
+#  define PNG_HAVE_ASSEMBLER_READ_INTERLACE
+#  define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
 #endif
 
-/* Set this in the makefile for gcc on Pentium, not in pngconf.h */
-#ifdef PNG_USE_PNGGCCRD
-/* Platform must be Pentium.  Makefile must assemble and load pnggccrd.c
- * (not available in libpng 1.0.5m).
+/* Set this in the makefile for gcc/as on Pentium, not in pngconf.h */
+/* Platform must be Pentium.  Makefile must assemble and load pnggccrd.c .
  * MMX will be detected at run time and used if present.
  */
-#define PNG_HAVE_ASSEMBLER_COMBINE_ROW
-#define PNG_HAVE_ASSEMBLER_READ_INTERLACE
-#define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
+#ifdef PNG_USE_PNGGCCRD
+#  define PNG_HAVE_ASSEMBLER_COMBINE_ROW
+#  define PNG_HAVE_ASSEMBLER_READ_INTERLACE
+#  define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
 #endif
+/*
+    GRR notes:
+      - see pnggccrd.c for info about what is currently enabled
+ */
 
 #endif
diff --git a/pngconf.h b/pngconf.h
index 5b2ab13..bff051d 100644
--- a/pngconf.h
+++ b/pngconf.h
@@ -1,7 +1,7 @@
 
 /* pngconf.h - machine configurable file for libpng
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -113,29 +113,35 @@
 #include <sys/types.h>
 #endif
 
+#ifndef PNG_SETJMP_NOT_SUPPORTED
+#  define PNG_SETJMP_SUPPORTED
+#endif
+
+#ifdef PNG_SETJMP_SUPPORTED
 /* This is an attempt to force a single setjmp behaviour on Linux.  If
  * the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
  */
-#ifdef __linux__
-#ifdef _BSD_SOURCE
-#define _PNG_SAVE_BSD_SOURCE
-#undef _BSD_SOURCE
-#endif
-#ifdef _SETJMP_H
-__png.h__ already includes setjmp.h
-__dont__ include it again
-#endif
+#  ifdef __linux__
+#    ifdef _BSD_SOURCE
+#      define _PNG_SAVE_BSD_SOURCE
+#      undef _BSD_SOURCE
+#    endif
+#    ifdef _SETJMP_H
+      __png.h__ already includes setjmp.h
+      __dont__ include it again
+#    endif
 #endif /* __linux__ */
 
 /* include setjmp.h for error handling */
 #include <setjmp.h>
 
-#ifdef __linux__
-#ifdef _PNG_SAVE_BSD_SOURCE
-#define _BSD_SOURCE
-#undef _PNG_SAVE_BSD_SOURCE
-#endif
-#endif /* __linux__ */
+#  ifdef __linux__
+#    ifdef _PNG_SAVE_BSD_SOURCE
+#      define _BSD_SOURCE
+#      undef _PNG_SAVE_BSD_SOURCE
+#    endif
+#  endif /* __linux__ */
+#endif /* PNG_SETJMP_SUPPORTED */
 
 #ifdef BSD
 #include <strings.h>
@@ -419,7 +425,8 @@
 #define PNG_EASY_ACCESS_SUPPORTED
 #endif
 
-#ifndef PNG_NO_ASSEMBLER_CODE
+#if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD) && \
+  !defined(PNG_NO_ASSEMBLER_CODE)
 #define PNG_ASSEMBLER_CODE_SUPPORTED
 #endif
 
@@ -706,8 +713,8 @@
 #endif
 #endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
 
-/* Turn this off to disable png_read_png() and 
- * png_write_png() and leave the image_bits member
+/* Turn this off to disable png_read_png() and
+ * png_write_png() and leave the row_pointers member
  * out of the info structure.
  */
 #ifndef PNG_NO_INFO_IMAGE
@@ -843,8 +850,13 @@
 
 
 #ifndef PNG_EXPORT
-   /* allow for compilation as dll under MS Windows */
-#  ifdef __WIN32DLL__
+   /* GRR 20000206:  based on zconf.h and MSVC 5.0 docs */
+#  if defined(_MSC_VER) && defined(_DLL)
+#    define PNG_EXPORT(type,symbol)        type __declspec(dllexport) symbol
+#  endif
+
+   /* allow for compilation as a DLL under MS Windows */
+#  ifdef __WIN32DLL__	/* Borland? */
 #    define PNG_EXPORT(type,symbol) __declspec(dllexport) type symbol
 #  endif
 
@@ -853,7 +865,7 @@
 #    define PNG_EXPORT(type,symbol) type __attribute__((dllexport)) symbol
 #  endif
 
-   /* allow for compilation as dll with Borland C++ 5.0 */
+   /* allow for compilation as a DLL with Borland C++ 5.0 */
 #  if defined(__BORLANDC__) && defined(_Windows) && defined(__DLL__)
 #    define PNG_EXPORT(type,symbol) type _export symbol
 #  endif
@@ -873,6 +885,9 @@
 #endif
 
 #ifndef PNG_EXPORT_VAR
+#  if defined(_MSC_VER) && defined(_DLL)	/* GRR 20000206 */
+#    define PNG_EXPORT_VAR(type) extern type __declspec(dllexport)
+#  endif
 #  ifdef PNG_DECL_DLLEXP
 #    define PNG_EXPORT_VAR(type) extern __declspec(dllexport) type
 #  endif
@@ -895,6 +910,14 @@
  * that are passed far data must be model independent.
  */
 
+#ifndef PNG_ABORT
+#   define PNG_ABORT() abort()
+#endif
+
+#ifdef PNG_SETJMP_SUPPORTED
+#   define png_jmp_env(png_ptr) png_ptr->jmpbuf   
+#endif
+
 #if defined(USE_FAR_KEYWORD)  /* memory model independent fns */
 /* use this to make far-to-near assignments */
 #   define CHECK   1
diff --git a/pngcrush.c b/pngcrush.c
index c55a637..184e899 100644
--- a/pngcrush.c
+++ b/pngcrush.c
@@ -15,7 +15,7 @@
  * occasionally creating Linux executables.
  */
 
-#define PNGCRUSH_VERSION "1.3.4"
+#define PNGCRUSH_VERSION "1.3.5"
 
 /*
  * COPYRIGHT NOTICE, DISCLAIMER, AND LICENSE:
@@ -54,6 +54,26 @@
  *
  * Change log:
  *
+ * Version 1.3.5 (built with libpng-1.0.5s)
+ *
+ *   Add test on stat_buf.st_size to verify fpin==fpout, because stat in
+ *   MSVC++6.0 standard version returns stat_buf.st_ino=0 for all files.
+ *
+ *   Revised pngcrush.h to make it easier to control PNG_ZBUF_SIZE and
+ *   PNG_NO_FLOATING_POINT_SUPPORTED from a makefile.
+ *
+ *   Restored ability to enter "replace_gamma" value as a float even when
+ *   floating point arithmetic is not enabled.
+ *
+ *   Enabled removing tEXt, zTXt, or iTXt chunks by chunk type, i.e.,
+ *   "-rem tEXt" only removes tEXt chunks, while "-rem text" removes all
+ *   three types of text chunk.
+ *
+ *   Removed definition of TOO_FAR from pngcrush.h
+ *
+ *   Uses new libpng error handler; if a file has errors, pngcrush now will
+ *   continue on and compress the remaining files instead of bailing out.
+ *
  * Version 1.3.4 (built with libpng-1.0.5m)
  *
  *   Do not allow pngcrush to overwrite the input file.
@@ -142,7 +162,7 @@
 #else
 #  define SLASH "/"
 #endif
-#if !defined(__BORLANDC__) && !defined(_MBCS)
+#if !defined(__TURBOC__) && !defined(_MSC_VER) && !defined(_MBCS)
 #  include <unistd.h>
 #endif
 #include <sys/types.h>
@@ -151,7 +171,7 @@
 #include <stdlib.h>
 #include <time.h>
 #include <assert.h>
-#ifdef _MBCS
+#if defined(_MBCS) || defined(WIN32) || defined(__WIN32__)
 #  include <direct.h>
 #endif
 
@@ -160,6 +180,7 @@
 #define EXTENSION_MODE 2
 #define FOPEN(file, how) fopen(file, how)
 #define FCLOSE(file) {fclose(file); file=NULL;--number_of_open_files;};
+#define P2 if(verbose > 2)printf
 
 /* we don't need the extra libpng tranformations
  * so they are ifdef'ed out in a special version of pngconf.h */
@@ -179,9 +200,6 @@
 static PNG_CONST char *progname = "pngtest.png";
 static PNG_CONST char *inname = "pngtest.png";
 static PNG_CONST char *outname = "pngout.png";
-#if 0
-static PNG_CONST char *tmpname = "pngtmp.png";
-#endif
 static PNG_CONST char *directory_name = "pngcrush.bak";
 static PNG_CONST char *extension = "_C.png";
 
@@ -210,7 +228,12 @@
 char buffer[256];
 char *str_return;
 
+#ifndef PNG_JMPBUF_SUPPORTED
+#ifndef PNG_SETJMP_NOT_SUPPORTED
+/* Old setjmp interface */
 jmp_buf jmpbuf;
+#endif
+#endif
 
 static png_uint_32 total_input_length = 0;
 static png_uint_32 total_output_length = 0;
@@ -224,6 +247,7 @@
 static int input_color_type;
 static int input_bit_depth;
 static int trial;
+static int first_trial=0;
 static int verbose=1;
 static int help=0;
 static int things_have_changed=0;
@@ -414,18 +438,17 @@
       png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); \
       FCLOSE(fpin); \
       if(verbose > 1) \
-         fprintf(STDERR, "returning after longjump\n"); \
-      exit(1);
+         fprintf(STDERR, "returning after longjump\n");
 
 int keep_chunk(png_const_charp name, char *argv[]);
 
 int keep_chunk(png_const_charp name, char *argv[])
 {
     int i;
-    if(verbose > 2 && trial == 1)
+    if(verbose > 2 && first_trial)
        fprintf(STDERR, "   Read the %s chunk.\n", name);
     if(remove_chunks == 0) return 1;
-    if(verbose > 1 && trial == 1)
+    if(verbose > 1 && first_trial)
        fprintf(STDERR, "     Check for removal of the %s chunk.\n", name);
     for (i=1; i<=remove_chunks; i++)
     {
@@ -462,13 +485,13 @@
            (!strncmp(name,"zTXt",4) && (!strncmp(argv[i],"text",4)        )))
          {
            things_have_changed=1;
-           if(verbose > 0 && trial == 1)
+           if(verbose > 0 && first_trial)
               fprintf(STDERR, "   Removed the %s chunk.\n", name);
            return 0;
          }
       }
     }
-    if(verbose > 1 && trial == 1)
+    if(verbose > 1 && first_trial)
        fprintf(STDERR, "   Preserving the %s chunk.\n", name);
     return 1;
 }
@@ -534,10 +557,6 @@
    png_fixed_point file_gamma=0;
 #endif
    char *cp;
-#if 0
-   FILE *tmpfile (void);
-#endif
-
    int i;
    row_buf = (png_bytep)NULL;
    number_of_open_files=0;
@@ -593,7 +612,7 @@
            }
         }
      }
-
+#define BUMP_I i++;if(i >= argc) {printf("insufficient parameters\n");exit(1);}
    names=1;
    for (i=1; i<argc; i++)
    {
@@ -647,12 +666,14 @@
    else if(!strncmp(argv[i],"-bit_depth",10))
       {
          names++;
-         force_output_bit_depth=atoi(argv[++i]);
+         BUMP_I;
+         force_output_bit_depth=atoi(argv[i]);
       }
    else if(!strncmp(argv[i],"-c",2))
       {
          names++;
-         force_output_color_type=atoi(argv[++i]);
+         BUMP_I;
+         force_output_color_type=atoi(argv[i]);
       }
 #ifdef PNG_gAMA_SUPPORTED
    else if(!strncmp(argv[i],"-dou",4))
@@ -663,13 +684,13 @@
 #endif
    else if(!strncmp(argv[i],"-d",2))
       {
-         i++;
+         BUMP_I;
          pngcrush_mode=DIRECTORY_MODE;
          directory_name= argv[names++];
       }
    else if(!strncmp(argv[i],"-e",2))
       {
-         i++;
+         BUMP_I;
          pngcrush_mode=EXTENSION_MODE;
          extension= argv[names++];
       }
@@ -755,7 +776,7 @@
    else if(!strncmp(argv[i],"-g",2))
       {
          names++;
-         i++;
+         BUMP_I;
          if (intent < 0)
             {
                int c;
@@ -790,13 +811,15 @@
    else if(!strncmp(argv[i],"-max",4))
       {
          names++;
-         max_idat_size = atoi(argv[++i]);
+         BUMP_I;
+         max_idat_size = atoi(argv[i]);
          if (max_idat_size > PNG_ZBUF_SIZE) max_idat_size=PNG_ZBUF_SIZE;
       }
    else if(!strncmp(argv[i],"-m",2))
       {
          names++;
-         method=atoi(argv[++i]);
+         BUMP_I;
+         method=atoi(argv[i]);
          methods_specified=1;
          brute_force=0;
          try_method[method]=0;
@@ -810,13 +833,15 @@
    else if(!strncmp(argv[i],"-plte_len",9))
       {
          names++;
-         plte_len=atoi(argv[++i]);
+         BUMP_I;
+         plte_len=atoi(argv[i]);
       }
-   else if(!strncmp(argv[i],"-pplt",9))
+   else if(!strncmp(argv[i],"-pplt",3))
       {
          names++;
          do_pplt++;
-         strcpy(pplt_string,argv[++i]);
+         BUMP_I;
+         strcpy(pplt_string,argv[i]);
          things_have_changed=1;
       }
    else if(!strncmp(argv[i],"-p",2))
@@ -827,7 +852,30 @@
    else if(!strncmp(argv[i],"-rep",4))
       {
          names++;
-         force_specified_gamma=atoi(argv[++i]);
+         BUMP_I;
+         {
+            int c;
+            char number[16];
+            char *n=number;
+            int nzeroes=-1;
+            int length=strlen(argv[i]);
+            for (c=0; c<length; c++)
+               {
+                  if( *(argv[i]+c) == '.')
+                     {
+                        nzeroes=5;
+                     }
+                  else if (nzeroes != 0)
+                     {
+                        *n++=*(argv[i]+c);
+                        nzeroes--;
+                     }
+               }
+            for (c=0; c<nzeroes; c++)
+               *n++='0';
+            *n='\0';
+            force_specified_gamma=atoi(number);
+         }
          things_have_changed=1;
       }
 #endif
@@ -835,14 +883,15 @@
    else if(!strncmp(argv[i],"-res",4))
       {
          names++;
-         resolution=atoi(argv[++i]);
+         BUMP_I;
+         resolution=atoi(argv[i]);
       }
 #endif
    else if(!strncmp(argv[i],"-r",2))
       {
          remove_chunks=i;
          names++;
-         i++;
+         BUMP_I;
       }
    else if( !strncmp(argv[i],"-save",5))
          all_chunks_are_safe++;
@@ -854,7 +903,7 @@
          specified_gamma=45455L;
 #endif
          intent=0;
-         i++;
+         BUMP_I;
          if(!strncmp(argv[i],"0",1) ||
             !strncmp(argv[i],"1",1) ||
             !strncmp(argv[i],"2",1) ||
@@ -874,6 +923,7 @@
             !strncmp(argv[i],"-zitxt",6) || !strncmp(argv[i],"-ziTXt",6) ||
             !strncmp(argv[i],"-itxt",5) || !strncmp(argv[i],"-iTXt",5))
       {
+         i+=2; BUMP_I; i-=3;
          if(strlen(argv[i+2]) < 80 && strlen(argv[i+3]) < 2048 &&
             text_inputs < 10)
          {
@@ -925,7 +975,8 @@
             names+=3;
             if( !strncmp(argv[i],"-i",2) || !strncmp(argv[i],"-zi",3))
             {
-              i+=2;
+              i++;
+              BUMP_I;
               names+=2;
             }
          }
@@ -1264,13 +1315,13 @@
      fprintf(STDERR,
        "               document) can be named with all lower-case letters,\n");
      fprintf(STDERR,
-       "               so \"-rem bkgd\" is equivalent to \"-rem bKGD\".\n");
+       "               so \"-rem bkgd\" is equivalent to \"-rem bKGD\".  But\n");
+     fprintf(STDERR,
+       "               note: \"-rem text\" removes all forms of text chunks;\n");
      fprintf(STDERR,
        "               Exact case is required to remove unknown chunks.\n");
      fprintf(STDERR,
-       "               \"-rem text\" also removes zTXt.  If you like to do\n");
-     fprintf(STDERR,
-       "               surgery with a chain-saw, \"-rem alla\" removes\n");
+       "               To do surgery with a chain-saw, \"-rem alla\" removes\n");
      fprintf(STDERR,
        "               all known ancillary chunks except for tRNS, and\n");
      fprintf(STDERR,
@@ -1278,7 +1329,7 @@
      }
       png_crush_pause();
      fprintf(STDERR,
-       "-replace_gamma gamma_value (float) even when file has a gAMA chunk.\n");
+       "-replace_gamma gamma (float or fixed*100000) even if gAMA is present.\n");
      if(verbose > 1)
         fprintf(STDERR,"\n");
      fprintf(STDERR,
@@ -1288,7 +1339,7 @@
      fprintf(STDERR,
        "\n               Write a pHYs chunk with the given resolution.\n\n");
      }
-/*
+#if 0
      fprintf(STDERR,
        "         -save (keep all copy-unsafe chunks)\n");
      if(verbose > 1)
@@ -1301,7 +1352,7 @@
        "               all chunks 'known' to %s, so they can be copied.\n\n",
                        progname);
      }
-*/
+#endif
       png_crush_pause();
 
      fprintf(STDERR,
@@ -1400,20 +1451,17 @@
    for (ia=0; ia<255; ia++)
       trns_array[ia]=255;
 
-   for(;;)
+   for(;;)  /* loop on input files */
 
    {
+      first_trial = 1;
 
       if(png_row_filters != NULL)
       {
          free(png_row_filters); png_row_filters=NULL;
       }
 
-      output_color_type=force_output_color_type;
-      output_bit_depth=force_output_bit_depth;
-
-      if(pngcrush_mode == DIRECTORY_MODE || pngcrush_mode == EXTENSION_MODE)
-          inname=argv[names++];
+      inname=argv[names++];
 
       if(inname == NULL) 
       {
@@ -1453,7 +1501,7 @@
           struct stat stat_buf;
           if(stat(directory_name, &stat_buf) != 0)
           {
-#if defined(_MBCS) || defined(__WIN32__)
+#if defined(_MBCS) || defined(WIN32) || defined(__WIN32__)
              if(_mkdir(directory_name) != 0)
 #else
              if(mkdir(directory_name, 0x1ed) != 0)
@@ -1480,6 +1528,8 @@
           outname=out_string;
       }
 
+      output_color_type=force_output_color_type;
+      output_bit_depth=force_output_bit_depth;
 
       if(nosave < 2)
       {
@@ -1488,7 +1538,7 @@
          if ((fpin = FOPEN(inname, "rb")) == NULL)
          {
             fprintf(STDERR, "Could not find file: %s\n", inname);
-            return 1;
+            continue;
          }
          number_of_open_files++;
 
@@ -1503,13 +1553,7 @@
             fflush(STDERR);
          }
 
-         if(idat_length[0] == 0) return 1;
-
-#if 0
-         fpin = FOPEN(inname, "rb");
-         number_of_open_files++;
-#endif
-
+         if(idat_length[0] == 0) continue;
       }
       else
          idat_length[0]=1;
@@ -1544,14 +1588,13 @@
             struct stat stat_in, stat_out;
             /* just copy input to output */
 
-            if(verbose > 2)
-               printf("prepare to copy input to output\n");
+            P2("prepare to copy input to output\n");
             png_crush_pause();
 
             if ((fpin = FOPEN(inname, "rb")) == NULL)
             {
                fprintf(STDERR, "Could not find input file %s\n", inname);
-               return 1;
+               continue;
             }
 
             number_of_open_files++;
@@ -1563,12 +1606,12 @@
             }
 
             number_of_open_files++;
-            if(verbose > 2)
-               printf("copying input to output...");
+            P2("copying input to output...");
 
             stat(inname, &stat_in);
             stat(outname, &stat_out);
-            if(stat_in.st_ino != stat_out.st_ino)
+            if((stat_in.st_ino != stat_out.st_ino) || 
+               (stat_in.st_size != stat_out.st_size))
             {
                for(;;)
                {
@@ -1581,8 +1624,7 @@
 
                }
             }
-            if(verbose > 2)
-               printf("copy complete.\n");
+            P2("copy complete.\n");
             png_crush_pause();
             FCLOSE(fpin);
             FCLOSE(fpout);
@@ -1620,19 +1662,18 @@
           if(zs[trial] == 1)z_strategy=Z_FILTERED;
           if(zs[trial] == 2)z_strategy=Z_HUFFMAN_ONLY;
           final_method=trial;
-          if(verbose > 2 && nosave == 0)
-          printf("   Begin trial %d, filter %d, strategy %d, level %d\n",
+          if(nosave == 0)
+            P2("   Begin trial %d, filter %d, strategy %d, level %d\n",
               trial, filter_method, z_strategy, zlib_level);
       }
 
-      if(verbose > 2)
-         printf("prepare to open files.\n");
+      P2("prepare to open files.\n");
          png_crush_pause();
 
       if ((fpin = FOPEN(inname, "rb")) == NULL)
       {
          fprintf(STDERR, "Could not find input file %s\n", inname);
-         return 1;
+         continue;
       }
       number_of_open_files++;
       if(nosave == 0)
@@ -1641,7 +1682,13 @@
          stat(inname, &stat_in);
          stat(outname, &stat_out);
          if(stat_in.st_ino == stat_out.st_ino)
+            if((stat_in.st_ino == stat_out.st_ino) && 
+               (stat_in.st_size == stat_out.st_size))
          {
+            /* MSVC++6.0 will erroneously return 0 for both files, so
+               it is possible that we will erroneously reject the attempt
+               when inputsize and outputsize are equal, for different files
+             */
             fprintf(STDERR, "Cannot overwrite input file %s\n", inname);
             FCLOSE(fpin);
             return 1;
@@ -1657,8 +1704,7 @@
          number_of_open_files++;
         }
 
-      if(verbose > 2)
-         printf("files are opened.\n");
+      P2("files are opened.\n");
             png_crush_pause();
 
       png_debug(0, "Allocating read and write structures\n");
@@ -1701,31 +1747,52 @@
       write_end_info_ptr = png_create_info_struct(write_ptr);
    }
 
-      if(verbose > 2)
-      printf("structures created.\n");
+      P2("structures created.\n");
             png_crush_pause();
 
       png_debug(0, "Setting jmpbuf for read and write structs\n");
-#if defined(USE_FAR_KEYWORD)
-      if (setjmp(jmpbuf))
-#else
-      if (setjmp(read_ptr->jmpbuf))
-#endif
+#ifndef PNG_SETJMP_NOT_SUPPORTED
+#  ifdef USE_FAR_KEYWORD
+   if (setjmp(jmpbuf))
+#  else
+#    ifdef PNG_JMPBUF_SUPPORTED
+   /* New setjmp interface */
+   if (setjmp(png_jmp_env(read_ptr)))
+#    else
+   /* old interface */
+   if (setjmp(read_ptr->jmpbuf))
+#    endif
+#  endif
       {
           PNG_CRUSH_CLEANUP
+          continue;
       }
 
 #if defined(USE_FAR_KEYWORD)
-      png_memcpy(read_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
+      png_memcpy(png_jmp_env(read_ptr),jmpbuf,sizeof(jmp_buf));
 #endif
-
-      if(nosave == 0)
-         png_memcpy(write_ptr->jmpbuf,read_ptr->jmpbuf,sizeof(jmp_buf));
-
-      if(verbose > 2)
-         printf("jmp_buf has been set.\n");
-
+   if(nosave == 0)
+#  ifdef USE_FAR_KEYWORD
+   if (setjmp(jmpbuf))
+#  else
+#    ifdef PNG_JMPBUF_SUPPORTED
+   /* New setjmp interface */
+   if (setjmp(png_jmp_env(write_ptr)))
+#    else
+   /* Old interface */
+   if (setjmp(write_ptr->jmpbuf))
+#    endif
+#  endif
+         {
+             PNG_CRUSH_CLEANUP
+             continue;
+         }
+#if defined(USE_FAR_KEYWORD)
+      png_memcpy(png_jmp_env(write_ptr),jmpbuf,sizeof(jmp_buf));
+#endif
+      P2("jmp_buf has been set.\n");
       png_crush_pause();
+#endif
 
       png_debug(0, "Initializing input and output streams\n");
 #if !defined(PNG_NO_STDIO)
@@ -1743,8 +1810,7 @@
 #endif
 #endif
 
-      if(verbose > 2)
-         printf("io has been initialized.\n");
+      P2("io has been initialized.\n");
       png_crush_pause();
 
      /* We don't need to check CRC's because they were already checked
@@ -1758,36 +1824,37 @@
 
       if(read_ptr->zbuf_size < (png_size_t)max_idat_size)
       {
-      if(verbose > 2)
-         printf("reinitializing read zbuf.\n");
+      P2("reinitializing read zbuf.\n");
       png_free(read_ptr, read_ptr->zbuf);
       read_ptr->zbuf_size = (png_size_t)max_idat_size;
       read_ptr->zbuf = 
         (png_bytep)png_malloc(read_ptr, (png_uint_32)read_ptr->zbuf_size);
       }
       if(nosave == 0)
+       {
          if(write_ptr->zbuf_size > (png_size_t)max_idat_size)
          {
-            if (verbose > 2)
-            printf("reinitializing write zbuf.\n");
+            P2("reinitializing write zbuf.\n");
             png_free(write_ptr, write_ptr->zbuf);
             write_ptr->zbuf_size = (png_size_t)max_idat_size;
             write_ptr->zbuf =
               (png_bytep)png_malloc(write_ptr,
                  (png_uint_32)write_ptr->zbuf_size);
          }
-
+       }
 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
       png_set_keep_unknown_chunks(read_ptr, HANDLE_CHUNK_ALWAYS,
          (png_bytep)NULL, 0);
 #endif
 #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
       if(nosave == 0)
+        {
         if(all_chunks_are_safe != 0)
            png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
             (png_bytep)NULL, 0);
         else
         {
+#ifndef PNG_UINT_IHDR
 #ifdef PNG_USE_LOCAL_ARRAYS
 #if !defined(PNG_cHRM_SUPPORTED)
           PNG_cHRM;
@@ -1841,7 +1908,51 @@
           png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
             (png_bytep)png_tIME, 1);
 #endif
+#else   /* !PNG_UINT_IHDR */
+
+          png_byte chunk_name[5];
+          chunk_name[4]='\0';
+
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE,
+            NULL, 0);
+#if !defined(PNG_cHRM_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_cHRM);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS, 
+            chunk_name, 1);
+#endif
+#if !defined(PNG_hIST_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_hIST);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS, 
+            chunk_name, 1);
+#endif
+#if !defined(PNG_iCCP_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_iCCP);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS, 
+            chunk_name, 1);
+#endif
+#if !defined(PNG_sCAL_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_sCAL);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
+            chunk_name, 1);
+#endif
+#if !defined(PNG_pCAL_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_pCAL);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
+            chunk_name, 1);
+#endif
+#if !defined(PNG_sPLT_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_sPLT);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
+            chunk_name, 1);
+#endif
+#if !defined(PNG_tIME_SUPPORTED)
+          png_save_uint_32(chunk_name, PNG_UINT_tIME);
+          png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
+            chunk_name, 1);
+#endif
+#endif  /* !PNG_UINT_IHDR */
           }
+        }
 #endif
 
       png_debug(0, "Reading info struct\n");
@@ -1858,7 +1969,7 @@
             int need_expand = 0;
             input_color_type=color_type;
             input_bit_depth=bit_depth;
-            if(verbose > 1 && trial == 1)
+            if(verbose > 1 && first_trial)
             {
                fprintf(STDERR, "   IHDR chunk data:\n");
                fprintf(STDERR, "      Width=%ld, height=%ld\n", width, height);
@@ -1911,7 +2022,7 @@
             if((color_type == 4 || color_type == 6) &&
                (output_color_type != 4 && output_color_type != 6))
             {
-                if(verbose > 0 && trial == 1)
+                if(verbose > 0 && first_trial)
                    fprintf(STDERR, "   Stripping existing alpha channel.\n");
 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
                 png_set_strip_alpha(read_ptr);
@@ -1921,7 +2032,7 @@
             if((output_color_type == 4 || output_color_type == 6) &&
                (color_type != 4 && color_type != 6))
             {
-                if(verbose > 0 && trial == 1)
+                if(verbose > 0 && first_trial)
                    fprintf(STDERR, "   Adding an alpha channel.\n");
 #ifdef PNG_READ_FILLER_SUPPORTED
                 png_set_filler(read_ptr, (png_uint_32)65535, PNG_FILLER_AFTER);
@@ -1935,7 +2046,7 @@
             if((output_color_type == 2 || output_color_type == 6) &&
                color_type == 3)
             {
-                if(verbose > 0 && trial == 1)
+                if(verbose > 0 && first_trial)
                    fprintf(STDERR, "   Expanding indexed color file.\n");
                 need_expand = 1;
             }
@@ -1977,7 +2088,7 @@
                    force_compression_window)
                  compression_window = default_compression_window;
 
-               if(verbose > 1 && trial == 1 && (compression_window != 15 ||
+               if(verbose > 1 && first_trial && (compression_window != 15 ||
                      force_compression_window))
                   fprintf(STDERR, "   Compression window for output= %d\n",
                      1 << compression_window);
@@ -2039,7 +2150,7 @@
       {
          if(force_specified_gamma > 0)
          {
-            if(trial == 1)
+            if(first_trial)
             {
                things_have_changed=1;
                if(verbose > 0)
@@ -2055,7 +2166,7 @@
          {
             if(keep_chunk("gAMA",argv))
             {
-               if(verbose > 1 && trial == 1)
+               if(verbose > 1 && first_trial)
                  fprintf(STDERR, "   gamma=(%d/100000)\n", (int)file_gamma);
                if(double_gamma)
                  file_gamma+=file_gamma;
@@ -2064,7 +2175,7 @@
          }
          else if(specified_gamma > 0)
          {
-            if(trial == 1)
+            if(first_trial)
             {
                things_have_changed=1;
                if(verbose > 0)
@@ -2092,7 +2203,7 @@
             if(file_gamma > 45000L && file_gamma < 46000L)
             {
                things_have_changed=1;
-               if(trial == 1)
+               if(first_trial)
                fprintf(STDERR, "   Inserting sRGB chunk with intent=%d\n",intent);
                png_set_sRGB(write_ptr, write_info_ptr, intent);
             }
@@ -2103,7 +2214,7 @@
             }
             else
             {
-               if(trial == 1)
+               if(first_trial)
                {
                   fprintf(STDERR,
           "   Ignoring sRGB request; gamma=(%lu/100000) is not approx. 0.455\n",
@@ -2139,7 +2250,7 @@
          {
             if(offset_x == 0 && offset_y == 0)
             {
-               if(verbose > 0 && trial == 1)
+               if(verbose > 0 && first_trial)
                   fprintf(STDERR, "   Deleting useless oFFs 0 0 chunk\n");
             }
             else
@@ -2186,7 +2297,7 @@
             unit_type=1;
             res_x = res_y = (png_uint_32)((resolution/.0254 + 0.5));
             png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);
-            if(verbose > 0 && trial == 1)
+            if(verbose > 0 && first_trial)
                fprintf(STDERR, "   Added pHYs %lu %lu 1 chunk\n",res_x,res_y);
          }
       }
@@ -2204,7 +2315,7 @@
            png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette);
         else if(keep_chunk("PLTE",argv))
            png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette);
-        if(verbose > 1 && trial == 1)
+        if(verbose > 1 && first_trial)
         {
            int i;
            png_colorp p = palette;
@@ -2308,7 +2419,7 @@
             for (i=0 ; ia<256; ia++)
                trns_array[ia]=255;
          }
-         if (verbose > 1 && trial == 1)
+         if (verbose > 1 && first_trial)
          {
             int last=-1;
             for (i=0 ; ia<num_palette; ia++)
@@ -2380,7 +2491,7 @@
 #endif
 #if defined(PNG_sPLT_SUPPORTED)
    {
-      png_spalette_p entries;
+      png_sPLT_tp entries;
       int num_entries;
 
       num_entries = (int)png_get_spalettes(read_ptr, read_info_ptr, &entries);
@@ -2404,7 +2515,7 @@
             int ntext;
             png_debug1(0, "Handling %d tEXt/zTXt chunks\n", num_text);
 
-            if (verbose > 1 && trial == 1 && num_text > 0)
+            if (verbose > 1 && first_trial && num_text > 0)
             {
                for (ntext = 0; ntext < num_text; ntext++)
                {
@@ -2426,7 +2537,43 @@
             if(num_text > 0)
             {
                if(keep_chunk("text",argv))
-                  png_set_text(write_ptr, write_info_ptr, text_ptr, num_text);
+                 {
+                   int num_to_write=num_text;
+                   for (ntext = 0; ntext < num_text; ntext++)
+                   {
+                     if (first_trial)
+                       P2("Text chunk before IDAT, compression=%d\n",
+                         text_ptr[ntext].compression);
+                     if(text_ptr[ntext].compression==PNG_TEXT_COMPRESSION_NONE)
+                       {
+                         if(!keep_chunk("tEXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                     if(text_ptr[ntext].compression==PNG_TEXT_COMPRESSION_zTXt)
+                       {
+                         if(!keep_chunk("zTXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                     if(text_ptr[ntext].compression==PNG_ITXT_COMPRESSION_NONE
+                       ||text_ptr[ntext].compression==PNG_ITXT_COMPRESSION_zTXt)
+                       {
+                         if(!keep_chunk("iTXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                   }
+                   if (num_to_write > 0)
+                      png_set_text(write_ptr, write_info_ptr, text_ptr,
+                         num_text);
+                 }
             }
             for (ntext=0; ntext<text_inputs; ntext++)
               {
@@ -2441,7 +2588,6 @@
                     added_text[0].text = &text_text[ntext*2048];
                     added_text[0].compression = text_compression[ntext];
                     png_set_text(write_ptr, write_info_ptr, added_text, 1);
-                    png_free(write_ptr,added_text);
                     if(added_text[0].compression < 0)
                        printf("   Added a tEXt chunk.\n");
                     else if(added_text[0].compression == 0)
@@ -2450,6 +2596,7 @@
                        printf("   Added an uncompressed iTXt chunk.\n");
                     else
                        printf("   Added a compressed iTXt chunk.\n");
+                    png_free(write_ptr,added_text);
                   }
               }
          }
@@ -2499,15 +2646,13 @@
       }
 #endif
 
-      if(verbose > 2)
-      printf("writing info structure.\n");
+      P2("writing info structure.\n");
       png_crush_pause();
       png_debug(0, "\nWriting info struct\n");
       png_write_info(write_ptr, write_info_ptr);
       png_debug(0, "\nWrote info struct\n");
 
-      if(verbose > 2)
-      printf("wrote info structure.\n");
+      P2("wrote info structure.\n");
       png_crush_pause();
 
 #ifdef PNG_WRITE_PACK_SUPPORTED
@@ -2577,7 +2722,7 @@
        */
       }
 
-      if(verbose > 2) printf("allocated rowbuf.\n");
+      P2("allocated rowbuf.\n");
       png_crush_pause();
 
       num_pass = png_set_interlace_handling(read_ptr);
@@ -2620,16 +2765,25 @@
           (output_color_type == 0 || output_color_type == 4))
       {
           png_byte rgb_error = png_get_rgb_to_gray_status(read_ptr);
-          if((trial == 1) && rgb_error)
+          if((first_trial) && rgb_error)
             printf("   **** Converted non-gray image to gray. **** \n");
       }
 #endif
 
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
+#ifdef PNG_FREE_UNKN 
+#  if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
+   png_free_data(read_ptr, read_info_ptr, PNG_FREE_UNKN, -1);
+#  endif
+#  if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+   png_free_data(write_ptr, write_info_ptr, PNG_FREE_UNKN, -1);
+#  endif
+#else
+#  if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
    png_free_unknown_chunks(read_ptr, read_info_ptr, -1);
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+#  endif
+#  if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
    png_free_unknown_chunks(write_ptr, write_info_ptr, -1);
+#  endif
 #endif
 
       png_debug(0, "Reading and writing end_info data\n");
@@ -2647,7 +2801,7 @@
             int ntext;
             png_debug1(0, "Handling %d tEXt/zTXt chunks\n", num_text);
 
-            if (verbose > 1 && trial == 1 && num_text > 0)
+            if (verbose > 1 && first_trial && num_text > 0)
             {
                for (ntext = 0; ntext < num_text; ntext++)
                {
@@ -2669,8 +2823,43 @@
             if(num_text > 0)
             {
                if(keep_chunk("text",argv))
-                  png_set_text(write_ptr, write_end_info_ptr, text_ptr,
-                      num_text);
+                 {
+                   int num_to_write=num_text;
+                   for (ntext = 0; ntext < num_text; ntext++)
+                   {
+                     if (first_trial)
+                       P2("Text chunk after IDAT, compression=%d\n",
+                          text_ptr[ntext].compression);
+                     if(text_ptr[ntext].compression==PNG_TEXT_COMPRESSION_NONE)
+                       {
+                         if(!keep_chunk("tEXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                     if(text_ptr[ntext].compression==PNG_TEXT_COMPRESSION_zTXt)
+                       {
+                         if(!keep_chunk("zTXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                     if(text_ptr[ntext].compression==PNG_ITXT_COMPRESSION_NONE
+                       ||text_ptr[ntext].compression==PNG_ITXT_COMPRESSION_zTXt)
+                       {
+                         if(!keep_chunk("iTXt",argv))
+                           {
+                             text_ptr[ntext].key[0]='\0';
+                             num_to_write--;
+                           }
+                       }
+                   }
+                   if (num_to_write > 0)
+                      png_set_text(write_ptr, write_end_info_ptr, text_ptr,
+                          num_text);
+                 }
             }
             for (ntext=0; ntext<text_inputs; ntext++)
               {
@@ -2678,23 +2867,22 @@
                   {
                     png_textp added_text;
                     added_text = (png_textp)
-                      png_malloc(write_ptr, (png_uint_32)sizeof(png_text));
+                       png_malloc(write_ptr, (png_uint_32)sizeof(png_text));
                     added_text[0].key = &text_keyword[ntext*80];
                     added_text[0].lang = &text_lang[ntext*80];
                     added_text[0].lang_key = &text_lang_key[ntext*80];
                     added_text[0].text = &text_text[ntext*2048];
                     added_text[0].compression = text_compression[ntext];
                     png_set_text(write_ptr, write_end_info_ptr, added_text, 1);
-                    png_free(write_ptr,added_text);
                     if(added_text[0].compression < 0)
-                       printf("   Added a tEXt chunk after IDAT.\n");
+                       printf("   Added a tEXt chunk.\n");
                     else if(added_text[0].compression == 0)
-                       printf("   Added a zTXt chunk after IDAT.\n");
+                       printf("   Added a zTXt chunk.\n");
                     else if(added_text[0].compression == 1)
-                       printf(
-                       "   Added an uncompressed iTXt chunk after IDAT.\n");
+                       printf("   Added an uncompressed iTXt chunk.\n");
                     else
-                       printf("   Added a compressed iTXt chunk after IDAT.\n");
+                       printf("   Added a compressed iTXt chunk.\n");
+                    png_free(write_ptr,added_text);
                   }
               }
          }
@@ -2780,6 +2968,7 @@
          fflush(STDERR);
          }
 
+         first_trial=0;
       } /* end of trial-loop */
 
       if (fpin)
@@ -2830,15 +3019,14 @@
          if(verbose > 0) show_result();
          return 0;
       }
-   }
+   }  /* end of loop on input files */
 }
 
 png_uint_32
 measure_idats(FILE *fpin)
 {
    png_uint_32 measured_idat_length;
-   if(verbose > 2)
-     printf("measure_idats:\n");
+   P2("measure_idats:\n");
    png_debug(0, "Allocating read structure\n");
    read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
       (png_error_ptr)NULL, (png_error_ptr)NULL);
@@ -2849,19 +3037,28 @@
    read_info_ptr = png_create_info_struct(read_ptr);
    end_info_ptr = png_create_info_struct(read_ptr);
    png_debug(0, "Setting jmpbuf for read struct\n");
-#if defined(USE_FAR_KEYWORD)
+
+#ifndef PNG_SETJMP_NOT_SUPPORTED
+#  ifdef USE_FAR_KEYWORD
    if (setjmp(jmpbuf))
-#else
+#  else
+#    ifdef PNG_JMPBUF_SUPPORTED
+   /* New setjmp interface */
+   if (setjmp(png_jmp_env(read_ptr)))
+#    else
+   /* old interface */
    if (setjmp(read_ptr->jmpbuf))
-#endif
-   {
-      PNG_CRUSH_CLEANUP
-      if(verbose > 2)
-         fprintf(STDERR, "returning from measure_idats after longjump\n");
-      return 0;
-   }
-#if defined(USE_FAR_KEYWORD)
-      png_memcpy(read_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
+#    endif
+#  endif
+      {
+          PNG_CRUSH_CLEANUP
+          P2("returning from measure_idats after longjump\n");
+          return 0;
+      }
+
+#  if defined(USE_FAR_KEYWORD)
+   png_memcpy(png_jmp_env(read_ptr),jmpbuf,sizeof(jmp_buf));
+#  endif
 #endif
 
 #if !defined(PNG_NO_STDIO)
@@ -2873,8 +3070,7 @@
    measured_idat_length=0;
    read_ptr->sig_bytes=0;
    measured_idat_length=png_measure_idat(read_ptr, read_info_ptr);
-   if(verbose > 2)
-      printf("measure_idats: IDAT length=%lu\n",measured_idat_length);
+   P2("measure_idats: IDAT length=%lu\n",measured_idat_length);
    png_debug(0, "Destroying data structs\n");
    png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
    return measured_idat_length;
@@ -2908,12 +3104,14 @@
 
    for(;;)
    {
+#ifndef PNG_UINT_IDAT
 #ifdef PNG_USE_LOCAL_ARRAYS
       PNG_IDAT;
       PNG_IEND;
 #endif
-      png_byte chunk_length[4];
+#endif
       png_byte chunk_name[5];
+      png_byte chunk_length[4];
       png_uint_32 length;
 
       png_read_data(png_ptr, chunk_length, 4);
@@ -2922,7 +3120,12 @@
       png_reset_crc(png_ptr);
       png_crc_read(png_ptr, chunk_name, 4);
 
+
+#ifdef PNG_UINT_IDAT
+      if (png_get_uint_32(chunk_name) == PNG_UINT_IDAT)
+#else
       if (!png_memcmp(chunk_name, png_IDAT, 4))
+#endif
          sum_idat_length += length;
 
       if(verbose > 1)
@@ -2932,7 +3135,11 @@
       }
       png_crc_finish(png_ptr, length);
 
+#ifdef PNG_UINT_IEND
+      if (png_get_uint_32(chunk_name) == PNG_UINT_IEND)
+#else
       if (!png_memcmp(chunk_name, png_IEND, 4))
+#endif
          return sum_idat_length;
    }
 }
diff --git a/pngcrush.h b/pngcrush.h
index d063f73..3e464c7 100644
--- a/pngcrush.h
+++ b/pngcrush.h
@@ -3,8 +3,9 @@
 /* Special defines for pngcrush, mostly just to reduce the size of the
    static executable. */
 
-#define PNG_NO_FLOATING_POINT_SUPPORTED /* undef this if you want to be able
-                                           to reduce color to gray */
+#ifndef PNG_FLOATING_POINT_SUPPORTED      /* define this if you want to be */
+#  define PNG_NO_FLOATING_POINT_SUPPORTED /* able to reduce color to gray  */
+#endif
 #define PNG_NO_READ_cHRM
 #define PNG_NO_WRITE_cHRM
 #define PNG_NO_READ_hIST
@@ -39,6 +40,6 @@
 #else
 #  define PNG_NO_READ_RGB_TO_GRAY
 #endif
-#define PNG_ZBUF_SIZE 524288       /* increases the IDAT size */
-#define PNG_NO_GLOBAL_ARRAYS
-#define TOO_FAR 32767     /* Improves zlib/deflate compression */
+#ifndef PNG_ZBUF_SIZE
+#  define PNG_ZBUF_SIZE 524288       /* increases the IDAT size */
+#endif
diff --git a/pngerror.c b/pngerror.c
index b7d87bc..512aeb2 100644
--- a/pngerror.c
+++ b/pngerror.c
@@ -1,7 +1,7 @@
 
 /* pngerror.c - stub functions for i/o and memory allocation
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -67,21 +67,26 @@
 {
    int iout = 0, iin = 0;
 
-   while (iin < 4) {
+   while (iin < 4)
+   {
       int c = png_ptr->chunk_name[iin++];
-      if (isnonalpha(c)) {
+      if (isnonalpha(c))
+      {
          buffer[iout++] = '[';
          buffer[iout++] = png_digit[(c & 0xf0) >> 4];
          buffer[iout++] = png_digit[c & 0x0f];
          buffer[iout++] = ']';
-      } else {
+      }
+      else
+      {
          buffer[iout++] = (png_byte)c;
       }
    }
 
    if (message == NULL)
       buffer[iout] = 0;
-   else {
+   else
+   {
       buffer[iout++] = ':';
       buffer[iout++] = ' ';
       png_memcpy(buffer+iout, message, 64);
@@ -117,14 +122,20 @@
    fprintf(stderr, "libpng error: %s\n", message);
 #endif
 
-#ifdef USE_FAR_KEYWORD
+#ifdef PNG_SETJMP_SUPPORTED
+#  ifdef USE_FAR_KEYWORD
    {
       jmp_buf jmpbuf;
       png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf));
       longjmp(jmpbuf, 1);
    }
-#else
+#  else
    longjmp(png_ptr->jmpbuf, 1);
+# endif
+#else
+   if (png_ptr == NULL)
+     /* make compiler happy */ ;
+   PNG_ABORT();
 #endif
 }
 
diff --git a/pngerror.h b/pngerror.h
new file mode 100644
index 0000000..a002caa
--- /dev/null
+++ b/pngerror.h
@@ -0,0 +1,65 @@
+/* This linked list implements a stack structure where jmpbuf context
+ * is to be saved. It will allow multiple, nested calls of setjmp/longjmp...
+ */
+
+#ifndef _PNGERROR_H
+#define _PNGERROR_H
+
+#ifndef PNG_ABORT
+#   define PNG_ABORT() abort()
+#endif
+
+#ifndef PNG_SETJMP_NOT_SUPPORTED
+#  define PNG_SETJMP_SUPPORTED
+#endif
+
+#ifdef PNG_SETJMP_SUPPORTED
+
+/* New feature in version 1.1.0d.  Don't undefine this; it's here just so
+ * applications can test for the new version. */
+#define PNG_JMPBUF_SUPPORTED
+
+/* This is an attempt to force a single setjmp behaviour on Linux.  If
+ * the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
+ */
+#ifdef __linux__
+#  ifdef _BSD_SOURCE
+#    define _PNG_SAVE_BSD_SOURCE
+#    undef _BSD_SOURCE
+#  endif
+#  ifdef _SETJMP_H
+    __png.h__ already includes setjmp.h
+    __dont__ include it again
+#  endif
+#endif /* __linux__ */
+
+/* include setjmp.h for error handling */
+#include <setjmp.h>
+
+#ifdef __linux__
+#  ifdef _PNG_SAVE_BSD_SOURCE
+#    define _BSD_SOURCE
+#    undef _PNG_SAVE_BSD_SOURCE
+#  endif
+#endif /* __linux__ */
+
+typedef struct png_jmpbuf_struct
+{
+   jmp_buf env;
+   struct png_jmpbuf_struct FAR * link;
+} png_jmpbuf;
+
+typedef png_jmpbuf FAR * png_jmpbufp;
+typedef png_jmpbuf FAR * FAR * png_jmpbufpp;
+
+#define png_jmp_env(png_ptr) png_get_jmpbuf(png_ptr)->env  
+
+extern PNG_EXPORT(png_jmpbufp,png_get_jmpbuf)
+   PNGARG((png_structp));
+
+#define png_setjmp(png_ptr) setjmp(png_get_jmpbuf(png_ptr)->env)
+#define png_longjmp(png_ptr,val) longjmp(png_get_jmpbuf(png_ptr)->env,val)
+
+#endif /* PNG_SETJMP_SUPPORTED */
+
+#endif /* _PNGERROR_H */
diff --git a/pnggccrd.c b/pnggccrd.c
index 6e9db58..504111c 100644
--- a/pnggccrd.c
+++ b/pnggccrd.c
@@ -6,10 +6,10 @@
  *     and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm
  *     for Intel's performance analysis of the MMX vs. non-MMX code.
  *
- * libpng 1.0.5 - October 15, 1999
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998, Intel Corporation
- * Copyright (c) 1998, 1999 Glenn Randers-Pehrson
+ * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
  *
  * Based on MSVC code contributed by Nirav Chhatrapati, Intel Corp., 1998.
  * Interface to libpng contributed by Gilles Vollant, 1999.
diff --git a/pngget.c b/pngget.c
index 4ab606f..ab6f10b 100644
--- a/pngget.c
+++ b/pngget.c
@@ -1,7 +1,7 @@
 
 /* pngget.c - retrieval of values from info struct
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -29,6 +29,17 @@
       return(0);
 }
 
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+png_bytepp
+png_get_rows(png_structp png_ptr, png_infop info_ptr)
+{
+   if (png_ptr != NULL && info_ptr != NULL)
+      return(info_ptr->row_pointers);
+   else
+      return(0);
+}
+#endif
+
 #ifdef PNG_EASY_ACCESS_SUPPORTED
 /* easy access to info, added in libpng-0.99 */
 png_uint_32
@@ -239,35 +250,35 @@
 png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
 {
    return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
-     *.03937 +.5)
+     *.0254 +.5);
 }
 
 png_uint_32
 png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
 {
    return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
-     *.03937 +.5)
+     *.0254 +.5);
 }
 
 png_uint_32
 png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
 {
    return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
-     *.03937 +.5)
+     *.0254 +.5);
 }
 
 float
 png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
 {
    return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
-     *.03937/1000000. +.5)
+     *.00003937);
 }
 
 float
 png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
 {
    return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
-     *.03937/1000000. +.5)
+     *.00003937)
 }
 
 #if defined(PNG_READ_pHYs_SUPPORTED)
@@ -296,8 +307,8 @@
          retval |= PNG_INFO_pHYs;
          if(unit_type == 1)
          {
-            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * 39.37 + .50);
-            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * 39.37 + .50);
+            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
+            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
          }
       }
    }
@@ -477,7 +488,7 @@
 
 #if defined(PNG_READ_sPLT_SUPPORTED)
 png_uint_32
-png_get_spalettes(png_structp png_ptr, png_infop info_ptr,
+png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
              png_spalette_pp spalettes)
 {
    if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
@@ -703,6 +714,8 @@
          *num_text = info_ptr->num_text;
       return ((png_uint_32)info_ptr->num_text);
    }
+   if (num_text != NULL)
+     *num_text = 0;
    return(0);
 }
 #endif
diff --git a/pngmem.c b/pngmem.c
index d9ebb4b..4a47106 100644
--- a/pngmem.c
+++ b/pngmem.c
@@ -1,7 +1,7 @@
 
 /* pngmem.c - stub functions for memory allocation
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngpread.c b/pngpread.c
index bf7e3b2..9da0743 100644
--- a/pngpread.c
+++ b/pngpread.c
@@ -1,7 +1,7 @@
 
 /* pngpread.c - read a png file in push mode
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -1325,15 +1325,13 @@
 #endif
 
 /* This function is called when we haven't found a handler for this
- * chunk.  In the future we will have code here that can handle
- * user-defined callback functions for unknown chunks before they are
- * ignored or cause an error.  If there isn't a problem with the
- * chunk itself (ie a bad chunk name or a critical chunk), the chunk
- * is (currently) silently ignored.
+ * chunk.  If there isn't a problem with the chunk itself (ie a bad chunk
+ * name or a critical chunk), the chunk is (currently) silently ignored.
  */
 void
 png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
 {
+   png_uint_32 skip=0;
    png_check_chunk_name(png_ptr, png_ptr->chunk_name);
 
    if (!(png_ptr->chunk_name[0] & 0x20))
@@ -1389,8 +1387,8 @@
    }
    else
 #endif
-
-   png_push_crc_skip(png_ptr, length);
+      skip=length;
+   png_push_crc_skip(png_ptr, skip);
 }
 
 void
diff --git a/pngread.c b/pngread.c
index 967e56f..e468839 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,7 +1,7 @@
 
 /* pngread.c - read a PNG file
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -34,9 +34,13 @@
 #endif /* PNG_USER_MEM_SUPPORTED */
 
    png_structp png_ptr;
+
+#ifdef PNG_SETJMP_SUPPORTED
 #ifdef USE_FAR_KEYWORD
    jmp_buf jmpbuf;
 #endif
+#endif
+
    png_debug(1, "in png_create_read_struct\n");
 #ifdef PNG_USER_MEM_SUPPORTED
    if ((png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
@@ -47,6 +51,8 @@
    {
       return (png_structp)NULL;
    }
+
+#ifdef PNG_SETJMP_SUPPORTED
 #ifdef USE_FAR_KEYWORD
    if (setjmp(jmpbuf))
 #else
@@ -60,6 +66,7 @@
 #ifdef USE_FAR_KEYWORD
    png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
 #endif
+#endif
 
 #ifdef PNG_USER_MEM_SUPPORTED
    png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
@@ -110,17 +117,24 @@
 void
 png_read_init(png_structp png_ptr)
 {
+#ifdef PNG_SETJMP_SUPPORTED
    jmp_buf tmp_jmp;  /* to save current jump buffer */
+#endif
 
    png_debug(1, "in png_read_init\n");
+
+#ifdef PNG_SETJMP_SUPPORTED
    /* save jump buffer and error functions */
    png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+#endif
 
    /* reset all variables to 0 */
    png_memset(png_ptr, 0, sizeof (png_struct));
 
+#ifdef PNG_SETJMP_SUPPORTED
    /* restore jump buffer */
    png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+#endif
 
    /* initialize zbuf - compression buffer */
    png_ptr->zbuf_size = PNG_ZBUF_SIZE;
@@ -627,7 +641,7 @@
  * not called png_set_interlace_handling(), the display_row buffer will
  * be ignored, so pass NULL to it.
  *
- * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5m.
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5s.
  */
 
 void
@@ -676,7 +690,7 @@
  * only call this function once.  If you desire to have an image for
  * each pass of a interlaced image, use png_read_rows() instead.
  *
- * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5m.
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5s.
  */
 void
 png_read_image(png_structp png_ptr, png_bytepp image)
@@ -802,10 +816,10 @@
       else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
       {
          if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
-	 {
+         {
             if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT)
                png_error(png_ptr, "Too many IDAT's found");
-	 }
+         }
          else
             png_ptr->mode |= PNG_AFTER_IDAT;
          png_handle_unknown(png_ptr, info_ptr, length);
@@ -929,7 +943,7 @@
    if (info_ptr != NULL)
    {
 #if defined(PNG_TEXT_SUPPORTED)
-      png_free(png_ptr, info_ptr->text);
+      png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1);
 #endif
 
 #ifdef PNG_USER_MEM_SUPPORTED
@@ -943,7 +957,7 @@
    if (end_info_ptr != NULL)
    {
 #if defined(PNG_READ_TEXT_SUPPORTED)
-      png_free(png_ptr, end_info_ptr->text);
+      png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1);
 #endif
 #ifdef PNG_USER_MEM_SUPPORTED
       png_destroy_struct_2((png_voidp)end_info_ptr, free_fn);
@@ -968,7 +982,9 @@
 void
 png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
 {
+#ifdef PNG_SETJMP_SUPPORTED
    jmp_buf tmp_jmp;
+#endif
    png_error_ptr error_fn;
    png_error_ptr warning_fn;
    png_voidp error_ptr;
@@ -998,16 +1014,19 @@
    png_free(png_ptr, png_ptr->gamma_from_1);
    png_free(png_ptr, png_ptr->gamma_to_1);
 #endif
-   if (png_ptr->flags & PNG_FLAG_FREE_PALETTE)
+   if (png_ptr->free_me & PNG_FREE_PLTE)
       png_zfree(png_ptr, png_ptr->palette);
+   png_ptr->free_me &= ~PNG_FREE_PLTE;
 #if defined(PNG_tRNS_SUPPORTED) || \
     defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   if (png_ptr->flags & PNG_FLAG_FREE_TRANS)
+   if (png_ptr->free_me & PNG_FREE_TRNS)
       png_free(png_ptr, png_ptr->trans);
+   png_ptr->free_me &= ~PNG_FREE_TRNS;
 #endif
 #if defined(PNG_READ_hIST_SUPPORTED)
-   if (png_ptr->flags & PNG_FLAG_FREE_HIST)
+   if (png_ptr->free_me & PNG_FREE_HIST)
       png_free(png_ptr, png_ptr->hist);
+   png_ptr->free_me &= ~PNG_FREE_HIST;
 #endif
 #if defined(PNG_READ_GAMMA_SUPPORTED)
    if (png_ptr->gamma_16_table != NULL)
@@ -1055,7 +1074,9 @@
    /* Save the important info out of the png_struct, in case it is
     * being used again.
     */
+#ifdef PNG_SETJMP_SUPPORTED
    png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+#endif
 
    error_fn = png_ptr->error_fn;
    warning_fn = png_ptr->warning_fn;
@@ -1073,7 +1094,10 @@
    png_ptr->free_fn = free_fn;
 #endif
 
+#ifdef PNG_SETJMP_SUPPORTED
    png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+#endif
+
 }
 
 void
@@ -1084,8 +1108,8 @@
 
 #if defined(PNG_INFO_IMAGE_SUPPORTED)
 void png_read_png(png_structp png_ptr, png_infop info_ptr,
-			   int transforms,
-			   voidp params)
+                           int transforms,
+                           voidp params)
 {
    int row;
 
@@ -1119,7 +1143,7 @@
        png_set_strip_alpha(png_ptr);
 #endif
 
-#if defined(PNG_READ_PACK_SUPPORTED)
+#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED)
    /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
     * byte into separate bytes (useful for paletted and grayscale images).
     */
@@ -1141,8 +1165,10 @@
     * channels so the data will be available as RGBA quartets.
     */
    if (transforms & PNG_TRANSFORM_EXPAND)
-       if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
-	   png_set_expand(png_ptr);
+       if ((png_ptr->bit_depth < 8) ||
+           (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ||
+           (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)))
+         png_set_expand(png_ptr);
 #endif
 
    /* We don't handle background color or gamma transformation or dithering. */
@@ -1196,11 +1222,15 @@
 
    /* -------------- image transformations end here ------------------- */
 
-   info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
-					 info_ptr->height * sizeof(png_bytep));
+   if(info_ptr->row_pointers == NULL)
+   {
+      info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
+                                         info_ptr->height * sizeof(png_bytep));
+      info_ptr->free_me |= PNG_FREE_ROWS;
+   }
    for (row = 0; row < (int)info_ptr->height; row++)
-       info_ptr->row_pointers[row] = png_malloc(png_ptr, 
-				      png_get_rowbytes(png_ptr, info_ptr));
+       info_ptr->row_pointers[row] = png_malloc(png_ptr,
+                                      png_get_rowbytes(png_ptr, info_ptr));
 
    png_read_image(png_ptr, info_ptr->row_pointers);
    info_ptr->valid |= PNG_INFO_IDAT;
diff --git a/pngrio.c b/pngrio.c
index d24473d..2e42d17 100644
--- a/pngrio.c
+++ b/pngrio.c
@@ -1,7 +1,7 @@
 
 /* pngrio.c - functions for data input
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngrtran.c b/pngrtran.c
index 1114547..6037574 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -1,7 +1,7 @@
 
 /* pngrtran.c - transforms the data in a row for PNG readers
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -658,7 +658,8 @@
 #endif
 
 #if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   if (png_ptr->transformations & PNG_BACKGROUND_EXPAND)
+   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
+       (png_ptr->transformations & PNG_EXPAND))
    {
       if (!(color_type & PNG_COLOR_MASK_COLOR))  /* i.e., GRAY or GRAY_ALPHA */
       {
@@ -1674,9 +1675,15 @@
             for (i = 0; i < row_width; i++)
             {
                *(--dp) = (png_byte)(255 - *(--sp));
+
+/*             This does nothing:
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
+               We can replace it with:
+*/
+               sp-=3;
+               dp=sp;
             }
          }
          /* This inverts the alpha channel in RRGGBBAA */
@@ -1690,12 +1697,18 @@
             {
                *(--dp) = (png_byte)(255 - *(--sp));
                *(--dp) = (png_byte)(255 - *(--sp));
+
+/*             This does nothing:
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
+               We can replace it with:
+*/
+               sp-=6;
+               dp=sp;
             }
          }
       }
@@ -1725,8 +1738,12 @@
             {
                *(--dp) = (png_byte)(255 - *(--sp));
                *(--dp) = (png_byte)(255 - *(--sp));
+/*
                *(--dp) = *(--sp);
                *(--dp) = *(--sp);
+*/
+               sp-=2;
+               dp=sp;
             }
          }
       }
diff --git a/pngrutil.c b/pngrutil.c
index fc353d1..9da17fa 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -1,7 +1,7 @@
 
 /* pngrutil.c - utilities to read a PNG file
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -14,10 +14,6 @@
 #define PNG_INTERNAL
 #include "png.h"
 
-#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
-#include "pngasmrd.h"
-#endif
-
 #ifndef PNG_READ_BIG_ENDIAN_SUPPORTED
 /* Grab an unsigned 32-bit integer from a buffer in big-endian format. */
 png_uint_32
@@ -398,7 +394,7 @@
 
    num = (int)length / 3;
    palette = (png_colorp)png_zalloc(png_ptr, (uInt)num, sizeof (png_color));
-   png_ptr->flags |= PNG_FLAG_FREE_PALETTE;
+   png_ptr->free_me |= PNG_FREE_PLTE;
    for (i = 0; i < num; i++)
    {
       png_byte buf[3];
@@ -436,7 +432,7 @@
          else
          {
             png_chunk_warning(png_ptr, "CRC error");
-            png_ptr->flags &= ~PNG_FLAG_FREE_PALETTE;
+            png_ptr->free_me &= ~PNG_FREE_PLTE;
             png_zfree(png_ptr, palette);
             return;
          }
@@ -648,7 +644,7 @@
    png_debug(1, "in png_handle_cHRM\n");
 
    if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_error(png_ptr, "Missing IHDR before sBIT");
+      png_error(png_ptr, "Missing IHDR before cHRM");
    else if (png_ptr->mode & PNG_HAVE_IDAT)
    {
       png_warning(png_ptr, "Invalid cHRM after IDAT");
@@ -928,6 +924,7 @@
 #endif
 
    chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
+   png_ptr->free_me |= PNG_FREE_ICCP;
    slength = (png_size_t)length;
    png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
 
@@ -1058,7 +1055,7 @@
    /* discard all chunk data except the name and stash that */
    new_palette.name = (png_charp)chunkdata;
 
-   png_set_spalettes(png_ptr, info_ptr, &new_palette, 1);
+   png_set_sPLT(png_ptr, info_ptr, &new_palette, 1);
 
    png_free(png_ptr, chunkdata);
    png_free(png_ptr, new_palette.entries);
@@ -1107,7 +1104,7 @@
       }
 
       png_ptr->trans = (png_bytep)png_malloc(png_ptr, length);
-      png_ptr->flags |= PNG_FLAG_FREE_TRANS;
+      png_ptr->free_me |= PNG_FREE_TRNS;
       png_crc_read(png_ptr, png_ptr->trans, (png_size_t)length);
       png_ptr->num_trans = (png_uint_16)length;
    }
@@ -1287,7 +1284,7 @@
    num = (int)length / 2 ;
    png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
       (png_uint_32)(num * sizeof (png_uint_16)));
-   png_ptr->flags |= PNG_FLAG_FREE_HIST;
+   png_ptr->free_me |= PNG_FREE_HIST;
    for (i = 0; i < num; i++)
    {
       png_byte buf[2];
@@ -1553,7 +1550,7 @@
 
    buffer[slength] = 0x00; /* null terminate the last string */
 
-   ep = buffer + 1;	/* skip unit byte */
+   ep = buffer + 1;        /* skip unit byte */
 
 #ifdef PNG_FLOATING_POINT_SUPPORTED
    width = strtod(ep, &vp);
@@ -1916,10 +1913,6 @@
 #endif
         )
           png_chunk_error(png_ptr, "unknown critical chunk");
-
-      /* to quiet compiler warnings about unused info_ptr */
-      if (info_ptr == NULL)
-        return;
    }
 
 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
@@ -1935,7 +1928,6 @@
            length = (png_uint_32)65535L;
        }
 #endif
-
        strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
        chunk.data = (png_bytep)png_malloc(png_ptr, length);
        png_crc_read(png_ptr, chunk.data, length);
@@ -1960,11 +1952,14 @@
    }
    else
 #endif
-
-   skip = length;
+      skip = length;
 
    png_crc_finish(png_ptr, skip);
 
+#if !defined(PNG_READ_USER_CHUNKS_SUPPORTED)
+   if (info_ptr == NULL)
+     /* quiet compiler warnings about unused info_ptr */ ;
+#endif
 }
 
 /* This function is called to verify that a chunk name is valid.
@@ -2804,7 +2799,14 @@
       else
       {
          if (max_pixel_depth <= 8)
-            max_pixel_depth = 24;
+           {
+             if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+               max_pixel_depth = 32;
+             else
+               max_pixel_depth = 24;
+           }
+         else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+            max_pixel_depth = 64;
          else
             max_pixel_depth = 48;
       }
diff --git a/pngset.c b/pngset.c
index 5d7fa66..660cb61 100644
--- a/pngset.c
+++ b/pngset.c
@@ -1,7 +1,7 @@
 
 /* pngset.c - storage of image information into info struct
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -135,9 +135,7 @@
    if (png_ptr == NULL || info_ptr == NULL)
       return;
 
-   info_ptr->hist = png_malloc(png_ptr, sizeof(png_uint_16) *
-      info_ptr->num_palette);
-   png_memcpy(info_ptr->hist, hist, sizeof(png_uint_16) * info_ptr->num_palette);
+   info_ptr->hist = hist;
    info_ptr->valid |= PNG_INFO_hIST;
 }
 #endif
@@ -309,11 +307,15 @@
 png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
    png_colorp palette, int num_palette)
 {
+
    png_debug1(1, "in %s storage function\n", "PLTE");
    if (png_ptr == NULL || info_ptr == NULL)
       return;
 
+   png_debug1(3, "allocating PLTE for info (%d bytes)\n", length);
+
    info_ptr->palette = palette;
+
    info_ptr->num_palette = (png_uint_16)num_palette;
    info_ptr->valid |= PNG_INFO_PLTE;
 }
@@ -433,6 +435,7 @@
    /* Compression is always zero but is here so the API and info structure
     * does not have to change * if we introduce multiple compression types */
    info_ptr->iccp_compression = (png_byte)compression_type;
+   info_ptr->free_me |= PNG_FREE_ICCP;
    info_ptr->valid |= PNG_INFO_iCCP;
 }
 #endif
@@ -518,8 +521,6 @@
 
       textp->key = (png_charp)png_malloc(png_ptr,
          (png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4));
-      /* Caution: the calling program, not libpng, is responsible for
-         freeing this, if libpng wasn't the caller. */
       png_debug2(2, "Allocated %d bytes at %x in png_set_text\n",
          key_len + lang_len + lang_key_len + text_length + 4, textp->key);
 
@@ -565,6 +566,7 @@
 
       info_ptr->text[info_ptr->num_text]= *textp;
       info_ptr->num_text++;
+      info_ptr->free_me |= PNG_FREE_TEXT;
       png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);
    }
 }
@@ -594,10 +596,7 @@
       return;
 
    if (trans != NULL)
-   {
-      info_ptr->trans = png_malloc(png_ptr, num_trans);
-      png_memcpy(info_ptr->trans, trans, num_trans);
-   }
+      info_ptr->trans = trans;
 
    if (trans_values != NULL)
    {
@@ -613,7 +612,7 @@
 
 #if defined(PNG_sPLT_SUPPORTED)
 void
-png_set_spalettes(png_structp png_ptr,
+png_set_sPLT(png_structp png_ptr,
              png_infop info_ptr, png_spalette_p entries, int nentries)
 {
     png_spalette_p        np;
@@ -638,13 +637,14 @@
                                  from->nentries * sizeof(png_spalette));
         png_memcpy(to->entries, from->entries,
                from->nentries * sizeof(png_spalette));
-	to->nentries = from->nentries;
-	to->depth = from->depth;
+        to->nentries = from->nentries;
+        to->depth = from->depth;
     }
 
     info_ptr->splt_palettes = np;
     info_ptr->splt_palettes_num += nentries;
     info_ptr->valid |= PNG_INFO_sPLT;
+    info_ptr->free_me |= PNG_FREE_SPLT;
 }
 #endif /* PNG_sPLT_SUPPORTED */
 
@@ -683,6 +683,7 @@
 
     info_ptr->unknown_chunks = np;
     info_ptr->unknown_chunks_num += num_unknowns;
+    info_ptr->free_me |= PNG_FREE_UNKN;
 }
 #endif
 
@@ -724,13 +725,14 @@
     if(png_ptr->chunk_list != (png_bytep)NULL)
     {
        png_memcpy(new_list, png_ptr->chunk_list, 5*old_num_chunks);
-       png_free_chunk_list(png_ptr);
+       png_free(png_ptr, png_ptr->chunk_list);
     }
     png_memcpy(new_list+5*old_num_chunks, chunk_list, 5*num_chunks);
     for (p=new_list+5*old_num_chunks+4, i=0; i<num_chunks; i++, p+=5)
        *p=(png_byte)keep;
     png_ptr->num_chunk_list=old_num_chunks+num_chunks;
     png_ptr->chunk_list=new_list;
+    png_ptr->free_me |= PNG_FREE_LIST;
 }
 #endif
 
@@ -745,3 +747,16 @@
 }
 #endif
 
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+void
+png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)
+{
+   png_debug1(1, "in %s storage function\n", "rows");
+   if (png_ptr == NULL || info_ptr == NULL)
+      return;
+
+   info_ptr->row_pointers = row_pointers;
+   info_ptr->free_me |= PNG_FREE_ROWS;
+}
+#endif
+
diff --git a/pngtrans.c b/pngtrans.c
index 1818ace..86c0dfd 100644
--- a/pngtrans.c
+++ b/pngtrans.c
@@ -1,7 +1,7 @@
 
 /* pngtrans.c - transforms the data in a row (used by both readers and writers)
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngtypes.h b/pngtypes.h
index f791202..756d8e2 100644
--- a/pngtypes.h
+++ b/pngtypes.h
@@ -1,6 +1,6 @@
 /* pngtypes.h - array of chunk-types for libpng
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngvcrd.c b/pngvcrd.c
index 87dd306..299827d 100644
--- a/pngvcrd.c
+++ b/pngvcrd.c
@@ -2,7 +2,7 @@
  *
  * For Intel x86 CPU and Microsoft Visual C++ compiler
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998, Intel Corporation
  * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
@@ -33,6 +33,9 @@
 {
   int mmx_supported_local = 0;
   _asm {
+    push ebx          //CPUID will trash these
+    push ecx
+    push edx
     pushfd            //Save Eflag to stack
     pop eax           //Get Eflag from stack into eax
     mov ecx, eax      //Make another copy of Eflag in ecx
@@ -70,7 +73,9 @@
 
 NOT_SUPPORTED:
     mov  eax, mmx_supported_local  //move return value to eax
-
+    pop edx          //CPUID trashed these
+    pop ecx
+    pop ebx
   }
 
   //mmx_supported_local=0; // test code for force don't support MMX
diff --git a/pngwio.c b/pngwio.c
index a1f8102..515e0f4 100644
--- a/pngwio.c
+++ b/pngwio.c
@@ -1,7 +1,7 @@
 
 /* pngwio.c - functions for data output
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngwrite.c b/pngwrite.c
index f6925e4..ab68a1e 100644
--- a/pngwrite.c
+++ b/pngwrite.c
@@ -1,7 +1,7 @@
 
 /* pngwrite.c - general routines to write a PNG file
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -416,9 +416,11 @@
 {
 #endif /* PNG_USER_MEM_SUPPORTED */
    png_structp png_ptr;
+#ifdef PNG_SETJMP_SUPPORTED
 #ifdef USE_FAR_KEYWORD
    jmp_buf jmpbuf;
 #endif
+#endif
    png_debug(1, "in png_create_write_struct\n");
 #ifdef PNG_USER_MEM_SUPPORTED
    if ((png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
@@ -429,6 +431,8 @@
    {
       return ((png_structp)NULL);
    }
+
+#ifdef PNG_SETJMP_SUPPORTED
 #ifdef USE_FAR_KEYWORD
    if (setjmp(jmpbuf))
 #else
@@ -442,6 +446,8 @@
 #ifdef USE_FAR_KEYWORD
    png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
 #endif
+#endif
+
 #ifdef PNG_USER_MEM_SUPPORTED
    png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
 #endif /* PNG_USER_MEM_SUPPORTED */
@@ -478,17 +484,23 @@
 void
 png_write_init(png_structp png_ptr)
 {
+#ifdef PNG_SETJMP_SUPPORTED
    jmp_buf tmp_jmp; /* to save current jump buffer */
+#endif
 
    png_debug(1, "in png_write_init\n");
+#ifdef PNG_SETJMP_SUPPORTED
    /* save jump buffer and error functions */
    png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+#endif
 
    /* reset all variables to 0 */
    png_memset(png_ptr, 0, sizeof (png_struct));
 
+#ifdef PNG_SETJMP_SUPPORTED
    /* restore jump buffer */
    png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+#endif
 
    /* initialize zbuf - compression buffer */
    png_ptr->zbuf_size = PNG_ZBUF_SIZE;
@@ -787,34 +799,13 @@
 
    if (info_ptr != NULL)
    {
-#if defined(PNG_WRITE_TEXT_SUPPORTED)
-      png_free_text(png_ptr, info_ptr, -1);
-#endif
-#if defined(PNG_WRITE_tRNS_SUPPORTED)
-   png_free_tRNS(png_ptr, info_ptr);
-#endif
-#if defined(PNG_WRITE_sCAL_SUPPORTED)
-      png_free_sCAL(png_ptr, info_ptr);
-#endif
-#if defined(PNG_WRITE_pCAL_SUPPORTED)
-      png_free_pCAL(png_ptr, info_ptr);
-#endif
-#if defined(PNG_WRITE_iCCP_SUPPORTED)
-      png_free_iCCP(png_ptr, info_ptr);
-#endif
-#if defined(PNG_WRITE_sPLT_SUPPORTED)
-      png_free_spalettes(png_ptr, info_ptr, -1);
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
-      png_free_unknown_chunks(png_ptr, info_ptr, -1);
-      png_free_chunk_list(png_ptr);
-#endif
-#if defined(PNG_hIST_SUPPORTED)
-      png_free_hIST(png_ptr, info_ptr);
-#endif
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-   png_free_pixels(png_ptr, info_ptr);
-#endif
+      png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
+
+      if (png_ptr->num_chunk_list)
+      {
+         png_free(png_ptr, png_ptr->chunk_list);
+         png_ptr->num_chunk_list=0;
+      }
 
 #ifdef PNG_USER_MEM_SUPPORTED
       png_destroy_struct_2((png_voidp)info_ptr, free_fn);
@@ -841,7 +832,9 @@
 void
 png_write_destroy(png_structp png_ptr)
 {
+#ifdef PNG_SETJMP_SUPPORTED
    jmp_buf tmp_jmp; /* save jump buffer */
+#endif
    png_error_ptr error_fn;
    png_error_ptr warning_fn;
    png_voidp error_ptr;
@@ -874,8 +867,10 @@
    png_free(png_ptr, png_ptr->inv_filter_costs);
 #endif
 
+#ifdef PNG_SETJMP_SUPPORTED
    /* reset structure */
    png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+#endif
 
    error_fn = png_ptr->error_fn;
    warning_fn = png_ptr->warning_fn;
@@ -893,7 +888,9 @@
    png_ptr->free_fn = free_fn;
 #endif
 
+#ifdef PNG_SETJMP_SUPPORTED
    png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+#endif
 }
 
 /* Allow the application to select one or more row filters to use. */
@@ -1187,8 +1184,8 @@
 
 #if defined(PNG_INFO_IMAGE_SUPPORTED)
 void png_write_png(png_structp png_ptr, png_infop info_ptr,
-			   int transforms,
-			   voidp params)
+                           int transforms,
+                           voidp params)
 {
    if(transforms == 0 || params == (voidp)NULL)
       /* quiet compiler warnings */ ;
@@ -1215,7 +1212,7 @@
     * as appropriate to correctly scale the image.
     */
    if ((transforms & PNG_TRANSFORM_SHIFT)
-	       && (info_ptr->valid & PNG_INFO_sBIT))
+               && (info_ptr->valid & PNG_INFO_sBIT))
        png_set_shift(png_ptr, &info_ptr->sig_bit);
 #endif
 
diff --git a/pngwtran.c b/pngwtran.c
index ff5fd2e..4092834 100644
--- a/pngwtran.c
+++ b/pngwtran.c
@@ -1,7 +1,7 @@
 
 /* pngwtran.c - transforms the data in a row for PNG writers
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
diff --git a/pngwutil.c b/pngwutil.c
index 0cdb90e..437a535 100644
--- a/pngwutil.c
+++ b/pngwutil.c
@@ -1,7 +1,7 @@
 
 /* pngwutil.c - utilities to write a PNG file
  *
- * libpng 1.0.5m - January 7, 2000
+ * libpng 1.0.5s - February 18, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  * Copyright (c) 1996, 1997 Andreas Dilger
@@ -1194,7 +1194,7 @@
       png_free(png_ptr, new_key);
       return;
    }
-   
+
    text_len = png_strlen(text);
 
    png_free(png_ptr, new_key);
