diff options
Diffstat (limited to 'games')
-rw-r--r-- | games/jezzball-kazzmir/jezzball-kazzmir.SlackBuild | 6 | ||||
-rw-r--r-- | games/jezzball-kazzmir/loadpng.diff | 900 |
2 files changed, 905 insertions, 1 deletions
diff --git a/games/jezzball-kazzmir/jezzball-kazzmir.SlackBuild b/games/jezzball-kazzmir/jezzball-kazzmir.SlackBuild index 180547aba8..e35c6365dd 100644 --- a/games/jezzball-kazzmir/jezzball-kazzmir.SlackBuild +++ b/games/jezzball-kazzmir/jezzball-kazzmir.SlackBuild @@ -12,7 +12,7 @@ PRGNAM=jezzball-kazzmir VERSION=${VERSION:-1.1} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then @@ -65,6 +65,10 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; +# 20151122 bkw: use allegro4's loadpng instead of the bundled one. fixes +# build on -current, does no harm on 14.1. +patch -p1 < $CWD/loadpng.diff + sed -i 's,\./data\|data/,'"$DATADIR"',' src/main.cpp sed -i 's,score\.jzb,'$SCOREDIR'/&,' src/score.cpp diff --git a/games/jezzball-kazzmir/loadpng.diff b/games/jezzball-kazzmir/loadpng.diff new file mode 100644 index 0000000000..64ab30a2ef --- /dev/null +++ b/games/jezzball-kazzmir/loadpng.diff @@ -0,0 +1,900 @@ +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" |