From b91be078fd95e1560329e752e16032291f28d354 Mon Sep 17 00:00:00 2001 From: Maikel vd H Date: Tue, 11 Dec 2012 00:25:21 +0100 Subject: [PATCH] fix red alert 1 video stretching for my patch and add GDI renderer video stretching --- Makefile | 8 +- build.bat | 2 + ddraw video stretching stuff.txt | 2 + ddraw.dll | Bin 0 -> 186880 bytes ddraw.rc | 24 + ddraw.rc.o | 24 + include/png.h | 2699 ++++++++++++++++++++++++++++++ include/pngconf.h | 1540 +++++++++++++++++ include/zconf.h | 428 +++++ include/zlib.h | 1613 ++++++++++++++++++ lib/libpng14.a | Bin 0 -> 210758 bytes lib/libz.a | Bin 0 -> 95182 bytes main.c | 11 +- main.h | 1 + render.c | 22 +- render_soft.c | 48 +- 16 files changed, 6392 insertions(+), 30 deletions(-) create mode 100644 build.bat create mode 100644 ddraw video stretching stuff.txt create mode 100644 ddraw.dll create mode 100644 ddraw.rc create mode 100644 ddraw.rc.o create mode 100644 include/png.h create mode 100644 include/pngconf.h create mode 100644 include/zconf.h create mode 100644 include/zlib.h create mode 100644 lib/libpng14.a create mode 100644 lib/libz.a diff --git a/Makefile b/Makefile index 519c26b..80b8ef1 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,9 @@ -CC=i586-mingw32msvc-gcc -WINDRES=i586-mingw32msvc-windres +CC=gcc CFLAGS=-DHAVE_LIBPNG -Iinclude -Wall -Wl,--enable-stdcall-fixup -O3 -s LIBS=lib/libpng14.a lib/libz.a -lgdi32 -lopengl32 -REV=$(shell sh -c 'git rev-parse --short @{0}') all: - sed 's/__REV__/$(REV)/g' ddraw.rc.in > ddraw.rc - $(WINDRES) -J rc ddraw.rc ddraw.rc.o - $(CC) $(CFLAGS) -shared -o ddraw.dll main.c mouse.c palette.c surface.c clipper.c render.c render_soft.c render_dummy.c screenshot.c ddraw.def ddraw.rc.o $(LIBS) + $(CC) $(CFLAGS) -shared -o ddraw.dll main.c mouse.c palette.c surface.c clipper.c render.c render_soft.c render_dummy.c screenshot.c ddraw.def $(LIBS) clean: rm -f ddraw.dll diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..24c19b4 --- /dev/null +++ b/build.bat @@ -0,0 +1,2 @@ +make EXT=.exe +pause \ No newline at end of file diff --git a/ddraw video stretching stuff.txt b/ddraw video stretching stuff.txt new file mode 100644 index 0000000..0acc13a --- /dev/null +++ b/ddraw video stretching stuff.txt @@ -0,0 +1,2 @@ +0x00665F58 = InMovie +0x0065D7BC = IsVQA640 \ No newline at end of file diff --git a/ddraw.dll b/ddraw.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f58943f711bd7887ba30aac29e80451289eae87 GIT binary patch literal 186880 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 ~2~%NZ_topo_u3Uo0pu2IcE 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�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 defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + png_size_t rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info FAR * png_row_infop; +typedef png_row_info FAR * FAR * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. + */ +typedef struct png_struct_def png_struct; +typedef png_struct FAR * png_structp; + +typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); +typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); +typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); +typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, + int)); +typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, + png_infop)); +typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, + png_row_infop, png_bytep)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, + png_unknown_chunkp)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); +#endif +#ifdef PNG_SETJMP_SUPPORTED +/* This must match the function definition in , and the + * application must include this before png.h to obtain the definition + * of jmp_buf. + */ +typedef void (PNGAPI *png_longjmp_ptr) PNGARG((jmp_buf, int)); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ +/* Added to libpng-1.4.0 */ +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_alloc_size_t)); +typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); + +/* The structure that holds the information to read and write PNG files. + * The only people who need to care about what is inside of this are the + * people who will be modifying the library for their own special needs. + * It should NOT be accessed directly by an application, except to store + * the jmp_buf. + */ + +struct png_struct_def +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf jmpbuf PNG_DEPSTRUCT; /* used in png_error */ + png_longjmp_ptr longjmp_fn PNG_DEPSTRUCT;/* setjmp non-local goto + function. */ +#endif + png_error_ptr error_fn PNG_DEPSTRUCT; /* function for printing + errors and aborting */ + png_error_ptr warning_fn PNG_DEPSTRUCT; /* function for printing + warnings */ + png_voidp error_ptr PNG_DEPSTRUCT; /* user supplied struct for + error functions */ + png_rw_ptr write_data_fn PNG_DEPSTRUCT; /* function for writing + output data */ + png_rw_ptr read_data_fn PNG_DEPSTRUCT; /* function for reading + input data */ + png_voidp io_ptr PNG_DEPSTRUCT; /* ptr to application struct + for I/O functions */ + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED + png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read + transform */ +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED + png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write + transform */ +#endif + +/* These were added in libpng-1.0.2 */ +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct + for user transform */ + png_byte user_transform_depth PNG_DEPSTRUCT; /* bit depth of user + transformed pixels */ + png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user + transformed pixels */ +#endif +#endif + + png_uint_32 mode PNG_DEPSTRUCT; /* tells us where we are in + the PNG file */ + png_uint_32 flags PNG_DEPSTRUCT; /* flags indicating various + things to libpng */ + png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations + to perform */ + + z_stream zstream PNG_DEPSTRUCT; /* pointer to decompression + structure (below) */ + png_bytep zbuf PNG_DEPSTRUCT; /* buffer for zlib */ + png_size_t zbuf_size PNG_DEPSTRUCT; /* size of zbuf */ + int zlib_level PNG_DEPSTRUCT; /* holds zlib compression level */ + int zlib_method PNG_DEPSTRUCT; /* holds zlib compression method */ + int zlib_window_bits PNG_DEPSTRUCT; /* holds zlib compression window + bits */ + int zlib_mem_level PNG_DEPSTRUCT; /* holds zlib compression memory + level */ + int zlib_strategy PNG_DEPSTRUCT; /* holds zlib compression + strategy */ + + png_uint_32 width PNG_DEPSTRUCT; /* width of image in pixels */ + png_uint_32 height PNG_DEPSTRUCT; /* height of image in pixels */ + png_uint_32 num_rows PNG_DEPSTRUCT; /* number of rows in current pass */ + png_uint_32 usr_width PNG_DEPSTRUCT; /* width of row at start of write */ + png_size_t rowbytes PNG_DEPSTRUCT; /* size of row in bytes */ +#if 0 /* Replaced with the following in libpng-1.4.1 */ + png_size_t irowbytes PNG_DEPSTRUCT; +#endif +/* Added in libpng-1.4.1 */ +#ifdef PNG_USER_LIMITS_SUPPORTED + /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk + * can occupy when decompressed. 0 means unlimited. + * We will change the typedef from png_size_t to png_alloc_size_t + * in libpng-1.6.0 + */ + png_alloc_size_t user_chunk_malloc_max PNG_DEPSTRUCT; +#endif + png_uint_32 iwidth PNG_DEPSTRUCT; /* width of current interlaced + row in pixels */ + png_uint_32 row_number PNG_DEPSTRUCT; /* current row in interlace pass */ + png_bytep prev_row PNG_DEPSTRUCT; /* buffer to save previous + (unfiltered) row */ + png_bytep row_buf PNG_DEPSTRUCT; /* buffer to save current + (unfiltered) row */ + png_bytep sub_row PNG_DEPSTRUCT; /* buffer to save "sub" row + when filtering */ + png_bytep up_row PNG_DEPSTRUCT; /* buffer to save "up" row + when filtering */ + png_bytep avg_row PNG_DEPSTRUCT; /* buffer to save "avg" row + when filtering */ + png_bytep paeth_row PNG_DEPSTRUCT; /* buffer to save "Paeth" row + when filtering */ + png_row_info row_info PNG_DEPSTRUCT; /* used for transformation + routines */ + + png_uint_32 idat_size PNG_DEPSTRUCT; /* current IDAT size for read */ + png_uint_32 crc PNG_DEPSTRUCT; /* current chunk CRC value */ + png_colorp palette PNG_DEPSTRUCT; /* palette from the input file */ + png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in + palette */ + png_uint_16 num_trans PNG_DEPSTRUCT; /* number of transparency values */ + png_byte chunk_name[5] PNG_DEPSTRUCT; /* null-terminated name of current + chunk */ + png_byte compression PNG_DEPSTRUCT; /* file compression type + (always 0) */ + png_byte filter PNG_DEPSTRUCT; /* file filter type (always 0) */ + png_byte interlaced PNG_DEPSTRUCT; /* PNG_INTERLACE_NONE, + PNG_INTERLACE_ADAM7 */ + png_byte pass PNG_DEPSTRUCT; /* current interlace pass (0 - 6) */ + png_byte do_filter PNG_DEPSTRUCT; /* row filter flags (see + PNG_FILTER_ below ) */ + png_byte color_type PNG_DEPSTRUCT; /* color type of file */ + png_byte bit_depth PNG_DEPSTRUCT; /* bit depth of file */ + png_byte usr_bit_depth PNG_DEPSTRUCT; /* bit depth of users row */ + png_byte pixel_depth PNG_DEPSTRUCT; /* number of bits per pixel */ + png_byte channels PNG_DEPSTRUCT; /* number of channels in file */ + png_byte usr_channels PNG_DEPSTRUCT; /* channels at start of write */ + png_byte sig_bytes PNG_DEPSTRUCT; /* magic bytes read/written from + start of file */ + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) + png_uint_16 filler PNG_DEPSTRUCT; /* filler bytes for pixel + expansion */ +#endif + +#ifdef PNG_bKGD_SUPPORTED + png_byte background_gamma_type PNG_DEPSTRUCT; +# ifdef PNG_FLOATING_POINT_SUPPORTED + float background_gamma PNG_DEPSTRUCT; +# endif + png_color_16 background PNG_DEPSTRUCT; /* background color in + screen gamma space */ +#ifdef PNG_READ_GAMMA_SUPPORTED + png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized + to gamma 1.0 */ +#endif +#endif /* PNG_bKGD_SUPPORTED */ + +#ifdef PNG_WRITE_FLUSH_SUPPORTED + png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing + output */ + png_uint_32 flush_dist PNG_DEPSTRUCT; /* how many rows apart to flush, + 0 - no flush */ + png_uint_32 flush_rows PNG_DEPSTRUCT; /* number of rows written since + last flush */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + int gamma_shift PNG_DEPSTRUCT; /* number of "insignificant" bits + 16-bit gamma */ +#ifdef PNG_FLOATING_POINT_SUPPORTED + float gamma PNG_DEPSTRUCT; /* file gamma value */ + float screen_gamma PNG_DEPSTRUCT; /* screen gamma value + (display_exponent) */ +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep gamma_table PNG_DEPSTRUCT; /* gamma table for 8-bit + depth files */ + png_bytep gamma_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to screen */ + png_bytep gamma_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */ + png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit + depth files */ + png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to + screen */ + png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) + png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in each + available channel */ +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) + png_color_8 shift PNG_DEPSTRUCT; /* shift for significant bit + tranformation */ +#endif + +#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ + || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep trans_alpha PNG_DEPSTRUCT; /* alpha values for + paletted files */ + png_color_16 trans_color PNG_DEPSTRUCT; /* transparent color for + non-paletted files */ +#endif + + png_read_status_ptr read_row_fn PNG_DEPSTRUCT; /* called after each + row is decoded */ + png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each + row is encoded */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header + data fully read */ + png_progressive_row_ptr row_fn PNG_DEPSTRUCT; /* called after each + prog. row is decoded */ + png_progressive_end_ptr end_fn PNG_DEPSTRUCT; /* called after image + is complete */ + png_bytep save_buffer_ptr PNG_DEPSTRUCT; /* current location in + save_buffer */ + png_bytep save_buffer PNG_DEPSTRUCT; /* buffer for previously + read data */ + png_bytep current_buffer_ptr PNG_DEPSTRUCT; /* current location in + current_buffer */ + png_bytep current_buffer PNG_DEPSTRUCT; /* buffer for recently + used data */ + png_uint_32 push_length PNG_DEPSTRUCT; /* size of current input + chunk */ + png_uint_32 skip_length PNG_DEPSTRUCT; /* bytes to skip in + input data */ + png_size_t save_buffer_size PNG_DEPSTRUCT; /* amount of data now + in save_buffer */ + png_size_t save_buffer_max PNG_DEPSTRUCT; /* total size of + save_buffer */ + png_size_t buffer_size PNG_DEPSTRUCT; /* total amount of + available input data */ + png_size_t current_buffer_size PNG_DEPSTRUCT; /* amount of data now + in current_buffer */ + int process_mode PNG_DEPSTRUCT; /* what push library + is currently doing */ + int cur_palette PNG_DEPSTRUCT; /* current push library + palette index */ + +# ifdef PNG_TEXT_SUPPORTED + png_size_t current_text_size PNG_DEPSTRUCT; /* current size of + text input data */ + png_size_t current_text_left PNG_DEPSTRUCT; /* how much text left + to read in input */ + png_charp current_text PNG_DEPSTRUCT; /* current text chunk + buffer */ + png_charp current_text_ptr PNG_DEPSTRUCT; /* current location + in current_text */ +# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* For the Borland special 64K segment handler */ + png_bytepp offset_table_ptr PNG_DEPSTRUCT; + png_bytep offset_table PNG_DEPSTRUCT; + png_uint_16 offset_table_number PNG_DEPSTRUCT; + png_uint_16 offset_table_count PNG_DEPSTRUCT; + png_uint_16 offset_table_count_free PNG_DEPSTRUCT; +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED + png_bytep palette_lookup PNG_DEPSTRUCT; /* lookup table for quantizing */ + png_bytep quantize_index PNG_DEPSTRUCT; /* index translation for palette + files */ +#endif + +#if defined(PNG_READ_QUANTIZE_SUPPORTED) || defined(PNG_hIST_SUPPORTED) + png_uint_16p hist PNG_DEPSTRUCT; /* histogram */ +#endif + +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED + png_byte heuristic_method PNG_DEPSTRUCT; /* heuristic for row + filter selection */ + png_byte num_prev_filters PNG_DEPSTRUCT; /* number of weights + for previous rows */ + png_bytep prev_filters PNG_DEPSTRUCT; /* filter type(s) of + previous row(s) */ + png_uint_16p filter_weights PNG_DEPSTRUCT; /* weight(s) for previous + line(s) */ + png_uint_16p inv_filter_weights PNG_DEPSTRUCT; /* 1/weight(s) for + previous line(s) */ + png_uint_16p filter_costs PNG_DEPSTRUCT; /* relative filter + calculation cost */ + png_uint_16p inv_filter_costs PNG_DEPSTRUCT; /* 1/relative filter + calculation cost */ +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED + png_charp time_buffer PNG_DEPSTRUCT; /* String to hold RFC 1123 time text */ +#endif + +/* New members added in libpng-1.0.6 */ + + png_uint_32 free_me PNG_DEPSTRUCT; /* flags items libpng is + responsible for freeing */ + +#ifdef PNG_USER_CHUNKS_SUPPORTED + png_voidp user_chunk_ptr PNG_DEPSTRUCT; + png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read + chunk handler */ +#endif + +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED + int num_chunk_list PNG_DEPSTRUCT; + png_bytep chunk_list PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.0.3 */ +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED + png_byte rgb_to_gray_status PNG_DEPSTRUCT; + /* These were changed from png_byte in libpng-1.0.6 */ + png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT; + png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT; + png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ + defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* Changed from png_byte to png_uint_32 at version 1.2.0 */ + png_uint_32 mng_features_permitted PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.7 */ +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ +#ifdef PNG_MNG_FEATURES_SUPPORTED + png_byte filter_type PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.2.0 */ + +/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ +#ifdef PNG_USER_MEM_SUPPORTED + png_voidp mem_ptr PNG_DEPSTRUCT; /* user supplied struct for + mem functions */ + png_malloc_ptr malloc_fn PNG_DEPSTRUCT; /* function for + allocating memory */ + png_free_ptr free_fn PNG_DEPSTRUCT; /* function for + freeing memory */ +#endif + +/* New member added in libpng-1.0.13 and 1.2.0 */ + png_bytep big_row_buf PNG_DEPSTRUCT; /* buffer to save current + (unfiltered) row */ + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* The following three members were added at version 1.0.14 and 1.2.4 */ + png_bytep quantize_sort PNG_DEPSTRUCT; /* working sort array */ + png_bytep index_to_palette PNG_DEPSTRUCT; /* where the original + index currently is + in the palette */ + png_bytep palette_to_index PNG_DEPSTRUCT; /* which original index + points to this + palette color */ +#endif + +/* New members added in libpng-1.0.16 and 1.2.6 */ + png_byte compression_type PNG_DEPSTRUCT; + +#ifdef PNG_USER_LIMITS_SUPPORTED + png_uint_32 user_width_max PNG_DEPSTRUCT; + png_uint_32 user_height_max PNG_DEPSTRUCT; + /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown + * chunks that can be stored (0 means unlimited). + */ + png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.25 and 1.2.17 */ +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED + /* Storage for unknown chunk that the library doesn't recognize. */ + png_unknown_chunk unknown_chunk PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.2.26 */ + png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT; + png_uint_32 old_prev_row_size PNG_DEPSTRUCT; + +/* New member added in libpng-1.2.30 */ + png_charp chunkdata PNG_DEPSTRUCT; /* buffer for reading chunk data */ + +#ifdef PNG_IO_STATE_SUPPORTED +/* New member added in libpng-1.4.0 */ + png_uint_32 io_state PNG_DEPSTRUCT; +#endif +}; + + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef png_structp version_1_4_4; + +typedef png_struct FAR * FAR * png_structpp; + +/* Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + */ + +/* Returns the version number of the library */ +PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, + int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (ie return non-zero). + */ +PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, + png_size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). + */ +#define png_check_sig(sig,n) !png_sig_cmp((sig), 0, (n)) + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +PNG_EXPORT(png_structp,png_create_read_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED; + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +PNG_EXPORT(png_structp,png_create_write_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED; + +PNG_EXPORT(png_size_t,png_get_compression_buffer_size) + PNGARG((png_structp png_ptr)); + +PNG_EXPORT(void,png_set_compression_buffer_size) + PNGARG((png_structp png_ptr, png_size_t size)); + +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp + * match up. + */ +#ifdef PNG_SETJMP_SUPPORTED +/* This function returns the jmp_buf built in to *png_ptr. It must be + * supplied with an appropriate 'longjmp' function to use on that jmp_buf + * unless the default error function is overridden in which case NULL is + * acceptable. The size of the jmp_buf is checked against the actual size + * allocated by the library - the call will return NULL on a mismatch + * indicating an ABI mismatch. + */ +PNG_EXPORT(jmp_buf*, png_set_longjmp_fn) + PNGARG((png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t + jmp_buf_size)); +# define png_jmpbuf(png_ptr) \ + (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf))) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) +#endif + +#ifdef PNG_READ_SUPPORTED +/* Reset the compression stream */ +PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); +#endif + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORT(png_structp,png_create_read_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED; +PNG_EXPORT(png_structp,png_create_write_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED; +#endif + +/* Write the PNG file signature. */ +PNG_EXPORT(void,png_write_sig) PNGARG((png_structp png_ptr)); + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_bytep data, png_size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); + +/* Allocate and initialize the info structure */ +PNG_EXPORT(png_infop,png_create_info_struct) + PNGARG((png_structp png_ptr)) PNG_ALLOCATED; + +PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, + png_size_t png_info_struct_size)); + +/* Writes all the PNG information before the image. */ +PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. */ +PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED +PNG_EXPORT(png_charp,png_convert_to_rfc1123) + PNGARG((png_structp png_ptr, png_timep ptime)); +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED +/* Convert from a struct tm to png_time */ +PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, + struct tm FAR * ttime)); + +/* Convert from time_t to png_time. Uses gmtime() */ +PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, + time_t ttime)); +#endif /* PNG_CONVERT_tIME_SUPPORTED */ + +#ifdef PNG_READ_EXPAND_SUPPORTED +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); +PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); +PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED +/* Expand the grayscale to 24-bit RGB if necessary. */ +PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +/* Reduce RGB to grayscale. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, + int error_action, double red, double green )); +#endif +PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green )); +PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp + png_ptr)); +#endif + +PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, + png_colorp palette)); + +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED +PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ +PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +#define PNG_FILLER_BEFORE 0 +#define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ +PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ + defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, + png_color_8p true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. */ +PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +/* Handle alpha and tRNS by replacing with a background color. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, + png_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)); +#endif +#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +#define PNG_BACKGROUND_GAMMA_SCREEN 1 +#define PNG_BACKGROUND_GAMMA_FILE 2 +#define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#ifdef PNG_READ_16_TO_8_SUPPORTED +/* Strip the second byte of information from a 16-bit depth file. */ +PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* Turn on quantizing, and reduce the palette to the number of colors + * available. Prior to libpng-1.4.2, this was png_set_dither(). + */ +PNG_EXPORT(void,png_set_quantize) PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_uint_16p histogram, int full_quantize)); +#endif +/* This migration aid will be removed from libpng-1.5.0 */ +#define png_set_dither png_set_quantize + +#ifdef PNG_READ_GAMMA_SUPPORTED +/* Handle gamma correction. Screen_gamma=(display_exponent) */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, + double screen_gamma, double default_file_gamma)); +#endif +#endif + + +#ifdef PNG_WRITE_FLUSH_SUPPORTED +/* Set how many lines between output flushes - 0 for no flushing */ +PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); +#endif + +/* Optional update palette with requested transformations */ +PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); + +/* Optional call to update the users info structure */ +PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. */ +PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read a row of data. */ +PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, + png_bytep row, + png_bytep display_row)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the whole image into memory at once. */ +PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, + png_bytepp image)); +#endif + +/* Write a row of image data */ +PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, + png_bytep row)); + +/* Write a few rows of image data */ +PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_uint_32 num_rows)); + +/* Write the image data */ +PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, + png_bytepp image)); + +/* Write the end of the PNG file. */ +PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. */ +PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +/* Free any memory associated with the png_info_struct */ +PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, + png_infopp info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp + png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(void,png_destroy_write_struct) + PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); + +/* Set the libpng method of handling chunk CRC errors */ +PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, + int crit_action, int ancil_action)); + +/* Values for png_set_crc_action() to say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explination of the compression functions. + */ + +/* Set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, + int filters)); + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */ +/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ + * defines, either the default (minimum-sum-of-absolute-differences), or + * the experimental method (weighted-minimum-sum-of-absolute-differences). + * + * Weights are factors >= 1.0, indicating how important it is to keep the + * filter type consistent between rows. Larger numbers mean the current + * filter is that many times as likely to be the same as the "num_weights" + * previous filters. This is cumulative for each previous row with a weight. + * There needs to be "num_weights" values in "filter_weights", or it can be + * NULL if the weights aren't being specified. Weights have no influence on + * the selection of the first row filter. Well chosen weights can (in theory) + * improve the compression for a given image. + * + * Costs are factors >= 1.0 indicating the relative decoding costs of a + * filter type. Higher costs indicate more decoding expense, and are + * therefore less likely to be selected over a filter with lower computational + * costs. There needs to be a value in "filter_costs" for each valid filter + * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't + * setting the costs. Costs try to improve the speed of decompression without + * unduly increasing the compressed image size. + * + * A negative weight or cost indicates the default value is to be used, and + * values in the range [0.0, 1.0) indicate the value is to remain unchanged. + * The default values for both weights and costs are currently 1.0, but may + * change if good general weighting/cost heuristics can be found. If both + * the weights and costs are set to 1.0, this degenerates the WEIGHTED method + * to the UNWEIGHTED method, but with added encoding time/computation. + */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, + int heuristic_method, int num_weights, png_doublep filter_weights, + png_doublep filter_costs)); +#endif +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ + +/* Heuristic used for row filter selection. These defines should NOT be + * changed. + */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer caclulations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, + int level)); + +PNG_EXPORT(void,png_set_compression_mem_level) + PNGARG((png_structp png_ptr, int mem_level)); + +PNG_EXPORT(void,png_set_compression_strategy) + PNGARG((png_structp png_ptr, int strategy)); + +PNG_EXPORT(void,png_set_compression_window_bits) + PNGARG((png_structp png_ptr, int window_bits)); + +PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, + int method)); + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng.txt for + * more information. + */ + +#ifdef PNG_STDIO_SUPPORTED +/* Initialize the input/output for the PNG file to the default functions. */ +PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, + png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + * It is probably a mistake to use NULL for output_flush_fn if + * write_data_fn is not also NULL unless you have built libpng with + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's + * default flush function, which uses the standard *FILE structure, will + * be used. + */ +PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); + +PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, + png_read_status_ptr read_row_fn)); + +PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr read_user_transform_fn)); +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr write_user_transform_fn)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp + png_ptr, png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +PNG_EXPORT(png_voidp,png_get_user_transform_ptr) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp + png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, + png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn)); + +/* Returns the user pointer associated with the push read functions */ +PNG_EXPORT(png_voidp,png_get_progressive_ptr) + PNGARG((png_structp png_ptr)); + +/* Function to be called when data becomes available */ +PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); + +/* Function that combines rows. Not very much different than the + * png_combine_row() call. Is this even used????? + */ +PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, + png_bytep old_row, png_bytep new_row)); +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; +/* Added at libpng version 1.4.0 */ +PNG_EXPORT(png_voidp,png_calloc) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; + +/* Added at libpng version 1.2.4 */ +PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; + +/* Frees a pointer allocated by png_malloc() */ +PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); + +/* Free data that was allocated internally */ +PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 free_me, int num)); +/* Reassign responsibility for freeing existing data, whether allocated + * by libpng or by the application */ +PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, + png_infop info_ptr, int freer, png_uint_32 mask)); +/* Assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#define PNG_FREE_UNKN 0x0200 +#define PNG_FREE_LIST 0x0400 +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; +PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, + png_voidp ptr)); +#endif + +#ifndef PNG_NO_ERROR_TEXT +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)) PNG_NORETURN; + +/* The same, but the chunk name is prepended to the error string. */ +PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)) PNG_NORETURN; + +#else +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN; +#endif + +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* Non-fatal error in libpng, chunk name is prepended to message. */ +PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +#ifdef PNG_BENIGN_ERRORS_SUPPORTED +/* Benign error in libpng. Can continue, but may have a problem. + * User can choose whether to handle as a fatal error or as a warning. */ +PNG_EXPORT(void,png_benign_error) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* Same, chunk name is prepended to message. */ +PNG_EXPORT(void,png_chunk_benign_error) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +PNG_EXPORT(void,png_set_benign_errors) PNGARG((png_structp + png_ptr, int allowed)); +#endif + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +PNG_EXPORT(png_size_t,png_get_rowbytes) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* Returns row_pointers, which is an array of pointers to scanlines that was + * returned from png_read_png(). + */ +PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, +png_infop info_ptr)); +/* Set row_pointers, which is an array of pointers to scanlines for use + * by png_write_png(). + */ +PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image height in pixels. */ +PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image bit_depth. */ +PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image color_type. */ +PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image filter_type. */ +PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image interlace_type. */ +PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image compression_type. */ +PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +#endif + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +#endif /* PNG_EASY_ACCESS_SUPPORTED */ + +/* Returns pointer to signature string read from PNG header */ +PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p *background)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p background)); +#endif + +#ifdef PNG_cHRM_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point + *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point + *int_blue_x, png_fixed_point *int_blue_y)); +#endif +#endif + +#ifdef PNG_cHRM_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double white_x, double white_y, double red_x, + double red_y, double green_x, double green_y, double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#ifdef PNG_gAMA_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *file_gamma)); +#endif +PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_file_gamma)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double file_gamma)); +#endif +PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p *hist)); +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p hist)); +#endif + +PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, + int *type, int *nparams, png_charp *units, png_charpp *params)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_charp units, png_charpp params)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp *palette, int *num_palette)); + +PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp palette, int num_palette)); + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p *sig_bit)); +#endif + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p sig_bit)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *intent)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charpp name, int *compression_type, + png_charpp profile, png_uint_32 *proflen)); + /* Note to maintainer: profile should be png_bytepp */ +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp name, int compression_type, + png_charp profile, png_uint_32 proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tpp entries)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tp entries, int nentries)); +#endif + +#ifdef PNG_TEXT_SUPPORTED +/* png_get_text also returns the number of text chunks in *num_text */ +PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#ifdef PNG_TEXT_SUPPORTED +PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep *mod_time)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep mod_time)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep *trans_alpha, int *num_trans, + png_color_16p *trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep trans_alpha, int num_trans, + png_color_16p trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +#endif + +#ifdef PNG_sCAL_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, double *width, double *height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED */ + +#ifdef PNG_sCAL_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, double width, double height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ + +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +/* Provide a list of chunks and how they are to be handled, if the built-in + handling or default unknown chunk handling is not desired. Any chunks not + listed will be handled in the default manner. The IHDR and IEND chunks + must not be listed. + keep = 0: follow default behaviour + = 1: do not keep + = 2: keep only if safe-to-copy + = 3: keep even if unsafe-to-copy +*/ +PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp + png_ptr, int keep, png_bytep chunk_list, int num_chunks)); +PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep + chunk_name)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); +PNG_EXPORT(void, png_set_unknown_chunk_location) + PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); +PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp + png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + * If you need to turn it off for a chunk that your application has freed, + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); + */ +PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, + png_infop info_ptr, int mask)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* The "params" pointer is currently not used and is for future expansion. */ +PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +#endif + +PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); +PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); +PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp + png_ptr, png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. + */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp + png_ptr, png_uint_32 strip_mode)); +#endif + +/* Added in libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp + png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); +PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp + png_ptr)); +/* Added in libpng-1.4.0 */ +PNG_EXPORT(void,png_set_chunk_cache_max) PNGARG((png_structp + png_ptr, png_uint_32 user_chunk_cache_max)); +PNG_EXPORT(png_uint_32,png_get_chunk_cache_max) + PNGARG((png_structp png_ptr)); +/* Added in libpng-1.4.1 */ +PNG_EXPORT(void,png_set_chunk_malloc_max) PNGARG((png_structp + png_ptr, png_alloc_size_t user_chunk_cache_max)); +PNG_EXPORT(png_alloc_size_t,png_get_chunk_malloc_max) + PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) +PNG_EXPORT(png_uint_32,png_get_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(png_uint_32,png_get_x_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(png_uint_32,png_get_y_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(float,png_get_x_offset_inches) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(float,png_get_y_offset_inches) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pHYs_dpi) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif /* PNG_pHYs_SUPPORTED */ +#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ + +/* Added in libpng-1.4.0 */ +#ifdef PNG_IO_STATE_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_io_state) PNGARG((png_structp png_ptr)); + +PNG_EXPORT(png_bytep,png_get_io_chunk_name) + PNGARG((png_structp png_ptr)); + +/* The flags returned by png_get_io_state() are the following: */ +#define PNG_IO_NONE 0x0000 /* no I/O at this moment */ +#define PNG_IO_READING 0x0001 /* currently reading */ +#define PNG_IO_WRITING 0x0002 /* currently writing */ +#define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ +#define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ +#define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ +#define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ +#define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ +#define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ +#endif /* ?PNG_IO_STATE_SUPPORTED */ + +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project + * defs + */ + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ + * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 \ + - (png_uint_16)(alpha)) + (png_uint_16)128); \ + (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } + +# define png_composite_16(composite, fg, alpha, bg) \ + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ + * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(png_uint_32)(65535L \ + - (png_uint_32)(alpha)) + (png_uint_32)32768L); \ + (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } + +#else /* Standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + (png_uint_16)127) / 255) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ + (png_uint_32)32767) / (png_uint_32)65535L) +#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ + +#ifdef PNG_USE_READ_MACROS +/* Inline macros to do direct reads of bytes from the input buffer. + * The png_get_int_32() routine assumes we are using two's complement + * format for negative values, which is almost certainly true. + */ +# define png_get_uint_32(buf) \ + (((png_uint_32)(*(buf)) << 24) + \ + ((png_uint_32)(*((buf) + 1)) << 16) + \ + ((png_uint_32)(*((buf) + 2)) << 8) + \ + ((png_uint_32)(*((buf) + 3)))) +# define png_get_uint_16(buf) \ + (((png_uint_32)(*(buf)) << 8) + \ + ((png_uint_32)(*((buf) + 1)))) +# define png_get_int_32(buf) \ + ((png_int_32)((*(buf) & 0x80) \ + ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffff)+1)) \ + : (png_int_32)png_get_uint_32(buf))) +#else +PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf)); +PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf)); +#ifdef PNG_GET_INT_32_SUPPORTED +PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf)); +#endif +#endif +PNG_EXPORT(png_uint_32,png_get_uint_31) + PNGARG((png_structp png_ptr, png_bytep buf)); +/* No png_get_int_16 -- may be added if there's a real need for it. */ + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ +PNG_EXPORT(void,png_save_uint_32) + PNGARG((png_bytep buf, png_uint_32 i)); +PNG_EXPORT(void,png_save_int_32) + PNGARG((png_bytep buf, png_int_32 i)); + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +PNG_EXPORT(void,png_save_uint_16) + PNGARG((png_bytep buf, unsigned int i)); +/* No png_save_int_16 -- may be added if there's a real need for it. */ + +/* ************************************************************************* */ + +/* Various modes of operation. Note that after an init, mode is set to + * zero automatically when the structure is created. + */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_HAVE_IDAT 0x04 +#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ +#define PNG_HAVE_IEND 0x10 +#define PNG_HAVE_gAMA 0x20 +#define PNG_HAVE_cHRM 0x40 + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/include/pngconf.h b/include/pngconf.h new file mode 100644 index 0000000..41b13e9 --- /dev/null +++ b/include/pngconf.h @@ -0,0 +1,1540 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.4.4 - September 23, 2010 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2010 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * + */ + +/* Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#ifndef PNG_NO_LIMITS_H +# include +#endif + +/* Added at libpng-1.2.9 */ + +/* config.h is created by and PNG_CONFIGURE_LIBPNG is set by the "configure" + * script. + */ +#ifdef PNG_CONFIGURE_LIBPNG +# ifdef HAVE_CONFIG_H +# include "config.h" +# endif +#endif + +/* + * Added at libpng-1.2.8 + * + * PNG_USER_CONFIG has to be defined on the compiler command line. This + * includes the resource compiler for Windows DLL configurations. + */ +#ifdef PNG_USER_CONFIG +# include "pngusr.h" +# ifndef PNG_USER_PRIVATEBUILD +# define PNG_USER_PRIVATEBUILD +# endif +#endif + +/* + * If you create a private DLL you should define in "pngusr.h" the following: + * #define PNG_USER_PRIVATEBUILD + * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." + * #define PNG_USER_DLLFNAME_POSTFIX + * e.g. // private DLL "libpng14gx.dll" + * #define PNG_USER_DLLFNAME_POSTFIX "gx" + * + * The following macros are also at your disposal if you want to complete the + * DLL VERSIONINFO structure. + * - PNG_USER_VERSIONINFO_COMMENTS + * - PNG_USER_VERSIONINFO_COMPANYNAME + * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS + */ + +#ifdef __STDC__ +# ifdef SPECIALBUILD +# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ + are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") +# endif + +# ifdef PRIVATEBUILD +# pragma message("PRIVATEBUILD is deprecated.\ + Use PNG_USER_PRIVATEBUILD instead.") +# define PNG_USER_PRIVATEBUILD PRIVATEBUILD +# endif +#endif /* __STDC__ */ + +/* End of material added to libpng-1.2.8 */ + +#ifndef PNG_VERSION_INFO_ONLY + +/* This is the size of the compression buffer, and thus the size of + * an IDAT chunk. Make this whatever size you feel is best for your + * machine. One of these will be allocated per png_struct. When this + * is full, it writes the data to the disk, and does some other + * calculations. Making this an extremely small size will slow + * the library down, but you may want to experiment to determine + * where it becomes significant, if you are concerned with memory + * usage. Note that zlib allocates at least 32Kb also. For readers, + * this describes the size of the buffer available to read the data in. + * Unless this gets smaller than the size of a row (compressed), + * it should not make much difference how big this is. + */ + +#ifndef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 8192 +#endif + +/* Enable if you want a write-only libpng */ + +#ifndef PNG_NO_READ_SUPPORTED +# define PNG_READ_SUPPORTED +#endif + +/* Enable if you want a read-only libpng */ + +#ifndef PNG_NO_WRITE_SUPPORTED +# define PNG_WRITE_SUPPORTED +#endif + +/* Enabled in 1.4.0. */ +#ifdef PNG_ALLOW_BENIGN_ERRORS +# define png_benign_error png_warning +# define png_chunk_benign_error png_chunk_warning +#else +# ifndef PNG_BENIGN_ERRORS_SUPPORTED +# define png_benign_error png_error +# define png_chunk_benign_error png_chunk_error +# endif +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_WARNINGS) && !defined(PNG_WARNINGS_SUPPORTED) +# define PNG_WARNINGS_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_ERROR_TEXT) && !defined(PNG_ERROR_TEXT_SUPPORTED) +# define PNG_ERROR_TEXT_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_CHECK_cHRM) && !defined(PNG_CHECK_cHRM_SUPPORTED) +# define PNG_CHECK_cHRM_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_ALIGNED_MEMORY) && !defined(PNG_ALIGNED_MEMORY_SUPPORTED) +# define PNG_ALIGNED_MEMORY_SUPPORTED +#endif + +/* Enabled by default in 1.2.0. You can disable this if you don't need to + support PNGs that are embedded in MNG datastreams */ +#ifndef PNG_NO_MNG_FEATURES +# ifndef PNG_MNG_FEATURES_SUPPORTED +# define PNG_MNG_FEATURES_SUPPORTED +# endif +#endif + +/* Added at libpng version 1.4.0 */ +#ifndef PNG_NO_FLOATING_POINT_SUPPORTED +# ifndef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FLOATING_POINT_SUPPORTED +# endif +#endif + +/* Added at libpng-1.4.0beta49 for testing (this test is no longer used + in libpng and png_calloc() is always present) + */ +#define PNG_CALLOC_SUPPORTED + +/* If you are running on a machine where you cannot allocate more + * than 64K of memory at once, uncomment this. While libpng will not + * normally need that much memory in a chunk (unless you load up a very + * large file), zlib needs to know how big of a chunk it can use, and + * libpng thus makes sure to check any memory allocation to verify it + * will fit into memory. +#define PNG_MAX_MALLOC_64K + */ +#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) +# define PNG_MAX_MALLOC_64K +#endif + +/* Special munging to support doing things the 'cygwin' way: + * 'Normal' png-on-win32 defines/defaults: + * PNG_BUILD_DLL -- building dll + * PNG_USE_DLL -- building an application, linking to dll + * (no define) -- building static library, or building an + * application and linking to the static lib + * 'Cygwin' defines/defaults: + * PNG_BUILD_DLL -- (ignored) building the dll + * (no define) -- (ignored) building an application, linking to the dll + * PNG_STATIC -- (ignored) building the static lib, or building an + * application that links to the static lib. + * ALL_STATIC -- (ignored) building various static libs, or building an + * application that links to the static libs. + * Thus, + * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and + * this bit of #ifdefs will define the 'correct' config variables based on + * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but + * unnecessary. + * + * Also, the precedence order is: + * ALL_STATIC (since we can't #undef something outside our namespace) + * PNG_BUILD_DLL + * PNG_STATIC + * (nothing) == PNG_USE_DLL + * + * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent + * of auto-import in binutils, we no longer need to worry about + * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, + * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes + * to __declspec() stuff. However, we DO need to worry about + * PNG_BUILD_DLL and PNG_STATIC because those change some defaults + * such as CONSOLE_IO. + */ +#ifdef __CYGWIN__ +# ifdef ALL_STATIC +# ifdef PNG_BUILD_DLL +# undef PNG_BUILD_DLL +# endif +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifdef PNG_DLL +# undef PNG_DLL +# endif +# ifndef PNG_STATIC +# define PNG_STATIC +# endif +# else +# ifdef PNG_BUILD_DLL +# ifdef PNG_STATIC +# undef PNG_STATIC +# endif +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifndef PNG_DLL +# define PNG_DLL +# endif +# else +# ifdef PNG_STATIC +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifdef PNG_DLL +# undef PNG_DLL +# endif +# else +# ifndef PNG_USE_DLL +# define PNG_USE_DLL +# endif +# ifndef PNG_DLL +# define PNG_DLL +# endif +# endif +# endif +# endif +#endif + +/* This protects us against compilers that run on a windowing system + * and thus don't have or would rather us not use the stdio types: + * stdin, stdout, and stderr. The only one currently used is stderr + * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will + * prevent these from being compiled and used. #defining PNG_NO_STDIO + * will also prevent these, plus will prevent the entire set of stdio + * macros and functions (FILE *, printf, etc.) from being compiled and used, + * unless (PNG_DEBUG > 0) has been #defined. + * + * #define PNG_NO_CONSOLE_IO + * #define PNG_NO_STDIO + */ + +#ifdef _WIN32_WCE +# define PNG_NO_CONSOLE_IO +# define PNG_NO_STDIO +# define PNG_NO_TIME_RFC1123 +# ifdef PNG_DEBUG +# undef PNG_DEBUG +# endif +#endif + +#if !defined(PNG_NO_STDIO) && !defined(PNG_STDIO_SUPPORTED) +# define PNG_STDIO_SUPPORTED +#endif + +#ifdef PNG_BUILD_DLL +# if !defined(PNG_CONSOLE_IO_SUPPORTED) && !defined(PNG_NO_CONSOLE_IO) +# define PNG_NO_CONSOLE_IO +# endif +#endif + +# ifdef PNG_NO_STDIO +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# ifdef PNG_DEBUG +# if (PNG_DEBUG > 0) +# include +# endif +# endif +# else +# include +# endif + +#if !(defined PNG_NO_CONSOLE_IO) && !defined(PNG_CONSOLE_IO_SUPPORTED) +# define PNG_CONSOLE_IO_SUPPORTED +#endif + +/* This macro protects us against machines that don't have function + * prototypes (ie K&R style headers). If your compiler does not handle + * function prototypes, define this macro and use the included ansi2knr. + * I've always been able to use _NO_PROTO as the indicator, but you may + * need to drag the empty declaration out in front of here, or change the + * ifdef to suit your own needs. + */ +#ifndef PNGARG + +#ifdef OF /* zlib prototype munger */ +# define PNGARG(arglist) OF(arglist) +#else + +#ifdef _NO_PROTO +# define PNGARG(arglist) () +#else +# define PNGARG(arglist) arglist +#endif /* _NO_PROTO */ + +#endif /* OF */ + +#endif /* PNGARG */ + +/* Try to determine if we are compiling on a Mac. Note that testing for + * just __MWERKS__ is not good enough, because the Codewarrior is now used + * on non-Mac platforms. + */ +#ifndef MACOS +# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ + defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) +# define MACOS +# endif +#endif + +/* Enough people need this for various reasons to include it here */ +#if !defined(MACOS) && !defined(RISCOS) +# include +#endif + +/* PNG_SETJMP_NOT_SUPPORTED and PNG_NO_SETJMP_SUPPORTED are deprecated. */ +#if !defined(PNG_NO_SETJMP) && \ + !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) +# define PNG_SETJMP_SUPPORTED +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This is an attempt to force a single setjmp behaviour on Linux. If + * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. + * + * You can bypass this test if you know that your application uses exactly + * the same setjmp.h that was included when libpng was built. Only define + * PNG_SKIP_SETJMP_CHECK while building your application, prior to the + * application's '#include "png.h"'. Don't define PNG_SKIP_SETJMP_CHECK + * while building a separate libpng library for general use. + */ + +# ifndef PNG_SKIP_SETJMP_CHECK +# ifdef __linux__ +# ifdef _BSD_SOURCE +# define PNG_SAVE_BSD_SOURCE +# undef _BSD_SOURCE +# endif +# ifdef _SETJMP_H + /* If you encounter a compiler error here, see the explanation + * near the end of INSTALL. + */ + __pngconf.h__ in libpng already includes setjmp.h; + __dont__ include it again.; +# endif +# endif /* __linux__ */ +# endif /* PNG_SKIP_SETJMP_CHECK */ + + /* Include setjmp.h for error handling */ +# include + +# ifdef __linux__ +# ifdef PNG_SAVE_BSD_SOURCE +# ifdef _BSD_SOURCE +# undef _BSD_SOURCE +# endif +# define _BSD_SOURCE +# undef PNG_SAVE_BSD_SOURCE +# endif +# endif /* __linux__ */ +#endif /* PNG_SETJMP_SUPPORTED */ + +#ifdef BSD +# include +#else +# include +#endif + +/* Other defines for things like memory and the like can go here. */ + +/* This controls how fine the quantizing gets. As this allocates + * a largish chunk of memory (32K), those who are not as concerned + * with quantizing quality can decrease some or all of these. + */ + +/* Prior to libpng-1.4.2, these were PNG_DITHER_*_BITS + * These migration aids will be removed from libpng-1.5.0. + */ +#ifdef PNG_DITHER_RED_BITS +# define PNG_QUANTIZE_RED_BITS PNG_DITHER_RED_BITS +#endif +#ifdef PNG_DITHER_GREEN_BITS +# define PNG_QUANTIZE_GREEN_BITS PNG_DITHER_GREEN_BITS +#endif +#ifdef PNG_DITHER_BLUE_BITS +# define PNG_QUANTIZE_BLUE_BITS PNG_DITHER_BLUE_BITS +#endif + +#ifndef PNG_QUANTIZE_RED_BITS +# define PNG_QUANTIZE_RED_BITS 5 +#endif +#ifndef PNG_QUANTIZE_GREEN_BITS +# define PNG_QUANTIZE_GREEN_BITS 5 +#endif +#ifndef PNG_QUANTIZE_BLUE_BITS +# define PNG_QUANTIZE_BLUE_BITS 5 +#endif + +/* This controls how fine the gamma correction becomes when you + * are only interested in 8 bits anyway. Increasing this value + * results in more memory being used, and more pow() functions + * being called to fill in the gamma tables. Don't set this value + * less then 8, and even that may not work (I haven't tested it). + */ + +#ifndef PNG_MAX_GAMMA_8 +# define PNG_MAX_GAMMA_8 11 +#endif + +/* This controls how much a difference in gamma we can tolerate before + * we actually start doing gamma conversion. + */ +#ifndef PNG_GAMMA_THRESHOLD +# define PNG_GAMMA_THRESHOLD 0.05 +#endif + +/* The following uses const char * instead of char * for error + * and warning message functions, so some compilers won't complain. + * If you do not want to use const, define PNG_NO_CONST. + */ + +#ifndef PNG_CONST +# ifndef PNG_NO_CONST +# define PNG_CONST const +# else +# define PNG_CONST +# endif +#endif + +/* The following defines give you the ability to remove code from the + * library that you will not be using. I wish I could figure out how to + * automate this, but I can't do that without making it seriously hard + * on the users. So if you are not using an ability, change the #define + * to an #undef, or pass in PNG_NO_feature and that part of the library + * will not be compiled. + + * If your linker can't find a function, you may want to make sure the + * ability is defined here. Some of these depend upon some others being + * defined. I haven't figured out all the interactions here, so you may + * have to experiment awhile to get everything to compile. If you are + * creating or using a shared library, you probably shouldn't touch this, + * as it will affect the size of the structures, and this will cause bad + * things to happen if the library and/or application ever change. + */ + +/* Any features you will not be using can be undef'ed here */ + +/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user + * to turn it off with PNG_NO_READ|WRITE_TRANSFORMS on the compile line, + * then pick and choose which ones to define without having to edit this + * file. It is safe to use the PNG_NO_READ|WRITE_TRANSFORMS + * if you only want to have a png-compliant reader/writer but don't need + * any of the extra transformations. This saves about 80 kbytes in a + * typical installation of the library. (PNG_NO_* form added in version + * 1.0.1c, for consistency; PNG_*_TRANSFORMS_NOT_SUPPORTED deprecated in + * 1.4.0) + */ + +/* Ignore attempt to turn off both floating and fixed point support */ +#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ + !defined(PNG_NO_FIXED_POINT_SUPPORTED) +# define PNG_FIXED_POINT_SUPPORTED +#endif + +#ifdef PNG_READ_SUPPORTED + +/* PNG_READ_TRANSFORMS_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_TRANSFORMS) +# define PNG_READ_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_READ_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_READ_EXPAND +# define PNG_READ_EXPAND_SUPPORTED +# endif +# ifndef PNG_NO_READ_SHIFT +# define PNG_READ_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACK +# define PNG_READ_PACK_SUPPORTED +# endif +# ifndef PNG_NO_READ_BGR +# define PNG_READ_BGR_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP +# define PNG_READ_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACKSWAP +# define PNG_READ_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT +# define PNG_READ_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_READ_QUANTIZE + /* Prior to libpng-1.4.0 this was PNG_READ_DITHER_SUPPORTED */ +# ifndef PNG_NO_READ_DITHER /* This migration aid will be removed */ +# define PNG_READ_QUANTIZE_SUPPORTED +# endif +# endif +# ifndef PNG_NO_READ_BACKGROUND +# define PNG_READ_BACKGROUND_SUPPORTED +# endif +# ifndef PNG_NO_READ_16_TO_8 +# define PNG_READ_16_TO_8_SUPPORTED +# endif +# ifndef PNG_NO_READ_FILLER +# define PNG_READ_FILLER_SUPPORTED +# endif +# ifndef PNG_NO_READ_GAMMA +# define PNG_READ_GAMMA_SUPPORTED +# endif +# ifndef PNG_NO_READ_GRAY_TO_RGB +# define PNG_READ_GRAY_TO_RGB_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP_ALPHA +# define PNG_READ_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT_ALPHA +# define PNG_READ_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_STRIP_ALPHA +# define PNG_READ_STRIP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_USER_TRANSFORM +# define PNG_READ_USER_TRANSFORM_SUPPORTED +# endif +# ifndef PNG_NO_READ_RGB_TO_GRAY +# define PNG_READ_RGB_TO_GRAY_SUPPORTED +# endif +#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ + +/* PNG_PROGRESSIVE_READ_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_NO_PROGRESSIVE_READ) && \ + !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive */ +# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ +#endif /* about interlacing capability! You'll */ + /* still have interlacing unless you change the following define: */ + +#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */ + +/* PNG_NO_SEQUENTIAL_READ_SUPPORTED is deprecated. */ +#if !defined(PNG_NO_SEQUENTIAL_READ) && \ + !defined(PNG_SEQUENTIAL_READ_SUPPORTED) && \ + !defined(PNG_NO_SEQUENTIAL_READ_SUPPORTED) +# define PNG_SEQUENTIAL_READ_SUPPORTED +#endif + +#ifndef PNG_NO_READ_COMPOSITE_NODIV +# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ +# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ +# endif +#endif + +#if !defined(PNG_NO_GET_INT_32) || defined(PNG_READ_oFFS_SUPPORTED) || \ + defined(PNG_READ_pCAL_SUPPORTED) +# ifndef PNG_GET_INT_32_SUPPORTED +# define PNG_GET_INT_32_SUPPORTED +# endif +#endif + +#endif /* PNG_READ_SUPPORTED */ + +#ifdef PNG_WRITE_SUPPORTED + +/* PNG_WRITE_TRANSFORMS_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_TRANSFORMS) +# define PNG_WRITE_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_WRITE_SHIFT +# define PNG_WRITE_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACK +# define PNG_WRITE_PACK_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_BGR +# define PNG_WRITE_BGR_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_SWAP +# define PNG_WRITE_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACKSWAP +# define PNG_WRITE_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT +# define PNG_WRITE_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_FILLER +# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ +# endif +# ifndef PNG_NO_WRITE_SWAP_ALPHA +# define PNG_WRITE_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT_ALPHA +# define PNG_WRITE_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_USER_TRANSFORM +# define PNG_WRITE_USER_TRANSFORM_SUPPORTED +# endif +#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ + +#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \ + !defined(PNG_WRITE_INTERLACING_SUPPORTED) + /* This is not required for PNG-compliant encoders, but can cause + * trouble if left undefined + */ +# define PNG_WRITE_INTERLACING_SUPPORTED +#endif + +#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ + !defined(PNG_WRITE_WEIGHTED_FILTER) && \ + defined(PNG_FLOATING_POINT_SUPPORTED) +# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#endif + +#ifndef PNG_NO_WRITE_FLUSH +# define PNG_WRITE_FLUSH_SUPPORTED +#endif + +#if !defined(PNG_NO_SAVE_INT_32) || defined(PNG_WRITE_oFFS_SUPPORTED) || \ + defined(PNG_WRITE_pCAL_SUPPORTED) +# ifndef PNG_SAVE_INT_32_SUPPORTED +# define PNG_SAVE_INT_32_SUPPORTED +# endif +#endif + +#endif /* PNG_WRITE_SUPPORTED */ + +#define PNG_NO_ERROR_NUMBERS + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +# ifndef PNG_NO_USER_TRANSFORM_PTR +# define PNG_USER_TRANSFORM_PTR_SUPPORTED +# endif +#endif + +#if defined(PNG_STDIO_SUPPORTED) && !defined(PNG_TIME_RFC1123_SUPPORTED) +# define PNG_TIME_RFC1123_SUPPORTED +#endif + +/* This adds extra functions in pngget.c for accessing data from the + * info pointer (added in version 0.99) + * png_get_image_width() + * png_get_image_height() + * png_get_bit_depth() + * png_get_color_type() + * png_get_compression_type() + * png_get_filter_type() + * png_get_interlace_type() + * png_get_pixel_aspect_ratio() + * png_get_pixels_per_meter() + * png_get_x_offset_pixels() + * png_get_y_offset_pixels() + * png_get_x_offset_microns() + * png_get_y_offset_microns() + */ +#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) +# define PNG_EASY_ACCESS_SUPPORTED +#endif + +/* Added at libpng-1.2.0 */ +#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) +# define PNG_USER_MEM_SUPPORTED +#endif + +/* Added at libpng-1.2.6 */ +#ifndef PNG_NO_SET_USER_LIMITS +# ifndef PNG_SET_USER_LIMITS_SUPPORTED +# define PNG_SET_USER_LIMITS_SUPPORTED +# endif + /* Feature added at libpng-1.4.0, this flag added at 1.4.1 */ +# ifndef PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +# define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +# endif + /* Feature added at libpng-1.4.1, this flag added at 1.4.1 */ +# ifndef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +# define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +# endif +#endif + +/* Added at libpng-1.2.43 */ +#ifndef PNG_USER_LIMITS_SUPPORTED +# ifndef PNG_NO_USER_LIMITS +# define PNG_USER_LIMITS_SUPPORTED +# endif +#endif + +/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGs no matter + * how large, set these two limits to 0x7fffffffL + */ +#ifndef PNG_USER_WIDTH_MAX +# define PNG_USER_WIDTH_MAX 1000000L +#endif +#ifndef PNG_USER_HEIGHT_MAX +# define PNG_USER_HEIGHT_MAX 1000000L +#endif + +/* Added at libpng-1.2.43. To accept all valid PNGs no matter + * how large, set these two limits to 0. + */ +#ifndef PNG_USER_CHUNK_CACHE_MAX +# define PNG_USER_CHUNK_CACHE_MAX 0 +#endif + +/* Added at libpng-1.2.43 */ +#ifndef PNG_USER_CHUNK_MALLOC_MAX +# define PNG_USER_CHUNK_MALLOC_MAX 0 +#endif + +/* Added at libpng-1.4.0 */ +#if !defined(PNG_NO_IO_STATE) && !defined(PNG_IO_STATE_SUPPORTED) +# define PNG_IO_STATE_SUPPORTED +#endif + +#ifndef PNG_LITERAL_SHARP +# define PNG_LITERAL_SHARP 0x23 +#endif +#ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET +# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b +#endif +#ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET +# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d +#endif +#ifndef PNG_STRING_NEWLINE +#define PNG_STRING_NEWLINE "\n" +#endif + +/* These are currently experimental features, define them if you want */ + +/* Very little testing */ +/* +#ifdef PNG_READ_SUPPORTED +# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# endif +#endif +*/ + +/* This is only for PowerPC big-endian and 680x0 systems */ +/* some testing */ +/* +#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED +# define PNG_READ_BIG_ENDIAN_SUPPORTED +#endif +*/ + +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# define PNG_USE_READ_MACROS +#endif + +/* Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING */ + +#if !defined(PNG_NO_POINTER_INDEXING) && \ + !defined(PNG_POINTER_INDEXING_SUPPORTED) +# define PNG_POINTER_INDEXING_SUPPORTED +#endif + + +/* Any chunks you are not interested in, you can undef here. The + * ones that allocate memory may be expecially important (hIST, + * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info + * a bit smaller. + */ + +/* The size of the png_text structure changed in libpng-1.0.6 when + * iTXt support was added. iTXt support was turned off by default through + * libpng-1.2.x, to support old apps that malloc the png_text structure + * instead of calling png_set_text() and letting libpng malloc it. It + * was turned on by default in libpng-1.4.0. + */ + +/* PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */ +#if defined(PNG_READ_SUPPORTED) && \ + !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_ANCILLARY_CHUNKS) +# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#endif + +/* PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */ +#if defined(PNG_WRITE_SUPPORTED) && \ + !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) +# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_READ_TEXT +# define PNG_NO_READ_iTXt +# define PNG_NO_READ_tEXt +# define PNG_NO_READ_zTXt +#endif + +#ifndef PNG_NO_READ_bKGD +# define PNG_READ_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +#endif +#ifndef PNG_NO_READ_cHRM +# define PNG_READ_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +#endif +#ifndef PNG_NO_READ_gAMA +# define PNG_READ_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +#endif +#ifndef PNG_NO_READ_hIST +# define PNG_READ_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +#endif +#ifndef PNG_NO_READ_iCCP +# define PNG_READ_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +#endif +#ifndef PNG_NO_READ_iTXt +# ifndef PNG_READ_iTXt_SUPPORTED +# define PNG_READ_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_oFFs +# define PNG_READ_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +#endif +#ifndef PNG_NO_READ_pCAL +# define PNG_READ_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_sCAL +# define PNG_READ_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_pHYs +# define PNG_READ_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +#endif +#ifndef PNG_NO_READ_sBIT +# define PNG_READ_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sPLT +# define PNG_READ_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sRGB +# define PNG_READ_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +#endif +#ifndef PNG_NO_READ_tEXt +# define PNG_READ_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_tIME +# define PNG_READ_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +#endif +#ifndef PNG_NO_READ_tRNS +# define PNG_READ_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +#endif +#ifndef PNG_NO_READ_zTXt +# define PNG_READ_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_OPT_PLTE +# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ +#endif /* optional PLTE chunk in RGB and RGBA images */ +#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ + defined(PNG_READ_zTXt_SUPPORTED) +# define PNG_READ_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +#endif + +#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifndef PNG_NO_READ_UNKNOWN_CHUNKS +# ifndef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_READ_USER_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_USER_CHUNKS +# ifndef PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_READ_USER_CHUNKS_SUPPORTED +# endif +# ifndef PNG_USER_CHUNKS_SUPPORTED +# define PNG_USER_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif + +#ifdef PNG_WRITE_SUPPORTED +#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_WRITE_TEXT +# define PNG_NO_WRITE_iTXt +# define PNG_NO_WRITE_tEXt +# define PNG_NO_WRITE_zTXt +#endif +#ifndef PNG_NO_WRITE_bKGD +# define PNG_WRITE_bKGD_SUPPORTED +# ifndef PNG_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_cHRM +# define PNG_WRITE_cHRM_SUPPORTED +# ifndef PNG_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_gAMA +# define PNG_WRITE_gAMA_SUPPORTED +# ifndef PNG_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_hIST +# define PNG_WRITE_hIST_SUPPORTED +# ifndef PNG_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iCCP +# define PNG_WRITE_iCCP_SUPPORTED +# ifndef PNG_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iTXt +# ifndef PNG_WRITE_iTXt_SUPPORTED +# define PNG_WRITE_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_oFFs +# define PNG_WRITE_oFFs_SUPPORTED +# ifndef PNG_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pCAL +# define PNG_WRITE_pCAL_SUPPORTED +# ifndef PNG_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sCAL +# define PNG_WRITE_sCAL_SUPPORTED +# ifndef PNG_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pHYs +# define PNG_WRITE_pHYs_SUPPORTED +# ifndef PNG_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sBIT +# define PNG_WRITE_sBIT_SUPPORTED +# ifndef PNG_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sPLT +# define PNG_WRITE_sPLT_SUPPORTED +# ifndef PNG_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sRGB +# define PNG_WRITE_sRGB_SUPPORTED +# ifndef PNG_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tEXt +# define PNG_WRITE_tEXt_SUPPORTED +# ifndef PNG_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tIME +# define PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tRNS +# define PNG_WRITE_tRNS_SUPPORTED +# ifndef PNG_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_zTXt +# define PNG_WRITE_zTXt_SUPPORTED +# ifndef PNG_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +# endif +#endif +#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ + defined(PNG_WRITE_zTXt_SUPPORTED) +# define PNG_WRITE_TEXT_SUPPORTED +# ifndef PNG_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +# endif +#endif + +#ifdef PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_NO_CONVERT_tIME +# ifndef _WIN32_WCE +/* The "tm" structure is not supported on WindowsCE */ +# ifndef PNG_CONVERT_tIME_SUPPORTED +# define PNG_CONVERT_tIME_SUPPORTED +# endif +# endif +# endif +#endif + +#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifndef PNG_NO_WRITE_FILTER +# ifndef PNG_WRITE_FILTER_SUPPORTED +# define PNG_WRITE_FILTER_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif +#endif /* PNG_WRITE_SUPPORTED */ + +/* Turn this off to disable png_read_png() and + * png_write_png() and leave the row_pointers member + * out of the info structure. + */ +#ifndef PNG_NO_INFO_IMAGE +# define PNG_INFO_IMAGE_SUPPORTED +#endif + +/* Need the time information for converting tIME chunks */ +#ifdef PNG_CONVERT_tIME_SUPPORTED + /* "time.h" functions are not supported on WindowsCE */ +# include +#endif + +/* Some typedefs to get us started. These should be safe on most of the + * common platforms. The typedefs should be at least as large as the + * numbers suggest (a png_uint_32 must be at least 32 bits long), but they + * don't have to be exactly that size. Some compilers dislike passing + * unsigned shorts as function parameters, so you may be better off using + * unsigned int for png_uint_16. + */ + +#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL) +typedef unsigned int png_uint_32; +typedef int png_int_32; +#else +typedef unsigned long png_uint_32; +typedef long png_int_32; +#endif +typedef unsigned short png_uint_16; +typedef short png_int_16; +typedef unsigned char png_byte; + +#ifdef PNG_NO_SIZE_T + typedef unsigned int png_size_t; +#else + typedef size_t png_size_t; +#endif +#define png_sizeof(x) (sizeof (x)) + +/* The following is needed for medium model support. It cannot be in the + * pngpriv.h header. Needs modification for other compilers besides + * MSC. Model independent support declares all arrays and pointers to be + * large using the far keyword. The zlib version used must also support + * model independent data. As of version zlib 1.0.4, the necessary changes + * have been made in zlib. The USE_FAR_KEYWORD define triggers other + * changes that are needed. (Tim Wegner) + */ + +/* Separate compiler dependencies (problem here is that zlib.h always + * defines FAR. (SJT) + */ +#ifdef __BORLANDC__ +# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) +# define LDATA 1 +# else +# define LDATA 0 +# endif + /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ +# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) +# define PNG_MAX_MALLOC_64K +# if (LDATA != 1) +# ifndef FAR +# define FAR __far +# endif +# define USE_FAR_KEYWORD +# endif /* LDATA != 1 */ + /* Possibly useful for moving data out of default segment. + * Uncomment it if you want. Could also define FARDATA as + * const if your compiler supports it. (SJT) +# define FARDATA FAR + */ +# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ +#endif /* __BORLANDC__ */ + + +/* Suggest testing for specific compiler first before testing for + * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, + * making reliance oncertain keywords suspect. (SJT) + */ + +/* MSC Medium model */ +#ifdef FAR +# ifdef M_I86MM +# define USE_FAR_KEYWORD +# define FARDATA FAR +# include +# endif +#endif + +/* SJT: default case */ +#ifndef FAR +# define FAR +#endif + +/* At this point FAR is always defined */ +#ifndef FARDATA +# define FARDATA +#endif + +/* Typedef for floating-point numbers that are converted + to fixed-point with a multiple of 100,000, e.g., int_gamma */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void FAR * png_voidp; +typedef png_byte FAR * png_bytep; +typedef png_uint_32 FAR * png_uint_32p; +typedef png_int_32 FAR * png_int_32p; +typedef png_uint_16 FAR * png_uint_16p; +typedef png_int_16 FAR * png_int_16p; +typedef PNG_CONST char FAR * png_const_charp; +typedef char FAR * png_charp; +typedef png_fixed_point FAR * png_fixed_point_p; + +#ifndef PNG_NO_STDIO +typedef FILE * png_FILE_p; +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * png_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte FAR * FAR * png_bytepp; +typedef png_uint_32 FAR * FAR * png_uint_32pp; +typedef png_int_32 FAR * FAR * png_int_32pp; +typedef png_uint_16 FAR * FAR * png_uint_16pp; +typedef png_int_16 FAR * FAR * png_int_16pp; +typedef PNG_CONST char FAR * FAR * png_const_charpp; +typedef char FAR * FAR * png_charpp; +typedef png_fixed_point FAR * FAR * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * FAR * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char FAR * FAR * FAR * png_charppp; + +/* Define PNG_BUILD_DLL if the module being built is a Windows + * LIBPNG DLL. + * + * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. + * It is equivalent to Microsoft predefined macro _DLL that is + * automatically defined when you compile using the share + * version of the CRT (C Run-Time library) + * + * The cygwin mods make this behavior a little different: + * Define PNG_BUILD_DLL if you are building a dll for use with cygwin + * Define PNG_STATIC if you are building a static library for use with cygwin, + * -or- if you are building an application that you want to link to the + * static library. + * PNG_USE_DLL is defined by default (no user action needed) unless one of + * the other flags is defined. + */ + +#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) +# define PNG_DLL +#endif + +/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", + * you may get warnings regarding the linkage of png_zalloc and png_zfree. + * Don't ignore those warnings; you must also reset the default calling + * convention in your compiler to match your PNGAPI, and you must build + * zlib and your applications the same way you build libpng. + */ + +#ifdef __CYGWIN__ +# undef PNGAPI +# define PNGAPI __cdecl +# undef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef __WATCOMC__ +# ifndef PNGAPI +# define PNGAPI +# endif +#endif + +#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) +# ifndef PNG_NO_MODULEDEF +# define PNG_NO_MODULEDEF +# endif +#endif + +#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) +# define PNG_IMPEXP +#endif + +#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ + (( defined(_Windows) || defined(_WINDOWS) || \ + defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) + +# ifndef PNGAPI +# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) +# define PNGAPI __cdecl +# else +# define PNGAPI _cdecl +# endif +# endif + +# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ + 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) +# define PNG_IMPEXP +# endif + +# ifndef PNG_IMPEXP + +# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol +# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol + + /* Borland/Microsoft */ +# if defined(_MSC_VER) || defined(__BORLANDC__) +# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) +# define PNG_EXPORT PNG_EXPORT_TYPE1 +# else +# define PNG_EXPORT PNG_EXPORT_TYPE2 +# ifdef PNG_BUILD_DLL +# define PNG_IMPEXP __export +# else +# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in VC++ */ +# endif /* Exists in Borland C++ for + C++ classes (== huge) */ +# endif +# endif + +# ifndef PNG_IMPEXP +# ifdef PNG_BUILD_DLL +# define PNG_IMPEXP __declspec(dllexport) +# else +# define PNG_IMPEXP __declspec(dllimport) +# endif +# endif +# endif /* PNG_IMPEXP */ +#else /* !(DLL || non-cygwin WINDOWS) */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# ifndef PNGAPI +# define PNGAPI _System +# endif +# else +# if 0 /* ... other platforms, with other meanings */ +# endif +# endif +#endif + +#ifndef PNGAPI +# define PNGAPI +#endif +#ifndef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef PNG_BUILDSYMS +# ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END +# endif +#endif + +#ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol +#endif + +#define PNG_USE_LOCAL_ARRAYS /* Not used in libpng, defined for legacy apps */ + +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. + * + * Added at libpng-1.2.41. + */ + +#ifndef PNG_NO_PEDANTIC_WARNINGS +# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED +# define PNG_PEDANTIC_WARNINGS_SUPPORTED +# endif +#endif + +#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. Added at libpng + * version 1.2.41. + */ +# ifdef __GNUC__ +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif + + /* This specifically protects structure members that should only be + * accessed from within the library, therefore should be empty during + * a library build. + */ +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_DEPSTRUCT +# define PNG_DEPSTRUCT __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif /* PNG_PRIVATE */ +# endif /* __GNUC__ */ +#endif /* PNG_PEDANTIC_WARNINGS */ + +#ifndef PNG_DEPRECATED +# define PNG_DEPRECATED /* Use of this function is deprecated */ +#endif +#ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* The result of this function must be checked */ +#endif +#ifndef PNG_NORETURN +# define PNG_NORETURN /* This function does not return */ +#endif +#ifndef PNG_ALLOCATED +# define PNG_ALLOCATED /* The result of the function is new memory */ +#endif +#ifndef PNG_DEPSTRUCT +# define PNG_DEPSTRUCT /* Access to this struct member is deprecated */ +#endif +#ifndef PNG_PRIVATE +# define PNG_PRIVATE /* This is a private libpng function */ +#endif + +/* Users may want to use these so they are not private. Any library + * functions that are passed far data must be model-independent. + */ + +/* memory model/platform independent fns */ +#ifndef PNG_ABORT +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) +# define PNG_ABORT() ExitProcess(0) +# else +# define PNG_ABORT() abort() +# endif +#endif + +#ifdef USE_FAR_KEYWORD +/* Use this to make far-to-near assignments */ +# define CHECK 1 +# define NOCHECK 0 +# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) +# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) +# define png_strcpy _fstrcpy +# define png_strncpy _fstrncpy /* Added to v 1.2.6 */ +# define png_strlen _fstrlen +# define png_memcmp _fmemcmp /* SJT: added */ +# define png_memcpy _fmemcpy +# define png_memset _fmemset +# define png_sprintf sprintf +#else +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) +# /* Favor Windows over C runtime fns */ +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# define png_strcpy lstrcpyA +# define png_strncpy lstrcpynA +# define png_strlen lstrlenA +# define png_memcmp memcmp +# define png_memcpy CopyMemory +# define png_memset memset +# define png_sprintf wsprintfA +# else +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# define png_strcpy strcpy +# define png_strncpy strncpy /* Added to v 1.2.6 */ +# define png_strlen strlen +# define png_memcmp memcmp /* SJT: added */ +# define png_memcpy memcpy +# define png_memset memset +# define png_sprintf sprintf +# endif +#endif + +#ifndef PNG_NO_SNPRINTF +# ifdef _MSC_VER +# define png_snprintf _snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 _snprintf +# define png_snprintf6 _snprintf +# else +# define png_snprintf snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 snprintf +# define png_snprintf6 snprintf +# endif +#else + /* You don't have or don't want to use snprintf(). Caution: Using + * sprintf instead of snprintf exposes your application to accidental + * or malevolent buffer overflows. If you don't have snprintf() + * as a general rule you should provide one (you can get one from + * Portable OpenSSH). + */ +# define png_snprintf(s1,n,fmt,x1) png_sprintf(s1,fmt,x1) +# define png_snprintf2(s1,n,fmt,x1,x2) png_sprintf(s1,fmt,x1,x2) +# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \ + png_sprintf(s1,fmt,x1,x2,x3,x4,x5,x6) +#endif + +/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, + * and no smaller than png_uint_32. Casts from png_size_t or png_uint_32 + * to png_alloc_size_t are not necessary; in fact, it is recommended + * not to use them at all so that the compiler can complain when something + * turns out to be problematic. + * Casts in the other direction (from png_alloc_size_t to png_size_t or + * png_uint_32) should be explicitly applied; however, we do not expect + * to encounter practical situations that require such conversions. + */ +#if defined(__TURBOC__) && !defined(__FLAT__) + typedef unsigned long png_alloc_size_t; +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + typedef unsigned long png_alloc_size_t; +# else + /* This is an attempt to detect an old Windows system where (int) is + * actually 16 bits, in that case png_malloc must have an argument with a + * bigger size to accomodate the requirements of the library. + */ +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) && \ + (!defined(INT_MAX) || INT_MAX <= 0x7ffffffeL) + typedef DWORD png_alloc_size_t; +# else + typedef png_size_t png_alloc_size_t; +# endif +# endif +#endif +/* End of memory model/platform independent support */ + +/* Just a little check that someone hasn't tried to define something + * contradictory. + */ +#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) +# undef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 65536L +#endif + + +/* Added at libpng-1.2.8 */ +#endif /* PNG_VERSION_INFO_ONLY */ + +#endif /* PNGCONF_H */ diff --git a/include/zconf.h b/include/zconf.h new file mode 100644 index 0000000..b234387 --- /dev/null +++ b/include/zconf.h @@ -0,0 +1,428 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2010 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# define uncompress z_uncompress +# define zError z_zError +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 1 /* was set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef STDC +# include /* for off_t */ +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define z_off64_t off64_t +#else +# define z_off64_t z_off_t +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/include/zlib.h b/include/zlib.h new file mode 100644 index 0000000..bfbba83 --- /dev/null +++ b/include/zlib.h @@ -0,0 +1,1613 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.5, April 19th, 2010 + + Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.5" +#define ZLIB_VERNUM 0x1250 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 5 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use in the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). Some + output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed code + block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the stream + are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least the + value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect the + compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the + exact value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit() does not process any header information -- that is deferred + until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing will + resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all the uncompressed data. (The size + of the uncompressed data may have been saved by the compressor for this + purpose.) The next operation on this stream must be inflateEnd to deallocate + the decompression state. The use of Z_FINISH is never required, but can be + used to inform inflate that a faster approach may be used for the single + inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK or Z_TREES is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained, so applications that need that information should + instead use raw inflate, see inflateInit2() below, or inflateBack() and + perform their own processing of the gzip header and trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any call + of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. The + stream will keep the same compression level and any other attributes that + may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression level is changed, the input available so far is + compressed with the old level (and may be flushed); the new level will take + effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to be + compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if + strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been + found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the + success case, the application may save the current current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above or -1 << 16 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the normal + behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed buffer. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef voidp gzFile; /* opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) Also "a" + can be used instead of "w" to request that the gzip stream that will be + written be appended to the file. "+" will result in an error, since reading + and writing to the same gzip file is not supported. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Two buffers are allocated, either both of the specified size when + writing, or one of the specified size and the other twice that size when + reading. A larger buffer size of, for example, 64K or 128K bytes will + noticeably increase the speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. If + the input file was not in gzip format, gzread copies the given number of + bytes into the buffer. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream, or failing that, reading the rest + of the input file directly without decompression. The entire input file + will be read if gzread is called until it returns less than the requested + len. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. +*/ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or 0 in case of error. The number of + uncompressed bytes written is limited to 8191, or one less than the buffer + size given to gzbuffer(). The caller should assure that this limit is not + exceeded. If it is exceeded, then gzprintf() will return an error (0) with + nothing written. In this case, there may also be a buffer overflow with + unpredictable consequences, which is possible only if zlib was compiled with + the insecure functions sprintf() or vsprintf() because the secure snprintf() + or vsnprintf() functions were not available. This can be determined using + zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatented gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. This state can change from + false to true while reading the input file if the end of a gzip stream is + reached, but is followed by data that is not another gzip stream. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the for the crc. Pre- and post-conditioning (one's + complement) is performed within this function so it shouldn't be done by the + application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# ifdef _LARGEFILE64_SOURCE + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +#endif + +/* hack for buggy compilers */ +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; +#endif + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/lib/libpng14.a b/lib/libpng14.a new file mode 100644 index 0000000000000000000000000000000000000000..3ce34d79355fb530c009d6ca38a151a33ec9cbce GIT binary patch literal 210758 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

guac`Div~-je#o^L(To z+WQ!tz_|2kuBo55Y@zR6KW|A*ELOuw45kl0Uc<@6ruvlXsnydMV!H1iyYT#rh{{Tz zvyB{Dfq98fAb_l{#q=b=Q$x+Xh1K!KnucmNrj3~OEUm6J@~K-^7ps;4&QIoXjY>J} zQ(d>LcDZ_RdPK5$W5F}NtR9m-7dF1EadBO3%()jVUS97ULa6cTdG*2E+XU*CT~*T% z%jbjcVo6Pdqmm=4@C;7F&5zeDStzA|dF_&#YExW}NVckgMxemqGUb>ZFQ^6x6;>Oe zP#q9};eu1)>e#&b==DUO$S`GEw+vF%DW=6!IxY|;8$!%qGZyauBekPZ;)S=&%!IMiT@WmwGLBZqus>SA zFF#}OUly4%H`wBeN1m_p$dt}ttD7f?pqdb_D)|zY+!HHHaESahwBBY76;o^OIdCy6 zRX!Kc2MNuY%kP|rC&O?1$(BWvY+1m%k$LYhPo#X$q8`kXjQW}|wimIVaw0f?ka=pw zQhPoQnb^??^!lDVl-I%!==I8@P_ix!jQ{rY0^_)G;ov0{dRg8q@O95|xZ~=m>p`rM z15+G@A$~gflfh2$#!a zn5R~DWR5U#VAhyxdz-l54?03XtQ~jqb*;_UuN2DBW-(Rg!lsY%Il&qzwxO|&gm1j_ z)jd{N*hLoXGfs1`Jlz%%^MfyP8UnNTFQzKGclM6=c450M5`UkGhecI#qc)1|J&IyH z_=I)E?e2Yq2IQj~H!yAmB|k*015)aFyaGS^+HFC zi|#|6>GC)kR80%5o&S*73TO}&@+S;Kc1!KbvwfRzeX0s!9QvGF+M!4J;$=UuXd_zu zC^561Ty!xFUSneWE)TcmS&uNfxCU=hWhQOzX@NCAtzwa{d-~DQGWY;3IXSvlGdC{zbxR&O4Y(k8E%=>ATlp-sBF?}RVk@&nlQw;xM^ZH}DNl0!og@DtL zkD+cp#^PI#I+nQ@@0&)hI}*4yoZ<2wlXd%4#dc^d$_|w{a}xbvLC1T{-Y-MlOKy2} z4__5%-HJzwj_z)K#)QW1>+!6)?XTi|$o6aR!sC+if>y^&uQR%u`+#ZA(NsnFAlTzJ z$8tagIoSwh#Fn?&R!@J6{?wQ5zypYK0&$0*rDssVB}=_{=MvfK$y|VA@{+9`lC5V< zwt6&MXbt$H><-D+Gk&&uT(%@X2!`DlkVKxiFGGm=>bdsYa^43lcVnYFy81Ha>whFC zQn54-{n})h-I(-`Y)<-;JEd~G`sbwCSg|!EYi~xcNd6VibfSSlGoYCp%AA>4ITX1L z_oh9y7@evZ+Syw>9$Vf=5a;J-$mWNhN&s0wQ$|vfm7#0@8?B8T?L%?%a46fjLDpM! z1kSddiCiYO)msb9m8Mm|*{Y8Pij>ztq{YOWpPk4u7>7PTj9vk+#Boo)gSJJU&{s#f z1@ENi6tfEcY8 z@W%#3f_k;&O>nnWJz%M~RsGn4?na1tudzpD#MXpQ7(HoSe7UL8u9e=qYHs0Hb5(gP0! ze`G+A9wccTdmCV=pu3H)ld5l9)sHObUlR$w*~mOXT{Z>t$kS-tZAC}VbwbS}#vYRoPWMf4ofa$iR zc99fLC3fe-`NM-p)18)QDW&_Zi=~9?LXrc#(#RDu%>ioBUNln~46EJYQg-evJ)5|# zVJM?M+1%{Mi;bTjt&EU~fkKpk?zLJvp|UYDayY*v^vy=}=Tne`-+AE>RkV4%Ux^?d z_TR|ZziBw#_U=Z{AKGwUiYREMbs$6~){O7Y;5hnjs>p8aF&~G91P1(56}x5I8xLj6 zwl}?6cOLg>>u&CRqiyXj;0@azw5APP(rQain85MmF}88R*;ekq%WyEb|IVrbbcy@~ z>Ph;i!V|=;ov^m9y+~Tz+_8q(dvkWafw2Y}7zWKaFj+g_zyx=`aoYvK`i}25+unFK z5AFfyMw5$++_LA5I*Qskn-vAS+`Y2rE&Ji>!k#xa!=)95OrR}zP8dDRY0~yiLEGEj z-hLhOg+*7)M}L5CEXV@lx+|7=0X+k#RG@K~4{)P(VkGa%_0?P&Irx?9V?ePKlnWwu z{fm1`4bTH0^D$tOC=efmrPD|U_E3Gymw=f)!D51QYGeQ_k7F>K=1kiE1n1LWAph#* z0jyw>Vw)ptbHR~@ek|rcEW+iK^XCQ7$$I6i%Ve##1Q%jLD>OMvHlcNyk4!xs>mvSVe=8`bOh4^34b2r4 zHW4^Hi=QI|%3VR3i^he$!ek8^!Q2`0eB)P8P7bVHlNG5aCQZ8eDUVDkH!Cf$ITyK7 zjyF;fF+rC(H(sxU_F)-DnxnxosB7l^a2Bw28st@xOth=zau_`zIWdXO$0}kKYg-lq z$&UZvykT&ql(59~TeHTrt>Mm=K{@`zgxI7uh#9apMIOt|OhpC1K>ZFEi1h`euYu zjUU5U<@H$Z;i6d_LdI!rd;(`!!Gzvi7>$*8OKvAv#`Q>lD4HzP#V}S!4hq>Rf_0vM z0qcB1Q5}v?VLkJ9=k5z?9I#yVi@nPbQ&GFbgM9kJD%YF}XUsCD1(7?Bay`J>6>q5$&HqG2e%&F!h3nZT(Mz>-i9-9Il}dhCQDL zihiv5z^n{mmH|@&p8YVZfjKjT;R-X2IQn7k0A^zdb008=pe^;oa11oVVRC!fYWT6W z^*?V^FB@!Y*~AtVphM5|>2^3uwOZElElMzEOi+uPIi??EDZLea?=++{(WI$m8|r)6 z=*U84`8jAYCrV>>j%&4~xpb~RHbl02PV`Ue@}%XFHWL%D32l*CABf{Ur+uh&=$z5W z;Zh=yWwG&i(jL9hVb^6O@MKA54ibDXp~^WL6bbRd#PHKdgEJ3CH@H4FI-#TonHhV{ zpA8$Hd;+ny=E5>0uTv3kAEsqUxBR-p@%`mh6Y%}{>pqL`xvMU~)ByA!i(IBl!O5*f zRTGe=7}0>ajJ75wz&XMoLRw!eJBK}l#1#mX!BorzlV})T6h&{W;gkZG+IhWH6U3WX z7Cb|#3z0GhbI4FW951c3-Cn9{LSid!oeyHE3hlM&h!#ux&#rYiERrHMxyin{B&05(D@4nEIu9Sk2sbnEstR=p}kVnbZE2LPuh-2 z$9>h5OYvum7F~UUEMiVb~A*@A`Obfptr7J#YT2?0~W`ZeX%+acYz>66xabT!Fl;Bm)5&Z z*mT*!m=={2SE##~?7kHv9e8yes8(0kEuW9`2d7RwsPhM>%$PQPMj1c;?D+wx=~9tb z?(Df^iq4+pfI7l(MDgI64Re)(w0s{-@%F2OIW>P zR~ne^a1{$EHdRgCs9Ttuyg^#L5OrmPdRP{TCk4yX@Hyxuv&h}BioUEuRK5E$sih7?R^z_@*4f`-9UBW-P zG5k*gvaM+f(l(v{kX$`Hk&`S;pG}5gbEgsAym8ToeQOz}V(42%di$i)JQq?{LAAA$ zCPoIlTU63&ToV$VWf~mo2Cmyer&P&q|LW5a9_AL5IKqME(1o@eL#THmlZ(s1d|*PH z`3R9vvJjFZB+V9{`_zoHWbhZvc&dEKvBY7Kx#ipNayd*4jk_8{1Q{RvT=SIv;soRk zV~papo@VxPG;PQ%lD8O;AjaHT?F3~*!+3!Hm@>hFj0h~pBXs$d{FEJC@L58}Y3>Q5k8~*oKji9SK}10c(1LOCYw<3S4is@Zu7TR* zB0H_WEeyosW=zXPKrrU-vSQBEfTOT|9@!QR8$p=WtYJ`)0+Xg{V~%jr+)dd}W_dE7 z$+0#tv(j>8Wj6C+gs?fKaT^VeTcOR=B0!@Ya?MT!O$- zm-twGK+yDWXZ-+>Y%g`(vP^yTQ02uSETFvi9VbFUytbwfBOcnf4+yor2*1O$eMJmKGFAP__Ex2oY9CM_+1?BweI?GAAxNNvZwET4nENf^ zm8d2x;iHt)Na~;dJt}NCsV^UFQiq$QHYuqQlS1H7Nj(KMX096dlho{-q`r8tN!6O9O7@e~Z;G?k;_`z{ z>K}SgGJU&}8c~2ta+3Pq!6wyilA5}oq__nYR`zuVo7Ax;sV)q9M^lS$sDD5$Rvm0o zKYaz!%)O3^7Gl-ZksWL3ZFsbjWf1s>x%u4DLE_&981cQ1Rj{O2k3{sf}7f@#<;&~;O zW9WH~^BjT7R}7VtT)+U8|9!tup_dHxUw#cBMu###1E^yFP|(dRY;tXb2+d*|XK$${ zA~^8qumag`5Nxs-qMacmD1ByZZ9L4y!``gf1EUvQ;zNZ2kDR1s4O%3zbSH6twLImb4HzV}P%E&&G5qjClYX@M-h)&rc4;Go9 zdvMHIZk~)N+GRwDy3lkB9_%b(iSik+976orB`9Cm3#F2D^j;Lj~V>&9^^4pU?~5q<*26p zIM@)rC@2=->L9{rbiYLwVAM#G+VpzMM(Wf>iGCRk8zIKNKt_EX+ystiY>i=a#mHHX z)b9oVnj@;N87nt2EKeuC1BOp|sBC}-_Hd4_UydT;a8zHzOG4c$eiP*(TAym#Aqhoq zc*#(14+R<%f%mK3I=wDgd?Z|1H8C6>>o5|?qIRGNVeOSpk2Ze zL#Bi6a9}a%k5*e4E4Y|+t?vD#PiL2)i%Emh#76hYrVs?U)>90#fo9@$EhcGKl7H1` zAy{$}#q<=GOid>P4-tNOeWJGvwYG&jCe(vE_yklVy}}G#a%Zqjr3lIjKWHVuq9Ni% zgK(2wkuRF?k4Sklp6z`I(rKE1NzipzbV-bE z0Dgx>m!O#oA8pjlwi-G87^#JXpjw|#2=vJkf-bv~29{k%69VHNKu1SC4fKJJs9yO} zcMU3&3<=@&wzG~lT9!&jG1v#j{x0gCnTjIL?gPW)AV$}ur9Fv31Mdm3{FOIBF8 z%^G`^Eah>G7s$U{`CtWlISc=DLrE5ONL#L9 zqRW$%M^EU3Bv^>rA4rHKc!10Co6+T4BV>E>?qVd1y2m`mbuBa)M~GaD*2s8i1Jryz zHqV`xlyX@(aoeL$L#Vd)6SRO^+b1ZHvMXN6_F~1fwVPGl*7n0JhIc*@y|rCmPXQgS zs|hA*!ZZ=UN}CKE94*1xmA0f_VB5vJJ18%ko`eZ3wHagHyBMfqSF*K4Q_wUdn#&^@vEZo}f}vy5CBAQ>YK%_BeL)q*wx`R43Uw`#uP84Jk>e2xu!?aqE|F#x zz@zp!tV~~t>u2?Z5H*fIL{6jz<{pAO%p7k>%LTmr%spEg%>RO0aH+{wnma;~&lx3hK87xUQoCmqdH zDCjAMrWhv(H(m2X0kOI*G@WTrj$~3z?9$g(%FeFqbsf;8{d{zFfz?Rc6c0eYh~Fjg zL4pp`_6srBm%C+PK-1152t*n=E8MD5sGzGe{Z-TBhzJM=Q=45v^(YWj>c zQu-`rrr$(HIA^%f40%KWh&T%fb67+4#%yWwxgW5N{moLl$G8pY_+tX-aA~s;SxnPq;rf-0UW=jyU6+)c8 z4(nF$h~*yT1m|VfSIC3RT>5jCA;|_OWc`SQQZ$5>YrH~36)|}b;ldwmwa{dgq{1{g zAHkSX)^hj$PUa)&7bqu1{rf9|lHinz%uaDCW{__Z@pLPVO~iFQjshy;(^P|3(UT3v zk%5vB3$+7cTYETFHGt(dJg9@^qONibamW!Mo;ZZS;W?O`jdPj9@qzHU2~HDugduB@ zM#9-~Alof84B&({5AkUsTDF*<$f z8Bw1YFh`$yM$)JGr~pDaTc2*us6L&A07joa-IuLTeYlkgvmMl@y|_!6qff9Xy!UE0 zv4J9`2J{6=CH-5Ll8YbPU+|44I3IGvZ2B5<->UT+7~K9p{?X*_syfYf>iL9EgS zncxBd(^Y;gNfGjOJ6jM^H}(c4^D|8{)uc1g*da^;qXh7SDMTdN@*O3bvf0s)DgxMr z&S^X;Wr)LM-h@WB1*<~BS@pf)*_O0lSb;^M?PZT|Mi;3jlHu~AwjkuuiV$r8>{9cU zth7?yYgWdxl9sY6@&@uSDygCYL1W=k&1pUMn;UWw&Q1O($?XMl_g z+$ig4Zi9{I!SHAX#{lXdeWVi&99)XX89eAf!mfMkD57r;hY^RdSHNcMP;Mev8fOaJ z+sPVb?8Wh|#8#XM+?%BBdZViZ29mQU3I>A|ANh~Kj@eo)d~b~QKz`YQhK!hZ(;_v8O(`2Pp~cjN#3<*~APWtHcD zvP=y@Tc~Wo@`i?ZeXM3-+58n{XI*smx#t2!v!IPM^ZMnBFO5ZLJ~a|Mx5A6WJUAOG z&$~F%c;P2!M;gyQ>%2(g>~k-U)X(``W2BzW<)8ROW2BDJ>drp9GP3yGi!P2VI;-NW z$bvZ+Rz&81`jh8G5Z{ZO>z#j2LyRSaxrE|1}vi#j~8u^joT zU4l0%@Fqs%ysK*Ly_*QqZ^W||`XELbuD0TCx4d8x3?*q(kTuJe#}_SzoR-!%)HF6i zc4Ago!Zz})3Y!jm>Xwz^{tv>rV~ol`%h6?W zJ1QJkv^GRd6f$2KJ6a53XyN*mysYBhWzi&@xM}Uz1dVXb603Rgd#d@ZGQU^h_v84- zD<8=E5@Z%Hht#uvNod2&h)lxE;`3fqv|KH#^@FRFi7)JqD1*Jr0n@ zZ3OfM@#X6*>U)#(eIC#i;ydJgUvs|aj*mpR=sYp90FcJ51EiEU0lG|lpLD*vobORM zCsqlenK?*ycA=K|uv%!!dNJKrYf`vjm% z#P=oVn{mD$#fXwMWMZTekaBeiAf^0mKo^VeL(X@L^PPbEG#82Q2LWl^lK^SluQ}W| z9d4h)@tqqDHw_i`LZR|c2i=UG_X5FY&ySS&4rikSFOr1xUla;Gk2Fv-Ii!sr*(t zsK@#K+2M+hw^U9Cq%r;zkfyQ6`M%;52XCVQjf~Xif(UQQ^MfLZ98wUp5>O5d`x45a2>)7A?DKrg zT)5_iF!gZNhA>TVQMde9?Qk)ik68~_JcQW@*Ox<>PPkTuFx_x9hcLZxB}142xNZz# zBFN=UAxtSS>p~bVaPXF#&*2nc?h0Ybf%#qtQwhwyAF|);J%rj%@0Ex7#E|J^D!3y^KYmMKITeb8qtFI znCpPKGlcmXFi(Uq8-U^ZgP$)R1By-w(s>4$PlYhA0`ql;$+gSzBlvYgQ~b}HXP1NX zji{fHfl8Sn`Pg=Yr>DXg-kS?!J{7{yJ{A@dvcg;z3PaDj91Kr@>4&N3f03sp6o#R1 z%fWE&qaT}#Cqo#%__74^{cxCPLt*ImQV5g(9iP93!Z6m@G5qGorp{A(`mvZ3axgP< zFz4l9uE@bG%fYP5!L;XKzMX@)KL_(@4rW&l=A|6WUvn_y#%AZ8*KNbnI4K8nb`Iv^ z5Jt*kX?+%*not;e{#yrmCQq!Yq4E?){; zZhSmT(ecK``V3BE-6BPCt>olWr=2?E6m@g4Pux?C8|!{_PoH7jSOOHceP0QSaN<5) z{kbqGZu|NZ76rw9n(@bSp}421n=6OnKGnEwcw_C3>xtrT_~SZ_xD9_?Wu*Ib!ygwM z#clZG+M~D)e_VzXx8aW~lHxY}aZOR&hCi-TiretVbvSVw{t-wlX*twdqQ?$(vKZni1e{oe&kA6D7fKp#uSr7pCegA)W}9- zh{@Iut4(-k*Kmc$d#hK}En9H%si#dn&E`{(jj?$RC=Q@aaqyvEv}+P{nkf>&xscOL z!N_Y&!kbE<+E0&CSd5py@P?Eu0|xWUXR){n?c+>HS@iR&-z329aW zLy2M4*ng=@_+QMGnUC@_M4>Eftgl`=uknkJ*6CA?@<7y!xPn{<0$ACdU$?Br z7XxiP1p`Qq?9*a2*%b72mKPZ-6f!Seld)>iQS%&`z}9+{>6$LA0X@w=33I{K8kYoP8$InAVPLbf(Y4a z2_j@;C5Vu%l^`Od!A1h}8u5ahEOCbfBRev|xUw-Lhy{yl7JN~arFz-CrKWgU2rNaV h0zHO?IPp_KcciXv0#p4)^6$?_<>ELkH; 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 literal 0 HcmV?d00001 diff --git a/main.c b/main.c index ff6fcc2..16317a3 100644 --- a/main.c +++ b/main.c @@ -488,13 +488,10 @@ HRESULT __stdcall ddraw_SetCooperativeLevel(IDirectDrawImpl *This, HWND hWnd, DW GetWindowText(This->hWnd, (LPTSTR)&This->title, sizeof(This->title)); - if(This->vhack == 1) - { - if (strcmp(This->title, "Command & Conquer")) - { - This->vhack = 0; - } - } + if (!strcmp(This->title, "Red Alert")) + { + ddraw->isredalert = 1; + } return DD_OK; } diff --git a/main.h b/main.h index 636839a..1351246 100644 --- a/main.h +++ b/main.h @@ -81,6 +81,7 @@ typedef struct IDirectDrawImpl BOOL vsync; float sensitivity; BOOL vhack; + BOOL isredalert; DWORD WINAPI (*renderer)(void); } IDirectDrawImpl; diff --git a/render.c b/render.c index dac6f0a..6bfdfd8 100644 --- a/render.c +++ b/render.c @@ -168,15 +168,17 @@ DWORD WINAPI render_main(void) return 0; } -static unsigned char getPixel(int x, int y) -{ - return ((unsigned char *)ddraw->primary->surface)[y*ddraw->primary->lPitch + x*ddraw->primary->lXPitch]; -} -BOOL detect_cutscene() -{ - if(ddraw->width <= CUTSCENE_WIDTH || ddraw->height <= CUTSCENE_HEIGHT) - return FALSE; - return getPixel(CUTSCENE_WIDTH + 1, 0) == 0 || getPixel(CUTSCENE_WIDTH + 5, 1) == 0 ? TRUE : FALSE; -} +//BOOL detect_cutscene() +//{ +// if(ddraw->width <= CUTSCENE_WIDTH || ddraw->height <= CUTSCENE_HEIGHT) +// return FALSE; +// +// return getPixel(CUTSCENE_WIDTH + 1, 0) == 0 || getPixel(CUTSCENE_WIDTH + 5, 1) == 0 ? TRUE : FALSE; +//} + +#define DECLARE_VAR(name, type, address) type name = address + +//DECLARE_VAR(InMovie, int*, 0x00665F58); +//DECLARE_VAR(IsVQA640, int*, 0x0065D7BC); \ No newline at end of file diff --git a/render_soft.c b/render_soft.c index 4abee4e..ef7c890 100644 --- a/render_soft.c +++ b/render_soft.c @@ -20,6 +20,35 @@ #include "main.h" #include "surface.h" +#define CUTSCENE_WIDTH 640 +#define CUTSCENE_HEIGHT 400 + +static unsigned char getPixel(int x, int y) +{ + return ((unsigned char *)ddraw->primary->surface)[y*ddraw->primary->lPitch + x*ddraw->primary->lXPitch]; +} + +int* InMovie = (int*)0x00665F58; +int* IsVQA640 = (int*)0x0065D7BC; +BYTE* ShouldStretch = (BYTE*)0x00711015; + +BOOL detect_cutscene() +{ + if (ddraw->isredalert == TRUE) + { + if ((*InMovie && !*IsVQA640) || *ShouldStretch) + { + return TRUE; + } + return FALSE; + } + else if(ddraw->width <= CUTSCENE_WIDTH || ddraw->height <= CUTSCENE_HEIGHT) + return FALSE; + + return getPixel(CUTSCENE_WIDTH + 1, 0) == 0 || getPixel(CUTSCENE_WIDTH + 5, 1) == 0 ? TRUE : FALSE; +} + + DWORD WINAPI render_soft_main(void) { PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256); @@ -73,8 +102,6 @@ DWORD WINAPI render_soft_main(void) tick_start = GetTickCount(); } - EnterCriticalSection(&ddraw->cs); - if (ddraw->primary && (ddraw->primary->palette || ddraw->bpp == 16)) { if (ddraw->primary->palette && ddraw->primary->palette->data_rgb == NULL) @@ -86,11 +113,19 @@ DWORD WINAPI render_soft_main(void) { StretchDIBits(ddraw->render.hDC, dst_left, dst_top, dst_width, dst_height, 0, 0, ddraw->width, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS, SRCCOPY); } - else - { - SetDIBitsToDevice(ddraw->render.hDC, 0, 0, ddraw->width, ddraw->height, 0, 0, 0, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS); - } + else if (!detect_cutscene()) + { + SetDIBitsToDevice(ddraw->render.hDC, 0, 0, ddraw->width, ddraw->height, 0, 0, 0, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS); + } + } + if (ddraw->primary && detect_cutscene()) // for vhack + { + // for 800 x 600: + //StretchDIBits(ddraw->render.hDC, 0, 0, ddraw->render.width, ddraw->render.height, 0, 200, CUTSCENE_WIDTH, CUTSCENE_HEIGHT, ddraw->primary->surface, bmi, DIB_RGB_COLORS, SRCCOPY); + StretchDIBits(ddraw->render.hDC, 0, 0, ddraw->render.width, ddraw->render.height, 0, ddraw->render.height-400, CUTSCENE_WIDTH, CUTSCENE_HEIGHT, ddraw->primary->surface, bmi, DIB_RGB_COLORS, SRCCOPY); + } + LeaveCriticalSection(&ddraw->cs); if(ddraw->render.maxfps > 0) @@ -102,7 +137,6 @@ DWORD WINAPI render_soft_main(void) Sleep( frame_len - (tick_end - tick_start) ); } } - SetEvent(ddraw->render.ev); }