Imported from pngcrush-1.3.6.tar
diff --git a/png.c b/png.c
index 77e7eaa..6f57798 100644
--- a/png.c
+++ b/png.c
@@ -1,7 +1,7 @@
 
 /* png.c - location for general purpose libpng functions
  *
- * libpng version 1.0.5s - February 18, 2000
+ * libpng version 1.0.5v - March 11, 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
@@ -13,13 +13,15 @@
 #include <assert.h>
 #include "png.h"
 
+/* Generate a compiler error if there is an old png.h in the search path. */
+typedef version_1_0_5v Your_png_h_is_not_version_1_0_5v;
+
 /* Version information for C files.  This had better match the version
- * string defined in png.h.
- */
+ * string defined in png.h.  */
 
 #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.5s";
+char png_libpng_ver[12] = "1.0.5v";
 
 /* png_sig was changed to a function in version 1.0.5c */
 /* Place to hold the signature string for a PNG file. */
@@ -543,7 +545,7 @@
 png_get_copyright(png_structp png_ptr)
 {
    if (png_ptr != NULL || png_ptr == NULL)  /* silence compiler warning */
-   return ("\n libpng version 1.0.5s - February 18, 2000\n\
+   return ("\n libpng version 1.0.5v - March 11, 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");
@@ -561,8 +563,8 @@
 {
    /* Version of *.c files used when building libpng */
    if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
-      return("1.0.5s");
-   return("1.0.5s");
+      return("1.0.5v");
+   return("1.0.5v");
 }
 
 png_charp
@@ -583,15 +585,6 @@
    return(PNG_HEADER_VERSION_STRING);
 }
 
-/* Generate a compiler error if there is an old png.h in the search path. */
-void
-png_check_version
-   (version_1_0_5s png_h_is_not_version_1_0_5s)
-{
-   if(png_h_is_not_version_1_0_5s == NULL)
-     return;
-}
-
 #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
 int
 png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
diff --git a/png.h b/png.h
index 2c969e2..281053e 100644
--- a/png.h
+++ b/png.h
@@ -1,7 +1,7 @@
 
 /* png.h - header file for PNG reference library
  *
- * libpng version 1.0.5s - February 18, 2000
+ * libpng version 1.0.5v - March 11, 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.5s - February 18, 2000: Glenn
+ *  libpng versions 0.97, January 1998, through 1.0.5v - March 11, 2000: Glenn
  *  See also "Contributing Authors", below.
  *
  * Y2K compliance in libpng:
  * =========================
  *
- *    February 18, 2000
+ *    March 11, 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.5s are Y2K compliant.  It is my belief that earlier
+ *    upward through 1.0.5v 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
@@ -99,7 +99,8 @@
  *    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-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.0.5s-v                 1.0.5s-v 10006  2.1.0.5s-v (compatible)
+ *    1.0.6                    1.0.6    10006  2.1.0.6
  *    1.3.0                    1.3.0    10300  3.1.3.0
  *
  *    Henceforth the source version will match the shared-library minor
@@ -124,7 +125,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.5s, February 18, 2000)
+ * (libpng versions 0.97, January 1998, through 1.0.5v, March 11, 2000)
  *
  * For the purposes of this copyright and license, "Contributing Authors"
  * is defined as the following set of individuals:
@@ -157,16 +158,13 @@
  * source code, or portions hereof, for any purpose, without fee, subject
  * to the following restrictions:
  *
- * 1. The origin of this source code must not be
- *     misrepresented.
+ * 1. The origin of this source code must not be misrepresented.
  *
- * 2. Altered versions must be plainly marked as such
- *    and must not be misrepresented as being the
- *    original source.
+ * 2. Altered versions must be plainly marked as such and must not
+ *    be misrepresented as being the original source.
  *
- * 3. This Copyright notice may not be removed or
- *    altered from any source or altered source
- *    distribution.
+ * 3. This Copyright notice may not be removed or altered from any
+ *    source or altered source distribution.
  *
  * The Contributing Authors and Group 42, Inc. specifically permit, without
  * fee, and encourage the use of this source code as a component to
@@ -230,7 +228,7 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.0.5s"
+#define PNG_LIBPNG_VER_STRING "1.0.5v"
 
 /* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
  * We must not include leading zeros.
@@ -310,26 +308,26 @@
  * The following two structures are used for the in-core representation
  * of sPLT chunks.
  */
-typedef struct png_spalette_entry_struct
+typedef struct png_sPLT_entry_struct
 {
    png_uint_16 red;
    png_uint_16 green;
    png_uint_16 blue;
    png_uint_16 alpha;
    png_uint_16 frequency;
-} png_spalette_entry;
-typedef png_spalette_entry FAR * png_spalette_entryp;
-typedef png_spalette_entry FAR * FAR * png_spalette_entrypp;
+} png_sPLT_entry;
+typedef png_sPLT_entry FAR * png_sPLT_entryp;
+typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
 
-typedef struct png_spalette_struct
+typedef struct png_sPLT_struct
 {
    png_charp name;                /* palette name */
    png_byte depth;                /* depth of palette samples */
-   png_spalette_entryp entries;        /* palette entries */
+   png_sPLT_entryp entries;        /* palette entries */
    png_int_32 nentries;                /* number of palette entries */
-} png_spalette;
-typedef png_spalette FAR * png_spalette_p;
-typedef png_spalette FAR * FAR * png_spalette_pp;
+} png_sPLT_t;
+typedef png_sPLT_t FAR * png_sPLT_tp;
+typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
 
 #ifdef PNG_TEXT_SUPPORTED
 /* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
@@ -635,7 +633,7 @@
 
 #if defined(PNG_sPLT_SUPPORTED)
    /* data on sPLT chunks (there may be more than one). */
-   png_spalette_p splt_palettes;
+   png_sPLT_tp splt_palettes;
    png_uint_32 splt_palettes_num;
 #endif
 
@@ -1039,9 +1037,9 @@
 
 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
    png_byte rgb_to_gray_status;
-   png_byte rgb_to_gray_red_coeff;
-   png_byte rgb_to_gray_green_coeff;
-   png_byte rgb_to_gray_blue_coeff;
+   png_uint_16 rgb_to_gray_red_coeff;
+   png_uint_16 rgb_to_gray_green_coeff;
+   png_uint_16 rgb_to_gray_blue_coeff;
 #endif
 
 #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
@@ -1056,9 +1054,9 @@
 };
 
 /* This prevents a compiler error in png_get_copyright() in png.c if png.c
-and png.h are both at * version 1.0.5s
+and png.h are both at * version 1.0.5v
  */
-typedef png_structp version_1_0_5s;
+typedef png_structp version_1_0_5v;
 
 typedef png_struct FAR * FAR * png_structpp;
 
@@ -1179,6 +1177,8 @@
 extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
    int error_action, double red, double green ));
 #endif
+extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
+   int error_action, png_fixed_point red, png_fixed_point green ));
 extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
    png_ptr));
 #endif
@@ -1887,12 +1887,12 @@
 
 #if defined(PNG_READ_sPLT_SUPPORTED)
 extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, png_spalette_pp entries));
+   png_infop info_ptr, png_sPLT_tpp entries));
 #endif
 
 #if defined(PNG_sPLT_SUPPORTED)
 extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
-   png_infop info_ptr, png_spalette_p entries, int nentries));
+   png_infop info_ptr, png_sPLT_tp entries, int nentries));
 #endif
 
 #if defined(PNG_TEXT_SUPPORTED)
@@ -2029,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.5s - February 18, 2000 (header)\n"
+   " libpng version 1.0.5v - March 11, 2000 (header)\n"
 
 #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
 /* With these routines we avoid an integer divide, which will be slower on
@@ -2083,7 +2083,6 @@
 /* Various modes of operation.  Note that after an init, mode is set to
  * zero automatically when the structure is created.
  */
-#define PNG_BEFORE_IHDR             0x00
 #define PNG_HAVE_IHDR               0x01
 #define PNG_HAVE_PLTE               0x02
 #define PNG_HAVE_IDAT               0x04
@@ -2404,7 +2403,7 @@
 
 #if defined(PNG_WRITE_sPLT_SUPPORTED)
 PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
-   png_spalette_p palette));
+   png_sPLT_tp palette));
 #endif
 
 #if defined(PNG_WRITE_tRNS_SUPPORTED)
diff --git a/pngasmrd.h b/pngasmrd.h
index 63b4aef..9a62bf6 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.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 2000
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1999, 2000 Glenn Randers-Pehrson
  *
diff --git a/pngconf.h b/pngconf.h
index bff051d..972a98c 100644
--- a/pngconf.h
+++ b/pngconf.h
@@ -1,7 +1,7 @@
 
 /* pngconf.h - machine configurable file for libpng
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -443,9 +443,14 @@
  * but might be required for some pre-1.0.5c applications.
  */
 #ifdef PNG_NO_GLOBAL_ARRAYS
-#define PNG_USE_LOCAL_ARRAYS
+#  define PNG_USE_LOCAL_ARRAYS
 #else
-#define PNG_USE_GLOBAL_ARRAYS
+#  if defined(__GNUC__) && defined(WIN32)
+#    define PNG_NO_GLOBAL_ARRAYS
+#    define PNG_USE_LOCAL_ARRAYS
+#  else
+#    define PNG_USE_GLOBAL_ARRAYS
+#  endif
 #endif
 
 /* These are currently experimental features, define them if you want */
@@ -915,7 +920,10 @@
 #endif
 
 #ifdef PNG_SETJMP_SUPPORTED
-#   define png_jmp_env(png_ptr) png_ptr->jmpbuf   
+#   define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
+#else
+#   define png_jmpbuf(png_ptr) \
+    (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED)
 #endif
 
 #if defined(USE_FAR_KEYWORD)  /* memory model independent fns */
diff --git a/pngcrush.c b/pngcrush.c
index 184e899..b75f8b4 100644
--- a/pngcrush.c
+++ b/pngcrush.c
@@ -15,12 +15,12 @@
  * occasionally creating Linux executables.
  */
 
-#define PNGCRUSH_VERSION "1.3.5"
+#define PNGCRUSH_VERSION "1.3.6"
 
 /*
  * COPYRIGHT NOTICE, DISCLAIMER, AND LICENSE:
  *
- * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
+ * Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
  *
  * The pngcrush program is supplied "AS IS".  The Author disclaims all
  * warranties, expressed or implied, including, without limitation, the
@@ -45,15 +45,35 @@
 /* To do:
  *
  * Version 1.3.*: check for unused alpha channel and ok-to-reduce-depth.
- *   Rearrange palette to put most-used color first and
- *   transparent color second.  Finish pplt (partial palette) feature.
+ *   Rearrange palette to put most-used color first and transparent color
+ *   second (see ImageMagick 5.1.1 and later).
+ *   Finish pplt (partial palette) feature.
  *
  * Version 1.3.*: Use an alternate write function for the trial passes, that
  *   simply counts bytes rather than actually writing to a file, to save wear
  *   and tear on disk drives.
  *
+ * Version 1.4.*: Allow in-place file replacement or as a filter, as in
+ *    "pngcrush -overwrite file.png"
+ *    "pngcreator | pngcrush > output.png"
+ *
+ * Version 1.4.*: Remove text-handling and color-handling features and put
+ *   those in a separate program or programs, to avoid unnecessary
+ *   recompressing.
+ *
  * Change log:
  *
+ * Version 1.3.6 (built with libpng-1.0.5v)
+ *
+ *   RGB to Grayscale conversion is more accurate (15-bit instead of 8-bit)
+ *   and now uses only integer arithmetic.
+ *
+ *   #ifdef'ed out PNG_READ_DITHER
+ *
+ *   Changed "Compressed" to "Uncompressed" in help for -itxt.
+ *
+ *   Stifled some compiler warnings
+ *
  * Version 1.3.5 (built with libpng-1.0.5s)
  *
  *   Add test on stat_buf.st_size to verify fpin==fpout, because stat in
@@ -180,6 +200,7 @@
 #define EXTENSION_MODE 2
 #define FOPEN(file, how) fopen(file, how)
 #define FCLOSE(file) {fclose(file); file=NULL;--number_of_open_files;};
+#define P1 if(verbose > 1)printf
 #define P2 if(verbose > 2)printf
 
 /* we don't need the extra libpng tranformations
@@ -188,6 +209,11 @@
 #define PNG_INTERNAL
 #include "png.h"
 
+/* so we can load pngcrush with pre-1.0.6 versions of libpng */
+#ifndef png_jmpbuf
+#  define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
+#endif
+
 #ifdef __TURBOC__
 #include <mem.h>
 #endif
@@ -422,7 +448,7 @@
       fprintf(STDERR, "Press [ENTER] key to continue.\n");
       keystroke=(char)getc(stdin);
       if (keystroke)
-        /* stifle compiler warning */ ;
+        /* stifle compiler warning */ return;
    }
 }
 #define PNG_CRUSH_CLEANUP \
@@ -438,7 +464,7 @@
       png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); \
       FCLOSE(fpin); \
       if(verbose > 1) \
-         fprintf(STDERR, "returning after longjump\n");
+        fprintf(STDERR, "returning after longjump\n");
 
 int keep_chunk(png_const_charp name, char *argv[]);
 
@@ -1067,7 +1093,7 @@
       fprintf(STDERR,
         " |    Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson,\n");
       fprintf(STDERR, 
-        " | and zlib version %s, Copyright (c) 1998,\n",
+        " | and zlib version %s, Copyright (C) 1998,\n",
             ZLIB_VERSION);
       fprintf(STDERR,
         " |    Jean-loup Gailly and Mark Adler.\n");
@@ -1077,12 +1103,12 @@
          __VERSION__, "2.81");
       /* is there a macro for "as" versions? */
       fprintf(STDERR,
-        " | under DJGPP %d.%d, Copyright (c) 1995, D. J. Delorie\n",
+        " | under DJGPP %d.%d, Copyright (C) 1995, D. J. Delorie\n",
         __DJGPP__,__DJGPP_MINOR__);
       fprintf(STDERR,
         " | and loaded with PMODE/DJ, by Thomas Pytel and Matthias Grimrath\n");
       fprintf(STDERR,
-        " |    Copyright (c) 1996, Matthias Grimrath.\n");
+        " |    Copyright (C) 1996, Matthias Grimrath.\n");
 #endif
       fprintf(STDERR,"\n");
       }
@@ -1158,6 +1184,8 @@
      fprintf(STDERR,
        "               the input file does not have alpha information.\n");
      fprintf(STDERR,
+       "               You can use 0 or 4 to convert color to grayscale.\n");
+     fprintf(STDERR,
        "               Use 0 or 2 to delete an unwanted alpha channel.\n");
      fprintf(STDERR,
        "               Default is to use same color type as the input file.\n\n");
@@ -1234,7 +1262,7 @@
        "         -itxt b[efore_IDAT]|a[fter_IDAT] \"keyword\" \"text\"\n");
      if(verbose > 1)
      fprintf(STDERR,
-       "\n               Compressed iTXt chunk to insert (see -text).\n\n");
+       "\n               Uncompressed iTXt chunk to insert (see -text).\n\n");
      fprintf(STDERR,
        "            -l zlib_compression_level [0-9]\n");
      if(verbose > 1)
@@ -1689,7 +1717,9 @@
                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);
+            fprintf(STDERR, "\n   Cannot overwrite input file %s\n", inname);
+            P1("   st_ino=%d, st_size=%d\n\n", (int)stat_in.st_ino,
+               (int)stat_in.st_size);
             FCLOSE(fpin);
             return 1;
          }
@@ -1757,7 +1787,7 @@
 #  else
 #    ifdef PNG_JMPBUF_SUPPORTED
    /* New setjmp interface */
-   if (setjmp(png_jmp_env(read_ptr)))
+   if (setjmp(png_jmpbuf(read_ptr)))
 #    else
    /* old interface */
    if (setjmp(read_ptr->jmpbuf))
@@ -1769,7 +1799,7 @@
       }
 
 #if defined(USE_FAR_KEYWORD)
-      png_memcpy(png_jmp_env(read_ptr),jmpbuf,sizeof(jmp_buf));
+      png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));
 #endif
    if(nosave == 0)
 #  ifdef USE_FAR_KEYWORD
@@ -1777,7 +1807,7 @@
 #  else
 #    ifdef PNG_JMPBUF_SUPPORTED
    /* New setjmp interface */
-   if (setjmp(png_jmp_env(write_ptr)))
+   if (setjmp(png_jmpbuf(write_ptr)))
 #    else
    /* Old interface */
    if (setjmp(write_ptr->jmpbuf))
@@ -1788,7 +1818,7 @@
              continue;
          }
 #if defined(USE_FAR_KEYWORD)
-      png_memcpy(png_jmp_env(write_ptr),jmpbuf,sizeof(jmp_buf));
+      png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));
 #endif
       P2("jmp_buf has been set.\n");
       png_crush_pause();
@@ -1910,8 +1940,13 @@
 #endif
 #else   /* !PNG_UINT_IHDR */
 
+#if !defined(PNG_cHRM_SUPPORTED) || !defined(PNG_hIST_SUPPORTED) || \
+    !defined(PNG_iCCP_SUPPORTED) || !defined(PNG_sCAL_SUPPORTED) || \
+    !defined(PNG_pCAL_SUPPORTED) || !defined(PNG_sPLT_SUPPORTED) || \
+    !defined(PNG_tIME_SUPPORTED)
           png_byte chunk_name[5];
           chunk_name[4]='\0';
+#endif
 
           png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE,
             NULL, 0);
@@ -1965,7 +2000,7 @@
          if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
              &color_type, &interlace_type, &compression_type, &filter_type))
          {
-            int compression_window=default_compression_window;
+            int compression_window;
             int need_expand = 0;
             input_color_type=color_type;
             input_bit_depth=bit_depth;
@@ -1995,15 +2030,10 @@
             if((color_type == 2 || color_type == 6 || color_type == 3) &&
               (output_color_type == 0 || output_color_type == 4))
             {
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) && \
-    defined(PNG_FLOATING_POINT_SUPPORTED)
-               png_set_rgb_to_gray(read_ptr, 1, 54./255., 183./255.);
+#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
+               png_set_rgb_to_gray_fixed(read_ptr, 1, -1, -1);
                if(output_bit_depth < 8)output_bit_depth=8;
                if(color_type == 3) need_expand = 1;
-#else
-               printf("  Cannot reduce color image to grayscale unless\n");
-               printf("  pngcrush is rebuilt with floating point support \n");
-               output_color_type=input_color_type;
 #endif
             }
            
@@ -2416,7 +2446,7 @@
          }
          else
          {
-            for (i=0 ; ia<256; ia++)
+            for (ia=0 ; ia<256; ia++)
                trns_array[ia]=255;
          }
          if (verbose > 1 && first_trial)
@@ -2494,12 +2524,12 @@
       png_sPLT_tp entries;
       int num_entries;
 
-      num_entries = (int)png_get_spalettes(read_ptr, read_info_ptr, &entries);
+      num_entries = (int)png_get_sPLT(read_ptr, read_info_ptr, &entries);
       if (num_entries)
       {
          if(keep_chunk("sPLT",argv))
-            png_set_spalettes(write_ptr, write_info_ptr, entries, num_entries);
-         png_free_spalettes(read_ptr, read_info_ptr, num_entries);
+            png_set_sPLT(write_ptr, write_info_ptr, entries, num_entries);
+         png_free_data(read_ptr, read_info_ptr, PNG_FREE_SPLT, num_entries);
       }
    }
 #endif
@@ -2737,13 +2767,13 @@
          png_debug(0, "\nBegin Pass\n");
          for (y = 0; y < height; y++)
          {
-            png_read_rows(read_ptr, (png_bytepp)&row_buf, (png_bytepp)NULL, 1);
+            png_read_row(read_ptr, row_buf, (png_bytep)NULL);
             if(nosave == 0)
             {
                t_stop = (float)clock();
                t_decode += (t_stop - t_start);
                t_start = t_stop;
-               png_write_rows(write_ptr, (png_bytepp)&row_buf, 1);
+               png_write_row(write_ptr, row_buf);
                t_stop = (float)clock();
                t_encode += (t_stop - t_start);
                t_start = t_stop;
@@ -3044,7 +3074,7 @@
 #  else
 #    ifdef PNG_JMPBUF_SUPPORTED
    /* New setjmp interface */
-   if (setjmp(png_jmp_env(read_ptr)))
+   if (setjmp(png_jmpbuf(read_ptr)))
 #    else
    /* old interface */
    if (setjmp(read_ptr->jmpbuf))
@@ -3057,7 +3087,7 @@
       }
 
 #  if defined(USE_FAR_KEYWORD)
-   png_memcpy(png_jmp_env(read_ptr),jmpbuf,sizeof(jmp_buf));
+   png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));
 #  endif
 #endif
 
@@ -3067,7 +3097,6 @@
    png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data);
 #endif
 
-   measured_idat_length=0;
    read_ptr->sig_bytes=0;
    measured_idat_length=png_measure_idat(read_ptr, read_info_ptr);
    P2("measure_idats: IDAT length=%lu\n",measured_idat_length);
diff --git a/pngcrush.h b/pngcrush.h
index 3e464c7..d4b3a41 100644
--- a/pngcrush.h
+++ b/pngcrush.h
@@ -3,9 +3,6 @@
 /* Special defines for pngcrush, mostly just to reduce the size of the
    static executable. */
 
-#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
@@ -24,6 +21,7 @@
 #define PNG_NO_INFO_IMAGE
 #define PNG_NO_READ_USER_CHUNKS
 #define PNG_NO_EASY_ACCESS
+#define PNG_NO_READ_DITHER
 #define PNG_NO_READ_EMPTY_PLTE
 #define PNG_NO_WRITE_TRANSFORMS
 #define PNG_NO_PROGRESSIVE_READ
@@ -32,9 +30,9 @@
 #define PNG_READ_STRIP_ALPHA_SUPPORTED
 #define PNG_READ_EXPAND_SUPPORTED
 #define PNG_READ_FILLER_SUPPORTED
+#define PNG_READ_RGB_TO_GRAY_SUPPORTED
 #ifndef PNG_NO_FLOATING_POINT_SUPPORTED
 #  define PNG_READ_GRAY_TO_RGB_SUPPORTED
-#  define PNG_READ_RGB_TO_GRAY_SUPPORTED
 #  define PNG_READ_BACKGROUND_SUPPORTED
 #  define PNG_READ_GAMMA_SUPPORTED
 #else
diff --git a/pngerror.c b/pngerror.c
index 512aeb2..dd2a430 100644
--- a/pngerror.c
+++ b/pngerror.c
@@ -1,7 +1,7 @@
 
 /* pngerror.c - stub functions for i/o and memory allocation
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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/pnggccrd.c b/pnggccrd.c
index 504111c..532b58c 100644
--- a/pnggccrd.c
+++ b/pnggccrd.c
@@ -6,7 +6,7 @@
  *     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.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
diff --git a/pngget.c b/pngget.c
index ab6f10b..b862894 100644
--- a/pngget.c
+++ b/pngget.c
@@ -1,7 +1,7 @@
 
 /* pngget.c - retrieval of values from info struct
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -489,7 +489,7 @@
 #if defined(PNG_READ_sPLT_SUPPORTED)
 png_uint_32
 png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
-             png_spalette_pp spalettes)
+             png_sPLT_tpp spalettes)
 {
    if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
      *spalettes = info_ptr->splt_palettes;
diff --git a/pngmem.c b/pngmem.c
index 4a47106..4221c39 100644
--- a/pngmem.c
+++ b/pngmem.c
@@ -1,7 +1,7 @@
 
 /* pngmem.c - stub functions for memory allocation
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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 9da0743..6c7be7f 100644
--- a/pngpread.c
+++ b/pngpread.c
@@ -1,7 +1,7 @@
 
 /* pngpread.c - read a png file in push mode
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -952,7 +952,7 @@
 void
 png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
 {
-   if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
+   if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
       {
          png_error(png_ptr, "Out of place tEXt");
          /* to quiet some compiler warnings */
@@ -1040,7 +1040,7 @@
 void
 png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
 {
-   if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
+   if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
       {
          png_error(png_ptr, "Out of place zTXt");
          /* to quiet some compiler warnings */
@@ -1221,7 +1221,7 @@
 void
 png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
 {
-   if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
+   if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
       {
          png_error(png_ptr, "Out of place iTXt");
          /* to quiet some compiler warnings */
@@ -1268,7 +1268,7 @@
    {
       png_textp text_ptr;
       png_charp key;
-      int comp_flag = 0;
+      int comp_flag;
       png_charp lang;
       png_charp lang_key;
       png_charp text;
diff --git a/pngread.c b/pngread.c
index e468839..fda1116 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,7 +1,7 @@
 
 /* pngread.c - read a PNG file
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -641,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.5s.
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5v.
  */
 
 void
@@ -690,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.5s.
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5v.
  */
 void
 png_read_image(png_structp png_ptr, png_bytepp image)
@@ -1113,9 +1113,6 @@
 {
    int row;
 
-   if(transforms == 0 || params == (voidp)NULL)
-      /* quiet compiler warnings */ ;
-
 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
    /* invert the alpha channel from opacity to transparency */
    if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
@@ -1237,5 +1234,9 @@
 
    /* read rest of file, and get additional chunks in info_ptr - REQUIRED */
    png_read_end(png_ptr, info_ptr);
+
+   if(transforms == 0 || params == (voidp)NULL)
+      /* quiet compiler warnings */ return;
+
 }
 #endif
diff --git a/pngrio.c b/pngrio.c
index 2e42d17..3ac119b 100644
--- a/pngrio.c
+++ b/pngrio.c
@@ -1,7 +1,7 @@
 
 /* pngrio.c - functions for data input
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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 6037574..066bcf9 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.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -582,14 +582,25 @@
 }
 #endif
 
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) && \
-    defined(PNG_FLOATING_POINT_SUPPORTED)
+#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
+#if defined(PNG_FLOATING_POINT_SUPPORTED)
 /* Convert a RGB image to a grayscale of the same width.  This allows us,
  * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
  */
+
 void
 png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
-  double green)
+   double green)
+{
+      int red_fixed = (int)((float)red*100000.0 + 0.5);
+      int green_fixed = (int)((float)green*100000.0 + 0.5);
+      png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed);
+}
+#endif
+
+void
+png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
+   png_fixed_point red, png_fixed_point green)
 {
    png_debug(1, "in png_set_rgb_to_gray\n");
    switch(error_action)
@@ -610,22 +621,26 @@
    }
 #endif
    {
-      png_byte red_byte = (png_byte)((float)red*255.0 + 0.5);
-      png_byte green_byte = (png_byte)((float)green*255.0 + 0.5);
-      if(red < 0.0 || green < 0.0)
+      png_uint_16 red_int, green_int;
+      if(red > 0 && green > 0)
       {
-         red_byte = 54;
-         green_byte = 183;
+         red_int   =  6968; /* .212671 * 32768 + .5 */
+         green_int = 23434; /* .715160 * 32768 + .5 */
       }
-      else if(red_byte + green_byte > 255)
+      else if(red + green < 100000L)
+      {
+        red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L);
+        green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L);
+      }
+      else
       {
          png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
-         red_byte = 54;
-         green_byte = 183;
+         red_int   =  6968;
+         green_int = 23434;
       }
-      png_ptr->rgb_to_gray_red_coeff   = red_byte;
-      png_ptr->rgb_to_gray_green_coeff = green_byte;
-      png_ptr->rgb_to_gray_blue_coeff  = (png_byte)(255-red_byte-green_byte);
+      png_ptr->rgb_to_gray_red_coeff   = red_int;
+      png_ptr->rgb_to_gray_green_coeff = green_int;
+      png_ptr->rgb_to_gray_blue_coeff  = (png_uint_16)(32768-red_int-green_int);
    }
 }
 #endif
@@ -2021,11 +2036,11 @@
  *
  *  We approximate this with
  *
- *     Y = 0.211 * R    + 0.715 * G    + 0.074 * B
+ *     Y = 0.21268 * R    + 0.7151 * G    + 0.07217 * B
  *
  *  which can be expressed with integers as
  *
- *     Y = (54 * R + 183 * G + 19 * B)/256
+ *     Y = (6969 * R + 23434 * G + 2365 * B)/32768
  *
  *  The calculation is to be done in a linear colorspace.
  *
@@ -2047,9 +2062,9 @@
 #endif
       (row_info->color_type & PNG_COLOR_MASK_COLOR))
    {
-      png_byte rc = png_ptr->rgb_to_gray_red_coeff;
-      png_byte gc = png_ptr->rgb_to_gray_green_coeff;
-      png_byte bc = png_ptr->rgb_to_gray_blue_coeff;
+      png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
+      png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
+      png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
 
       if (row_info->color_type == PNG_COLOR_TYPE_RGB)
       {
@@ -2070,7 +2085,7 @@
                   {
                      rgb_error |= 1;
                      *(dp++) = png_ptr->gamma_from_1[
-                       (rc*red+gc*green+bc*blue)>>8];
+                       (rc*red+gc*green+bc*blue)>>15];
                   }
                   else
                      *(dp++) = *(sp-1);
@@ -2089,7 +2104,7 @@
                   if(red != green || red != blue)
                   {
                      rgb_error |= 1;
-                     *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>8);
+                     *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15);
                   }
                   else
                      *(dp++) = *(sp-1);
@@ -2124,7 +2139,7 @@
                      png_uint_16 blue_1  = png_ptr->gamma_16_to_1[(blue&0xff) >>
                                   png_ptr->gamma_shift][blue>>8];
                      png_uint_16 gray16  = (png_uint_16)((rc*red_1 + gc*green_1
-                                  + bc*blue_1)>>8);
+                                  + bc*blue_1)>>15);
                      w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
                          png_ptr->gamma_shift][gray16 >> 8];
                      rgb_error |= 1;
@@ -2149,7 +2164,7 @@
 
                   if(red != green || red != blue)
                      rgb_error |= 1;
-                  gray16  = (png_uint_16)((rc*red + gc*green + bc*blue)>>8);
+                  gray16  = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
                   *(dp++) = (png_byte)((gray16>>8) & 0xff);
                   *(dp++) = (png_byte)(gray16 & 0xff);
                }
@@ -2173,7 +2188,7 @@
                   if(red != green || red != blue)
                      rgb_error |= 1;
                   *(dp++) =  png_ptr->gamma_from_1
-                             [(rc*red + gc*green + bc*blue)>>8];
+                             [(rc*red + gc*green + bc*blue)>>15];
                   *(dp++) = *(sp++);  /* alpha */
                }
             }
@@ -2221,7 +2236,7 @@
                      png_uint_16 blue_1  = png_ptr->gamma_16_to_1[(blue&0xff) >>
                                   png_ptr->gamma_shift][blue>>8];
                      png_uint_16 gray16  = (png_uint_16)((rc * red_1
-                                  + gc * green_1 + bc * blue_1)>>8);
+                                  + gc * green_1 + bc * blue_1)>>15);
                      w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
                          png_ptr->gamma_shift][gray16 >> 8];
                      rgb_error |= 1;
@@ -2246,7 +2261,7 @@
                   blue  = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
                   if(red != green || red != blue)
                      rgb_error |= 1;
-                  gray16  = (png_uint_16)((rc*red + gc*green + bc*blue)>>8);
+                  gray16  = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
                   *(dp++) = (png_byte)((gray16>>8) & 0xff);
                   *(dp++) = (png_byte)(gray16 & 0xff);
                   *(dp++) = *(sp++);  /* alpha */
diff --git a/pngrutil.c b/pngrutil.c
index 9da17fa..15b7197 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -1,7 +1,7 @@
 
 /* pngrutil.c - utilities to read a PNG file
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -147,7 +147,7 @@
 {
    static char msg[] = "Error decoding compressed text";
    png_charp text = NULL;
-   png_size_t text_size = (chunklength - prefix_size);
+   png_size_t text_size;
 
    if (comp_type == PNG_TEXT_COMPRESSION_zTXt)
    {
@@ -262,7 +262,7 @@
 
    png_debug(1, "in png_handle_IHDR\n");
 
-   if (png_ptr->mode != PNG_BEFORE_IHDR)
+   if (png_ptr->mode & PNG_HAVE_IHDR)
       png_error(png_ptr, "Out of place IHDR");
 
    /* check the length */
@@ -968,7 +968,7 @@
 {
    png_bytep chunkdata;
    png_bytep entry_start;
-   png_spalette new_palette;
+   png_sPLT_t new_palette;
    int data_length, entry_size, i;
    png_uint_32 skip = 0;
    png_size_t slength;
@@ -1028,12 +1028,12 @@
    }
 
    new_palette.nentries = data_length / entry_size;
-   new_palette.entries = (png_spalette_entryp)png_malloc(
-       png_ptr, new_palette.nentries * sizeof(png_spalette_entry));
+   new_palette.entries = (png_sPLT_entryp)png_malloc(
+       png_ptr, new_palette.nentries * sizeof(png_sPLT_entry));
 
    for (i = 0; i < new_palette.nentries; i++)
    {
-      png_spalette_entryp pp = new_palette.entries + i;
+      png_sPLT_entryp pp = new_palette.entries + i;
 
       if (new_palette.depth == 8)
       {
@@ -1090,7 +1090,7 @@
          /* Should be an error, but we can cope with it */
          png_warning(png_ptr, "Missing PLTE before tRNS");
       }
-      else if (length > png_ptr->num_palette)
+      else if (length > (png_uint_32)png_ptr->num_palette)
       {
          png_warning(png_ptr, "Incorrect tRNS chunk length");
          png_crc_finish(png_ptr, length);
@@ -1510,7 +1510,7 @@
 {
    png_charp buffer, ep;
 #ifdef PNG_FLOATING_POINT_SUPPORTED
-   double width=0., height=0.;
+   double width, height;
    png_charp vp;
 #else
 #ifdef PNG_FIXED_POINT_SUPPORTED
@@ -1723,7 +1723,7 @@
    png_textp text_ptr;
    png_charp chunkdata;
    png_charp text;
-   int comp_type = PNG_TEXT_COMPRESSION_NONE;
+   int comp_type;
    png_size_t slength, prefix_len;
 
    png_debug(1, "in png_handle_zTXt\n");
@@ -1798,7 +1798,7 @@
    png_textp text_ptr;
    png_charp chunkdata;
    png_charp key, lang, text, lang_key;
-   int comp_flag = PNG_TEXT_COMPRESSION_NONE;
+   int comp_flag;
    int comp_type = 0;
    png_size_t slength, prefix_len;
 
diff --git a/pngset.c b/pngset.c
index 660cb61..d9cc9b3 100644
--- a/pngset.c
+++ b/pngset.c
@@ -1,7 +1,7 @@
 
 /* pngset.c - storage of image information into info struct
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -312,8 +312,6 @@
    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;
@@ -613,30 +611,30 @@
 #if defined(PNG_sPLT_SUPPORTED)
 void
 png_set_sPLT(png_structp png_ptr,
-             png_infop info_ptr, png_spalette_p entries, int nentries)
+             png_infop info_ptr, png_sPLT_tp entries, int nentries)
 {
-    png_spalette_p        np;
+    png_sPLT_tp np;
     int i;
 
-    np = (png_spalette_p)png_malloc(png_ptr,
-        (info_ptr->splt_palettes_num + nentries) * sizeof(png_spalette));
+    np = (png_sPLT_tp)png_malloc(png_ptr,
+        (info_ptr->splt_palettes_num + nentries) * sizeof(png_sPLT_t));
 
     png_memcpy(np, info_ptr->splt_palettes,
-           info_ptr->splt_palettes_num * sizeof(png_spalette));
+           info_ptr->splt_palettes_num * sizeof(png_sPLT_t));
     png_free(png_ptr, info_ptr->splt_palettes);
 
     for (i = 0; i < nentries; i++)
     {
-        png_spalette_p to = np + info_ptr->splt_palettes_num + i;
-        png_spalette_p from = entries + i;
+        png_sPLT_tp to = np + info_ptr->splt_palettes_num + i;
+        png_sPLT_tp from = entries + i;
 
         to->name = (png_charp)png_malloc(png_ptr,
                                         png_strlen(from->name) + 1);
         png_strcpy(to->name, from->name);
-        to->entries = (png_spalette_entryp)png_malloc(png_ptr,
-                                 from->nentries * sizeof(png_spalette));
+        to->entries = (png_sPLT_entryp)png_malloc(png_ptr,
+                                 from->nentries * sizeof(png_sPLT_t));
         png_memcpy(to->entries, from->entries,
-               from->nentries * sizeof(png_spalette));
+               from->nentries * sizeof(png_sPLT_t));
         to->nentries = from->nentries;
         to->depth = from->depth;
     }
@@ -687,7 +685,8 @@
 }
 #endif
 
-#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED)
+#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
+    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
 void
 png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
 {
diff --git a/pngtrans.c b/pngtrans.c
index 86c0dfd..ce998a3 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.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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 756d8e2..f787156 100644
--- a/pngtypes.h
+++ b/pngtypes.h
@@ -1,6 +1,6 @@
 /* pngtypes.h - array of chunk-types for libpng
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5u - March 4, 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 299827d..9cf6dc7 100644
--- a/pngvcrd.c
+++ b/pngvcrd.c
@@ -2,7 +2,7 @@
  *
  * For Intel x86 CPU and Microsoft Visual C++ compiler
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
diff --git a/pngwio.c b/pngwio.c
index 515e0f4..f9ccdb2 100644
--- a/pngwio.c
+++ b/pngwio.c
@@ -1,7 +1,7 @@
 
 /* pngwio.c - functions for data output
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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 ab68a1e..432e371 100644
--- a/pngwrite.c
+++ b/pngwrite.c
@@ -1,7 +1,7 @@
 
 /* pngwrite.c - general routines to write a PNG file
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -1187,9 +1187,6 @@
                            int transforms,
                            voidp params)
 {
-   if(transforms == 0 || params == (voidp)NULL)
-      /* quiet compiler warnings */ ;
-
 #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
    /* invert the alpha channel from opacity to transparency */
    if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
@@ -1262,5 +1259,8 @@
 
    /* It is REQUIRED to call this to finish writing the rest of the file */
    png_write_end(png_ptr, info_ptr);
+
+   if(transforms == 0 || params == (voidp)NULL)
+      /* quiet compiler warnings */ return;
 }
 #endif
diff --git a/pngwtran.c b/pngwtran.c
index 4092834..6bf2b33 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.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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 437a535..c4fe193 100644
--- a/pngwutil.c
+++ b/pngwutil.c
@@ -1,7 +1,7 @@
 
 /* pngwutil.c - utilities to write a PNG file
  *
- * libpng 1.0.5s - February 18, 2000
+ * libpng 1.0.5v - March 11, 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
@@ -179,7 +179,6 @@
 #else
       png_warning(png_ptr, "Unknown compression type");
 #endif
-      compression = PNG_TEXT_COMPRESSION_zTXt;
    }
 
    /* We can't write the chunk until we find out how much data we have,
@@ -642,7 +641,7 @@
    }
 
    if (compression_type)
-      /* ignore */ ;
+      png_warning(png_ptr, "Unknown compression type in iCCP chunk");
 
    if (profile == NULL || *profile == '\0')
       profile_len = 0;
@@ -667,7 +666,7 @@
 #if defined(PNG_WRITE_sPLT_SUPPORTED)
 /* write a sPLT chunk */
 void
-png_write_sPLT(png_structp png_ptr, png_spalette_p spalette)
+png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette)
 {
 #ifdef PNG_USE_LOCAL_ARRAYS
    PNG_sPLT;
@@ -677,10 +676,11 @@
    png_byte entrybuf[10];
    int entry_size = (spalette->depth == 8 ? 6 : 10);
    int palette_size = entry_size * spalette->nentries;
-   png_spalette_entryp ep;
+   png_sPLT_entryp ep;
 
    png_debug(1, "in png_write_sPLT\n");
-   if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr, spalette->name, &new_name))==0)
+   if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr,
+      spalette->name, &new_name))==0)
    {
       png_warning(png_ptr, "Empty keyword in sPLT chunk");
       return;