summaryrefslogtreecommitdiffstats
path: root/games/jezzball-kazzmir/loadpng.diff
blob: 64ab30a2ef1c3f781a1e9573b5342e81f057e260 (plain)
diff -Naur jezzball-1.1/SConstruct jezzball-1.1.patched/SConstruct
--- jezzball-1.1/SConstruct	2007-09-09 18:07:10.000000000 -0400
+++ jezzball-1.1.patched/SConstruct	2015-11-22 01:16:48.000000000 -0500
@@ -27,18 +27,13 @@
 score.cpp
 """))
 
-sources.append( map( lambda x: 'build/loadpng/%s' % x, Split("""
-loadpng.c
-regpng.c
-savepng.c
-""")));
-
 env.Append( LIBS = ['jpgal'] )
 
 if isWindows():
 	env.Append( LIBS = ['png', 'alleg'] )
 else:
 	env.ParseConfig( 'allegro-config --libs --cflags' )
+	env.Append( LIBS = ['loadpng'] )
 	env.ParseConfig( 'libpng-config --libs' )
 
 env.Append( CCFLAGS = '-O2' )
diff -Naur jezzball-1.1/src/loadpng/loadpng.c jezzball-1.1.patched/src/loadpng/loadpng.c
--- jezzball-1.1/src/loadpng/loadpng.c	2007-09-09 18:02:37.000000000 -0400
+++ jezzball-1.1.patched/src/loadpng/loadpng.c	1969-12-31 19:00:00.000000000 -0500
@@ -1,400 +0,0 @@
-/* loadpng, Allegro wrapper routines for libpng
- * by Peter Wang (tjaden@users.sf.net).
- *
- * This file is hereby placed in the public domain.
- */
-
-
-#include <png.h>
-#include <allegro.h>
-#include <allegro/internal/aintern.h>
-#include "loadpng.h"
-
-/* We need internals _color_load_depth and _fixup_loaded_bitmap.  The
- * first can be replaced by the new get_color_depth() function which
- * is in Allegro 4.1 branch.  But it's not worth it to break 4.0
- * compatibility.
- */
-
-
-
-double _png_screen_gamma = -1.0;
-int _png_compression_level = Z_BEST_COMPRESSION;
-
-
-
-/* get_gamma:
- *  Get screen gamma value one of three ways.
- */
-static double get_gamma(void)
-{
-    if (_png_screen_gamma == -1.0) {
-	/* Use the environment variable if available.
-	 * 2.2 is a good guess for PC monitors.
-	 * 1.1 is good for my laptop.
-	 */
-	AL_CONST char *gamma_str = getenv("SCREEN_GAMMA");
-	return (gamma_str) ? atof(gamma_str) : 2.2;
-    }
-
-    return _png_screen_gamma;
-}
-
-
-
-/* read_data:
- *  Custom read function to use Allegro packfile routines,
- *  rather than C streams (so we can read from datafiles!)
- */
-static void read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
-{
-    PACKFILE *f = (PACKFILE *)png_get_io_ptr(png_ptr);
-    if ((png_uint_32)pack_fread(data, length, f) != length)
-	png_error(png_ptr, "read error (loadpng calling pack_fread)");
-}
-
-
-
-/* check_if_png:
- *  Check if input file is really PNG format.
- */
-#define PNG_BYTES_TO_CHECK 4
-
-static int check_if_png(PACKFILE *fp)
-{
-    unsigned char buf[PNG_BYTES_TO_CHECK];
-
-    ASSERT(fp);
-
-    if (pack_fread(buf, PNG_BYTES_TO_CHECK, fp) != PNG_BYTES_TO_CHECK)
-	return 0;
-
-    return (png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK) == 0);
-}
-
-
-
-/* really_load_png:
- *  Worker routine, used by load_png and load_memory_png.
- */
-static BITMAP *really_load_png(png_structp png_ptr, png_infop info_ptr, RGB *pal)
-{
-    BITMAP *bmp;
-    PALETTE tmppal;
-    png_uint_32 width, height, rowbytes;
-    int bit_depth, color_type, interlace_type;
-    double image_gamma, screen_gamma;
-    int intent;
-    int bpp, dest_bpp;
-    int tRNS_to_alpha = FALSE;
-    int number_passes, pass;
-
-    ASSERT(png_ptr && info_ptr && rgb);
-
-    /* The call to png_read_info() gives us all of the information from the
-     * PNG file before the first IDAT (image data chunk).
-     */
-    png_read_info(png_ptr, info_ptr);
-
-    png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
-		 &interlace_type, NULL, NULL);
-
-    /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
-     * byte into separate bytes (useful for paletted and grayscale images).
-     */
-    png_set_packing(png_ptr);
-
-    /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */
-    if ((color_type == PNG_COLOR_TYPE_GRAY) && (bit_depth < 8))
-	png_set_expand(png_ptr);
-
-    /* Adds a full alpha channel if there is transparency information
-     * in a tRNS chunk. */
-    if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
-	png_set_tRNS_to_alpha(png_ptr);
-	tRNS_to_alpha = TRUE;
-    }
-
-    /* Convert 16-bits per colour component to 8-bits per colour component. */
-    if (bit_depth == 16)
-	png_set_strip_16(png_ptr);
-
-    /* Convert grayscale to RGB triplets */
-    if ((color_type == PNG_COLOR_TYPE_GRAY) ||
-	(color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
-	png_set_gray_to_rgb(png_ptr);
-
-    /* Optionally, tell libpng to handle the gamma correction for us. */
-    if (_png_screen_gamma != 0.0) {
-	screen_gamma = get_gamma();
-
-	if (png_get_sRGB(png_ptr, info_ptr, &intent))
-	    png_set_gamma(png_ptr, screen_gamma, 0.45455);
-	else {
-	    if (png_get_gAMA(png_ptr, info_ptr, &image_gamma))
-		png_set_gamma(png_ptr, screen_gamma, image_gamma);
-	    else
-		png_set_gamma(png_ptr, screen_gamma, 0.45455);
-	}
-    }
-
-    /* Turn on interlace handling. */
-    number_passes = png_set_interlace_handling(png_ptr);
-    
-    /* Call to gamma correct and add the background to the palette
-     * and update info structure.
-     */
-    png_read_update_info(png_ptr, info_ptr);
-    
-    /* Even if the user doesn't supply space for a palette, we want
-     * one for the load process.
-     */
-    if (!pal)
-	pal = tmppal;
-    
-    /* Palettes. */
-    if (color_type & PNG_COLOR_MASK_PALETTE) {
-	int num_palette, i;
-	png_colorp palette;
-
-	if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette)) {
-	    /* We don't actually dither, we just copy the palette. */
-	    for (i = 0; ((i < num_palette) && (i < 256)); i++) {
-		pal[i].r = palette[i].red >> 2;		/* 256 -> 64 */
-		pal[i].g = palette[i].green >> 2;
-		pal[i].b = palette[i].blue >> 2;
-	    }
-
-	    for (; i < 256; i++)
-		pal[i].r = pal[i].g = pal[i].b = 0;
-	}
-    }
-    else {
-	generate_332_palette(pal);
-    }
-
-    rowbytes = png_get_rowbytes(png_ptr, info_ptr);
-
-    /* Allocate the memory to hold the image using the fields of info_ptr. */
-    bpp = rowbytes * 8 / width;
-
-    /* Allegro cannot handle less than 8 bpp. */
-    if (bpp < 8)
-	bpp = 8;
-
-    dest_bpp = _color_load_depth(bpp, (bpp == 32));
-    bmp = create_bitmap_ex(bpp, width, height);
-
-    /* Maybe flip RGB to BGR. */
-    if ((bpp == 24) || (bpp == 32)) {
-	int c = makecol_depth(bpp, 0, 0, 255);
-	unsigned char *pc = (unsigned char *)&c;
-	if (pc[0] == 255)
-	    png_set_bgr(png_ptr);
-#ifdef ALLEGRO_BIG_ENDIAN	    
-	png_set_swap_alpha(png_ptr);
-#endif	    
-    }
-
-    /* Read the image, one line at a line (easier to debug!) */
-    for (pass = 0; pass < number_passes; pass++) {
-	png_uint_32 y;
-	for (y = 0; y < height; y++)
-	    png_read_row(png_ptr, bmp->line[y], NULL);
-    }
-
-    /* Let Allegro convert the image into the desired colour depth. */
-    if (dest_bpp != bpp)
-	bmp = _fixup_loaded_bitmap(bmp, pal, dest_bpp);
-
-    /* Read rest of file, and get additional chunks in info_ptr. */
-    png_read_end(png_ptr, info_ptr);
-
-    return bmp;
-}
-
-
-
-/* load_png:
- *  Load a PNG file from disk, doing colour coversion if required.
- */
-BITMAP *load_png(AL_CONST char *filename, RGB *pal)
-{
-    PACKFILE *fp;
-    BITMAP *bmp;
-
-    ASSERT(filename);
-
-    fp = pack_fopen(filename, "r");
-    if (!fp)
-	return NULL;
-
-    bmp = load_png_pf(fp, pal);
-
-    pack_fclose(fp);
-
-    return bmp;
-}
-
-
-
-/* load_png_pf:
- *  Load a PNG file from disk, doing colour coversion if required.
- */
-BITMAP *load_png_pf(PACKFILE *fp, RGB *pal)
-{
-    BITMAP *bmp;
-    png_structp png_ptr;
-    png_infop info_ptr;
-
-    ASSERT(fp);
-
-    if (!check_if_png(fp)) {
-	return NULL;
-    }
-
-    /* Create and initialize the png_struct with the desired error handler
-     * functions.  If you want to use the default stderr and longjump method,
-     * you can supply NULL for the last three parameters.  We also supply the
-     * the compiler header file version, so that we know if the application
-     * was compiled with a compatible version of the library.
-     */
-    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-				     (void *)NULL, NULL, NULL);
-    if (!png_ptr) {
-	return NULL;
-    }
-
-    /* Allocate/initialize the memory for image information. */
-    info_ptr = png_create_info_struct(png_ptr);
-    if (!info_ptr) {
-	png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
-	return NULL;
-    }
-
-    /* Set error handling if you are using the setjmp/longjmp method (this is
-     * the normal method of doing things with libpng).  REQUIRED unless you
-     * set up your own error handlers in the png_create_read_struct() earlier.
-     */
-    if (setjmp(png_ptr->jmpbuf)) {
-	/* Free all of the memory associated with the png_ptr and info_ptr */
-	png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
-	/* If we get here, we had a problem reading the file */
-	return NULL;
-    }
-
-    /* Use Allegro packfile routines. */
-    png_set_read_fn(png_ptr, fp, (png_rw_ptr)read_data);
-
-    /* We have already read some of the signature. */
-    png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK);
-
-    /* Really load the image now. */
-    bmp = really_load_png(png_ptr, info_ptr, pal);
-
-    /* Clean up after the read, and free any memory allocated. */
-    png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
-
-    return bmp;
-}
-
-
-
-/* read_data_memory:
- *  Custom reader function to read a PNG file from a memory buffer.
- */
-
-typedef struct {
-    AL_CONST unsigned char *buffer;
-    png_uint_32 bufsize;
-    png_uint_32 current_pos;
-} MEMORY_READER_STATE;
-
-static void read_data_memory(png_structp png_ptr, png_bytep data, png_uint_32 length)
-{
-    MEMORY_READER_STATE *f = (MEMORY_READER_STATE *)png_get_io_ptr(png_ptr);
-
-    if (length > (f->bufsize - f->current_pos))
-	png_error(png_ptr, "read error in read_data_memory (loadpng)");
-
-    memcpy(data, f->buffer + f->current_pos, length);
-    f->current_pos += length;
-}
-
-
-
-/* check_if_png_memory:
- *  Check if input buffer is really PNG format.
- */
-static int check_if_png_memory(AL_CONST void *buffer)
-{
-    unsigned char *buf = (unsigned char *)buffer;
-    return (png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK) == 0);
-}
-
-
-
-/* load_memory_png:
- *  Load a PNG file from memory, doing colour coversion if required.
- */
-BITMAP *load_memory_png(AL_CONST void *buffer, int bufsize, RGB *pal)
-{
-    MEMORY_READER_STATE memory_reader_state;
-    BITMAP *bmp;
-    png_structp png_ptr;
-    png_infop info_ptr;
-
-    if (!buffer || (bufsize <= 0))
-    	return NULL;
-
-    if (!check_if_png_memory(buffer))
-	return NULL;
-
-    /* Create and initialize the png_struct with the desired error handler
-     * functions.  If you want to use the default stderr and longjump method,
-     * you can supply NULL for the last three parameters.  We also supply the
-     * the compiler header file version, so that we know if the application
-     * was compiled with a compatible version of the library.
-     */
-    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-				     (void *)NULL, NULL, NULL);
-    if (!png_ptr)
-	return NULL;
-
-    /* Allocate/initialize the memory for image information. */
-    info_ptr = png_create_info_struct(png_ptr);
-    if (!info_ptr) {
-	png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
-	return NULL;
-    }
-
-    /* Set error handling if you are using the setjmp/longjmp method (this is
-     * the normal method of doing things with libpng).  REQUIRED unless you
-     * set up your own error handlers in the png_create_read_struct() earlier.
-     */
-    if (setjmp(png_ptr->jmpbuf)) {
-	/* Free all of the memory associated with the png_ptr and info_ptr */
-	png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
-	/* If we get here, we had a problem reading the file */
-	return NULL;
-    }
-
-    /* Set up the reader state. */
-    memory_reader_state.buffer = (unsigned char *)buffer;
-    memory_reader_state.bufsize = bufsize;
-    memory_reader_state.current_pos = PNG_BYTES_TO_CHECK;
-
-    /* Tell libpng to use our custom reader. */
-    png_set_read_fn(png_ptr, &memory_reader_state, (png_rw_ptr)read_data_memory);
-
-    /* We have already read some of the signature. */
-    png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK);
-
-    /* Really load the image now. */
-    bmp = really_load_png(png_ptr, info_ptr, pal);
-
-    /* Clean up after the read, and free any memory allocated. */
-    png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
-    
-    return bmp;
-}
diff -Naur jezzball-1.1/src/loadpng/loadpng.h jezzball-1.1.patched/src/loadpng/loadpng.h
--- jezzball-1.1/src/loadpng/loadpng.h	2007-09-09 18:02:37.000000000 -0400
+++ jezzball-1.1.patched/src/loadpng/loadpng.h	1969-12-31 19:00:00.000000000 -0500
@@ -1,75 +0,0 @@
-/* loadpng.h */
-/* This file is hereby placed in the public domain. */
-#ifndef _included_loadpng_h_
-#define _included_loadpng_h_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-/* Overkill :-) */
-#define LOADPNG_VERSION		1
-#define LOADPNG_SUBVERSION	5
-#define LOADPNG_VERSIONSTR	"1.5"
-
-
-/* _png_screen_gamma is slightly overloaded (sorry):
- *
- * A value of 0.0 means: Don't do any gamma correction in load_png()
- * and load_memory_png().  This meaning was introduced in v1.4.
- *
- * A value of -1.0 means: Use the value from the environment variable
- * SCREEN_GAMMA (if available), otherwise fallback to a value of 2.2
- * (a good guess for PC monitors, and the value for sRGB colourspace).
- * This is the default.
- *
- * Otherwise, the value of _png_screen_gamma is taken as-is.
- */
-extern double _png_screen_gamma;
-
-
-/* Choose zlib compression level for saving file.
- * Default is Z_BEST_COMPRESSION.
- */
-extern int _png_compression_level;
-
-
-/* Load a PNG from disk. */
-extern BITMAP *load_png(AL_CONST char *filename, RGB *pal);
-
-/* Load a PNG from some place. */
-extern BITMAP *load_png_pf(PACKFILE *fp, RGB *pal);
-
-/* Load a PNG from memory. */
-extern BITMAP *load_memory_png(AL_CONST void *buffer, int buffer_size, RGB *pal);
-
-/* Save a bitmap to disk in PNG format. */
-extern int save_png(AL_CONST char *filename, BITMAP *bmp, AL_CONST RGB *pal);
-
-/* Adds `PNG' to Allegro's internal file type table.
- * You can then just use load_bitmap and save_bitmap as usual.
- */
-extern void register_png_file_type(void);
-
-/* Register an datafile type ID with Allegro, so that when an object
- * with that type ID is encountered while loading a datafile, that
- * object will be loaded as a PNG file.
- */
-extern void register_png_datafile_object(int id);
-
-/* This is supposed to resemble jpgalleg_init in JPGalleg 2.0, just in
- * case you are lazier than lazy.  It contains these 3 lines of code:
- *  register_png_datafile_object(DAT_ID('P','N','G',' '));
- *  register_png_file_type();
- *  return 0;
- */
-extern int loadpng_init(void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _included_loadpng_h */
diff -Naur jezzball-1.1/src/loadpng/regpng.c jezzball-1.1.patched/src/loadpng/regpng.c
--- jezzball-1.1/src/loadpng/regpng.c	2007-09-09 18:02:37.000000000 -0400
+++ jezzball-1.1.patched/src/loadpng/regpng.c	1969-12-31 19:00:00.000000000 -0500
@@ -1,68 +0,0 @@
-/* loadpng, Allegro wrapper routines for libpng
- * by Peter Wang (tjaden@users.sf.net).
- *
- * This file is hereby placed in the public domain.
- */
-
-
-#include <allegro.h>
-#include "loadpng.h"
-
-
-
-/* register_png_file_type:
- */
-void register_png_file_type(void)
-{
-    register_bitmap_file_type("png", load_png, save_png);
-}
-
-
-
-/* register_png_datafile_object:
- */
-
-static void *load_datafile_png(PACKFILE *f, long size)
-{
-    BITMAP *bmp;
-    void *buffer;
-
-    buffer = malloc(size);
-    if (!buffer)
-	return NULL;
-
-    if (pack_fread(buffer, size, f) != size) {
-	free(buffer);
-	return NULL;
-    }
-
-    bmp = load_memory_png(buffer, size, NULL);
-
-    free(buffer);
-
-    return bmp;
-}
-
-static void destroy_datafile_png(void *data)
-{
-    if (data) {
-	destroy_bitmap((BITMAP *)data);
-    }
-}
-
-void register_png_datafile_object(int id)
-{
-    register_datafile_object(id, load_datafile_png, destroy_datafile_png);
-}
-
-
-
-/* loadpng_init:
- *  This is supposed to resemble jpgalleg_init in JPGalleg 2.0.
- */
-int loadpng_init(void)
-{
-    register_png_datafile_object(DAT_ID('P','N','G',' '));
-    register_png_file_type();
-    return 0;
-}
diff -Naur jezzball-1.1/src/loadpng/savepng.c jezzball-1.1.patched/src/loadpng/savepng.c
--- jezzball-1.1/src/loadpng/savepng.c	2007-09-09 18:02:37.000000000 -0400
+++ jezzball-1.1.patched/src/loadpng/savepng.c	1969-12-31 19:00:00.000000000 -0500
@@ -1,306 +0,0 @@
-/* loadpng, Allegro wrapper routines for libpng
- * by Peter Wang (tjaden@users.sf.net).
- *
- * This file is hereby placed in the public domain.
- */
-
-
-#include <png.h>
-#include <allegro.h>
-#include "loadpng.h"
-
-
-
-/* write_data:
- *  Custom write function to use Allegro packfile routines,
- *  rather than C streams.
- */
-static void write_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
-{
-    PACKFILE *f = (PACKFILE *)png_get_io_ptr(png_ptr);
-    if ((png_uint_32)pack_fwrite(data, length, f) != length)
-	png_error(png_ptr, "write error (loadpng calling pack_fwrite)");
-}
-
-/* Don't think Allegro has any problem with buffering
- * (rather, Allegro provides no way to flush packfiles).
- */
-static void flush_data(png_structp png_ptr) { (void)png_ptr; }
-
-
-
-/* save_indexed:
- *  Core save routine for 8 bpp images.
- * */
-static int save_indexed(png_structp png_ptr, BITMAP *bmp)
-{
-    ASSERT(bitmap_color_depth(bmp) == 8);
-
-    if (is_memory_bitmap(bmp)) { /* fast path */
-	int y;
-
-	for (y=0; y<bmp->h; y++) {
-	    png_write_row(png_ptr, bmp->line[y]);
-	}
-
-	return 1;
-    }
-    else {			/* generic case */
-	unsigned char *rowdata;
-	int x, y;
-
-	rowdata = (unsigned char *)malloc(bmp->w * 3);
-	if (!rowdata)
-	    return 0;
-
-	for (y=0; y<bmp->h; y++) {
-	    unsigned char *p = rowdata;
-
-	    for (x=0; x<bmp->w; x++) {
-		*p++ = getpixel(bmp, x, y);
-	    }
-	
-	    png_write_row(png_ptr, rowdata);
-	}
-	
-	free(rowdata);
-
-	return 1;
-    }
-}
-
-
-
-/* save_rgb:
- *  Core save routine for 15/16/24 bpp images (original by Martijn Versteegh).
- */
-static int save_rgb(png_structp png_ptr, BITMAP *bmp)
-{
-    AL_CONST int depth = bitmap_color_depth(bmp);
-    unsigned char *rowdata;
-    int y, x;
-
-    ASSERT(depth == 15 || depth == 16 || depth == 24);
-
-    rowdata = (unsigned char *)malloc(bmp->w * 3);
-    if (!rowdata)
-	return 0;
-
-    for (y=0; y<bmp->h; y++) {
-	unsigned char *p = rowdata;
-
-	if (depth == 15) {
-	    for (x = 0; x < bmp->w; x++) {
-		int c = getpixel(bmp, x, y);
-		*p++ = getr15(c);
-		*p++ = getg15(c);
-		*p++ = getb15(c);
-	    }
-	}
-	else if (depth == 16) {
-	    for (x = 0; x < bmp->w; x++) {
-		int c = getpixel(bmp, x, y);
-		*p++ = getr16(c);
-		*p++ = getg16(c);
-		*p++ = getb16(c);
-	    }
-	}
-	else { /* depth == 24 */
-	    for (x = 0; x < bmp->w; x++) {
-		int c = getpixel(bmp, x, y);
-		*p++ = getr24(c);
-		*p++ = getg24(c);
-		*p++ = getb24(c);
-	    }
-	}
-
-	png_write_row(png_ptr, rowdata);
-    }
-
-    free(rowdata);
-
-    return 1;
-}
-
-
-
-/* save_rgba:
- *  Core save routine for 32 bpp images.
- */
-static int save_rgba(png_structp png_ptr, BITMAP *bmp)
-{
-    unsigned char *rowdata;
-    int x, y;
-
-    ASSERT(bitmap_color_depth(bmp) == 32);
-
-    rowdata = (unsigned char *)malloc(bmp->w * 4);
-    if (!rowdata)
-	return 0;
-
-    for (y=0; y<bmp->h; y++) {
-	unsigned char *p = rowdata;
-	
-        for (x=0; x<bmp->w; x++) {
-            int c = getpixel(bmp, x, y);
-	    *p++ = getr32(c);
-	    *p++ = getg32(c);
-	    *p++ = getb32(c);
-	    *p++ = geta32(c);
-        }
-
-        png_write_row(png_ptr, rowdata);
-    }
-
-    free(rowdata);
-
-    return 1;
-}
-
-
-
-/* save_png:
- *  Writes a non-interlaced, no-frills PNG, taking the usual save_xyz
- *  parameters.  Returns non-zero on error.
- */
-static int really_save_png(PACKFILE *fp, BITMAP *bmp, AL_CONST RGB *pal)
-{
-    png_structp png_ptr = NULL;
-    png_infop info_ptr = NULL;
-    int depth;
-    int colour_type;
-
-    depth = bitmap_color_depth(bmp);
-    if (depth == 8 && !pal)
-	return -1;
-
-    /* Create and initialize the png_struct with the
-     * desired error handler functions.
-     */
-    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
-				      (void *)NULL, NULL, NULL);
-    if (!png_ptr)
-	goto Error;
-
-    /* Allocate/initialize the image information data. */
-    info_ptr = png_create_info_struct(png_ptr);
-    if (!info_ptr)
-	goto Error;
-
-    /* Set error handling. */
-    if (setjmp(png_ptr->jmpbuf)) {
-	/* If we get here, we had a problem reading the file. */
-	goto Error;
-    }
-
-    /* Use packfile routines. */
-    png_set_write_fn(png_ptr, fp, (png_rw_ptr)write_data, flush_data);
-
-    /* Set the image information here.  Width and height are up to 2^31,
-     * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
-     * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
-     * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
-     * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
-     * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
-     * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE.
-     */
-    if (depth == 8)
-	colour_type = PNG_COLOR_TYPE_PALETTE;
-    else if (depth == 32)
-	colour_type = PNG_COLOR_TYPE_RGB_ALPHA;
-    else
-	colour_type = PNG_COLOR_TYPE_RGB;
-
-    /* Set compression level. */
-    png_set_compression_level(png_ptr, _png_compression_level);
-
-    png_set_IHDR(png_ptr, info_ptr, bmp->w, bmp->h, 8, colour_type,
-		 PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
-		 PNG_FILTER_TYPE_BASE);
-
-    /* Set the palette if there is one.  Required for indexed-color images. */
-    if (colour_type == PNG_COLOR_TYPE_PALETTE) {
-	png_color palette[256];
-	int i;
-
-	for (i = 0; i < 256; i++) {
-	    palette[i].red   = _rgb_scale_6[pal[i].r];   /* 64 -> 256 */
-	    palette[i].green = _rgb_scale_6[pal[i].g];
-	    palette[i].blue  = _rgb_scale_6[pal[i].b];
-	}
-
-	/* Set palette colors. */
-	png_set_PLTE(png_ptr, info_ptr, palette, 256);
-    }
-
-    /* Optionally write comments into the image ... Nah. */
-
-    /* Write the file header information. */
-    png_write_info(png_ptr, info_ptr);
-
-    /* Once we write out the header, the compression type on the text
-     * chunks gets changed to PNG_TEXT_COMPRESSION_NONE_WR or
-     * PNG_TEXT_COMPRESSION_zTXt_WR, so it doesn't get written out again
-     * at the end.
-     */
-
-    /* Save the data. */
-    switch (depth) {
-	case 8:
-	    if (!save_indexed(png_ptr, bmp))
-		goto Error;
-	    break;
-	case 15:
-	case 16:
-	case 24:
-	    if (!save_rgb(png_ptr, bmp))
-		goto Error;
-	    break;
-	case 32:
-	    if (!save_rgba(png_ptr, bmp))
-		goto Error;
-	    break;
-	default:
-	    ASSERT(FALSE);
-	    goto Error;
-    }
-
-    png_write_end(png_ptr, info_ptr);
-
-    png_destroy_write_struct(&png_ptr, &info_ptr);
-
-    return 0;
-
-  Error:
-
-    if (png_ptr) {
-	if (info_ptr)
-	    png_destroy_write_struct(&png_ptr, &info_ptr);
-	else
-	    png_destroy_write_struct(&png_ptr, NULL);
-    }
-
-    return -1;
-}
-
-
-int save_png(AL_CONST char *filename, BITMAP *bmp, AL_CONST RGB *pal)
-{
-    PACKFILE *fp;
-    int result;
-
-    ASSERT(filename);
-    ASSERT(bmp);
-
-    fp = pack_fopen(filename, "w");
-    if (!fp)
-	return -1;
-    
-    acquire_bitmap(bmp);
-    result = really_save_png(fp, bmp, pal);
-    release_bitmap(bmp);
-
-    pack_fclose(fp);
-
-    return result;
-}
diff -Naur jezzball-1.1/src/main.cpp jezzball-1.1.patched/src/main.cpp
--- jezzball-1.1/src/main.cpp	2007-09-09 18:07:10.000000000 -0400
+++ jezzball-1.1.patched/src/main.cpp	2015-11-22 01:14:03.000000000 -0500
@@ -2,7 +2,7 @@
 #include <stdio.h>
 #include <time.h>
 #include <stdlib.h>
-#include "loadpng/loadpng.h"
+#include <loadpng.h>
 #include <jpgalleg.h>
 #include "game.h"
 #include "mouse.h"