Index: trunk/Ohana/src/kapa/graph/PNGit.c
===================================================================
--- trunk/Ohana/src/kapa/graph/PNGit.c	(revision 2473)
+++ trunk/Ohana/src/kapa/graph/PNGit.c	(revision 4769)
@@ -1,5 +1,4 @@
 # include "Ximage.h"
 # include <png.h>
-# define NPALETTE NGRAPHCOLORS
 
 int PNGit () {
@@ -8,14 +7,19 @@
   png_structp png_ptr;
   png_infop info_ptr;
-  png_color palette[NPALETTE];
-  int pchoice[NPALETTE];
+  png_color *palette;
+  int *pchoice;
   XColor color;
   png_byte **rows;
   int dx, dy;
   int i, j, k, found;
+  int Npalette;
   XImage *tmpimage;
   unsigned long pixel;
   char filename[1024];
   int Nbytes, status;
+
+  Npalette = GetColormapSize ();
+  ALLOCATE (pchoice, int, Npalette);
+  ALLOCATE (palette, png_color, Npalette);
 
   dx = graphic.dx;
@@ -35,5 +39,5 @@
 
   /* define the palette */
-  for (i = 0; i < NPALETTE; i++) {
+  for (i = 0; i < Npalette; i++) {
     color.pixel = graphic.color[i];
     XQueryColor (graphic.display, graphic.colormap, &color);
@@ -47,4 +51,6 @@
   if (f == (FILE *) NULL) {
     fprintf (stderr, "can't open output file %s\n", "Xgraph.png");
+    free (pchoice);
+    free (palette);
     return (TRUE);  /* true because otherwise it quits kapa! */
   }
@@ -54,4 +60,6 @@
     fclose (f);
     fprintf (stderr, "can't get png structure\n");
+    free (pchoice);
+    free (palette);
     return (TRUE);
   }
@@ -62,4 +70,6 @@
     fclose (f);
     fprintf (stderr, "can't get png info structure\n");
+    free (pchoice);
+    free (palette);
     return (TRUE);
   }
@@ -69,4 +79,6 @@
     fclose (f);
     fprintf (stderr, "can't get png return\n");
+    free (pchoice);
+    free (palette);
     return (TRUE);
   }
@@ -80,5 +92,5 @@
   /* png_set_IHDR (png_ptr, info_ptr, dx, dy, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); */
 
-  png_set_PLTE (png_ptr, info_ptr, palette, NPALETTE); 
+  png_set_PLTE (png_ptr, info_ptr, palette, Npalette); 
  
   png_write_info (png_ptr, info_ptr);
@@ -104,5 +116,5 @@
       for (i = 0; i < dx; i++) {
 	pixel = XGetPixel (tmpimage, i, j);
-	for (found = k = 0; (k < NPALETTE) && !found; k++) {
+	for (found = k = 0; (k < Npalette) && !found; k++) {
 	  if (pixel == pchoice[k]) {
 	    found = TRUE;
@@ -133,4 +145,6 @@
 
   fclose (f);
+  free (pchoice);
+  free (palette);
   return (TRUE);
 
