Imported from libpng-1.2.8rc1.tar
diff --git a/ANNOUNCE b/ANNOUNCE
index 4781b57..3d0e6ef 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,5 +1,5 @@
 
-Libpng 1.2.8beta5 - November 20, 2004
+Libpng 1.2.8rc1 - November 24, 2004
 
 This is not intended to be a public release.  It will be replaced
 within a few weeks by a public version or by another test version.
@@ -30,10 +30,16 @@
     compatibility.
   Revised handling of SPECIALBUILD, PRIVATEBUILD, 
     PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
+version 1.2.8rc1 [November 24, 2004]
+  Moved handling of BUILD macros from pngconf.h to png.h
+  Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
+    omitted from beta5.
+  Revised scripts/pngw32.rc
+  Despammed mailing addresses by masking "@" with "at".
 
 Send comments/corrections/commendations to
-png-implement@ccrc.wustl.edu (subscription required; write to
-majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message)
-or to glennrp@users.sourceforge.net
+png-implement at ccrc.wustl.edu (subscription required; write to
+majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message)
+or to glennrp at users.sourceforge.net
 
 Glenn R-P
diff --git a/CHANGES b/CHANGES
index 513c1c8..4f79c8b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1388,10 +1388,16 @@
     compatibility.
   Revised handling of SPECIALBUILD, PRIVATEBUILD, 
     PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
+version 1.2.8rc1 [November 24, 2004]
+  Moved handling of BUILD macros from pngconf.h to png.h
+  Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
+    omitted from beta5.
+  Revised scripts/pngw32.rc
+  Despammed mailing addresses by masking "@" with "at".
 
 Send comments/corrections/commendations to
-png-implement@ccrc.wustl.edu (subscription required; write to
-majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message)
-or to glennrp@users.sourceforge.net
+png-implement at ccrc.wustl.edu (subscription required; write to
+majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message)
+or to glennrp at users.sourceforge.net
 
 Glenn R-P
diff --git a/INSTALL b/INSTALL
index 88c2cfd..a2112ec 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
 
-Installing libpng version 1.2.8beta5 - November 20, 2004
+Installing libpng version 1.2.8rc1 - November 24, 2004
 
 Before installing libpng, you must first install zlib.  zlib
 can usually be found wherever you got libpng.  zlib can be
@@ -10,7 +10,7 @@
 version of zlib that's installed.
 
 You can rename the directories that you downloaded (they
-might be called "libpng-1.2.8beta5" or "lpng109" and "zlib-1.2.1"
+might be called "libpng-1.2.8rc1" or "lpng109" and "zlib-1.2.1"
 or "zlib121") so that you have directories called "zlib" and "libpng".
 
 Your directory structure should look like this:
@@ -67,9 +67,9 @@
 
  makefile.std      =>  Generic UNIX makefile (cc, creates static libpng.a)
  makefile.linux    =>  Linux/ELF makefile
-                       (gcc, creates libpng12.so.0.1.2.8beta5)
+                       (gcc, creates libpng12.so.0.1.2.8rc1)
  makefile.gcmmx    =>  Linux/ELF makefile
-                       (gcc, creates libpng12.so.0.1.2.8beta5,
+                       (gcc, creates libpng12.so.0.1.2.8rc1,
                        uses assembler code tuned for Intel MMX platform)
  makefile.gcc      =>  Generic makefile (gcc, creates static libpng.a)
  makefile.knr      =>  Archaic UNIX Makefile that converts files with
@@ -92,12 +92,12 @@
  makefile.openbsd  =>  OpenBSD makefile
  makefile.sgi      =>  Silicon Graphics IRIX makefile (cc, creates static lib)
  makefile.sggcc    =>  Silicon Graphics (gcc,
-                       creates libpng12.so.0.1.2.8beta5)
+                       creates libpng12.so.0.1.2.8rc1)
  makefile.sunos    =>  Sun makefile
  makefile.solaris  =>  Solaris 2.X makefile (gcc,
-                       creates libpng12.so.0.1.2.8beta5)
+                       creates libpng12.so.0.1.2.8rc1)
  makefile.so9      =>  Solaris 9 makefile (gcc,
-                       creates libpng12.so.0.1.2.8beta5)
+                       creates libpng12.so.0.1.2.8rc1)
  makefile.32sunu   =>  Sun Ultra 32-bit makefile
  makefile.64sunu   =>  Sun Ultra 64-bit makefile
  makefile.sco      =>  For SCO OSr5  ELF and Unixware 7 with Native cc
diff --git a/KNOWNBUG b/KNOWNBUG
index de9e907..5032e3b 100644
--- a/KNOWNBUG
+++ b/KNOWNBUG
@@ -1,5 +1,5 @@
 
-Known bugs in libpng version 1.2.8beta5
+Known bugs in libpng version 1.2.8rc1
 
 1. April 22, 2001: pnggccrd.c has been reported to crash on NetBSD when
    reading interlaced PNG files, when assembler code is enabled but running
diff --git a/LICENSE b/LICENSE
index 521fe66..f705ad1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -8,7 +8,7 @@
 If you modify libpng you may insert additional notices immediately following
 this sentence.
 
-libpng version 1.2.6, November 20, 2004, is
+libpng version 1.2.6, November 24, 2004, is
 Copyright (c) 2004 Glenn Randers-Pehrson, and is
 distributed according to the same disclaimer and license as libpng-1.2.5
 with the following individual added to the list of Contributing Authors
@@ -105,5 +105,5 @@
 certification mark of the Open Source Initiative.
 
 Glenn Randers-Pehrson
-glennrp@users.sourceforge.net
-November 20, 2004
+glennrp at users.sourceforge.net
+November 24, 2004
diff --git a/README b/README
index 42afe18..4f283e0 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-README for libpng version 1.2.8beta5 - November 20, 2004 (shared library 12.0)
+README for libpng version 1.2.8rc1 - November 24, 2004 (shared library 12.0)
 See the note about version numbers near the top of png.h
 
 See INSTALL for instructions on how to install libpng.
@@ -103,17 +103,17 @@
 This release was created and will be supported by myself (of course
 based in a large way on Guy's and Andreas' earlier work), and the PNG group.
 
-glennrp@users.sourceforge.net
-png-implement@ccrc.wustl.edu (subscription required; write to
-majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message).
+glennrp at users.sourceforge.net
+png-implement at ccrc.wustl.edu (subscription required; write to
+majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message).
 
 You can't reach Guy, the original libpng author, at the addresses
 given in previous versions of this document.  He and Andreas will read mail
 addressed to the png-implement list, however.
 
 Please do not send general questions about PNG.  Send them to
-the (png-list@ccrc.wustl.edu, subscription required, write to
-majordomo@ccrc.wustl.edu with "subscribe png-list" in your message).
+the (png-list at ccrc.wustl.edu, subscription required, write to
+majordomo at ccrc.wustl.edu with "subscribe png-list" in your message).
 On the other hand,
 please do not send libpng questions to that address, send them to me
 or to the png-implement list.  I'll
@@ -189,9 +189,9 @@
        descrip.mms      =>  VMS makefile for MMS or MMK
        makefile.std     =>  Generic UNIX makefile (cc, creates static libpng.a)
        makefile.linux   =>  Linux/ELF makefile
-                            (gcc, creates libpng12.so.0.1.2.8beta5)
+                            (gcc, creates libpng12.so.0.1.2.8rc1)
        makefile.gcmmx   =>  Linux/ELF makefile
-                            (gcc, creates libpng12.so.0.1.2.8beta5,
+                            (gcc, creates libpng12.so.0.1.2.8rc1,
                             uses assembler code tuned for Intel MMX platform)
        makefile.gcc     =>  Generic makefile (gcc, creates static libpng.a)
        makefile.knr     =>  Archaic UNIX Makefile that converts files with
@@ -213,12 +213,12 @@
        makefile.openbsd =>  OpenBSD makefile
        makefile.sgi     =>  Silicon Graphics IRIX (cc, creates static lib)
        makefile.sggcc   =>  Silicon Graphics
-                            (gcc, creates libpng12.so.0.1.2.8beta5)
+                            (gcc, creates libpng12.so.0.1.2.8rc1)
        makefile.sunos   =>  Sun makefile
        makefile.solaris =>  Solaris 2.X makefile
-                            (gcc, creates libpng12.so.0.1.2.8beta5)
+                            (gcc, creates libpng12.so.0.1.2.8rc1)
        makefile.so9     =>  Solaris 9 makefile
-                            (gcc, creates libpng12.so.0.1.2.8beta5)
+                            (gcc, creates libpng12.so.0.1.2.8rc1)
        makefile.32sunu  =>  Sun Ultra 32-bit makefile
        makefile.64sunu  =>  Sun Ultra 64-bit makefile
        makefile.sco     =>  For SCO OSr5  ELF and Unixware 7 with Native cc
@@ -249,12 +249,12 @@
 Good luck, and happy coding.
 
 -Glenn Randers-Pehrson (current maintainer)
- Internet: glennrp@users.sourceforge.net
+ Internet: glennrp at users.sourceforge.net
 
 -Andreas Eric Dilger (former maintainer, 1996-1997)
- Internet: adilger@enel.ucalgary.ca
+ Internet: adilger at enel.ucalgary.ca
  Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
 
 -Guy Eric Schalnat (original author and former maintainer, 1995-1996)
  (formerly of Group 42, Inc)
- Internet: gschal@infinet.com
+ Internet: gschal at infinet.com
diff --git a/Y2KINFO b/Y2KINFO
index 8b361d7..bab8189 100644
--- a/Y2KINFO
+++ b/Y2KINFO
@@ -1,13 +1,13 @@
    Y2K compliance in libpng:
    =========================
 
-      November 20, 2004
+      November 24, 2004
 
       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.2.8beta5 are Y2K compliant.  It is my belief that earlier
+      upward through 1.2.8rc1 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
diff --git a/configure b/configure
index 5ef881b..974de42 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,13 @@
 #!/bin/sh
 echo "
   There is no \"configure\" script in this distribution of
-  libpng-1.2.8beta5.
+  libpng-1.2.8rc1.
 
   Instead, please copy the appropriate makefile for your system from the
   \"scripts\" directory.  Read the INSTALL file for more details.
 
   Update, July 2004: you can get a "configure" based distribution
   from the libpng distribution sites.  Download the file
-  libpng-1.2.8beta5-config.tar.gz
+  libpng-1.2.8rc1-config.tar.gz
 "
 
diff --git a/libpng.3 b/libpng.3
index 045bac3..f346379 100644
--- a/libpng.3
+++ b/libpng.3
@@ -1,6 +1,6 @@
-.TH LIBPNG 3 "November 20, 2004"
+.TH LIBPNG 3 "November 24, 2004"
 .SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8beta5
+libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc1
 .SH SYNOPSIS
 \fI\fB
 
@@ -781,9 +781,9 @@
 .SH LIBPNG.TXT
 libpng.txt - A description on how to use and modify libpng
 
- libpng version 1.2.8beta5 - November 20, 2004
+ libpng version 1.2.8rc1 - November 24, 2004
  Updated and distributed by Glenn Randers-Pehrson
- <glennrp@users.sourceforge.net>
+ <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2004 Glenn Randers-Pehrson
  For conditions of distribution and use, see copyright
  notice in png.h.
@@ -1704,7 +1704,7 @@
 
 The default values approximate those recommended in the Charles
 Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
-Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net
+Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
 
     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
 
@@ -3685,13 +3685,13 @@
 
 .SH IX. Y2K Compliance in libpng
 
-November 20, 2004
+November 24, 2004
 
 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.2.8beta5 are Y2K compliant.  It is my belief that earlier
+upward through 1.2.8rc1 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 that
@@ -3840,6 +3840,8 @@
  1.0.17              10    10017  12.so.0.1.0.17
  1.2.7               13    10207  12.so.0.1.2.7
  1.2.8beta1-5        13    10208  12.so.0.1.2.8beta1-5
+ 1.0.18rc1           10    10018  12.so.0.1.0.18rc1
+ 1.2.8rc1            13    10208  12.so.0.1.2.8rc1
 
 Henceforth the source version will match the shared-library minor
 and patch numbers; the shared-library major version number will be
@@ -3887,7 +3889,7 @@
 
 .SH AUTHORS
 This man page: Glenn Randers-Pehrson
-<glennrp@users.sourceforge.net>
+<glennrp at users.sourceforge.net>
 
 The contributing authors would like to thank all those who helped
 with testing, bug fixes, and patience.  This wouldn't have been
@@ -3895,14 +3897,14 @@
 
 Thanks to Frank J. T. Wojcik for helping with the documentation.
 
-Libpng version 1.2.8beta5 - November 20, 2004:
+Libpng version 1.2.8rc1 - November 24, 2004:
 Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
-Currently maintained by Glenn Randers-Pehrson (glennrp@users.sourceforge.net).
+Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
 
 Supported by the PNG development group
 .br
-png-implement@ccrc.wustl.edu (subscription required; write to
-majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message).
+png-implement at ccrc.wustl.edu (subscription required; write to
+majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message).
 
 .SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
 
@@ -3913,7 +3915,7 @@
 If you modify libpng you may insert additional notices immediately following
 this sentence.
 
-libpng version 1.2.6, November 20, 2004, is
+libpng version 1.2.6, November 24, 2004, is
 Copyright (c) 2004 Glenn Randers-Pehrson, and is
 distributed according to the same disclaimer and license as libpng-1.2.5
 with the following individual added to the list of Contributing Authors
@@ -4011,8 +4013,8 @@
 certification mark of the Open Source Initiative.
 
 Glenn Randers-Pehrson
-glennrp@users.sourceforge.net
-November 20, 2004
+glennrp at users.sourceforge.net
+November 24, 2004
 
 .\" end of man page
 
diff --git a/libpng.txt b/libpng.txt
index 2c49a71..dbf5c08 100644
--- a/libpng.txt
+++ b/libpng.txt
@@ -1,8 +1,8 @@
 libpng.txt - A description on how to use and modify libpng
 
- libpng version 1.2.8beta5 - November 20, 2004
+ libpng version 1.2.8rc1 - November 24, 2004
  Updated and distributed by Glenn Randers-Pehrson
- <glennrp@users.sourceforge.net>
+ <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2004 Glenn Randers-Pehrson
  For conditions of distribution and use, see copyright
  notice in png.h.
@@ -923,7 +923,7 @@
 
 The default values approximate those recommended in the Charles
 Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
-Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net
+Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
 
     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
 
@@ -2904,13 +2904,13 @@
 
 IX. Y2K Compliance in libpng
 
-November 20, 2004
+November 24, 2004
 
 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.2.8beta5 are Y2K compliant.  It is my belief that earlier
+upward through 1.2.8rc1 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 that
diff --git a/libpngpf.3 b/libpngpf.3
index 7a4b247..25e40c6 100644
--- a/libpngpf.3
+++ b/libpngpf.3
@@ -1,6 +1,6 @@
-.TH LIBPNGPF 3 "November 20, 2004"
+.TH LIBPNGPF 3 "November 24, 2004"
 .SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8beta5
+libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc1
 (private functions)
 .SH SYNOPSIS
 \fB\fB#include <png.h>\fP\fP
@@ -827,7 +827,7 @@
 
 \fI\fB
 
-\fB\fBint png_set_text_2 (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_textp \fP\fI\fP\fItext_ptr\fP\fB\fP\fB, int \fI\fInum_text)\fP\fB\fP\fB);\fP\fP
+\fB\fBint png_set_text_2 (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_textp \fP\fI\fP\fItext_ptr\fP\fB\fP\fB, int \fI\fInum_text\fP\fB\fP\fB);\fP\fP
 
 \fI\fB
 
@@ -939,7 +939,7 @@
 
 \fI\fB
 
-\fB\fBvoid png_write_iTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, int \fP\fI\fP\fIcompression\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charp \fP\fI\fP\fIlang\fP\fB\fP\fB, png_charp \fP\fI\fP\fItranslated_key\fP\fB\fP\fB, png_charp \fI\fItext)\fP\fB\fP\fB);\fP\fP
+\fB\fBvoid png_write_iTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, int \fP\fI\fP\fIcompression\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charp \fP\fI\fP\fIlang\fP\fB\fP\fB, png_charp \fP\fI\fP\fItranslated_key\fP\fB\fP\fB, png_charp \fI\fItext\fP\fB\fP\fB);\fP\fP
 
 \fI\fB
 
diff --git a/png.5 b/png.5
index b357936..2eb7aed 100644
--- a/png.5
+++ b/png.5
@@ -1,4 +1,4 @@
-.TH PNG 5 "November 20, 2004"
+.TH PNG 5 "November 24, 2004"
 .SH NAME
 png \- Portable Network Graphics (PNG) format
 .SH DESCRIPTION
diff --git a/png.c b/png.c
index 2c32b33..70a350d 100644
--- a/png.c
+++ b/png.c
@@ -1,7 +1,7 @@
 
 /* png.c - location for general purpose libpng functions
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -13,7 +13,7 @@
 #include "png.h"
 
 /* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_8beta5 Your_png_h_is_not_version_1_2_8beta5;
+typedef version_1_2_8rc1 Your_png_h_is_not_version_1_2_8rc1;
 
 /* Version information for C files.  This had better match the version
  * string defined in png.h.  */
@@ -680,7 +680,7 @@
 png_get_copyright(png_structp png_ptr)
 {
    if (&png_ptr != NULL)  /* silence compiler warning about unused png_ptr */
-   return ((png_charp) "\n libpng version 1.2.8beta5 - November 20, 2004\n\
+   return ((png_charp) "\n libpng version 1.2.8rc1 - November 24, 2004\n\
    Copyright (c) 1998-2004 Glenn Randers-Pehrson\n\
    Copyright (c) 1996-1997 Andreas Dilger\n\
    Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n");
diff --git a/png.h b/png.h
index 452a1a4..28afc58 100644
--- a/png.h
+++ b/png.h
@@ -1,6 +1,6 @@
 /* png.h - header file for PNG reference library
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@@ -8,7 +8,7 @@
  * Authors and maintainers:
  *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
  *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- *  libpng versions 0.97, January 1998, through 1.2.8beta5 - November 20, 2004: Glenn
+ *  libpng versions 0.97, January 1998, through 1.2.8rc1 - November 24, 2004: Glenn
  *  See also "Contributing Authors", below.
  *
  * Note about libpng version numbers:
@@ -107,6 +107,8 @@
  *    1.0.17                  10    10017  12.so.0.1.0.17
  *    1.2.7                   13    10207  12.so.0.1.2.7
  *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
+ *    1.0.18rc1               10    10018  12.so.0.1.0.18rc1
+ *    1.2.8rc1                13    10208  12.so.0.1.2.8rc1
  *
  *    Henceforth the source version will match the shared-library major
  *    and minor numbers; the shared-library major version number will be
@@ -136,7 +138,7 @@
  * If you modify libpng you may insert additional notices immediately following
  * this sentence.
  *
- * libpng versions 1.2.6, August 15, 2004, through 1.2.8beta5, November 20, 2004, are
+ * libpng versions 1.2.6, August 15, 2004, through 1.2.8rc1, November 24, 2004, are
  * Copyright (c) 2004 Glenn Randers-Pehrson, and are
  * distributed according to the same disclaimer and license as libpng-1.2.5
  * with the following individual added to the list of Contributing Authors:
@@ -248,13 +250,13 @@
  * Y2K compliance in libpng:
  * =========================
  *
- *    November 20, 2004
+ *    November 24, 2004
  *
  *    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.2.8beta5 are Y2K compliant.  It is my belief that earlier
+ *    upward through 1.2.8rc1 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
@@ -310,9 +312,9 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.2.8beta5"
+#define PNG_LIBPNG_VER_STRING "1.2.8rc1"
 #define PNG_HEADER_VERSION_STRING \
-   " libpng version 1.2.8beta5 - November 20, 2004 (header)\n"
+   " libpng version 1.2.8rc1 - November 24, 2004 (header)\n"
 
 #define PNG_LIBPNG_VER_SONUM   0
 #define PNG_LIBPNG_VER_DLLNUM  13
@@ -324,7 +326,7 @@
 /* This should match the numeric part of the final component of
  * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
 
-#define PNG_LIBPNG_VER_BUILD  5
+#define PNG_LIBPNG_VER_BUILD  1
 
 /* Release Status */
 #define PNG_LIBPNG_BUILD_ALPHA    1
@@ -341,6 +343,8 @@
 #define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
                                        PNG_LIBPNG_BUILD_PRIVATE */
 
+#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_RC
+
 /* 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
@@ -349,13 +353,40 @@
 #define PNG_LIBPNG_VER 10208 /* 1.2.8 */
 
 #ifndef PNG_VERSION_INFO_ONLY
-
 /* include the compression library's header */
 #include "zlib.h"
+#endif
 
 /* include all user configurable info, including optional assembler routines */
 #include "pngconf.h"
 
+/*
+ * Added at libpng-1.2.8 */
+/* Ref MSDN: Private as priority over Special
+ * VS_FF_PRIVATEBUILD File *was not* built using standard release
+ * procedures. If this value is given, the StringFileInfo block must
+ * contain a PrivateBuild string. 
+ *
+ * VS_FF_SPECIALBUILD File *was* built by the original company using
+ * standard release procedures but is a variation of the standard
+ * file of the same version number. If this value is given, the
+ * StringFileInfo block must contain a SpecialBuild string. 
+ */
+
+#if defined(PNG_USER_PRIVATEBUILD)
+#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE |
+PNG_LIBPNG_BUILD_PRIVATE
+#else
+#  if defined(PNG_LIBPNG_SPECIALBUILD)
+#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE |
+     PNG_LIBPNG_BUILD_SPECIAL
+#  else
+#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE
+#  endif
+#endif
+
+#ifndef PNG_VERSION_INFO_ONLY
+
 /* Inhibit C++ name-mangling for libpng functions but not for system calls. */
 #ifdef __cplusplus
 extern "C" {
@@ -1323,7 +1354,7 @@
 /* This triggers a compiler error in png.c, if png.c and png.h
  * do not agree upon the version number.
  */
-typedef png_structp version_1_2_8beta5;
+typedef png_structp version_1_2_8rc1;
 
 typedef png_struct FAR * FAR * png_structpp;
 
diff --git a/pngconf.h b/pngconf.h
index 9b91d9b..1236b22 100644
--- a/pngconf.h
+++ b/pngconf.h
@@ -1,7 +1,7 @@
 
 /* pngconf.h - machine configurable file for libpng
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -17,13 +17,53 @@
 #ifndef PNGCONF_H
 #define PNGCONF_H
 
+#define PNG_1_2_X
+
+/* 
+ * PNG_USER_CONFIG has to be defined on the compiler command line. This
+ * includes the resource compiler for Windows DLL configurations.
+ */
 #ifdef PNG_USER_CONFIG
 #include "pngusr.h"
 #endif
-#define PNG_1_2_X
 
-/* Added at libpng-1.2.8 */
-#define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BETA
+/*
+ * Added at libpng-1.2.8
+ *  
+ * If you create a private DLL you need to define in "pngusr.h" the followings:
+ * #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
+ *        the DLL was built>
+ *  e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
+ * #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
+ *        distinguish your DLL from those of the official release. These
+ *        correspond to the trailing letters that come after the version
+ *        number and must match your private DLL name>
+ *  e.g. // private DLL "libpng13gx.dll"
+ *       #define PNG_USER_DLLFNAME_POSTFIX "gx"
+ * 
+ * The following macros are also at your disposal if you want to complete the 
+ * DLL VERSIONINFO structure.
+ * - PNG_USER_VERSIONINFO_COMMENTS
+ * - PNG_USER_VERSIONINFO_COMPANYNAME
+ * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
+ */
+
+#ifdef __STDC__
+#ifdef SPECIALBUILD
+#  pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\
+ are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.")
+#endif
+
+#ifdef PRIVATEBUILD
+# pragma message("PRIVATEBUILD is deprecated. Use\
+ PNG_USER_PRIVATEBUILD instead.")
+# define PNG_USER_PRIVATEBUILD PRIVATEBUILD
+#endif
+#endif /* __STDC__ */
+
+#ifndef PNG_VERSION_INFO_ONLY
+
+/* End of material added to libpng-1.2.8 */
 
 /* This is the size of the compression buffer, and thus the size of
  * an IDAT chunk.  Make this whatever size you feel is best for your
@@ -1125,6 +1165,9 @@
 /* Pointers to pointers to pointers; i.e., pointer to array */
 typedef char            FAR * FAR * FAR * png_charppp;
 
+#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
+/* SPC -  Is this stuff deprecated? */
+/* It'll be removed as of libpng-1.3.0 - GR-P */
 /* libpng typedefs for types in zlib. If zlib changes
  * or another compression library is used, then change these.
  * Eliminates need to change all the source files.
@@ -1132,6 +1175,7 @@
 typedef charf *         png_zcharp;
 typedef charf * FAR *   png_zcharpp;
 typedef z_stream FAR *  png_zstreamp;
+#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */
 
 /*
  * Define PNG_BUILD_DLL if the module being built is a Windows
@@ -1376,78 +1420,7 @@
 #endif /* PNG_INTERNAL */
 #endif /* PNG_READ_SUPPORTED */
 
-/*
- * Added at libpng-1.2.8
- *
- *  Can define PNG_LIBPNG_BUILD_TYPE using only the following:
- *             PNG_LIBPNG_BUILD_PRIVATE (including DLLFNAME_POSTFIX and
- *             PNG_LIBPNG_BUILD_PRIVATE_STRING)
- *
- * Ref MSDN
- * VS_FF_PRIVATEBUILD File was ****not built using standard release****
- * procedures. If this value is given, the StringFileInfo block must
- * contain a PrivateBuild string. 
- *
- * VS_FF_SPECIALBUILD File was built by the original company *****using
- * standard release procedures***** but is a variation of the standard
- * file of the same version number. If this value is given, the
- * StringFileInfo block must contain a SpecialBuild string. 
- */
-
-#ifndef PNG_LIBPNG_BUILD_TYPE
-#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE
-#else
-#  define PNG_LIBPNG_BUILD_TYPE_SAVE (PNG_LIBPNG_BUILD_TYPE & \
-     PNG_LIBPNG_BUILD_PRIVATE)
-#  undef PNG_LIBPNG_BUILD_TYPE
-#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \
-     PNG_LIBPNG_BUILD_TYPE_SAVE
-#  undef PNG_LIBPNG_BUILD_TYPE_SAVE
-#endif
-  
-#undef PNG_LIBPNG_BUILD_BASE_TYPE
-  
-/* Private as priority over Special */
-#if ((PNG_LIBPNG_BUILD_TYPE & (PNG_LIBPNG_BUILD_PRIVATE | \
-   PNG_LIBPNG_BUILD_SPECIAL)) == (PNG_LIBPNG_BUILD_PRIVATE | \
-   PNG_LIBPNG_BUILD_SPECIAL))
-#  define PNG_LIBPNG_BUILD_TYPE_SAVE PNG_LIBPNG_BUILD_TYPE
-#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_TYPE_SAVE & \
-     ~PNG_LIBPNG_BUILD_SPECIAL
-#  undef PNG_LIBPNG_BUILD_TYPE_SAVE
-#endif
-  
-/* Verify if PNG_LIBPNG_BUILD_PRIVATE_STRING is defined if PNG_LIBPNG_BUILD_PRIVATE is set */
-#if (PNG_LIBPNG_BUILD_TYPE & PNG_LIBPNG_BUILD_PRIVATE)
-  /*
-   * PRIVATEBUILD is deprecated. Use PNG_LIBPNG_BUILD_PRIVATE_STRING instead.
-   */
-# if defined(PRIVATEBUILD) && !defined(PNG_LIBPNG_BUILD_PRIVATE_STRING)
-#   define PNG_LIBPNG_BUILD_PRIVATE_STRING PRIVATEBUILD
-# else
-#   if !defined(PNG_LIBPNG_BUILD_PRIVATE_STRING)
-#     error "PNG_LIBPNG_BUILD_PRIVATE_STRING must be defined if \
-      PNG_LIBPNG_BUILD_PRIVATE set"
-#   endif
-# endif
-/* Verify if PNG_LIBPNG_BUILD_SPECIAL_STRING is defined \
-   if PNG_LIBPNG_BUILD_SPECIAL is set */
-#else
-#  if (PNG_LIBPNG_BUILD_TYPE & PNG_LIBPNG_BUILD_SPECIAL)
-     /*
-      * SPECIALBUILD is deprecated. Use PNG_LIBPNG_BUILD_SPECIAL_STRING instead.
-      */
-#    if defined(SPECIALBUILD) && !defined(PNG_LIBPNG_BUILD_SPECIAL_STRING)
-#      define PNG_LIBPNG_BUILD_SPECIAL_STRING SPECIALBUILD
-#    else
-#      if !defined(PNG_LIBPNG_BUILD_SPECIAL_STRING)
-#         error "PNG_LIBPNG_BUILD_SPECIAL_STRING must be defined \
-          if PNG_LIBPNG_BUILD_SPECIAL is set"
-#      endif
-#    endif
-#  endif
-#endif
-/* End of material added to libpng-1.2.8 */
+/* Added at libpng-1.2.8 */
+#endif /* PNG_VERSION_INFO_ONLY */
 
 #endif /* PNGCONF_H */
-
diff --git a/pngerror.c b/pngerror.c
index dcea107..f70b7fe 100644
--- a/pngerror.c
+++ b/pngerror.c
@@ -1,7 +1,7 @@
 
 /* pngerror.c - stub functions for i/o and memory allocation
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pnggccrd.c b/pnggccrd.c
index c20a870..c78fc71 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 version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * Copyright (c) 1998, Intel Corporation
@@ -4998,7 +4998,7 @@
       "jz up_end                    \n\t"
 
       "cmpl $8, %%edx               \n\t" // test for less than 8 bytes
-      "jb up_lt8                    \n\t" //  [added by lcreeve@netins.net]
+      "jb up_lt8                    \n\t" //  [added by lcreeve at netins.net]
 
       "addl %%edx, %%ecx            \n\t"
       "andl $0x00000007, %%edx      \n\t" // calc bytes over mult of 8
diff --git a/pngget.c b/pngget.c
index 41d36c5..c6ced8b 100644
--- a/pngget.c
+++ b/pngget.c
@@ -1,7 +1,7 @@
 
 /* pngget.c - retrieval of values from info struct
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngmem.c b/pngmem.c
index 3209f9e..377e576 100644
--- a/pngmem.c
+++ b/pngmem.c
@@ -1,7 +1,7 @@
 
 /* pngmem.c - stub functions for memory allocation
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngpread.c b/pngpread.c
index 3438c49..85c5ba5 100644
--- a/pngpread.c
+++ b/pngpread.c
@@ -1,7 +1,7 @@
 
 /* pngpread.c - read a png file in push mode
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngread.c b/pngread.c
index cb0094b..3d8d71f 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,7 +1,7 @@
 
 /* pngread.c - read a PNG file
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -805,7 +805,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.2.8beta5
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc1
  */
 
 void PNGAPI
@@ -855,7 +855,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.2.8beta5
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc1
  */
 void PNGAPI
 png_read_image(png_structp png_ptr, png_bytepp image)
diff --git a/pngrio.c b/pngrio.c
index 2b25809..a14070f 100644
--- a/pngrio.c
+++ b/pngrio.c
@@ -1,7 +1,7 @@
 
 /* pngrio.c - functions for data input
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngrtran.c b/pngrtran.c
index 37e82a7..064ffc9 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -1,7 +1,7 @@
 
 /* pngrtran.c - transforms the data in a row for PNG readers
  *
- * libpng version  1.2.8beta5 - November 20, 2004
+ * libpng version  1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -2104,7 +2104,7 @@
 /* reduce RGB files to grayscale, with or without alpha
  * using the equation given in Poynton's ColorFAQ at
  * <http://www.inforamp.net/~poynton/>
- * Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net
+ * Copyright (c) 1998-01-04 Charles Poynton poynton at inforamp.net
  *
  *     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
  *
diff --git a/pngrutil.c b/pngrutil.c
index 3ddb645..e740305 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -1,6 +1,6 @@
 /* pngrutil.c - utilities to read a PNG file
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -2260,59 +2260,46 @@
    }
    else
    {
+#if defined(PNG_READ_PACKSWAP_SUPPORTED)
+      static const png_byte bitrev[16] =
+         {0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
+          0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F};
+      static const png_byte lastbyte_mask_norm[8] =
+         {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE};
+      static const png_byte lastbyte_mask_swap[8] =
+         {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F};
+      const png_byte *lastbyte_mask =
+         (png_ptr->transformations & PNG_PACKSWAP) ?
+            lastbyte_mask_swap : lastbyte_mask_norm;
+#else
+      static const png_byte lastbyte_mask[8] =
+         {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE};
+#endif
       switch (png_ptr->row_info.pixel_depth)
       {
          case 1:
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
-            int s_inc, s_start, s_end;
-            int m = 0x80;
-            int shift;
             png_uint_32 i;
-            png_uint_32 row_width = png_ptr->width;
+            png_byte pixel_mask;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-            {
-                s_start = 0;
-                s_end = 7;
-                s_inc = 1;
-            }
-            else
+               mask = (bitrev[mask & 0x0F] << 4) | bitrev[(mask >> 4) & 0x0F];
 #endif
+            pixel_mask = (png_byte)mask;
+
+            for (i = png_ptr->width; i >= 8; i -= 8)
             {
-                s_start = 7;
-                s_end = 0;
-                s_inc = -1;
+               *dp = (*sp & pixel_mask) | (*dp & ~pixel_mask);
+               sp++;
+               dp++;
             }
-
-            shift = s_start;
-
-            for (i = 0; i < row_width; i++)
+            if (i > 0)
             {
-               if (m & mask)
-               {
-                  int value;
-
-                  value = (*sp >> shift) & 0x01;
-                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
-                  *dp |= (png_byte)(value << shift);
-               }
-
-               if (shift == s_end)
-               {
-                  shift = s_start;
-                  sp++;
-                  dp++;
-               }
-               else
-                  shift += s_inc;
-
-               if (m == 1)
-                  m = 0x80;
-               else
-                  m >>= 1;
+               pixel_mask &= lastbyte_mask[i];
+               *dp = (*sp & pixel_mask) | (*dp & ~pixel_mask);
             }
             break;
          }
@@ -2320,51 +2307,40 @@
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
-            int s_start, s_end, s_inc;
-            int m = 0x80;
-            int shift;
             png_uint_32 i;
-            png_uint_32 row_width = png_ptr->width;
-            int value;
+            png_byte pixel_mask[2];
+            int m = 0x80;
+            int j;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-            {
-               s_start = 0;
-               s_end = 6;
-               s_inc = 2;
-            }
-            else
+               mask = bitrev[mask & 0x0F] | (bitrev[(mask >> 4) & 0x0F] << 4);
 #endif
+            for (j = 0; j < 2; j++)
             {
-               s_start = 6;
-               s_end = 0;
-               s_inc = -2;
-            }
-
-            shift = s_start;
-
-            for (i = 0; i < row_width; i++)
-            {
-               if (m & mask)
+               pixel_mask[j] = 0;
+               for (i = 4; i > 0; i--)
                {
-                  value = (*sp >> shift) & 0x03;
-                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
-                  *dp |= (png_byte)(value << shift);
-               }
-
-               if (shift == s_end)
-               {
-                  shift = s_start;
-                  sp++;
-                  dp++;
-               }
-               else
-                  shift += s_inc;
-               if (m == 1)
-                  m = 0x80;
-               else
+                  pixel_mask[j] <<= 2;
+                  if (m & mask)
+                     pixel_mask[j] |= 0x03;
                   m >>= 1;
+               }
+            }
+            j = 0;
+            for (i = png_ptr->width; i >= 4; i -= 4)
+            {
+               if (pixel_mask[j] != 0)
+                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
+               sp++;
+               dp++;
+               j ^= 1;
+            }
+            if (i > 0)
+            {
+               pixel_mask[j] &= lastbyte_mask[i * 2];
+               if (pixel_mask[j] != 0)
+                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
             }
             break;
          }
@@ -2372,50 +2348,41 @@
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
-            int s_start, s_end, s_inc;
-            int m = 0x80;
-            int shift;
             png_uint_32 i;
-            png_uint_32 row_width = png_ptr->width;
-            int value;
+            png_byte pixel_mask[4];
+            int m = 0x80;
+            int j;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-            {
-               s_start = 0;
-               s_end = 4;
-               s_inc = 4;
-            }
-            else
+               mask = ((mask & 0x55) << 1) | ((mask & 0xAA) >> 1);
 #endif
+            for (j = 0; j < 4; j++)
             {
-               s_start = 4;
-               s_end = 0;
-               s_inc = -4;
-            }
-            shift = s_start;
-
-            for (i = 0; i < row_width; i++)
-            {
-               if (m & mask)
+               pixel_mask[j] = 0;
+               for (i = 2; i > 0; i--)
                {
-                  value = (*sp >> shift) & 0xf;
-                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
-                  *dp |= (png_byte)(value << shift);
-               }
-
-               if (shift == s_end)
-               {
-                  shift = s_start;
-                  sp++;
-                  dp++;
-               }
-               else
-                  shift += s_inc;
-               if (m == 1)
-                  m = 0x80;
-               else
+                  pixel_mask[j] <<= 4;
+                  if (m & mask)
+                     pixel_mask[j] |= 0x0F;
                   m >>= 1;
+               }
+            }
+            j = 0;
+            for (i = png_ptr->width; i >= 2; i -= 2)
+            {
+               if (pixel_mask[j] != 0)
+                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
+               sp++;
+               dp++;
+               j += 1;
+               j &= 3;
+            }
+            if (i > 0)
+            {
+               pixel_mask[j] &= lastbyte_mask[4];
+               if (pixel_mask[j] != 0)
+                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
             }
             break;
          }
@@ -2425,24 +2392,123 @@
             png_bytep dp = row;
             png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3);
             png_uint_32 i;
-            png_uint_32 row_width = png_ptr->width;
-            png_byte m = 0x80;
+            int m = 0x80;
 
-
-            for (i = 0; i < row_width; i++)
+            switch (pixel_bytes)
             {
-               if (m & mask)
-               {
-                  png_memcpy(dp, sp, pixel_bytes);
-               }
-
-               sp += pixel_bytes;
-               dp += pixel_bytes;
-
-               if (m == 1)
-                  m = 0x80;
-               else
-                  m >>= 1;
+               case 1:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                     }
+                     sp += 1;
+                     dp += 1;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               case 2:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                        *(dp + 1) = *(sp + 1);
+                     }
+                     sp += 2;
+                     dp += 2;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               case 3:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                        *(dp + 1) = *(sp + 1);
+                        *(dp + 2) = *(sp + 2);
+                     }
+                     sp += 3;
+                     dp += 3;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               case 4:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                        *(dp + 1) = *(sp + 1);
+                        *(dp + 2) = *(sp + 2);
+                        *(dp + 3) = *(sp + 3);
+                     }
+                     sp += 4;
+                     dp += 4;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               case 6:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                        *(dp + 1) = *(sp + 1);
+                        *(dp + 2) = *(sp + 2);
+                        *(dp + 3) = *(sp + 3);
+                        *(dp + 4) = *(sp + 4);
+                        *(dp + 5) = *(sp + 5);
+                     }
+                     sp += 6;
+                     dp += 6;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               case 8:
+                  for (i = png_ptr->width; i > 0; i--)
+                  {
+                     if (m & mask)
+                     {
+                        *(dp + 0) = *(sp + 0);
+                        *(dp + 1) = *(sp + 1);
+                        *(dp + 2) = *(sp + 2);
+                        *(dp + 3) = *(sp + 3);
+                        *(dp + 4) = *(sp + 4);
+                        *(dp + 5) = *(sp + 5);
+                        *(dp + 6) = *(sp + 6);
+                        *(dp + 7) = *(sp + 7);
+                     }
+                     sp += 8;
+                     dp += 8;
+                     if ((m >>= 1) == 0)
+                        m = 0x80;
+                  }
+                  break;
+               default:
+                /*for (i = png_ptr->width; i > 0; i--)
+                 *{
+                 *   if (m & mask)
+                 *   {
+                 *      png_size_t j;
+                 *      for (j = 0; j < pixel_bytes; j++)
+                 *      {
+                 *         *(dp + j) = *(sp + j);
+                 *      }
+                 *   }
+                 *   sp += pixel_bytes;
+                 *   dp += pixel_bytes;
+                 *   if ((m >>= 1) == 0)
+                 *      m = 0x80;
+                 *}
+                */break;
             }
             break;
          }
@@ -2471,122 +2537,101 @@
 #endif
 
    png_debug(1,"in png_do_read_interlace (stock C version)\n");
-   if (row != NULL && row_info != NULL)
+   if (row != NULL && row_info != NULL &&
+       pass < 6)
    {
-      png_uint_32 final_width;
-
-      final_width = row_info->width * png_pass_inc[pass];
+      png_uint_32 final_width = row_info->width * png_pass_inc[pass];
 
       switch (row_info->pixel_depth)
       {
          case 1:
          {
+            static const png_byte pixeltable1[24] =
+               {0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0xFF,
+                0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F,
+                0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF};
             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
             png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
-            png_byte v;
+            int nbits = 8 / png_pass_inc[pass];
+            int sshift = 7 - (int)((row_info->width + 7) & 0x07);
+            int s_inc = nbits;
+            png_byte smask = (1 << nbits) - 1;
+            const png_byte *pix = pixeltable1 + (2 * nbits);
             png_uint_32 i;
-            int j;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-                sshift = (int)((row_info->width + 7) & 0x07);
-                dshift = (int)((final_width + 7) & 0x07);
-                s_start = 7;
-                s_end = 0;
-                s_inc = -1;
+                sshift = 7 - sshift;
+                s_inc = -s_inc;
             }
-            else
 #endif
-            {
-                sshift = 7 - (int)((row_info->width + 7) & 0x07);
-                dshift = 7 - (int)((final_width + 7) & 0x07);
-                s_start = 0;
-                s_end = 7;
-                s_inc = 1;
-            }
+            sshift &= (0x10 - nbits);
 
-            for (i = 0; i < row_info->width; i++)
+            for (i = (row_info->width + nbits - 1) / nbits;
+                 i > 0; i--)
             {
-               v = (png_byte)((*sp >> sshift) & 0x01);
-               for (j = 0; j < jstop; j++)
+               *dp-- = pix[(*sp >> sshift) & smask];
+
+               sshift += s_inc;
+               if (sshift >= 8)
                {
-                  *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
-                  *dp |= (png_byte)(v << dshift);
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-                  else
-                     dshift += s_inc;
-               }
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
+                  sshift -= 8;
                   sp--;
                }
-               else
-                  sshift += s_inc;
+               else if (sshift < 0)
+               {
+                  sshift += 8;
+                  sp--;
+               }
             }
             break;
          }
          case 2:
          {
-            png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
-            png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
+            static const png_byte pixeltable2[20] =
+               {0x00, 0x55, 0xAA, 0xFF,
+                0x00, 0x05, 0x0A, 0x0F, 0x50, 0x55, 0x5A, 0x5F,
+                0xA0, 0xA5, 0xAA, 0xAF, 0xF0, 0xF5, 0xFA, 0xFF};
+            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 2);
+            png_bytep dp = row + (png_size_t)((final_width - 1) >> 2);
+            int is2 = (png_pass_inc[pass] == 2);
+            int is8 = (png_pass_inc[pass] == 8);
+            int sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
+            int s_inc = 2 << is2;
+            png_byte smask = (4 << (2 * is2)) - 1;
+            const png_byte *pix = pixeltable2 + (4 * is2);
             png_uint_32 i;
+            png_byte v;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-               sshift = (int)(((row_info->width + 3) & 0x03) << 1);
-               dshift = (int)(((final_width + 3) & 0x03) << 1);
-               s_start = 6;
-               s_end = 0;
-               s_inc = -2;
+               sshift = 6 - sshift;
+               s_inc = -s_inc;
             }
-            else
 #endif
-            {
-               sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
-               dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
-               s_start = 0;
-               s_end = 6;
-               s_inc = 2;
-            }
+            sshift &= (0x0E - (2 * is2));
 
-            for (i = 0; i < row_info->width; i++)
+            for (i = (row_info->width + is2) >> is2;
+                 i > 0; i--)
             {
-               png_byte v;
-               int j;
+               v = pix[(*sp >> sshift) & smask];
+               *dp-- = v;
+               if (is8)
+                  *dp-- = v;
 
-               v = (png_byte)((*sp >> sshift) & 0x03);
-               for (j = 0; j < jstop; j++)
+               sshift += s_inc;
+               if (sshift >= 8)
                {
-                  *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
-                  *dp |= (png_byte)(v << dshift);
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-                  else
-                     dshift += s_inc;
-               }
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
+                  sshift -= 8;
                   sp--;
                }
-               else
-                  sshift += s_inc;
+               else if (sshift < 0)
+               {
+                  sshift += 8;
+                  sp--;
+               }
             }
             break;
          }
@@ -2594,54 +2639,39 @@
          {
             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
             png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
+            int jinit = png_pass_inc[pass] >> 1;
+            int sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
+            int s_inc = 4;
             png_uint_32 i;
-            int jstop = png_pass_inc[pass];
+            png_byte v;
+            int j;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-               sshift = (int)(((row_info->width + 1) & 0x01) << 2);
-               dshift = (int)(((final_width + 1) & 0x01) << 2);
-               s_start = 4;
-               s_end = 0;
-               s_inc = -4;
+               sshift = 4 - sshift;
+               s_inc = -s_inc;
             }
-            else
 #endif
+            for (i = row_info->width; i > 0; i--)
             {
-               sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
-               dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
-               s_start = 0;
-               s_end = 4;
-               s_inc = 4;
-            }
+               v = (*sp >> sshift) & 0x0F;
+               v |= v << 4;
 
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v = (png_byte)((*sp >> sshift) & 0xf);
-               int j;
+               for (j = jinit; j > 0; j--)
+                  *dp-- = v;
 
-               for (j = 0; j < jstop; j++)
+               sshift += s_inc;
+               if (sshift >= 8)
                {
-                  *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
-                  *dp |= (png_byte)(v << dshift);
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-                  else
-                     dshift += s_inc;
-               }
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
+                  sshift -= 8;
                   sp--;
                }
-               else
-                  sshift += s_inc;
+               else if (sshift < 0)
+               {
+                  sshift += 8;
+                  sp--;
+               }
             }
             break;
          }
@@ -2649,23 +2679,112 @@
          {
             png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
             png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes;
-            png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
-
-            int jstop = png_pass_inc[pass];
+            png_bytep dp = row + (png_size_t)(final_width - 2) * pixel_bytes;
+            int jinit = png_pass_inc[pass] >> 1;
             png_uint_32 i;
+            int j;
 
-            for (i = 0; i < row_info->width; i++)
+            switch (pixel_bytes)
             {
-               png_byte v[8];
-               int j;
-
-               png_memcpy(v, sp, pixel_bytes);
-               for (j = 0; j < jstop; j++)
-               {
-                  png_memcpy(dp, v, pixel_bytes);
-                  dp -= pixel_bytes;
-               }
-               sp -= pixel_bytes;
+               case 1:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp + 1) = *(sp + 0);
+                        dp -= 2;
+                     }
+                     sp -= 1;
+                  }
+                  break;
+               case 2:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp + 2) = *(sp + 0);
+                        *(dp + 1) = *(dp + 3) = *(sp + 1);
+                        dp -= 4;
+                     }
+                     sp -= 2;
+                  }
+                  break;
+               case 3:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp + 3) = *(sp + 0);
+                        *(dp + 1) = *(dp + 4) = *(sp + 1);
+                        *(dp + 2) = *(dp + 5) = *(sp + 2);
+                        dp -= 6;
+                     }
+                     sp -= 3;
+                  }
+                  break;
+               case 4:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp + 4) = *(sp + 0);
+                        *(dp + 1) = *(dp + 5) = *(sp + 1);
+                        *(dp + 2) = *(dp + 6) = *(sp + 2);
+                        *(dp + 3) = *(dp + 7) = *(sp + 3);
+                        dp -= 8;
+                     }
+                     sp -= 4;
+                  }
+                  break;
+               case 6:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp +  6) = *(sp + 0);
+                        *(dp + 1) = *(dp +  7) = *(sp + 1);
+                        *(dp + 2) = *(dp +  8) = *(sp + 2);
+                        *(dp + 3) = *(dp +  9) = *(sp + 3);
+                        *(dp + 4) = *(dp + 10) = *(sp + 4);
+                        *(dp + 5) = *(dp + 11) = *(sp + 5);
+                        dp -= 12;
+                     }
+                     sp -= 6;
+                  }
+                  break;
+               case 8:
+                  for (i = row_info->width; i > 0; i--)
+                  {
+                     for (j = jinit; j > 0; j--)
+                     {
+                        *(dp + 0) = *(dp +  8) = *(sp + 0);
+                        *(dp + 1) = *(dp +  9) = *(sp + 1);
+                        *(dp + 2) = *(dp + 10) = *(sp + 2);
+                        *(dp + 3) = *(dp + 11) = *(sp + 3);
+                        *(dp + 4) = *(dp + 12) = *(sp + 4);
+                        *(dp + 5) = *(dp + 13) = *(sp + 5);
+                        *(dp + 6) = *(dp + 14) = *(sp + 6);
+                        *(dp + 7) = *(dp + 15) = *(sp + 7);
+                        dp -= 16;
+                     }
+                     sp -= 8;
+                  }
+                  break;
+               default:
+                /*for (i = row_info->width; i > 0; i--)
+                 *{
+                 *   for (j = jinit; j > 0; j--)
+                 *   {
+                 *      png_size_t k;
+                 *      for (k = 0; k < pixel_bytes; k++)
+                 *      {
+                 *         *(dp + pixel_bytes + k) = *(dp + k) = *(sp + k);
+                 *      }
+                 *      dp -= (2 * pixel_bytes);
+                 *   }
+                 *   sp -= pixel_bytes;
+                 *}
+                */break;
             }
             break;
          }
diff --git a/pngset.c b/pngset.c
index 5bc600d..a4ebd17 100644
--- a/pngset.c
+++ b/pngset.c
@@ -1,7 +1,7 @@
 
 /* pngset.c - storage of image information into info struct
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngtest.c b/pngtest.c
index c6a60dd..06c7691 100644
--- a/pngtest.c
+++ b/pngtest.c
@@ -1,7 +1,7 @@
 
 /* pngtest.c - a simple test program to test libpng
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -1551,4 +1551,4 @@
 }
 
 /* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_8beta5 your_png_h_is_not_version_1_2_8beta5;
+typedef version_1_2_8rc1 your_png_h_is_not_version_1_2_8rc1;
diff --git a/pngtrans.c b/pngtrans.c
index a82e29a..b513fe4 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.2.8beta5 - November 20, 2004
+ * libpng  1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngvcrd.c b/pngvcrd.c
index 24317d2..a7d1684 100644
--- a/pngvcrd.c
+++ b/pngvcrd.c
@@ -2,7 +2,7 @@
  *
  * For Intel x86 CPU and Microsoft Visual C++ compiler
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * Copyright (c) 1998, Intel Corporation
@@ -3632,7 +3632,7 @@
       jz dupend
 
 
-      // 2 lines added by lcreeve@netins.net
+      // 2 lines added by lcreeve at netins.net
       // (mail 11 Jul 98 in png-implement list)
       cmp edx, 8 //test for less than 8 bytes
       jb duplt8
diff --git a/pngwio.c b/pngwio.c
index 2c63025..42fb369 100644
--- a/pngwio.c
+++ b/pngwio.c
@@ -1,7 +1,7 @@
 
 /* pngwio.c - functions for data output
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwrite.c b/pngwrite.c
index 4b7c666..d5dceae 100644
--- a/pngwrite.c
+++ b/pngwrite.c
@@ -1,7 +1,7 @@
 
 /* pngwrite.c - general routines to write a PNG file
  *
- * libpng 1.2.8beta5 - November 20, 2004
+ * libpng 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwtran.c b/pngwtran.c
index 89ab60b..028e53d 100644
--- a/pngwtran.c
+++ b/pngwtran.c
@@ -1,7 +1,7 @@
 
 /* pngwtran.c - transforms the data in a row for PNG writers
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwutil.c b/pngwutil.c
index c634f77..f8e1ab1 100644
--- a/pngwutil.c
+++ b/pngwutil.c
@@ -1,7 +1,7 @@
 
 /* pngwutil.c - utilities to write a PNG file
  *
- * libpng version 1.2.8beta5 - November 20, 2004
+ * libpng version 1.2.8rc1 - November 24, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/projects/visualc6/README.txt b/projects/visualc6/README.txt
index ccd7b98..d34980d 100644
--- a/projects/visualc6/README.txt
+++ b/projects/visualc6/README.txt
@@ -46,19 +46,9 @@
 
 If you change anything in the source files, or select different compiler
 settings, please change the DLL name to something different than any of
-the above names.
-
-Also, make sure that DLLFNAME_POSTFIX and (PNG_LIBPNG_BUILD_PRIVATE_STRING
-or PNG_LIBPNG_BUILD_SPECIAL_STRING) are defined and that PNG_LIBPNG_BUILD_TYPE
-has either the PNG_LIBPNG_BUILD_SPECIAL or PNG_LIBPNG_BUILD_PRIVATE flag
-set when compiling the resource file.  DLLFNAME_POSTFIX contains
-the trailing letters that come after the version number.
-PNG_LIBPNG_BUILD_PRIVATE_STRING and/or PNG_LIBPNG_BUILD_SPECIAL_STRING store
-information describing the type of change made
-in the VERSIONINFO structure.  Please refer to MSDN for more information
-on the used macros and the nature of their content.  For an example on
-how to define these macros, look at the resource compiler settings for
-the "Win32 DLL VB" configuration.
+the above names. Also, make sure that in your "pngusr.h" you define
+PNG_USER_PRIVATEBUILD and PNG_USER_DLLFNAME_POSTFIX according to the
+instructions provided in "pngconf.h".
 
 All DLLs built by this project use the Microsoft dynamic C runtime library
 MSVCRT.DLL (MSVCRTD.DLL for debug versions).  If you distribute any of the
diff --git a/projects/visualc6/libpng.dsp b/projects/visualc6/libpng.dsp
index 73a3766..1992c2b 100644
--- a/projects/visualc6/libpng.dsp
+++ b/projects/visualc6/libpng.dsp
@@ -8,16 +8,16 @@
 CFG=libpng - Win32 DLL Release
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
-!MESSAGE 
+!MESSAGE
 !MESSAGE NMAKE /f "libpng.mak".
-!MESSAGE 
+!MESSAGE
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
+!MESSAGE
 !MESSAGE NMAKE /f "libpng.mak" CFG="libpng - Win32 DLL Release"
-!MESSAGE 
+!MESSAGE
 !MESSAGE Possible choices for configuration are:
-!MESSAGE 
+!MESSAGE
 !MESSAGE "libpng - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
 !MESSAGE "libpng - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
 !MESSAGE "libpng - Win32 DLL ASM Release" (based on "Win32 (x86) Dynamic-Link Library")
@@ -27,7 +27,7 @@
 !MESSAGE "libpng - Win32 LIB Debug" (based on "Win32 (x86) Static Library")
 !MESSAGE "libpng - Win32 LIB ASM Release" (based on "Win32 (x86) Static Library")
 !MESSAGE "libpng - Win32 LIB ASM Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
+!MESSAGE
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
@@ -112,14 +112,14 @@
 CPP=cl.exe
 # ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
 # SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_USE_PNGVCRD" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_USE_PNGVCRD" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /D "PNG_LIBPNG_SPECIALBUILD" /FD /c
 # SUBTRACT CPP /YX /Yc /Yu
 MTL=midl.exe
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 RSC=rc.exe
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /i "..\.." /d "NDEBUG" /d "PNG_USE_PNGVCRD"
+# ADD RSC /l 0x409 /i "..\.." /d "NDEBUG" /d PNG_LIBPNG_SPECIALBUILD=""""Use MMX instructions""""
 BSC32=bscmake.exe
 # ADD BASE BSC32 /nologo
 # ADD BSC32 /nologo
@@ -143,14 +143,14 @@
 CPP=cl.exe
 # ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
 # SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "DEBUG" /D PNG_DEBUG=1 /D "PNG_USE_PNGVCRD" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "DEBUG" /D PNG_DEBUG=1 /D "PNG_USE_PNGVCRD" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /D "PNG_LIBPNG_SPECIALBUILD" /FD /GZ /c
 # SUBTRACT CPP /YX /Yc /Yu
 MTL=midl.exe
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 RSC=rc.exe
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /i "..\.." /d "_DEBUG" /d PNG_DEBUG=1 /d "PNG_USE_PNGVCRD"
+# ADD RSC /l 0x409 /i "..\.." /d "_DEBUG" /d PNG_DEBUG=1 /d PNG_LIBPNG_SPECIALBUILD=""""Use MMX instructions""""
 BSC32=bscmake.exe
 # ADD BASE BSC32 /nologo
 # ADD BSC32 /nologo
@@ -174,14 +174,14 @@
 CPP=cl.exe
 # ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
 # SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /D PNGAPI=__stdcall /D "PNG_NO_MODULEDEF" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_BUILD_DLL" /D "ZLIB_DLL" /D PNGAPI=__stdcall /D "PNG_NO_MODULEDEF" /D "PNG_LIBPNG_SPECIALBUILD" /FD /c
 # SUBTRACT CPP /YX /Yc /Yu
 MTL=midl.exe
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 RSC=rc.exe
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /i "..\.." /d "NDEBUG" /dDLLFNAME_POSTFIX=""""VB"""" /dSPECIALBUILD=""""__stdcall calling convention used for exported functions""""
+# ADD RSC /l 0x409 /i "..\.." /d "NDEBUG" /dPNG_LIBPNG_DLLFNAME_POSTFIX=""""VB"""" /dPNG_LIBPNG_SPECIALBUILD=""""__stdcall calling convention used for exported functions""""
 BSC32=bscmake.exe
 # ADD BASE BSC32 /nologo
 # ADD BSC32 /nologo
@@ -264,7 +264,7 @@
 CPP=cl.exe
 # ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
 # SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_USE_PNGVCRD" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_USE_PNGVCRD" /D "PNG_LIBPNG_SPECIALBUILD" /FD /c
 # SUBTRACT CPP /YX /Yc /Yu
 RSC=rc.exe
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -291,7 +291,7 @@
 CPP=cl.exe
 # ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
 # SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "DEBUG" /D PNG_DEBUG=1 /D "PNG_USE_PNGVCRD" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "DEBUG" /D PNG_DEBUG=1 /D "PNG_USE_PNGVCRD" /D "PNG_LIBPNG_SPECIALBUILD" /FD /GZ /c
 # SUBTRACT CPP /YX /Yc /Yu
 RSC=rc.exe
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -303,7 +303,7 @@
 # ADD BASE LIB32 /nologo
 # ADD LIB32 /nologo /out:"Win32_LIB_ASM_Debug\libpngd.lib"
 
-!ENDIF 
+!ENDIF
 
 # Begin Target
 
@@ -395,7 +395,7 @@
 
 !ELSEIF  "$(CFG)" == "libpng - Win32 LIB ASM Debug"
 
-!ENDIF 
+!ENDIF
 
 # End Source File
 # Begin Source File
@@ -430,7 +430,7 @@
 
 # PROP Exclude_From_Build 1
 
-!ENDIF 
+!ENDIF
 
 # End Source File
 # Begin Source File
@@ -495,7 +495,7 @@
 
 # PROP Exclude_From_Build 1
 
-!ENDIF 
+!ENDIF
 
 # End Source File
 # End Group
diff --git a/scripts/libpng-config-head.in b/scripts/libpng-config-head.in
index c9866e2..cc66754 100755
--- a/scripts/libpng-config-head.in
+++ b/scripts/libpng-config-head.in
@@ -8,7 +8,7 @@
 
 # Modeled after libxml-config.
 
-version=1.2.8beta5
+version=1.2.8rc1
 prefix=""
 libdir=""
 libs=""
diff --git a/scripts/libpng.pc.in b/scripts/libpng.pc.in
index 4f4b513..900bdeb 100644
--- a/scripts/libpng.pc.in
+++ b/scripts/libpng.pc.in
@@ -6,6 +6,6 @@
 
 Name: libpng12
 Description: Loads and saves PNG files
-Version: 1.2.8beta5
+Version: 1.2.8rc1
 Libs: -L${libdir} -lpng12 -lz -lm
 Cflags: -I${includedir}/libpng12
diff --git a/scripts/makefile.32sunu b/scripts/makefile.32sunu
index 3b9239b..af0a8dc 100644
--- a/scripts/makefile.32sunu
+++ b/scripts/makefile.32sunu
@@ -33,7 +33,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 INCPATH=$(prefix)/include
diff --git a/scripts/makefile.64sunu b/scripts/makefile.64sunu
index 44e24c0..4a706ee 100644
--- a/scripts/makefile.64sunu
+++ b/scripts/makefile.64sunu
@@ -33,7 +33,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 INCPATH=$(prefix)/include
diff --git a/scripts/makefile.aix b/scripts/makefile.aix
index 9436390..8ae6491 100644
--- a/scripts/makefile.aix
+++ b/scripts/makefile.aix
@@ -18,7 +18,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 prefix=/usr/local
diff --git a/scripts/makefile.beos b/scripts/makefile.beos
index c7a361f..8a7dac3 100644
--- a/scripts/makefile.beos
+++ b/scripts/makefile.beos
@@ -12,7 +12,7 @@
 ZLIBINC=/usr/local/include
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 ALIGN=
diff --git a/scripts/makefile.cygwin b/scripts/makefile.cygwin
index 39da78c..cfc7a51 100644
--- a/scripts/makefile.cygwin
+++ b/scripts/makefile.cygwin
@@ -79,7 +79,7 @@
 LIBNAME = libpng12
 PNGMAJ = 0
 CYGDLL = 12
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 SHAREDLIB=cygpng$(CYGDLL).dll
diff --git a/scripts/makefile.darwin b/scripts/makefile.darwin
index c35ec4c..c20e637 100644
--- a/scripts/makefile.darwin
+++ b/scripts/makefile.darwin
@@ -23,7 +23,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.dec b/scripts/makefile.dec
index f689cf4..0218989 100644
--- a/scripts/makefile.dec
+++ b/scripts/makefile.dec
@@ -32,7 +32,7 @@
 ZLIBINC=../zlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.gcmmx b/scripts/makefile.gcmmx
index c61e681..c49a7c7 100644
--- a/scripts/makefile.gcmmx
+++ b/scripts/makefile.gcmmx
@@ -15,7 +15,7 @@
 
 LIBNAME = libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 CC=gcc
diff --git a/scripts/makefile.hp64 b/scripts/makefile.hp64
index 8d553be..1532005 100644
--- a/scripts/makefile.hp64
+++ b/scripts/makefile.hp64
@@ -27,7 +27,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.hpgcc b/scripts/makefile.hpgcc
index d78a7e2..ead25b2 100644
--- a/scripts/makefile.hpgcc
+++ b/scripts/makefile.hpgcc
@@ -41,7 +41,7 @@
 #RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.hpux b/scripts/makefile.hpux
index d82fdf1..3e7e49e 100644
--- a/scripts/makefile.hpux
+++ b/scripts/makefile.hpux
@@ -24,7 +24,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.linux b/scripts/makefile.linux
index 8bfbd7d..d119d89 100644
--- a/scripts/makefile.linux
+++ b/scripts/makefile.linux
@@ -5,7 +5,7 @@
 
 LIBNAME = libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 CC=gcc
diff --git a/scripts/makefile.ne12bsd b/scripts/makefile.ne12bsd
index bde126d..2b594f4 100644
--- a/scripts/makefile.ne12bsd
+++ b/scripts/makefile.ne12bsd
@@ -13,7 +13,7 @@
 
 LIB=	png12
 SHLIB_MAJOR=	0
-SHLIB_MINOR=	1.2.8beta5
+SHLIB_MINOR=	1.2.8rc1
 SRCS=	pnggccrd.c png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
 		pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
 		pngwtran.c pngmem.c pngerror.c pngpread.c
diff --git a/scripts/makefile.netbsd b/scripts/makefile.netbsd
index 6b909b7..fc6ba1f 100644
--- a/scripts/makefile.netbsd
+++ b/scripts/makefile.netbsd
@@ -13,7 +13,7 @@
 
 LIB=	png
 SHLIB_MAJOR=	3
-SHLIB_MINOR=	1.2.8beta5
+SHLIB_MINOR=	1.2.8rc1
 SRCS=	pnggccrd.c png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
 		pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
 		pngwtran.c pngmem.c pngerror.c pngpread.c
diff --git a/scripts/makefile.openbsd b/scripts/makefile.openbsd
index 70ed873..b4cd102 100644
--- a/scripts/makefile.openbsd
+++ b/scripts/makefile.openbsd
@@ -7,7 +7,7 @@
 MANDIR= ${PREFIX}/man/cat
 
 SHLIB_MAJOR=	0
-SHLIB_MINOR=	1.2.8beta5
+SHLIB_MINOR=	1.2.8rc1
 
 LIB=	png
 SRCS=	png.c pngerror.c pnggccrd.c pngget.c pngmem.c pngpread.c \
diff --git a/scripts/makefile.sco b/scripts/makefile.sco
index 5454195..933139c 100644
--- a/scripts/makefile.sco
+++ b/scripts/makefile.sco
@@ -24,7 +24,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.sggcc b/scripts/makefile.sggcc
index a26e723..38b4b36 100644
--- a/scripts/makefile.sggcc
+++ b/scripts/makefile.sggcc
@@ -18,7 +18,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 CC=gcc
 
diff --git a/scripts/makefile.sgi b/scripts/makefile.sgi
index 486415c..9c2667d 100644
--- a/scripts/makefile.sgi
+++ b/scripts/makefile.sgi
@@ -5,7 +5,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 # Where make install puts libpng.a, libpng12.so, and libpng12/png.h
diff --git a/scripts/makefile.so9 b/scripts/makefile.so9
index 5812bd5..0f72be7 100644
--- a/scripts/makefile.so9
+++ b/scripts/makefile.so9
@@ -34,7 +34,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.solaris b/scripts/makefile.solaris
index d8dbf2a..8f77692 100644
--- a/scripts/makefile.solaris
+++ b/scripts/makefile.solaris
@@ -30,7 +30,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8beta5
+PNGMIN = 1.2.8rc1
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/pngos2.def b/scripts/pngos2.def
index 1713ff1..38c6ab3 100644
--- a/scripts/pngos2.def
+++ b/scripts/pngos2.def
@@ -2,7 +2,7 @@
 ; PNG.LIB module definition file for OS/2
 ;----------------------------------------
 
-; Version 1.2.8beta5
+; Version 1.2.8rc1
 
 LIBRARY		PNG
 DESCRIPTION	"PNG image compression library for OS/2"
diff --git a/scripts/pngw32.def b/scripts/pngw32.def
index 73bb006..32bc09e 100644
--- a/scripts/pngw32.def
+++ b/scripts/pngw32.def
@@ -6,7 +6,7 @@
 DESCRIPTION "PNG image compression library for Windows"
 
 EXPORTS
-;Version 1.2.8beta5
+;Version 1.2.8rc1
   png_build_grayscale_palette  @1
   png_check_sig        @2
   png_chunk_error      @3
diff --git a/scripts/pngw32.rc b/scripts/pngw32.rc
index 0e2f3f3..0fab587 100644
--- a/scripts/pngw32.rc
+++ b/scripts/pngw32.rc
@@ -8,64 +8,68 @@
 
 #define PNG_LIBPNG_DLLFNAME "LIBPNG"
 
-#if defined(DLLFNAME_POSTFIX) && !defined(PNG_LIBPNG_BUILD_PRIVATE_STRING) && \
-    !defined(PNG_LIBPNG_BUILD_SPECIAL_STRING)
-#  error PNG_LIBPNG_BUILD_PRIVATE_STRING or PNG_LIBPNG_BUILD_SPECIAL_STRING \
-must be defined as a string describing the type of change brought to the \
-standard library
-#endif /* defined(DLLFNAME_POSTFIX)... */
+/* Support deprecated PRIVATEBUILD macro */
+#if defined(PRIVATEBUILD) && !defined(PNG_USER_PRIVATEBUILD)
+#  define PNG_USER_PRIVATEBUILD PRIVATEBUILD
+#endif
 
-#if defined(PNG_USE_PNGVCRD)
-#  if !(PNG_LIBPNG_BUILD_TYPE & PNG_LIBPNG_BUILD_SPECIAL)
-#    define PNG_LIBPNG_BUILD_TYPE_SAVE PNG_LIBPNG_BUILD_TYPE
-#    undef PNG_LIBPNG_BUILD_TYPE
-#    define PNG_LIBPNG_BUILD_TYPE \
-        PNG_LIBPNG_BUILD_TYPE_SAVE|PNG_LIBPNG_BUILD_SPECIAL
-#    define PNG_LIBPNG_BUILD_SPECIAL_STRING "Use MMX instructions"
-#  endif /* PNG_LIBPNG_BUILD_SPECIAL */
+#if defined(PNG_USER_DLLFNAME_POSTFIX) && !defined(PNG_USER_PRIVATEBUILD)
+#  error "PNG_USER_PRIVATEBUILD must be defined as a string describing the\
+ custom changes made to the library."
+#endif
+
+/* Prioritize PNG_USER_x over PNG_LIBPNG_x */
+#ifdef PNG_USER_DLLFNAME_POSTFIX
+#  undef PNG_LIBPNG_DLLFNAME_POSTFIX
+#  define PNG_LIBPNG_DLLFNAME_POSTFIX PNG_USER_DLLFNAME_POSTFIX
+#endif
+
+#ifdef PNG_USER_VERSIONINFO_COMMENTS
+#  undef PNG_LIBPNG_VERSIONINFO_COMMENTS
+#  define PNG_LIBPNG_VERSIONINFO_COMMENTS PNG_USER_VERSIONINFO_COMMENTS
 #endif
 
 #if defined(PNG_DEBUG) && (PNG_DEBUG > 0)
 #  define VS_DEBUG VS_FF_DEBUG
-#  ifndef DLLFNAME_POSTFIX
-#    define DLLFNAME_POSTFIX "D"
-#  endif /* DLLFNAME_POSTFIX */
-#  ifndef COMMENTS 
-#    define COMMENTS "PNG_DEBUG=" QUOTE(PNG_DEBUG)
-#  endif /* COMMENTS */
+#  ifndef PNG_LIBPNG_DLLFNAME_POSTFIX
+#    define PNG_LIBPNG_DLLFNAME_POSTFIX "D"
+#  endif /* PNG_LIBPNG_DLLFNAME_POSTFIX */
+#  ifndef PNG_LIBPNG_VERSIONINFO_COMMENTS
+#    define PNG_LIBPNG_VERSIONINFO_COMMENTS "PNG_DEBUG=" QUOTE(PNG_DEBUG)
+#  endif /* PNG_LIBPNG_VERSIONINFO_COMMENTS */
 #else
 #  define VS_DEBUG 0
-#  ifndef DLLFNAME_POSTFIX
-#     define DLLFNAME_POSTFIX
-#  endif /* DLLFNAME_POSTFIX */
+#  ifndef PNG_LIBPNG_DLLFNAME_POSTFIX
+#     define PNG_LIBPNG_DLLFNAME_POSTFIX
+#  endif /* PNG_LIBPNG_DLLFNAME_POSTFIX */
 #endif /* defined(DEBUG)... */
 
-#if (PNG_LIBPNG_BUILD_PRIVATE & PNG_LIBPNG_BUILD_TYPE)
+#ifdef PNG_USER_PRIVATEBUILD
 #  define VS_PRIVATEBUILD VS_FF_PRIVATEBUILD
 #else
 #  define VS_PRIVATEBUILD 0
-#endif /* PNG_LIBPNG_BUILD_PRIVATE */
+#endif /* PNG_USER_PRIVATEBUILD */
 
-#if (PNG_LIBPNG_BUILD_SPECIAL & PNG_LIBPNG_BUILD_TYPE)
+#ifdef PNG_LIBPNG_SPECIALBUILD
 #  define VS_SPECIALBUILD VS_FF_SPECIALBUILD
 #else
 #  define VS_SPECIALBUILD 0
 #endif /* PNG_LIBPNG_BUILD_SPECIAL */
 
-#if ((PNG_LIBPNG_BUILD_TYPE & PNG_LIBPNG_RELEASE_STATUS_MASK) != \
+#if ((PNG_LIBPNG_BUILD_BASE_TYPE & PNG_LIBPNG_RELEASE_STATUS_MASK) !=\
       PNG_LIBPNG_BUILD_STABLE)
 #  define VS_PRERELEASE VS_FF_PRERELEASE
 #  define VS_PATCHED 0
 #else
 #  define VS_PRERELEASE 0
-#  if (PNG_LIBPNG_BUILD_TYPE & PNG_LIBPNG_BUILD_PATCHED)
+#  if (PNG_LIBPNG_BUILD_BASE_TYPE & PNG_LIBPNG_BUILD_PATCHED)
 #    define VS_PATCHED VS_FF_PATCHED
 #  else
 #    define VS_PATCHED 0
 #  endif
 #endif
 
-VS_VERSION_INFO VERSIONINFO 
+VS_VERSION_INFO VERSIONINFO
 FILEVERSION PNG_LIBPNG_VER_MAJOR, PNG_LIBPNG_VER_MINOR, PNG_LIBPNG_VER_RELEASE, PNG_LIBPNG_VER_BUILD
 PRODUCTVERSION PNG_LIBPNG_VER_MAJOR, PNG_LIBPNG_VER_MINOR, PNG_LIBPNG_VER_RELEASE, PNG_LIBPNG_VER_BUILD
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
@@ -77,22 +81,28 @@
   BLOCK "StringFileInfo"
   BEGIN BLOCK "040904E4" /* Language type = U.S English(0x0409) and Character Set = Windows, Multilingual(0x04E4) */
     BEGIN
-#ifdef COMMENTS
-      VALUE "Comments", COMMENTS "\000"
-#endif /* COMMENTS */
+#ifdef PNG_LIBPNG_VERSIONINFO_COMMENTS
+      VALUE "Comments", PNG_LIBPNG_VERSIONINFO_COMMENTS "\000"
+#endif /* PNG_LIBPNG_VERSIONINFO_COMMENTS */
+#ifdef PNG_USER_VERSIONINFO_COMPANYNAME
+      VALUE "CompanyName", PNG_USER_VERSIONINFO_COMPANYNAME "\000"
+#endif /* PNG_USER_VERSIONINFO_COMPANYNAME */
       VALUE "FileDescription", "PNG image compression library\000"
       VALUE "FileVersion", PNG_LIBPNG_VER_STRING "\000"
-      VALUE "InternalName", PNG_LIBPNG_DLLFNAME QUOTE(PNG_LIBPNG_VER_DLLNUM) DLLFNAME_POSTFIX " (Windows 32 bit)\000"
+      VALUE "InternalName", PNG_LIBPNG_DLLFNAME QUOTE(PNG_LIBPNG_VER_DLLNUM) PNG_LIBPNG_DLLFNAME_POSTFIX " (Windows 32 bit)\000"
       VALUE "LegalCopyright", "\251 1998-2004 Glenn Randers-Pehrson et al.\000"
-      VALUE "OriginalFilename", PNG_LIBPNG_DLLFNAME QUOTE(PNG_LIBPNG_VER_DLLNUM) DLLFNAME_POSTFIX ".DLL\000"
-#ifdef PRIVATEBUILD
-      VALUE "PrivateBuild", PRIVATEBUILD
-#endif /* PRIVATEBUILD */
+#ifdef PNG_USER_VERSIONINFO_LEGALTRADEMARKS
+      VALUE "LegalTrademarks", PNG_USER_VERSIONINFO_LEGALTRADEMARKS "\000"
+#endif /* PNG_USER_VERSIONINFO_LEGALTRADEMARKS */
+      VALUE "OriginalFilename", PNG_LIBPNG_DLLFNAME QUOTE(PNG_LIBPNG_VER_DLLNUM) PNG_LIBPNG_DLLFNAME_POSTFIX ".DLL\000"
+#ifdef PNG_LIBPNG_PRIVATEBUILD
+      VALUE "PrivateBuild", PNG_LIBPNG_PRIVATEBUILD "\000"
+#endif /* PNG_LIBPNG_PRIVATEBUILD */
       VALUE "ProductName", "LibPNG\000"
       VALUE "ProductVersion", "1\000"
-#ifdef SPECIALBUILD
-      VALUE "SpecialBuild", SPECIALBUILD
-#endif /* SPECIALBUILD */
+#ifdef PNG_LIBPNG_SPECIALBUILD
+      VALUE "SpecialBuild", PNG_LIBPNG_SPECIALBUILD "\000"
+#endif /* PNG_LIBPNG_SPECIALBUILD */
     END
   END
   BLOCK "VarFileInfo"