$NetBSD: patch-ag,v 1.1 2001/08/03 09:43:18 wiz Exp $

Fix build with png-1.5.

--- rw/writePNG.c.orig	1996-08-29 05:24:57.000000000 +0000
+++ rw/writePNG.c
@@ -31,6 +31,9 @@ WritePNG(char *file, Image *image, int i
     png_structp  png_ptr;
     png_infop  info_ptr;
     png_textp  software;
+    int bit_depth;
+    int color_type;
+    png_timep mod_time;
 
 
     Trace((stderr, "\nGRR WritePNG:  %d x %d, scale = %d\n",
@@ -38,47 +41,41 @@ WritePNG(char *file, Image *image, int i
     if (!fp)
         return 1;
 
-    png_ptr = (png_structp)malloc(sizeof (png_struct));
+    png_ptr = (png_structp)png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
+		NULL, NULL);
     if (!png_ptr)
         return 1;
 
-    info_ptr = (png_infop)malloc(sizeof (png_info));
+    info_ptr = (png_infop)png_create_info_struct(png_ptr);
     if (!info_ptr) {
-        free(png_ptr);
+	png_destroy_write_struct(&png_ptr, NULL);
         return 1;
     }
 
-    if (setjmp(png_ptr->jmpbuf)) {    
-        png_write_destroy(png_ptr);
-        free(info_ptr);
-        free(png_ptr);
+    if (setjmp(png_jmpbuf(png_ptr))) {
+        png_destroy_write_struct(&png_ptr, &info_ptr);
         fclose(fp);
         return 1;
     }
 
-    png_info_init(info_ptr);
-    png_write_init(png_ptr);
     png_init_io(png_ptr, fp);
 
-    info_ptr->width = image->width;
-    info_ptr->height = image->height;
-
     if (image->isBW) {
         if (image->maskData) {
-            info_ptr->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
-            info_ptr->bit_depth = 8;   /* promote to full grayscale */
+            color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
+            bit_depth = 8;   /* promote to full grayscale */
         } else {
-            info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
-            info_ptr->bit_depth = 1;
+            color_type = PNG_COLOR_TYPE_GRAY;
+            bit_depth = 1;
         }
         Trace((stderr, "GRR WritePNG:  B/W, bit_depth = %d\n",
-          info_ptr->bit_depth));
+          bit_depth));
 
     } else if (image->isGrey) {
-        info_ptr->color_type = image->maskData? PNG_COLOR_TYPE_GRAY_ALPHA :
+        color_type = image->maskData? PNG_COLOR_TYPE_GRAY_ALPHA :
                                                 PNG_COLOR_TYPE_GRAY;
         if (image->cmapPacked)
-            info_ptr->bit_depth = 8;
+            bit_depth = 8;
         else {
             Trace((stderr,
               "GRR WritePNG:  isGrey: cmapSize = %d (before compressing), ",
@@ -86,15 +83,15 @@ WritePNG(char *file, Image *image, int i
             compressColormap(image);
             Trace((stderr, "%d (after)\n", image->cmapSize));
             if (image->cmapSize > 16)
-                info_ptr->bit_depth = 8;
+                bit_depth = 8;
             else if (image->cmapSize > 4)
-                info_ptr->bit_depth = 4;
+                bit_depth = 4;
             else if (image->cmapSize > 2)
-                info_ptr->bit_depth = 2;
+                bit_depth = 2;
             else
-                info_ptr->bit_depth = 1;
+                bit_depth = 1;
             Trace((stderr, "GRR WritePNG:  isGrey: picked bit_depth = %d\n",
-              info_ptr->bit_depth));
+              bit_depth));
         }
 
     } else if (image->scale == 3) {
@@ -107,9 +104,9 @@ WritePNG(char *file, Image *image, int i
         if (cmapImage) {
             image = cmapImage;  /* original was deleted in ImageCompress() */
         } else {
-            info_ptr->color_type = image->maskData? PNG_COLOR_TYPE_RGB_ALPHA :
+            color_type = image->maskData? PNG_COLOR_TYPE_RGB_ALPHA :
                                                     PNG_COLOR_TYPE_RGB;
-            info_ptr->bit_depth = 8;
+            bit_depth = 8;
             Trace((stderr, "GRR WritePNG:  RGB, bit_depth = 8\n"));
         }
     }
@@ -129,7 +126,7 @@ WritePNG(char *file, Image *image, int i
      * ImageCompress() worked
      */
     if (image->scale == 1) {
-        info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
+        color_type = PNG_COLOR_TYPE_PALETTE;
         if (image->maskData) {
             fprintf(stderr,
               "WritePNG:  can't use alpha mask with colormapped image\n");
@@ -139,18 +136,17 @@ WritePNG(char *file, Image *image, int i
         if (!image->cmapPacked)
             compressColormap(image);
         if (image->cmapSize > 16)
-            info_ptr->bit_depth = 8;
+            bit_depth = 8;
         else if (image->cmapSize > 4)
-            info_ptr->bit_depth = 4;
+            bit_depth = 4;
         else if (image->cmapSize > 2)
-            info_ptr->bit_depth = 2;
+            bit_depth = 2;
         else
-            info_ptr->bit_depth = 1;
-        info_ptr->valid |= PNG_INFO_PLTE;
-        info_ptr->num_palette = image->cmapSize;
-        info_ptr->palette = (png_colorp)image->cmapData;  /* seems to work... */
-        Trace((stderr, "%d, num_palette = %d\n", info_ptr->bit_depth,
-          info_ptr->num_palette));
+            bit_depth = 1;
+        png_set_PLTE(png_ptr, info_ptr, (png_colorp)image->cmapData,
+            image->cmapSize); /* seems to work... */
+        Trace((stderr, "%d, num_palette = %d\n", bit_depth,
+          image->cmapSize));
 #if 0
         for (i = 0;  i < image->cmapSize;  ++i) {
             info_ptr->palette[i].red = 
@@ -160,14 +156,15 @@ WritePNG(char *file, Image *image, int i
 #endif
     }
 
-    info_ptr->interlace_type = interlace_type;
+    png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
+        bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_BASE,
+        PNG_FILTER_TYPE_BASE);
 
     /* set the file gamma */
-    info_ptr->valid |= PNG_INFO_gAMA;
 #ifdef DISPLAY_GAMMA
-    info_ptr->gamma = 1.0 / DISPLAY_GAMMA;
+    png_set_gAMA(png_ptr, info_ptr, 1.0 / DISPLAY_GAMMA);
 #else
-    info_ptr->gamma = 0.45;   /* default: assume PC-like system */
+    png_set_gAMA(png_ptr, info_ptr, 0.45); /* default: assume PC-like system */
 #endif
 
     /* info_ptr->valid |= PNG_INFO_tEXt;               DOES NOT EXIST */
@@ -180,16 +177,14 @@ WritePNG(char *file, Image *image, int i
         software->key = "Software";
         software->text = software_text;
         software->text_length = strlen(software->text);
-        info_ptr->num_text = 1;
-        info_ptr->text = software;
+        png_set_text(png_ptr, info_ptr, software, 1);
     } else {
         /* couldn't malloc:  oh well */
-        info_ptr->num_text = 0;
-        info_ptr->text = NULL;
+        png_set_text(png_ptr, info_ptr, NULL, 0);
     }
 
-    info_ptr->valid |= PNG_INFO_tIME;
-    png_convert_from_time_t(&info_ptr->mod_time, time(NULL));
+    png_convert_from_time_t(mod_time, time(NULL));
+    png_set_tIME(png_ptr, info_ptr, mod_time);
 
     png_write_flush(png_ptr);
     png_write_info(png_ptr, info_ptr);
@@ -200,9 +195,7 @@ WritePNG(char *file, Image *image, int i
         /* alpha channel version */
         fprintf(stderr, "WritePNG:  sorry, can't write alpha images yet\n");
         fflush(stderr);
-        png_write_destroy(png_ptr);
-        free(info_ptr);
-        free(png_ptr);
+        png_destroy_write_struct(&png_ptr, &info_ptr);
         fclose(fp);
         return 1;
     } else {
@@ -222,13 +215,11 @@ WritePNG(char *file, Image *image, int i
     }
 
     png_write_end(png_ptr, NULL);
-    png_write_destroy(png_ptr);
+    png_destroy_write_struct(&png_ptr, &info_ptr);
 
     if (software)
         free(software);   /* we LOVE free software!! */
 
-    free(info_ptr);
-    free(png_ptr);   /* necessary?? */
     fclose(fp);
 
     return 0;
