Imported from libpng-1.0.4-pre1.tar
diff --git a/pngtest.c b/pngtest.c
index a1ba8ec..30decde 100644
--- a/pngtest.c
+++ b/pngtest.c
@@ -1,7 +1,7 @@
 
 /* pngtest.c - a simple test program to test libpng
  *
- * libpng 1.0.3 -January 14, 1999
+ * libpng 1.0.4 - September 17, 1999
  * 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
@@ -42,6 +42,8 @@
 static char tIME_string[30] = "no tIME chunk present in file";
 #endif /* PNG_TIME_RFC1123_SUPPORTED */
 
+static int verbose = 0;
+
 int test_one_file PNGARG((PNG_CONST char *inname, PNG_CONST char *outname));
 
 #ifdef __TURBOC__
@@ -60,12 +62,12 @@
 void
 read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
 {
-    if(png_ptr == NULL || row_number > 0x3fffffffL) return;
+    if(png_ptr == NULL || row_number > PNG_MAX_UINT) return;
     if(status_pass != pass)
     {
        fprintf(stdout,"\n Pass %d: ",pass);
        status_pass = pass;
-       status_dots = 30;
+       status_dots = 31;
     }
     status_dots--;
     if(status_dots == 0)
@@ -79,11 +81,24 @@
 void
 write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
 {
-    if(png_ptr == NULL || row_number > 0x3fffffffL || pass > 7) return;
+    if(png_ptr == NULL || row_number > PNG_MAX_UINT || pass > 7) return;
     fprintf(stdout, "w");
 }
 
 
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
+/* Example of using user transform callback (we don't transform anything,
+   but merely examine the row filters.  We set this to 256 rather than
+   5 in case illegal filter values are present.) */
+static png_uint_32 filters_used[256];
+void
+count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data)
+{
+    if(png_ptr != NULL && row_info != NULL)
+      ++filters_used[*(data-1)];
+}
+#endif
+
 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 /* example of using user transform callback (we don't transform anything,
    but merely count the zero samples) */
@@ -105,6 +120,7 @@
     *  png_byte pixel_depth   bits per pixel (depth*channels)
     */
 
+
     /* counts the number of zero samples (or zero pixels if color_type is 3 */
 
     if(row_info->color_type == 0 || row_info->color_type == 3)
@@ -178,7 +194,6 @@
 }
 #endif /* PNG_WRITE_USER_TRANSFORM_SUPPORTED */
 
-static int verbose = 0;
 static int wrote_question = 0;
 
 #if defined(PNG_NO_STDIO)
@@ -584,10 +599,18 @@
       png_set_read_status_fn(read_ptr, NULL);
    }
 
-#  if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-     zero_samples=0;
-     png_set_write_user_transform_fn(write_ptr, count_zero_samples);
-#  endif
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
+   {
+     int i;
+     for(i=0; i<256; i++)
+        filters_used[i]=0;
+     png_set_read_user_transform_fn(read_ptr, count_filters);
+   }
+#endif
+#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
+   zero_samples=0;
+   png_set_write_user_transform_fn(write_ptr, count_zero_samples);
+#endif
 
    png_debug(0, "Reading info struct\n");
    png_read_info(read_ptr, read_info_ptr);
@@ -859,7 +882,7 @@
 
       if (png_memcmp(inbuf, outbuf, num_in))
       {
-         fprintf(STDERR, "Files %s and %s are different\n", inname, outname);
+         fprintf(STDERR, "\nFiles %s and %s are different\n", inname, outname);
          if(wrote_question == 0)
          {
             fprintf(STDERR,
@@ -885,8 +908,8 @@
 
 /* input and output filenames */
 #ifdef RISCOS
-PNG_CONST char *inname = "pngtest/png";
-PNG_CONST char *outname = "pngout/png";
+static PNG_CONST char *inname = "pngtest/png";
+static PNG_CONST char *outname = "pngout/png";
 #else
 static PNG_CONST char *inname = "pngtest.png";
 static PNG_CONST char *outname = "pngout.png";
@@ -973,7 +996,7 @@
 #endif
       for (i=2; i<argc; ++i)
       {
-         int kerror;
+         int k, kerror;
          fprintf(STDERR, "Testing %s:",argv[i]);
          kerror = test_one_file(argv[i], outname);
          if (kerror == 0)
@@ -983,6 +1006,12 @@
 #else
             fprintf(STDERR, " PASS\n");
 #endif
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
+            for (k=0; k<256; k++)
+               if(filters_used[k])
+                  fprintf(STDERR, " Filter %d was used %lu times\n",
+                     k,filters_used[k]);
+#endif
 #if defined(PNG_TIME_RFC1123_SUPPORTED)
          if(tIME_chunk_present != 0)
             fprintf(STDERR, " tIME = %s\n",tIME_string);
@@ -1032,14 +1061,21 @@
          {
             if(verbose == 1 || i == 2)
             {
+                int k;
 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
                 fprintf(STDERR, " PASS (%lu zero samples)\n",zero_samples);
 #else
                 fprintf(STDERR, " PASS\n");
 #endif
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
+                for (k=0; k<256; k++)
+                   if(filters_used[k])
+                      fprintf(STDERR, " Filter %d was used %lu times\n",
+                         k,filters_used[k]);
+#endif
 #if defined(PNG_TIME_RFC1123_SUPPORTED)
-         if(tIME_chunk_present != 0)
-            fprintf(STDERR, " tIME = %s\n",tIME_string);
+             if(tIME_chunk_present != 0)
+                fprintf(STDERR, " tIME = %s\n",tIME_string);
 #endif /* PNG_TIME_RFC1123_SUPPORTED */
             }
          }