From 0159a87a8ae6d5718b62054d21678924c85847ea Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 5 Jul 2015 08:45:39 +0300 Subject: [PATCH] Add support for cross-compiling from Linux. As a side effect, zlib and libpng are now git submodules, based on their respective official git repositories. This is necessary, because MinGW has a different ABI and it cannot use the prebuilt binaries built by MSVC. The submodules are also used for Windows, for several reasons: * to allow 64-bit builds; * to allow using newer MSVC, which doesn't like the prebuilt libraries; * to keep the libraries updated. --- .gitmodules | 6 + CMakeLists.txt | 43 +- README.md | 55 +- appveyor.yml | 3 +- cmake/Toolchain-mingw32.cmake | 13 + cmake/Toolchain-mingw64.cmake | 13 + extlib/libpng | 1 + extlib/libpng/libpng.lib | Bin 361748 -> 0 bytes extlib/libpng/png.h | 2666 --------------------------------- extlib/libpng/pngconf.h | 596 -------- extlib/libpng/pnglibconf.h | 186 --- extlib/zlib | 1 + extlib/zlib/zconf.h | 432 ------ extlib/zlib/zlib.h | 1613 -------------------- extlib/zlib/zlib.lib | Bin 117868 -> 0 bytes src/CMakeLists.txt | 11 +- tools/CMakeLists.txt | 2 + 17 files changed, 126 insertions(+), 5515 deletions(-) create mode 100644 .gitmodules create mode 100644 cmake/Toolchain-mingw32.cmake create mode 100644 cmake/Toolchain-mingw64.cmake create mode 160000 extlib/libpng delete mode 100644 extlib/libpng/libpng.lib delete mode 100644 extlib/libpng/png.h delete mode 100644 extlib/libpng/pngconf.h delete mode 100644 extlib/libpng/pnglibconf.h create mode 160000 extlib/zlib delete mode 100644 extlib/zlib/zconf.h delete mode 100644 extlib/zlib/zlib.h delete mode 100644 extlib/zlib/zlib.lib diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..2f0d95c6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "extlib/zlib"] + path = extlib/zlib + url = https://github.com/madler/zlib +[submodule "extlib/libpng"] + path = extlib/libpng + url = git://git.code.sf.net/p/libpng/code diff --git a/CMakeLists.txt b/CMakeLists.txt index 12ceba74..796ef81f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,11 @@ if((CMAKE_CXX_PLATFORM_ID STREQUAL "Linux") AND CMAKE_COMPILER_IS_GNUCC) set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") endif() +if(MINGW) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") +endif() + # dependencies CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H) @@ -61,22 +66,40 @@ if(WIN32) find_package(PNG) if(NOT PNG_FOUND) - message(STATUS "Using prebuilt libpng") + message(STATUS "Using in-tree libpng") + + add_subdirectory(extlib/zlib) + + message(STATUS "Using in-tree libpng") + + set(ZLIB_LIBRARY + zlibstatic) + set(ZLIB_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/zlib" + "${CMAKE_BINARY_DIR}/extlib/zlib") + set(SKIP_INSTALL_ALL + ON) + add_subdirectory(extlib/libpng) set(PNG_FOUND TRUE) set(PNG_LIBRARIES - "${CMAKE_SOURCE_DIR}/extlib/libpng/libpng.lib" - "${CMAKE_SOURCE_DIR}/extlib/zlib/zlib.lib") + png16_static + zlibstatic) set(PNG_INCLUDE_DIRS - "${CMAKE_SOURCE_DIR}/extlib/libpng") + "${CMAKE_SOURCE_DIR}/extlib/libpng" + "${CMAKE_BINARY_DIR}/extlib/libpng" + "${CMAKE_SOURCE_DIR}/extlib/zlib" + "${CMAKE_BINARY_DIR}/extlib/zlib") endif() - message(STATUS "Using prebuilt SpaceWare") - set(SPACEWARE_FOUND TRUE) - set(SPACEWARE_INCLUDE_DIR - "${CMAKE_SOURCE_DIR}/extlib/si") - set(SPACEWARE_LIBRARIES - "${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib") + if(NOT MINGW) + message(STATUS "Using prebuilt SpaceWare") + set(SPACEWARE_FOUND TRUE) + set(SPACEWARE_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/si") + set(SPACEWARE_LIBRARIES + "${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib") + endif() elseif(APPLE) find_package(PNG REQUIRED) find_library(APPKIT_LIBRARY AppKit REQUIRED) diff --git a/README.md b/README.md index 83090012..f7d31c3f 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ This repository contains the official repository of [SolveSpace][]. Installation ------------ -All binary packages are built from the `compat` branch. - ### Debian (>=jessie) and Ubuntu (>=trusty) Binary packages for Ubuntu trusty and later versions are available @@ -30,13 +28,15 @@ See below. Building on Linux ----------------- -You will need cmake, libpng, zlib, json-c, fontconfig, gtkmm 2.4, pangomm 1.4, +### Building for Linux + +You will need CMake, libpng, zlib, json-c, fontconfig, gtkmm 2.4, pangomm 1.4, OpenGL and OpenGL GLU. -On a Debian derivative (e.g. Ubuntu) these packages can be installed with: +On a Debian derivative (e.g. Ubuntu) these can be installed with: apt-get install libpng12-dev libjson-c-dev libfontconfig1-dev \ libgtkmm-2.4-dev libpangomm-1.4-dev libgl-dev libglu-dev \ - libglew-dev + libglew-dev cmake After that, build SolveSpace as following: @@ -49,10 +49,39 @@ After that, build SolveSpace as following: A fully functional port to GTK3 is available, but not recommended for use due to bugs in this toolkit. +### Building for Windows + +You will need CMake and a Windows cross-compiler. +On a Debian derivative (e.g. Ubuntu) these can be installed with: + + apt-get install mingw-w64 cmake + +Before building, check out the submodules: + + git submodule update --init + +After that, build 32-bit SolveSpace as following: + + mkdir cbuild + cd cbuild + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake .. + make solvespace + +Or, build 64-bit SolveSpace as following: + + mkdir cbuild + cd cbuild + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake .. + make solvespace + +The application is built as `cbuild/src/solvespace.exe`. + +Space Navigator support will not be available. + Building on Mac OS X -------------------- -You will need XCode tools, cmake and libpng. Assuming you use [homebrew][], +You will need XCode tools, CMake and libpng. Assuming you use [homebrew][], these can be installed with: brew install cmake libpng @@ -70,6 +99,20 @@ The app bundle is built in `cbuild/src/solvespace.app`. [homebrew]: http://brew.sh/ +Building on Windows +------------------- + +You will need [cmake][cmakewin] and Visual C++. + +You will also need to check out the git submodules. + +After installing them, create a directory `build` in the source tree +and point cmake-gui to the source tree and that directory. Press +"Configure" and "Generate", then open `build\solvespace.sln` with +Visual C++ and build it. + +[cmakewin]: http://www.cmake.org/download/#latest + License ------- diff --git a/appveyor.yml b/appveyor.yml index fa5e2baf..b394d3fb 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,9 @@ version: 1.0.{build} before_build: +- git submodule update --init - mkdir cbuild - cd cbuild - cmake -DDISABLE_TTF2C=ON -G"Visual Studio 12" .. build: - project: C:\projects\solvespace\cbuild\solvespace.sln + project: C:\projects\solvespace\cbuild\src\solvespace.vcxproj verbosity: minimal diff --git a/cmake/Toolchain-mingw32.cmake b/cmake/Toolchain-mingw32.cmake new file mode 100644 index 00000000..a3591c87 --- /dev/null +++ b/cmake/Toolchain-mingw32.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE i686-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-mingw64.cmake b/cmake/Toolchain-mingw64.cmake new file mode 100644 index 00000000..6841214b --- /dev/null +++ b/cmake/Toolchain-mingw64.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE x86_64-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/extlib/libpng b/extlib/libpng new file mode 160000 index 00000000..2b667e49 --- /dev/null +++ b/extlib/libpng @@ -0,0 +1 @@ +Subproject commit 2b667e49232dd36aa7ea3a7382f265fd7f97d2cd diff --git a/extlib/libpng/libpng.lib b/extlib/libpng/libpng.lib deleted file mode 100644 index 8f9c565a1ff92900c3462b5203ddaba5e6c320d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361748 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 z

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 gS}R_FvN-MFYH1VswWSJ) -# endif - - /* Need the time information for converting tIME chunks, it - * defines struct tm: - */ -# ifdef PNG_CONVERT_tIME_SUPPORTED - /* "time.h" functions are not supported on all operating systems */ -# include -# endif -# endif - -/* Machine specific configuration. */ -# include "pngconf.h" -#endif - -/* - * Added at libpng-1.2.8 - * - * Ref MSDN: Private as priority over Special - * VS_FF_PRIVATEBUILD File *was not* built using standard release - * procedures. If this value is given, the StringFileInfo block must - * contain a PrivateBuild string. - * - * VS_FF_SPECIALBUILD File *was* built by the original company using - * standard release procedures but is a variation of the standard - * file of the same version number. If this value is given, the - * StringFileInfo block must contain a SpecialBuild string. - */ - -#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) -#else -# ifdef PNG_LIBPNG_SPECIALBUILD -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) -# else -# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) -# endif -#endif - -#ifndef PNG_VERSION_INFO_ONLY - -/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Version information for C files, stored in png.c. This had better match - * the version above. - */ -#define png_libpng_ver png_get_header_ver(NULL) - -/* This file is arranged in several sections: - * - * 1. Any configuration options that can be specified by for the application - * code when it is built. (Build time configuration is in pnglibconf.h) - * 2. Type definitions (base types are defined in pngconf.h), structure - * definitions. - * 3. Exported library functions. - * - * The library source code has additional files (principally pngpriv.h) that - * allow configuration of the library. - */ -/* Section 1: run time configuration - * See pnglibconf.h for build time configuration - * - * Run time configuration allows the application to choose between - * implementations of certain arithmetic APIs. The default is set - * at build time and recorded in pnglibconf.h, but it is safe to - * override these (and only these) settings. Note that this won't - * change what the library does, only application code, and the - * settings can (and probably should) be made on a per-file basis - * by setting the #defines before including png.h - * - * Use macros to read integers from PNG data or use the exported - * functions? - * PNG_USE_READ_MACROS: use the macros (see below) Note that - * the macros evaluate their argument multiple times. - * PNG_NO_USE_READ_MACROS: call the relevant library function. - * - * Use the alternative algorithm for compositing alpha samples that - * does not use division? - * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' - * algorithm. - * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. - * - * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is - * false? - * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error - * APIs to png_warning. - * Otherwise the calls are mapped to png_error. - */ - -/* Section 2: type definitions, including structures and compile time - * constants. - * See pngconf.h for base types that vary by machine/system - */ - -/* This triggers a compiler error in png.c, if png.c and png.h - * do not agree upon the version number. - */ -typedef char* png_libpng_version_1_5_10; - -/* Three color definitions. The order of the red, green, and blue, (and the - * exact size) is not important, although the size of the fields need to - * be png_byte or png_uint_16 (as defined below). - */ -typedef struct png_color_struct -{ - png_byte red; - png_byte green; - png_byte blue; -} png_color; -typedef png_color FAR * png_colorp; -typedef PNG_CONST png_color FAR * png_const_colorp; -typedef png_color FAR * FAR * png_colorpp; - -typedef struct png_color_16_struct -{ - png_byte index; /* used for palette files */ - png_uint_16 red; /* for use in red green blue files */ - png_uint_16 green; - png_uint_16 blue; - png_uint_16 gray; /* for use in grayscale files */ -} png_color_16; -typedef png_color_16 FAR * png_color_16p; -typedef PNG_CONST png_color_16 FAR * png_const_color_16p; -typedef png_color_16 FAR * FAR * png_color_16pp; - -typedef struct png_color_8_struct -{ - png_byte red; /* for use in red green blue files */ - png_byte green; - png_byte blue; - png_byte gray; /* for use in grayscale files */ - png_byte alpha; /* for alpha channel files */ -} png_color_8; -typedef png_color_8 FAR * png_color_8p; -typedef PNG_CONST png_color_8 FAR * png_const_color_8p; -typedef png_color_8 FAR * FAR * png_color_8pp; - -/* - * The following two structures are used for the in-core representation - * of sPLT chunks. - */ -typedef struct png_sPLT_entry_struct -{ - png_uint_16 red; - png_uint_16 green; - png_uint_16 blue; - png_uint_16 alpha; - png_uint_16 frequency; -} png_sPLT_entry; -typedef png_sPLT_entry FAR * png_sPLT_entryp; -typedef PNG_CONST png_sPLT_entry FAR * png_const_sPLT_entryp; -typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp; - -/* When the depth of the sPLT palette is 8 bits, the color and alpha samples - * occupy the LSB of their respective members, and the MSB of each member - * is zero-filled. The frequency member always occupies the full 16 bits. - */ - -typedef struct png_sPLT_struct -{ - png_charp name; /* palette name */ - png_byte depth; /* depth of palette samples */ - png_sPLT_entryp entries; /* palette entries */ - png_int_32 nentries; /* number of palette entries */ -} png_sPLT_t; -typedef png_sPLT_t FAR * png_sPLT_tp; -typedef PNG_CONST png_sPLT_t FAR * png_const_sPLT_tp; -typedef png_sPLT_t FAR * FAR * png_sPLT_tpp; - -#ifdef PNG_TEXT_SUPPORTED -/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, - * and whether that contents is compressed or not. The "key" field - * points to a regular zero-terminated C string. The "text" fields can be a - * regular C string, an empty string, or a NULL pointer. - * However, the structure returned by png_get_text() will always contain - * the "text" field as a regular zero-terminated C string (possibly - * empty), never a NULL pointer, so it can be safely used in printf() and - * other string-handling functions. Note that the "itxt_length", "lang", and - * "lang_key" members of the structure only exist when the library is built - * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by - * default without iTXt support. Also note that when iTXt *is* supported, - * the "lang" and "lang_key" fields contain NULL pointers when the - * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or - * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the - * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" - * which is always 0 or 1, or its "compression method" which is always 0. - */ -typedef struct png_text_struct -{ - int compression; /* compression value: - -1: tEXt, none - 0: zTXt, deflate - 1: iTXt, none - 2: iTXt, deflate */ - png_charp key; /* keyword, 1-79 character description of "text" */ - png_charp text; /* comment, may be an empty string (ie "") - or a NULL pointer */ - png_size_t text_length; /* length of the text string */ - png_size_t itxt_length; /* length of the itxt string */ - png_charp lang; /* language code, 0-79 characters - or a NULL pointer */ - png_charp lang_key; /* keyword translated UTF-8 string, 0 or more - chars or a NULL pointer */ -} png_text; -typedef png_text FAR * png_textp; -typedef PNG_CONST png_text FAR * png_const_textp; -typedef png_text FAR * FAR * png_textpp; -#endif - -/* Supported compression types for text in PNG files (tEXt, and zTXt). - * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ -#define PNG_TEXT_COMPRESSION_NONE_WR -3 -#define PNG_TEXT_COMPRESSION_zTXt_WR -2 -#define PNG_TEXT_COMPRESSION_NONE -1 -#define PNG_TEXT_COMPRESSION_zTXt 0 -#define PNG_ITXT_COMPRESSION_NONE 1 -#define PNG_ITXT_COMPRESSION_zTXt 2 -#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ - -/* png_time is a way to hold the time in an machine independent way. - * Two conversions are provided, both from time_t and struct tm. There - * is no portable way to convert to either of these structures, as far - * as I know. If you know of a portable way, send it to me. As a side - * note - PNG has always been Year 2000 compliant! - */ -typedef struct png_time_struct -{ - png_uint_16 year; /* full year, as in, 1995 */ - png_byte month; /* month of year, 1 - 12 */ - png_byte day; /* day of month, 1 - 31 */ - png_byte hour; /* hour of day, 0 - 23 */ - png_byte minute; /* minute of hour, 0 - 59 */ - png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ -} png_time; -typedef png_time FAR * png_timep; -typedef PNG_CONST png_time FAR * png_const_timep; -typedef png_time FAR * FAR * png_timepp; - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \ - defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED) -/* png_unknown_chunk is a structure to hold queued chunks for which there is - * no specific support. The idea is that we can use this to queue - * up private chunks for output even though the library doesn't actually - * know about their semantics. - */ -typedef struct png_unknown_chunk_t -{ - png_byte name[5]; - png_byte *data; - png_size_t size; - - /* libpng-using applications should NOT directly modify this byte. */ - png_byte location; /* mode of operation at read time */ -} - - -png_unknown_chunk; -typedef png_unknown_chunk FAR * png_unknown_chunkp; -typedef PNG_CONST png_unknown_chunk FAR * png_const_unknown_chunkp; -typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp; -#endif - -/* Values for the unknown chunk location byte */ - -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_AFTER_IDAT 0x08 - -/* The complete definition of png_info has, as of libpng-1.5.0, - * been moved into a separate header file that is not accessible to - * applications. Read libpng-manual.txt or libpng.3 for more info. - */ -typedef struct png_info_def png_info; -typedef png_info FAR * png_infop; -typedef PNG_CONST png_info FAR * png_const_infop; -typedef png_info FAR * FAR * png_infopp; - -/* Maximum positive integer used in PNG is (2^31)-1 */ -#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) -#define PNG_UINT_32_MAX ((png_uint_32)(-1)) -#define PNG_SIZE_MAX ((png_size_t)(-1)) - -/* These are constants for fixed point values encoded in the - * PNG specification manner (x100000) - */ -#define PNG_FP_1 100000 -#define PNG_FP_HALF 50000 -#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) -#define PNG_FP_MIN (-PNG_FP_MAX) - -/* These describe the color_type field in png_info. */ -/* color type masks */ -#define PNG_COLOR_MASK_PALETTE 1 -#define PNG_COLOR_MASK_COLOR 2 -#define PNG_COLOR_MASK_ALPHA 4 - -/* color types. Note that not all combinations are legal */ -#define PNG_COLOR_TYPE_GRAY 0 -#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) -#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) -#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) -#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) -/* aliases */ -#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA -#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA - -/* This is for compression type. PNG 1.0-1.2 only define the single type. */ -#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ -#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE - -/* This is for filter type. PNG 1.0-1.2 only define the single type. */ -#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ -#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ -#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE - -/* These are for the interlacing type. These values should NOT be changed. */ -#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ -#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ -#define PNG_INTERLACE_LAST 2 /* Not a valid value */ - -/* These are for the oFFs chunk. These values should NOT be changed. */ -#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ -#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ -#define PNG_OFFSET_LAST 2 /* Not a valid value */ - -/* These are for the pCAL chunk. These values should NOT be changed. */ -#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ -#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ -#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ -#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ -#define PNG_EQUATION_LAST 4 /* Not a valid value */ - -/* These are for the sCAL chunk. These values should NOT be changed. */ -#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ -#define PNG_SCALE_METER 1 /* meters per pixel */ -#define PNG_SCALE_RADIAN 2 /* radians per pixel */ -#define PNG_SCALE_LAST 3 /* Not a valid value */ - -/* These are for the pHYs chunk. These values should NOT be changed. */ -#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ -#define PNG_RESOLUTION_METER 1 /* pixels/meter */ -#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ - -/* These are for the sRGB chunk. These values should NOT be changed. */ -#define PNG_sRGB_INTENT_PERCEPTUAL 0 -#define PNG_sRGB_INTENT_RELATIVE 1 -#define PNG_sRGB_INTENT_SATURATION 2 -#define PNG_sRGB_INTENT_ABSOLUTE 3 -#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ - -/* This is for text chunks */ -#define PNG_KEYWORD_MAX_LENGTH 79 - -/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ -#define PNG_MAX_PALETTE_LENGTH 256 - -/* These determine if an ancillary chunk's data has been successfully read - * from the PNG header, or if the application has filled in the corresponding - * data in the info_struct to be written into the output file. The values - * of the PNG_INFO_ 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 0x8000 /* 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; - -/* The complete definition of png_struct has, as of libpng-1.5.0, - * been moved into a separate header file that is not accessible to - * applications. Read libpng-manual.txt or libpng.3 for more info. - */ -typedef struct png_struct_def png_struct; -typedef PNG_CONST png_struct FAR * png_const_structp; -typedef png_struct FAR * png_structp; - -/* 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. Note that the 'write' function must not - * modify the buffer it is passed. The 'read' function, on the other hand, is - * expected to return the read data in the buffer. - */ -typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); -typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t)); -typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); -typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, - int)); -typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, - int)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); -typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); - -/* The following callback receives png_uint_32 row_number, int pass for the - * png_bytep data of the row. When transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, - png_uint_32, int)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, - png_bytep)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, - png_unknown_chunkp)); -#endif -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED -typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (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. The - * function is required to be PNG_NORETURN, but this is not checked. If the - * function does return the application will crash via an abort() or similar - * system level call. - * - * If you get a warning here while building the library you may need to make - * changes to ensure that pnglibconf.h records the calling convention used by - * your compiler. This may be very difficult - try using a different compiler - * to build the library! - */ -PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); -#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 */ -/* Added to libpng-1.5.4 */ -#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ -#define PNG_TRANSFORM_SCALE_16 0x8000 /* 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 - -/* NOTE: prior to 1.5 these functions had no 'API' style declaration, - * this allowed the zlib default functions to be used on Windows - * platforms. In 1.5 the zlib default malloc (which just calls malloc and - * ignores the first argument) should be completely compatible with the - * following. - */ -typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, - png_alloc_size_t)); -typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); - -typedef png_struct FAR * FAR * png_structpp; - -/* Section 3: exported functions - * Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng-manual.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. - * - * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in - * pngconf.h and in the *.dfn files in the scripts directory. - * - * PNG_EXPORT(ordinal, type, name, (args)); - * - * ordinal: ordinal that is used while building - * *.def files. The ordinal value is only - * relevant when preprocessing png.h with - * the *.dfn files for building symbol table - * entries, and are removed by pngconf.h. - * type: return type of the function - * name: function name - * args: function arguments, with types - * - * When we wish to append attributes to a function prototype we use - * the PNG_EXPORTA() macro instead. - * - * PNG_EXPORTA(ordinal, type, name, (args), attributes); - * - * ordinal, type, name, and args: same as in PNG_EXPORT(). - * attributes: function attributes - */ - -/* Returns the version number of the library */ -PNG_EXPORT(1, png_uint_32, png_access_version_number, (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(2, void, png_set_sig_bytes, (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(3, int, png_sig_cmp, (png_const_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_EXPORTA(4, png_structp, png_create_read_struct, - (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_EXPORTA(5, png_structp, png_create_write_struct, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn), - PNG_ALLOCATED); - -PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size, - (png_const_structp png_ptr)); - -PNG_EXPORT(7, void, png_set_compression_buffer_size, (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(8, jmp_buf*, png_set_longjmp_fn, (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 -/* This function should be used by libpng applications in place of - * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it - * will use it; otherwise it will call PNG_ABORT(). This function was - * added in libpng-1.5.0. - */ -PNG_EXPORTA(9, void, png_longjmp, (png_structp png_ptr, int val), - PNG_NORETURN); - -#ifdef PNG_READ_SUPPORTED -/* Reset the compression stream */ -PNG_EXPORT(10, int, png_reset_zstream, (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_EXPORTA(11, png_structp, png_create_read_struct_2, - (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_EXPORTA(12, png_structp, png_create_write_struct_2, - (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(13, void, png_write_sig, (png_structp png_ptr)); - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -PNG_EXPORT(14, void, png_write_chunk, (png_structp png_ptr, png_const_bytep - chunk_name, png_const_bytep data, png_size_t length)); - -/* Write the start of a PNG chunk - length and chunk name. */ -PNG_EXPORT(15, void, png_write_chunk_start, (png_structp png_ptr, - png_const_bytep chunk_name, png_uint_32 length)); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -PNG_EXPORT(16, void, png_write_chunk_data, (png_structp png_ptr, - png_const_bytep data, png_size_t length)); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -PNG_EXPORT(17, void, png_write_chunk_end, (png_structp png_ptr)); - -/* Allocate and initialize the info structure */ -PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_structp png_ptr), - PNG_ALLOCATED); - -PNG_EXPORT(19, void, png_info_init_3, (png_infopp info_ptr, - png_size_t png_info_struct_size)); - -/* Writes all the PNG information before the image. */ -PNG_EXPORT(20, void, png_write_info_before_PLTE, - (png_structp png_ptr, png_infop info_ptr)); -PNG_EXPORT(21, void, png_write_info, - (png_structp png_ptr, png_infop info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the information before the actual image data. */ -PNG_EXPORT(22, void, png_read_info, - (png_structp png_ptr, png_infop info_ptr)); -#endif - -#ifdef PNG_TIME_RFC1123_SUPPORTED -PNG_EXPORT(23, png_const_charp, png_convert_to_rfc1123, - (png_structp png_ptr, - png_const_timep ptime)); -#endif - -#ifdef PNG_CONVERT_tIME_SUPPORTED -/* Convert from a struct tm to png_time */ -PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, - PNG_CONST struct tm FAR * ttime)); - -/* Convert from time_t to png_time. Uses gmtime() */ -PNG_EXPORT(25, void, png_convert_from_time_t, - (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(26, void, png_set_expand, (png_structp png_ptr)); -PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structp png_ptr)); -PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structp png_ptr)); -PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_EXPAND_16_SUPPORTED -/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion - * of a tRNS chunk if present. - */ -PNG_EXPORT(221, void, png_set_expand_16, (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(30, void, png_set_bgr, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED -/* Expand the grayscale to 24-bit RGB if necessary. */ -PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED -/* Reduce RGB to grayscale. */ -#define PNG_ERROR_ACTION_NONE 1 -#define PNG_ERROR_ACTION_WARN 2 -#define PNG_ERROR_ACTION_ERROR 3 -#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ - -PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr, - int error_action, double red, double green)); -PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green)); - -PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp - png_ptr)); -#endif - -#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, - png_colorp palette)); -#endif - -#ifdef PNG_READ_ALPHA_MODE_SUPPORTED -/* How the alpha channel is interpreted - this affects how the color channels of - * a PNG file are returned when an alpha channel, or tRNS chunk in a palette - * file, is present. - * - * This has no effect on the way pixels are written into a PNG output - * datastream. The color samples in a PNG datastream are never premultiplied - * with the alpha samples. - * - * The default is to return data according to the PNG specification: the alpha - * channel is a linear measure of the contribution of the pixel to the - * corresponding composited pixel. The gamma encoded color channels must be - * scaled according to the contribution and to do this it is necessary to undo - * the encoding, scale the color values, perform the composition and reencode - * the values. This is the 'PNG' mode. - * - * The alternative is to 'associate' the alpha with the color information by - * storing color channel values that have been scaled by the alpha. The - * advantage is that the color channels can be resampled (the image can be - * scaled) in this form. The disadvantage is that normal practice is to store - * linear, not (gamma) encoded, values and this requires 16-bit channels for - * still images rather than the 8-bit channels that are just about sufficient if - * gamma encoding is used. In addition all non-transparent pixel values, - * including completely opaque ones, must be gamma encoded to produce the final - * image. This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the - * latter being the two common names for associated alpha color channels.) - * - * Since it is not necessary to perform arithmetic on opaque color values so - * long as they are not to be resampled and are in the final color space it is - * possible to optimize the handling of alpha by storing the opaque pixels in - * the PNG format (adjusted for the output color space) while storing partially - * opaque pixels in the standard, linear, format. The accuracy required for - * standard alpha composition is relatively low, because the pixels are - * isolated, therefore typically the accuracy loss in storing 8-bit linear - * values is acceptable. (This is not true if the alpha channel is used to - * simulate transparency over large areas - use 16 bits or the PNG mode in - * this case!) This is the 'OPTIMIZED' mode. For this mode a pixel is - * treated as opaque only if the alpha value is equal to the maximum value. - * - * The final choice is to gamma encode the alpha channel as well. This is - * broken because, in practice, no implementation that uses this choice - * correctly undoes the encoding before handling alpha composition. Use this - * choice only if other serious errors in the software or hardware you use - * mandate it; the typical serious error is for dark halos to appear around - * opaque areas of the composited PNG image because of arithmetic overflow. - * - * The API function png_set_alpha_mode specifies which of these choices to use - * with an enumerated 'mode' value and the gamma of the required output: - */ -#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ -#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ -#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ -#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ -#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ -#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ - -PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structp png_ptr, int mode, - double output_gamma)); -PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structp png_ptr, - int mode, png_fixed_point output_gamma)); -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) -/* The output_gamma value is a screen gamma in libpng terminology: it expresses - * how to decode the output values, not how they are encoded. The values used - * correspond to the normal numbers used to describe the overall gamma of a - * computer display system; for example 2.2 for an sRGB conformant system. The - * values are scaled by 100000 in the _fixed version of the API (so 220000 for - * sRGB.) - * - * The inverse of the value is always used to provide a default for the PNG file - * encoding if it has no gAMA chunk and if png_set_gamma() has not been called - * to override the PNG gamma information. - * - * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode - * opaque pixels however pixels with lower alpha values are not encoded, - * regardless of the output gamma setting. - * - * When the standard Porter Duff handling is requested with mode 1 the output - * encoding is set to be linear and the output_gamma value is only relevant - * as a default for input data that has no gamma information. The linear output - * encoding will be overridden if png_set_gamma() is called - the results may be - * highly unexpected! - * - * The following numbers are derived from the sRGB standard and the research - * behind it. sRGB is defined to be approximated by a PNG gAMA chunk value of - * 0.45455 (1/2.2) for PNG. The value implicitly includes any viewing - * correction required to take account of any differences in the color - * environment of the original scene and the intended display environment; the - * value expresses how to *decode* the image for display, not how the original - * data was *encoded*. - * - * sRGB provides a peg for the PNG standard by defining a viewing environment. - * sRGB itself, and earlier TV standards, actually use a more complex transform - * (a linear portion then a gamma 2.4 power law) than PNG can express. (PNG is - * limited to simple power laws.) By saying that an image for direct display on - * an sRGB conformant system should be stored with a gAMA chunk value of 45455 - * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification - * makes it possible to derive values for other display systems and - * environments. - * - * The Mac value is deduced from the sRGB based on an assumption that the actual - * extra viewing correction used in early Mac display systems was implemented as - * a power 1.45 lookup table. - * - * Any system where a programmable lookup table is used or where the behavior of - * the final display device characteristics can be changed requires system - * specific code to obtain the current characteristic. However this can be - * difficult and most PNG gamma correction only requires an approximate value. - * - * By default, if png_set_alpha_mode() is not called, libpng assumes that all - * values are unencoded, linear, values and that the output device also has a - * linear characteristic. This is only very rarely correct - it is invariably - * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the - * default if you don't know what the right answer is! - * - * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS - * 10.6) which used a correction table to implement a somewhat lower gamma on an - * otherwise sRGB system. - * - * Both these values are reserved (not simple gamma values) in order to allow - * more precise correction internally in the future. - * - * NOTE: the following values can be passed to either the fixed or floating - * point APIs, but the floating point API will also accept floating point - * values. - */ -#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ -#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ -#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ -#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ -#endif - -/* The following are examples of calls to png_set_alpha_mode to achieve the - * required overall gamma correction and, where necessary, alpha - * premultiplication. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * This is the default libpng handling of the alpha channel - it is not - * pre-multiplied into the color components. In addition the call states - * that the output is for a sRGB system and causes all PNG files without gAMA - * chunks to be assumed to be encoded using sRGB. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * In this case the output is assumed to be something like an sRGB conformant - * display preceeded by a power-law lookup table of power 1.45. This is how - * early Mac systems behaved. - * - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); - * This is the classic Jim Blinn approach and will work in academic - * environments where everything is done by the book. It has the shortcoming - * of assuming that input PNG data with no gamma information is linear - this - * is unlikely to be correct unless the PNG files where generated locally. - * Most of the time the output precision will be so low as to show - * significant banding in dark areas of the image. - * - * png_set_expand_16(pp); - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); - * This is a somewhat more realistic Jim Blinn inspired approach. PNG files - * are assumed to have the sRGB encoding if not marked with a gamma value and - * the output is always 16 bits per component. This permits accurate scaling - * and processing of the data. If you know that your input PNG files were - * generated locally you might need to replace PNG_DEFAULT_sRGB with the - * correct value for your system. - * - * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); - * If you just need to composite the PNG image onto an existing background - * and if you control the code that does this you can use the optimization - * setting. In this case you just copy completely opaque pixels to the - * output. For pixels that are not completely transparent (you just skip - * those) you do the composition math using png_composite or png_composite_16 - * below then encode the resultant 8-bit or 16-bit values to match the output - * encoding. - * - * Other cases - * If neither the PNG nor the standard linear encoding work for you because - * of the software or hardware you use then you have a big problem. The PNG - * case will probably result in halos around the image. The linear encoding - * will probably result in a washed out, too bright, image (it's actually too - * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably - * substantially reduce the halos. Alternatively try: - * - * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); - * This option will also reduce the halos, but there will be slight dark - * halos round the opaque parts of the image where the background is light. - * In the OPTIMIZED mode the halos will be light halos where the background - * is dark. Take your pick - the halos are unavoidable unless you can get - * your hardware/software fixed! (The OPTIMIZED approach is slightly - * faster.) - * - * When the default gamma of PNG files doesn't match the output gamma. - * If you have PNG files with no gamma information png_set_alpha_mode allows - * you to provide a default gamma, but it also sets the ouput gamma to the - * matching value. If you know your PNG files have a gamma that doesn't - * match the output you can take advantage of the fact that - * png_set_alpha_mode always sets the output gamma but only sets the PNG - * default if it is not already set: - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * The first call sets both the default and the output gamma values, the - * second call overrides the output gamma without changing the default. This - * is easier than achieving the same effect with png_set_gamma. You must use - * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will - * fire if more than one call to png_set_alpha_mode and png_set_background is - * made in the same read operation, however multiple calls with PNG_ALPHA_PNG - * are ignored. - */ - -#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED -PNG_EXPORT(36, void, png_set_strip_alpha, (png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXPORT(37, void, png_set_swap_alpha, (png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXPORT(38, void, png_set_invert_alpha, (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(39, void, png_set_filler, (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(40, void, png_set_add_alpha, - (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(41, void, png_set_swap, (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(42, void, png_set_packing, (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(43, void, png_set_packswap, (png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -/* Converts files to legal bit depths. */ -PNG_EXPORT(44, void, png_set_shift, (png_structp png_ptr, png_const_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. - * MUST be called before png_read_update_info or png_start_read_image, - * otherwise it will not have the desired effect. Note that it is still - * necessary to call png_read_row or png_read_rows png_get_image_height - * times for each pass. -*/ -PNG_EXPORT(45, int, png_set_interlace_handling, (png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -/* Invert monochrome files */ -PNG_EXPORT(46, void, png_set_invert_mono, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_BACKGROUND_SUPPORTED -/* Handle alpha and tRNS by replacing with a background color. Prior to - * libpng-1.5.4 this API must not be called before the PNG file header has been - * read. Doing so will result in unexpected behavior and possible warnings or - * errors if the PNG file contains a bKGD chunk. - */ -PNG_FP_EXPORT(47, void, png_set_background, (png_structp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)); -PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, png_fixed_point background_gamma)); -#endif -#ifdef PNG_READ_BACKGROUND_SUPPORTED -# 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_SCALE_16_TO_8_SUPPORTED -/* Scale a 16-bit depth file down to 8-bit, accurately. */ -PNG_EXPORT(229, void, png_set_scale_16, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */ -/* Strip the second byte of information from a 16-bit depth file. */ -PNG_EXPORT(48, void, png_set_strip_16, (png_structp png_ptr)); -#endif - -#ifdef PNG_READ_QUANTIZE_SUPPORTED -/* Turn on quantizing, and reduce the palette to the number of colors - * available. - */ -PNG_EXPORT(49, void, png_set_quantize, - (png_structp png_ptr, png_colorp palette, - int num_palette, int maximum_colors, png_const_uint_16p histogram, - int full_quantize)); -#endif - -#ifdef PNG_READ_GAMMA_SUPPORTED -/* The threshold on gamma processing is configurable but hard-wired into the - * library. The following is the floating point variant. - */ -#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) - -/* Handle gamma correction. Screen_gamma=(display_exponent). - * NOTE: this API simply sets the screen and file gamma values. It will - * therefore override the value for gamma in a PNG file if it is called after - * the file header has been read - use with care - call before reading the PNG - * file for best results! - * - * These routines accept the same gamma values as png_set_alpha_mode (described - * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either - * API (floating point or fixed.) Notice, however, that the 'file_gamma' value - * is the inverse of a 'screen gamma' value. - */ -PNG_FP_EXPORT(50, void, png_set_gamma, - (png_structp png_ptr, double screen_gamma, - double override_file_gamma)); -PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structp png_ptr, - png_fixed_point screen_gamma, png_fixed_point override_file_gamma)); -#endif - -#ifdef PNG_WRITE_FLUSH_SUPPORTED -/* Set how many lines between output flushes - 0 for no flushing */ -PNG_EXPORT(51, void, png_set_flush, (png_structp png_ptr, int nrows)); -/* Flush the current PNG output buffer */ -PNG_EXPORT(52, void, png_write_flush, (png_structp png_ptr)); -#endif - -/* Optional update palette with requested transformations */ -PNG_EXPORT(53, void, png_start_read_image, (png_structp png_ptr)); - -/* Optional call to update the users info structure */ -PNG_EXPORT(54, void, png_read_update_info, - (png_structp png_ptr, png_infop info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read one or more rows of image data. */ -PNG_EXPORT(55, void, png_read_rows, (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(56, void, png_read_row, (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(57, void, png_read_image, (png_structp png_ptr, png_bytepp image)); -#endif - -/* Write a row of image data */ -PNG_EXPORT(58, void, png_write_row, - (png_structp png_ptr, png_const_bytep row)); - -/* Write a few rows of image data: (*row) is not written; however, the type - * is declared as writeable to maintain compatibility with previous versions - * of libpng and to allow the 'display_row' array from read_rows to be passed - * unchanged to write_rows. - */ -PNG_EXPORT(59, void, png_write_rows, (png_structp png_ptr, png_bytepp row, - png_uint_32 num_rows)); - -/* Write the image data */ -PNG_EXPORT(60, void, png_write_image, - (png_structp png_ptr, png_bytepp image)); - -/* Write the end of the PNG file. */ -PNG_EXPORT(61, void, png_write_end, - (png_structp png_ptr, png_infop info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the end of the PNG file. */ -PNG_EXPORT(62, void, png_read_end, (png_structp png_ptr, png_infop info_ptr)); -#endif - -/* Free any memory associated with the png_info_struct */ -PNG_EXPORT(63, void, png_destroy_info_struct, (png_structp png_ptr, - png_infopp info_ptr_ptr)); - -/* Free any memory associated with the png_struct and the png_info_structs */ -PNG_EXPORT(64, void, png_destroy_read_struct, (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(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr)); - -/* Set the libpng method of handling chunk CRC errors */ -PNG_EXPORT(66, void, png_set_crc_action, - (png_structp png_ptr, int crit_action, int ancil_action)); - -/* Values for png_set_crc_action() 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(67, void, png_set_filter, - (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. - */ -PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structp png_ptr, - int heuristic_method, int num_weights, png_const_doublep filter_weights, - png_const_doublep filter_costs)); -PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, - (png_structp png_ptr, - int heuristic_method, int num_weights, png_const_fixed_point_p - filter_weights, png_const_fixed_point_p filter_costs)); -#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 */ - -#ifdef PNG_WRITE_SUPPORTED -/* 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(69, void, png_set_compression_level, - (png_structp png_ptr, int level)); - -PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structp png_ptr, - int mem_level)); - -PNG_EXPORT(71, void, png_set_compression_strategy, (png_structp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structp png_ptr, - int window_bits)); - -PNG_EXPORT(73, void, png_set_compression_method, (png_structp png_ptr, - int method)); -#endif - -#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -/* Also set zlib parameters for compressing non-IDAT chunks */ -PNG_EXPORT(222, void, png_set_text_compression_level, - (png_structp png_ptr, int level)); - -PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structp png_ptr, - int mem_level)); - -PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(225, void, png_set_text_compression_window_bits, (png_structp - png_ptr, int window_bits)); - -PNG_EXPORT(226, void, png_set_text_compression_method, (png_structp png_ptr, - int method)); -#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */ - -/* 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-manual.txt for - * more information. - */ - -#ifdef PNG_STDIO_SUPPORTED -/* Initialize the input/output for the PNG file to the default functions. */ -PNG_EXPORT(74, void, png_init_io, (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(75, void, png_set_error_fn, - (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(76, png_voidp, png_get_error_ptr, (png_const_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(77, void, png_set_write_fn, (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(78, void, png_set_read_fn, (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(79, png_voidp, png_get_io_ptr, (png_structp png_ptr)); - -PNG_EXPORT(80, void, png_set_read_status_fn, (png_structp png_ptr, - png_read_status_ptr read_row_fn)); - -PNG_EXPORT(81, void, png_set_write_status_fn, (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(82, void, png_set_mem_fn, (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(83, png_voidp, png_get_mem_ptr, (png_const_structp png_ptr)); -#endif - -#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structp png_ptr, - png_user_transform_ptr read_user_transform_fn)); -#endif - -#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structp png_ptr, - png_user_transform_ptr write_user_transform_fn)); -#endif - -#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED -PNG_EXPORT(86, void, png_set_user_transform_info, (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(87, png_voidp, png_get_user_transform_ptr, - (png_const_structp png_ptr)); -#endif - -#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED -/* Return information about the row currently being processed. Note that these - * APIs do not fail but will return unexpected results if called outside a user - * transform callback. Also note that when transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structp)); -PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structp)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_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(90, void, png_set_progressive_read_fn, (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(91, png_voidp, png_get_progressive_ptr, (png_const_structp png_ptr)); - -/* Function to be called when data becomes available */ -PNG_EXPORT(92, void, png_process_data, - (png_structp png_ptr, png_infop info_ptr, - png_bytep buffer, png_size_t buffer_size)); - -/* A function which may be called *only* within png_process_data to stop the - * processing of any more data. The function returns the number of bytes - * remaining, excluding any that libpng has cached internally. A subsequent - * call to png_process_data must supply these bytes again. If the argument - * 'save' is set to true the routine will first save all the pending data and - * will always return 0. - */ -PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structp, int save)); - -/* A function which may be called *only* outside (after) a call to - * png_process_data. It returns the number of bytes of data to skip in the - * input. Normally it will return 0, but if it returns a non-zero value the - * application must skip than number of bytes of input data and pass the - * following data to the next call to png_process_data. - */ -PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structp)); - -#ifdef PNG_READ_INTERLACING_SUPPORTED -/* Function that combines rows. 'new_row' is a flag that should come from - * the callback and be non-NULL if anything needs to be done; the library - * stores its own version of the new data internally and ignores the passed - * in value. - */ -PNG_EXPORT(93, void, png_progressive_combine_row, (png_structp png_ptr, - png_bytep old_row, png_const_bytep new_row)); -#endif /* PNG_READ_INTERLACING_SUPPORTED */ -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -PNG_EXPORTA(94, png_voidp, png_malloc, - (png_structp png_ptr, png_alloc_size_t size), - PNG_ALLOCATED); -/* Added at libpng version 1.4.0 */ -PNG_EXPORTA(95, png_voidp, png_calloc, - (png_structp png_ptr, png_alloc_size_t size), - PNG_ALLOCATED); - -/* Added at libpng version 1.2.4 */ -PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_structp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); - -/* Frees a pointer allocated by png_malloc() */ -PNG_EXPORT(97, void, png_free, (png_structp png_ptr, png_voidp ptr)); - -/* Free data that was allocated internally */ -PNG_EXPORT(98, void, png_free_data, - (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(99, void, png_data_freer, - (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_EXPORTA(100, png_voidp, png_malloc_default, (png_structp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); -PNG_EXPORT(101, void, png_free_default, (png_structp png_ptr, png_voidp ptr)); -#endif - -#ifdef PNG_ERROR_TEXT_SUPPORTED -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(102, void, png_error, - (png_structp png_ptr, png_const_charp error_message), - PNG_NORETURN); - -/* The same, but the chunk name is prepended to the error string. */ -PNG_EXPORTA(103, void, png_chunk_error, (png_structp png_ptr, - png_const_charp error_message), PNG_NORETURN); - -#else -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(104, void, png_err, (png_structp png_ptr), PNG_NORETURN); -#endif - -#ifdef PNG_WARNINGS_SUPPORTED -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -PNG_EXPORT(105, void, png_warning, (png_structp png_ptr, - png_const_charp warning_message)); - -/* Non-fatal error in libpng, chunk name is prepended to message. */ -PNG_EXPORT(106, void, png_chunk_warning, (png_structp png_ptr, - png_const_charp warning_message)); -#endif - -#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. */ -# undef png_benign_error -PNG_EXPORT(107, void, png_benign_error, (png_structp png_ptr, - png_const_charp warning_message)); - -/* Same, chunk name is prepended to message. */ -# undef png_chunk_benign_error -PNG_EXPORT(108, void, png_chunk_benign_error, (png_structp png_ptr, - png_const_charp warning_message)); - -PNG_EXPORT(109, void, png_set_benign_errors, - (png_structp png_ptr, int allowed)); -#else -# ifdef PNG_ALLOW_BENIGN_ERRORS -# define png_benign_error png_warning -# define png_chunk_benign_error png_chunk_warning -# else -# define png_benign_error png_error -# define png_chunk_benign_error png_chunk_error -# endif -#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(110, png_uint_32, png_get_valid, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_uint_32 flag)); - -/* Returns number of bytes needed to hold a transformed row. */ -PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structp png_ptr, - png_const_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(112, png_bytepp, png_get_rows, - (png_const_structp png_ptr, png_const_infop info_ptr)); -/* Set row_pointers, which is an array of pointers to scanlines for use - * by png_write_png(). - */ -PNG_EXPORT(113, void, png_set_rows, (png_structp png_ptr, - png_infop info_ptr, png_bytepp row_pointers)); -#endif - -/* Returns number of color channels in image. */ -PNG_EXPORT(114, png_byte, png_get_channels, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* Returns image width in pixels. */ -PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image height in pixels. */ -PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image bit_depth. */ -PNG_EXPORT(117, png_byte, png_get_bit_depth, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -/* Returns image color_type. */ -PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image filter_type. */ -PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image interlace_type. */ -PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image compression_type. */ -PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structp png_ptr, - png_const_infop info_ptr)); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, - (png_const_structp png_ptr, png_const_infop info_ptr)); -PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -#endif /* PNG_EASY_ACCESS_SUPPORTED */ - -/* Returns pointer to signature string read from PNG header */ -PNG_EXPORT(130, png_const_bytep, png_get_signature, - (png_const_structp png_ptr, png_infop info_ptr)); - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(131, png_uint_32, png_get_bKGD, - (png_const_structp png_ptr, png_infop info_ptr, - png_color_16p *background)); -#endif - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(132, void, png_set_bKGD, (png_structp png_ptr, png_infop info_ptr, - png_const_color_16p background)); -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structp png_ptr, - png_const_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)); -PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_structp png_ptr, - png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z, - double *green_X, double *green_Y, double *green_Z, double *blue_X, - double *blue_Y, double *blue_Z)); -#ifdef PNG_FIXED_POINT_SUPPORTED /* Otherwise not implemented */ -PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, - (png_const_structp png_ptr, - png_const_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 -PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, - (png_structp png_ptr, png_const_infop info_ptr, - png_fixed_point *int_red_X, png_fixed_point *int_red_Y, - png_fixed_point *int_red_Z, png_fixed_point *int_green_X, - png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, - png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, - png_fixed_point *int_blue_Z)); -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(135, void, png_set_cHRM, - (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)); -PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_structp png_ptr, - png_infop info_ptr, double red_X, double red_Y, double red_Z, - double green_X, double green_Y, double green_Z, double blue_X, - double blue_Y, double blue_Z)); -PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (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)); -PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, - png_fixed_point int_red_Z, png_fixed_point int_green_X, - png_fixed_point int_green_Y, png_fixed_point int_green_Z, - png_fixed_point int_blue_X, png_fixed_point int_blue_Y, - png_fixed_point int_blue_Z)); -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, - (png_const_structp png_ptr, png_const_infop info_ptr, - double *file_gamma)); -PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_fixed_point *int_file_gamma)); -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(139, void, png_set_gAMA, (png_structp png_ptr, - png_infop info_ptr, double file_gamma)); -PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma)); -#endif - -#ifdef PNG_hIST_SUPPORTED -PNG_EXPORT(141, png_uint_32, png_get_hIST, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_uint_16p *hist)); -#endif - -#ifdef PNG_hIST_SUPPORTED -PNG_EXPORT(142, void, png_set_hIST, (png_structp png_ptr, - png_infop info_ptr, png_const_uint_16p hist)); -#endif - -PNG_EXPORT(143, png_uint_32, png_get_IHDR, - (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(144, void, png_set_IHDR, - (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(145, png_uint_32, png_get_oFFs, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)); -#endif - -#ifdef PNG_oFFs_SUPPORTED -PNG_EXPORT(146, void, png_set_oFFs, - (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(147, png_uint_32, png_get_pCAL, - (png_const_structp png_ptr, png_const_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(148, void, png_set_pCAL, (png_structp png_ptr, - png_infop info_ptr, - png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type, - int nparams, png_const_charp units, png_charpp params)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(149, png_uint_32, png_get_pHYs, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(150, void, png_set_pHYs, - (png_structp png_ptr, png_infop info_ptr, - png_uint_32 res_x, png_uint_32 res_y, int unit_type)); -#endif - -PNG_EXPORT(151, png_uint_32, png_get_PLTE, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_colorp *palette, int *num_palette)); - -PNG_EXPORT(152, void, png_set_PLTE, - (png_structp png_ptr, png_infop info_ptr, - png_const_colorp palette, int num_palette)); - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(153, png_uint_32, png_get_sBIT, - (png_const_structp png_ptr, png_infop info_ptr, - png_color_8p *sig_bit)); -#endif - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(154, void, png_set_sBIT, - (png_structp png_ptr, png_infop info_ptr, png_const_color_8p sig_bit)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structp png_ptr, - png_const_infop info_ptr, int *file_srgb_intent)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(156, void, png_set_sRGB, - (png_structp png_ptr, png_infop info_ptr, int srgb_intent)); -PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_structp png_ptr, - png_infop info_ptr, int srgb_intent)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(158, png_uint_32, png_get_iCCP, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_charpp name, int *compression_type, png_bytepp profile, - png_uint_32 *proflen)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(159, void, png_set_iCCP, - (png_structp png_ptr, png_infop info_ptr, - png_const_charp name, int compression_type, png_const_bytep profile, - png_uint_32 proflen)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(160, png_uint_32, png_get_sPLT, - (png_const_structp png_ptr, png_const_infop info_ptr, - png_sPLT_tpp entries)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(161, void, png_set_sPLT, - (png_structp png_ptr, png_infop info_ptr, - png_const_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(162, png_uint_32, png_get_text, - (png_const_structp png_ptr, png_const_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(163, void, png_set_text, - (png_structp png_ptr, png_infop info_ptr, - png_const_textp text_ptr, int num_text)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(164, png_uint_32, png_get_tIME, - (png_const_structp png_ptr, png_infop info_ptr, png_timep *mod_time)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(165, void, png_set_tIME, - (png_structp png_ptr, png_infop info_ptr, png_const_timep mod_time)); -#endif - -#ifdef PNG_tRNS_SUPPORTED -PNG_EXPORT(166, png_uint_32, png_get_tRNS, - (png_const_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(167, void, png_set_tRNS, - (png_structp png_ptr, png_infop info_ptr, - png_const_bytep trans_alpha, int num_trans, - png_const_color_16p trans_color)); -#endif - -#ifdef PNG_sCAL_SUPPORTED -PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, - (png_const_structp png_ptr, png_const_infop info_ptr, - int *unit, double *width, double *height)); -#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED -/* NOTE: this API is currently implemented using floating point arithmetic, - * consequently it can only be used on systems with floating point support. - * In any case the range of values supported by png_fixed_point is small and it - * is highly recommended that png_get_sCAL_s be used instead. - */ -PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, - (png_structp png_ptr, png_const_infop info_ptr, int *unit, - png_fixed_point *width, - png_fixed_point *height)); -#endif -PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, - (png_const_structp png_ptr, png_const_infop info_ptr, - int *unit, png_charpp swidth, png_charpp sheight)); - -PNG_FP_EXPORT(170, void, png_set_sCAL, - (png_structp png_ptr, png_infop info_ptr, - int unit, double width, double height)); -PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_structp png_ptr, - png_infop info_ptr, int unit, png_fixed_point width, - png_fixed_point height)); -PNG_EXPORT(171, void, png_set_sCAL_s, - (png_structp png_ptr, png_infop info_ptr, - int unit, png_const_charp swidth, png_const_charp sheight)); -#endif /* PNG_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. Because this turns off the default handling for chunks - that would otherwise be recognized the behavior of libpng transformations may - well become incorrect! - keep = 0: PNG_HANDLE_CHUNK_AS_DEFAULT: follow default behavior - = 1: PNG_HANDLE_CHUNK_NEVER: do not keep - = 2: PNG_HANDLE_CHUNK_IF_SAFE: keep only if safe-to-copy - = 3: PNG_HANDLE_CHUNK_ALWAYS: keep even if unsafe-to-copy -*/ -PNG_EXPORT(172, void, png_set_keep_unknown_chunks, - (png_structp png_ptr, int keep, - png_const_bytep chunk_list, int num_chunks)); - -/* The handling code is returned; the result is therefore true (non-zero) if - * special handling is required, false for the default handling. - */ -PNG_EXPORT(173, int, png_handle_as_unknown, (png_structp png_ptr, - png_const_bytep chunk_name)); -#endif -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED -PNG_EXPORT(174, void, png_set_unknown_chunks, (png_structp png_ptr, - png_infop info_ptr, png_const_unknown_chunkp unknowns, - int num_unknowns)); -PNG_EXPORT(175, void, png_set_unknown_chunk_location, - (png_structp png_ptr, png_infop info_ptr, int chunk, int location)); -PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structp png_ptr, - png_const_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(177, void, png_set_invalid, - (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(178, void, png_read_png, (png_structp png_ptr, png_infop info_ptr, - int transforms, png_voidp params)); -PNG_EXPORT(179, void, png_write_png, (png_structp png_ptr, png_infop info_ptr, - int transforms, png_voidp params)); -#endif - -PNG_EXPORT(180, png_const_charp, png_get_copyright, - (png_const_structp png_ptr)); -PNG_EXPORT(181, png_const_charp, png_get_header_ver, - (png_const_structp png_ptr)); -PNG_EXPORT(182, png_const_charp, png_get_header_version, - (png_const_structp png_ptr)); -PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, - (png_const_structp png_ptr)); - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (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(185, void, png_set_strip_error_numbers, - (png_structp png_ptr, - png_uint_32 strip_mode)); -#endif - -/* Added in libpng-1.2.6 */ -#ifdef PNG_SET_USER_LIMITS_SUPPORTED -PNG_EXPORT(186, void, png_set_user_limits, (png_structp png_ptr, - png_uint_32 user_width_max, png_uint_32 user_height_max)); -PNG_EXPORT(187, png_uint_32, png_get_user_width_max, - (png_const_structp png_ptr)); -PNG_EXPORT(188, png_uint_32, png_get_user_height_max, - (png_const_structp png_ptr)); -/* Added in libpng-1.4.0 */ -PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structp png_ptr, - png_uint_32 user_chunk_cache_max)); -PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, - (png_const_structp png_ptr)); -/* Added in libpng-1.4.1 */ -PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structp png_ptr, - png_alloc_size_t user_chunk_cache_max)); -PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, - (png_const_structp png_ptr)); -#endif - -#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) -PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, - (png_const_structp png_ptr, png_const_infop info_ptr)); - -PNG_FP_EXPORT(196, float, png_get_x_offset_inches, - (png_const_structp png_ptr, png_const_infop info_ptr)); -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, - (png_structp png_ptr, png_const_infop info_ptr)); -#endif - -PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structp png_ptr, - png_const_infop info_ptr)); -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, - (png_structp png_ptr, png_const_infop info_ptr)); -#endif - -# ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structp png_ptr, - png_const_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, - int *unit_type)); -# endif /* PNG_pHYs_SUPPORTED */ -#endif /* PNG_INCH_CONVERSIONS_SUPPORTED */ - -/* Added in libpng-1.4.0 */ -#ifdef PNG_IO_STATE_SUPPORTED -PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_structp png_ptr)); - -PNG_EXPORTA(200, png_const_bytep, png_get_io_chunk_name, - (png_structp png_ptr), PNG_DEPRECATED); -PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, - (png_const_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 */ - -/* Interlace support. The following macros are always defined so that if - * libpng interlace handling is turned off the macros may be used to handle - * interlaced images within the application. - */ -#define PNG_INTERLACE_ADAM7_PASSES 7 - -/* Two macros to return the first row and first column of the original, - * full, image which appears in a given pass. 'pass' is in the range 0 - * to 6 and the result is in the range 0 to 7. - */ -#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) -#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) - -/* A macro to return the offset between pixels in the output row for a pair of - * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that - * follows. Note that ROW_OFFSET is the offset from one row to the next whereas - * COL_OFFSET is from one column to the next, within a row. - */ -#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) -#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) - -/* Two macros to help evaluate the number of rows or columns in each - * pass. This is expressed as a shift - effectively log2 of the number or - * rows or columns in each 8x8 tile of the original image. - */ -#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) -#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) - -/* Hence two macros to determine the number of rows or columns in a given - * pass of an image given its height or width. In fact these macros may - * return non-zero even though the sub-image is empty, because the other - * dimension may be empty for a small image. - */ -#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) -#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) - -/* For the reader row callbacks (both progressive and sequential) it is - * necessary to find the row in the output image given a row in an interlaced - * image, so two more macros: - */ -#define PNG_ROW_FROM_PASS_ROW(yIn, pass) \ - (((yIn)<>(((7-(off))-(pass))<<2)) & 0xF) | \ - ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) - -#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ - ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) -#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ - ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) - -#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)) + 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)*(65535 \ - - (png_uint_32)(alpha)) + 32768); \ - (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)) + \ - 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)(65535 - (png_uint_32)(alpha)) + \ - 32767) / 65535) -#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ - -#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); -PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); -PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); -#endif - -PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_structp png_ptr, - png_const_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). */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); -#endif -#ifdef PNG_SAVE_INT_32_SUPPORTED -PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); -#endif - -/* 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. - */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); -/* No png_save_int_16 -- may be added if there's a real need for it. */ -#endif - -#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)))) - - /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the - * function) incorrectly returned a value of type png_uint_32. - */ -# define png_get_uint_16(buf) \ - ((png_uint_16) \ - (((unsigned int)(*(buf)) << 8) + \ - ((unsigned int)(*((buf) + 1))))) - -# define png_get_int_32(buf) \ - ((png_int_32)((*(buf) & 0x80) \ - ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \ - : (png_int_32)png_get_uint_32(buf))) -#endif - -#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \ - defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED) -PNG_EXPORT(234, void, png_set_check_for_invalid_index, (png_structp png_ptr, - int allowed)); -#endif - -/* Maintainer: Put new public prototypes here ^, in libpng.3, and project - * defs - */ - -/* The last ordinal number (this is the *last* one already used; the next - * one to use is one more than this.) Maintainer, remember to add an entry to - * scripts/symbols.def as well. - */ -#ifdef PNG_EXPORT_LAST_ORDINAL - PNG_EXPORT_LAST_ORDINAL(234); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* PNG_VERSION_INFO_ONLY */ -/* Do not put anything past this line */ -#endif /* PNG_H */ diff --git a/extlib/libpng/pngconf.h b/extlib/libpng/pngconf.h deleted file mode 100644 index bbb547f8..00000000 --- a/extlib/libpng/pngconf.h +++ /dev/null @@ -1,596 +0,0 @@ - -/* pngconf.h - machine configurable file for libpng - * - * libpng version 1.5.10 - March 29, 2012 - * - * Copyright (c) 1998-2012 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_BUILDING_SYMBOL_TABLE -/* PNG_NO_LIMITS_H may be used to turn off the use of the standard C - * definition file for machine specific limits, this may impact the - * correctness of the definitons below (see uses of INT_MAX). - */ -# ifndef PNG_NO_LIMITS_H -# include -# endif - -/* For the memory copy APIs (i.e. the standard definitions of these), - * because this file defines png_memcpy and so on the base APIs must - * be defined here. - */ -# ifdef BSD -# include -# else -# include -# endif - -/* For png_FILE_p - this provides the standard definition of a - * FILE - */ -# ifdef PNG_STDIO_SUPPORTED -# include -# endif -#endif - -/* This controls optimization of the reading of 16 and 32 bit values - * from PNG files. It can be set on a per-app-file basis - it - * just changes whether a macro is used when the function is called. - * The library builder sets the default; if read functions are not - * built into the library the macro implementation is forced on. - */ -#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED -# define PNG_USE_READ_MACROS -#endif -#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) -# if PNG_DEFAULT_READ_MACROS -# define PNG_USE_READ_MACROS -# endif -#endif - -/* COMPILER SPECIFIC OPTIONS. - * - * These options are provided so that a variety of difficult compilers - * can be used. Some are fixed at build time (e.g. PNG_API_RULE - * below) but still have compiler specific implementations, others - * may be changed on a per-file basis when compiling against libpng. - */ - -/* The PNGARG 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 */ - -/* Function calling conventions. - * ============================= - * Normally it is not necessary to specify to the compiler how to call - * a function - it just does it - however on x86 systems derived from - * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems - * and some others) there are multiple ways to call a function and the - * default can be changed on the compiler command line. For this reason - * libpng specifies the calling convention of every exported function and - * every function called via a user supplied function pointer. This is - * done in this file by defining the following macros: - * - * PNGAPI Calling convention for exported functions. - * PNGCBAPI Calling convention for user provided (callback) functions. - * PNGCAPI Calling convention used by the ANSI-C library (required - * for longjmp callbacks and sometimes used internally to - * specify the calling convention for zlib). - * - * These macros should never be overridden. If it is necessary to - * change calling convention in a private build this can be done - * by setting PNG_API_RULE (which defaults to 0) to one of the values - * below to select the correct 'API' variants. - * - * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout. - * This is correct in every known environment. - * PNG_API_RULE=1 Use the operating system convention for PNGAPI and - * the 'C' calling convention (from PNGCAPI) for - * callbacks (PNGCBAPI). This is no longer required - * in any known environment - if it has to be used - * please post an explanation of the problem to the - * libpng mailing list. - * - * These cases only differ if the operating system does not use the C - * calling convention, at present this just means the above cases - * (x86 DOS/Windows sytems) and, even then, this does not apply to - * Cygwin running on those systems. - * - * Note that the value must be defined in pnglibconf.h so that what - * the application uses to call the library matches the conventions - * set when building the library. - */ - -/* Symbol export - * ============= - * When building a shared library it is almost always necessary to tell - * the compiler which symbols to export. The png.h macro 'PNG_EXPORT' - * is used to mark the symbols. On some systems these symbols can be - * extracted at link time and need no special processing by the compiler, - * on other systems the symbols are flagged by the compiler and just - * the declaration requires a special tag applied (unfortunately) in a - * compiler dependent way. Some systems can do either. - * - * A small number of older systems also require a symbol from a DLL to - * be flagged to the program that calls it. This is a problem because - * we do not know in the header file included by application code that - * the symbol will come from a shared library, as opposed to a statically - * linked one. For this reason the application must tell us by setting - * the magic flag PNG_USE_DLL to turn on the special processing before - * it includes png.h. - * - * Four additional macros are used to make this happen: - * - * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from - * the build or imported if PNG_USE_DLL is set - compiler - * and system specific. - * - * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to - * 'type', compiler specific. - * - * PNG_DLL_EXPORT Set to the magic to use during a libpng build to - * make a symbol exported from the DLL. Not used in the - * public header files; see pngpriv.h for how it is used - * in the libpng build. - * - * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come - * from a DLL - used to define PNG_IMPEXP when - * PNG_USE_DLL is set. - */ - -/* System specific discovery. - * ========================== - * This code is used at build time to find PNG_IMPEXP, the API settings - * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL - * import processing is possible. On Windows/x86 systems it also sets - * compiler-specific macros to the values required to change the calling - * conventions of the various functions. - */ -#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ - defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\ - ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\ - defined(_M_X64) || defined(_M_IA64) ) - /* Windows system (DOS doesn't support DLLs) running on x86/x64. Includes - * builds under Cygwin or MinGW. Also includes Watcom builds but these need - * special treatment because they are not compatible with GCC or Visual C - * because of different calling conventions. - */ -# if PNG_API_RULE == 2 - /* If this line results in an error, either because __watcall is not - * understood or because of a redefine just below you cannot use *this* - * build of the library with the compiler you are using. *This* build was - * build using Watcom and applications must also be built using Watcom! - */ -# define PNGCAPI __watcall -# endif - -# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) -# define PNGCAPI __cdecl -# if PNG_API_RULE == 1 -# define PNGAPI __stdcall -# endif -# else - /* An older compiler, or one not detected (erroneously) above, - * if necessary override on the command line to get the correct - * variants for the compiler. - */ -# ifndef PNGCAPI -# define PNGCAPI _cdecl -# endif -# if PNG_API_RULE == 1 && !defined(PNGAPI) -# define PNGAPI _stdcall -# endif -# endif /* compiler/api */ - /* NOTE: PNGCBAPI always defaults to PNGCAPI. */ - -# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD) - ERROR: PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed -# endif - -# if (defined(_MSC_VER) && _MSC_VER < 800) ||\ - (defined(__BORLANDC__) && __BORLANDC__ < 0x500) - /* older Borland and MSC - * compilers used '__export' and required this to be after - * the type. - */ -# ifndef PNG_EXPORT_TYPE -# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP -# endif -# define PNG_DLL_EXPORT __export -# else /* newer compiler */ -# define PNG_DLL_EXPORT __declspec(dllexport) -# ifndef PNG_DLL_IMPORT -# define PNG_DLL_IMPORT __declspec(dllimport) -# endif -# endif /* compiler */ - -#else /* !Windows/x86 */ -# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) -# define PNGAPI _System -# else /* !Windows/x86 && !OS/2 */ - /* Use the defaults, or define PNG*API on the command line (but - * this will have to be done for every compile!) - */ -# endif /* other system, !OS/2 */ -#endif /* !Windows/x86 */ - -/* Now do all the defaulting . */ -#ifndef PNGCAPI -# define PNGCAPI -#endif -#ifndef PNGCBAPI -# define PNGCBAPI PNGCAPI -#endif -#ifndef PNGAPI -# define PNGAPI PNGCAPI -#endif - -/* PNG_IMPEXP may be set on the compilation system command line or (if not set) - * then in an internal header file when building the library, otherwise (when - * using the library) it is set here. - */ -#ifndef PNG_IMPEXP -# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT) - /* This forces use of a DLL, disallowing static linking */ -# define PNG_IMPEXP PNG_DLL_IMPORT -# endif - -# ifndef PNG_IMPEXP -# define PNG_IMPEXP -# endif -#endif - -/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat - * 'attributes' as a storage class - the attributes go at the start of the - * function definition, and attributes are always appended regardless of the - * compiler. This considerably simplifies these macros but may cause problems - * if any compilers both need function attributes and fail to handle them as - * a storage class (this is unlikely.) - */ -#ifndef PNG_FUNCTION -# define PNG_FUNCTION(type, name, args, attributes) attributes type name args -#endif - -#ifndef PNG_EXPORT_TYPE -# define PNG_EXPORT_TYPE(type) PNG_IMPEXP type -#endif - - /* The ordinal value is only relevant when preprocessing png.h for symbol - * table entries, so we discard it here. See the .dfn files in the - * scripts directory. - */ -#ifndef PNG_EXPORTA - -# define PNG_EXPORTA(ordinal, type, name, args, attributes)\ - PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \ - extern attributes) -#endif - -/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument, - * so make something non-empty to satisfy the requirement: - */ -#define PNG_EMPTY /*empty list*/ - -#define PNG_EXPORT(ordinal, type, name, args)\ - PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY) - -/* Use PNG_REMOVED to comment out a removed interface. */ -#ifndef PNG_REMOVED -# define PNG_REMOVED(ordinal, type, name, args, attributes) -#endif - -#ifndef PNG_CALLBACK -# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args) -#endif - -/* 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. - */ -# if defined(__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 -# ifndef PNG_DEPRECATED -# define PNG_DEPRECATED __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 -# endif /* __GNUC__ */ - -# if defined(_MSC_VER) && (_MSC_VER >= 1300) -# ifndef PNG_USE_RESULT -# define PNG_USE_RESULT /* not supported */ -# endif -# ifndef PNG_NORETURN -# define PNG_NORETURN __declspec(noreturn) -# endif -# ifndef PNG_ALLOCATED -# if (_MSC_VER >= 1400) -# define PNG_ALLOCATED __declspec(restrict) -# endif -# endif -# ifndef PNG_DEPRECATED -# define PNG_DEPRECATED __declspec(deprecated) -# endif -# ifndef PNG_PRIVATE -# define PNG_PRIVATE __declspec(deprecated) -# endif -# endif /* _MSC_VER */ -#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_PRIVATE -# define PNG_PRIVATE /* This is a private libpng function */ -#endif -#ifndef PNG_FP_EXPORT /* A floating point API. */ -# ifdef PNG_FLOATING_POINT_SUPPORTED -# define PNG_FP_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args) -# else /* No floating point APIs */ -# define PNG_FP_EXPORT(ordinal, type, name, args) -# endif -#endif -#ifndef PNG_FIXED_EXPORT /* A fixed point API. */ -# ifdef PNG_FIXED_POINT_SUPPORTED -# define PNG_FIXED_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args) -# else /* No fixed point APIs */ -# define PNG_FIXED_EXPORT(ordinal, type, name, args) -# endif -#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 here. - * - * This should not change how the APIs are called, so it can be done - * on a per-file basis in the application. - */ -#ifndef PNG_CONST -# ifndef PNG_NO_CONST -# define PNG_CONST const -# else -# define PNG_CONST -# endif -#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 /* only used in build */ -# 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., gamma - */ -typedef png_int_32 png_fixed_point; - -/* Add typedefs for pointers */ -typedef void FAR * png_voidp; -typedef PNG_CONST void FAR * png_const_voidp; -typedef png_byte FAR * png_bytep; -typedef PNG_CONST png_byte FAR * png_const_bytep; -typedef png_uint_32 FAR * png_uint_32p; -typedef PNG_CONST png_uint_32 FAR * png_const_uint_32p; -typedef png_int_32 FAR * png_int_32p; -typedef PNG_CONST png_int_32 FAR * png_const_int_32p; -typedef png_uint_16 FAR * png_uint_16p; -typedef PNG_CONST png_uint_16 FAR * png_const_uint_16p; -typedef png_int_16 FAR * png_int_16p; -typedef PNG_CONST png_int_16 FAR * png_const_int_16p; -typedef char FAR * png_charp; -typedef PNG_CONST char FAR * png_const_charp; -typedef png_fixed_point FAR * png_fixed_point_p; -typedef PNG_CONST png_fixed_point FAR * png_const_fixed_point_p; -typedef png_size_t FAR * png_size_tp; -typedef PNG_CONST png_size_t FAR * png_const_size_tp; - -#ifdef PNG_STDIO_SUPPORTED -typedef FILE * png_FILE_p; -#endif - -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * png_doublep; -typedef PNG_CONST double FAR * png_const_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; - -/* 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 - -#endif /* PNGCONF_H */ diff --git a/extlib/libpng/pnglibconf.h b/extlib/libpng/pnglibconf.h deleted file mode 100644 index 6facf39a..00000000 --- a/extlib/libpng/pnglibconf.h +++ /dev/null @@ -1,186 +0,0 @@ - -/* libpng STANDARD API DEFINITION */ - -/* pnglibconf.h - library build configuration */ - -/* Libpng 1.5.10 - March 29, 2012 */ - -/* Copyright (c) 1998-2012 Glenn Randers-Pehrson */ - -/* This code is released under the libpng license. */ -/* For conditions of distribution and use, see the disclaimer */ -/* and license in png.h */ - -/* pnglibconf.h */ -/* Derived from: scripts/pnglibconf.dfa */ -/* If you edit this file by hand you must obey the rules expressed in */ -/* pnglibconf.dfa with respect to the dependencies between the following */ -/* symbols. It is much better to generate a new file using */ -/* scripts/libpngconf.mak */ - -#ifndef PNGLCONF_H -#define PNGLCONF_H -/* settings */ -#define PNG_API_RULE 0 -#define PNG_CALLOC_SUPPORTED -#define PNG_COST_SHIFT 3 -#define PNG_DEFAULT_READ_MACROS 1 -#define PNG_GAMMA_THRESHOLD_FIXED 5000 -#define PNG_MAX_GAMMA_8 11 -#define PNG_QUANTIZE_BLUE_BITS 5 -#define PNG_QUANTIZE_GREEN_BITS 5 -#define PNG_QUANTIZE_RED_BITS 5 -#define PNG_sCAL_PRECISION 5 -#define PNG_WEIGHT_SHIFT 8 -#define PNG_ZBUF_SIZE 8192 -/* end of settings */ -/* options */ -#define PNG_16BIT_SUPPORTED -#define PNG_ALIGN_MEMORY_SUPPORTED -#define PNG_BENIGN_ERRORS_SUPPORTED -#define PNG_bKGD_SUPPORTED -#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -#define PNG_CHECK_cHRM_SUPPORTED -#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_cHRM_SUPPORTED -#define PNG_CONSOLE_IO_SUPPORTED -#define PNG_CONVERT_tIME_SUPPORTED -#define PNG_EASY_ACCESS_SUPPORTED -/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ -#define PNG_ERROR_TEXT_SUPPORTED -#define PNG_FIXED_POINT_SUPPORTED -#define PNG_FLOATING_ARITHMETIC_SUPPORTED -#define PNG_FLOATING_POINT_SUPPORTED -#define PNG_gAMA_SUPPORTED -#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -#define PNG_hIST_SUPPORTED -#define PNG_iCCP_SUPPORTED -#define PNG_INCH_CONVERSIONS_SUPPORTED -#define PNG_INFO_IMAGE_SUPPORTED -#define PNG_IO_STATE_SUPPORTED -#define PNG_iTXt_SUPPORTED -#define PNG_MNG_FEATURES_SUPPORTED -#define PNG_oFFs_SUPPORTED -#define PNG_pCAL_SUPPORTED -#define PNG_pHYs_SUPPORTED -#define PNG_POINTER_INDEXING_SUPPORTED -#define PNG_PROGRESSIVE_READ_SUPPORTED -#define PNG_READ_16BIT_SUPPORTED -#define PNG_READ_ALPHA_MODE_SUPPORTED -#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_READ_BACKGROUND_SUPPORTED -#define PNG_READ_BGR_SUPPORTED -#define PNG_READ_bKGD_SUPPORTED -#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_READ_cHRM_SUPPORTED -#define PNG_READ_COMPOSITE_NODIV_SUPPORTED -#define PNG_READ_COMPRESSED_TEXT_SUPPORTED -#define PNG_READ_EXPAND_16_SUPPORTED -#define PNG_READ_EXPAND_SUPPORTED -#define PNG_READ_FILLER_SUPPORTED -#define PNG_READ_gAMA_SUPPORTED -#define PNG_READ_GAMMA_SUPPORTED -#define PNG_READ_GRAY_TO_RGB_SUPPORTED -#define PNG_READ_hIST_SUPPORTED -#define PNG_READ_iCCP_SUPPORTED -#define PNG_READ_INTERLACING_SUPPORTED -#define PNG_READ_INT_FUNCTIONS_SUPPORTED -#define PNG_READ_INVERT_ALPHA_SUPPORTED -#define PNG_READ_INVERT_SUPPORTED -#define PNG_READ_iTXt_SUPPORTED -#define PNG_READ_oFFs_SUPPORTED -#define PNG_READ_OPT_PLTE_SUPPORTED -#define PNG_READ_PACK_SUPPORTED -#define PNG_READ_PACKSWAP_SUPPORTED -#define PNG_READ_pCAL_SUPPORTED -#define PNG_READ_pHYs_SUPPORTED -#define PNG_READ_QUANTIZE_SUPPORTED -#define PNG_READ_RGB_TO_GRAY_SUPPORTED -#define PNG_READ_sBIT_SUPPORTED -#define PNG_READ_SCALE_16_TO_8_SUPPORTED -#define PNG_READ_sCAL_SUPPORTED -#define PNG_READ_SHIFT_SUPPORTED -#define PNG_READ_sPLT_SUPPORTED -#define PNG_READ_sRGB_SUPPORTED -#define PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_STRIP_ALPHA_SUPPORTED -#define PNG_READ_SUPPORTED -#define PNG_READ_SWAP_ALPHA_SUPPORTED -#define PNG_READ_SWAP_SUPPORTED -#define PNG_READ_tEXt_SUPPORTED -#define PNG_READ_TEXT_SUPPORTED -#define PNG_READ_tIME_SUPPORTED -#define PNG_READ_TRANSFORMS_SUPPORTED -#define PNG_READ_tRNS_SUPPORTED -#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_READ_USER_CHUNKS_SUPPORTED -#define PNG_READ_USER_TRANSFORM_SUPPORTED -#define PNG_READ_zTXt_SUPPORTED -#define PNG_SAVE_INT_32_SUPPORTED -#define PNG_sBIT_SUPPORTED -#define PNG_sCAL_SUPPORTED -#define PNG_SEQUENTIAL_READ_SUPPORTED -#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED -#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED -#define PNG_SETJMP_SUPPORTED -#define PNG_SET_USER_LIMITS_SUPPORTED -#define PNG_sPLT_SUPPORTED -#define PNG_sRGB_SUPPORTED -#define PNG_STDIO_SUPPORTED -#define PNG_tEXt_SUPPORTED -#define PNG_TEXT_SUPPORTED -#define PNG_TIME_RFC1123_SUPPORTED -#define PNG_tIME_SUPPORTED -#define PNG_tRNS_SUPPORTED -#define PNG_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_USER_CHUNKS_SUPPORTED -#define PNG_USER_LIMITS_SUPPORTED -#define PNG_USER_MEM_SUPPORTED -#define PNG_USER_TRANSFORM_INFO_SUPPORTED -#define PNG_USER_TRANSFORM_PTR_SUPPORTED -#define PNG_WARNINGS_SUPPORTED -#define PNG_WRITE_16BIT_SUPPORTED -#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_WRITE_BGR_SUPPORTED -#define PNG_WRITE_bKGD_SUPPORTED -#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_WRITE_cHRM_SUPPORTED -#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED -#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -#define PNG_WRITE_FILLER_SUPPORTED -#define PNG_WRITE_FILTER_SUPPORTED -#define PNG_WRITE_FLUSH_SUPPORTED -#define PNG_WRITE_gAMA_SUPPORTED -#define PNG_WRITE_hIST_SUPPORTED -#define PNG_WRITE_iCCP_SUPPORTED -#define PNG_WRITE_INTERLACING_SUPPORTED -#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED -#define PNG_WRITE_INVERT_ALPHA_SUPPORTED -#define PNG_WRITE_INVERT_SUPPORTED -#define PNG_WRITE_iTXt_SUPPORTED -#define PNG_WRITE_oFFs_SUPPORTED -#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED -#define PNG_WRITE_PACK_SUPPORTED -#define PNG_WRITE_PACKSWAP_SUPPORTED -#define PNG_WRITE_pCAL_SUPPORTED -#define PNG_WRITE_pHYs_SUPPORTED -#define PNG_WRITE_sBIT_SUPPORTED -#define PNG_WRITE_sCAL_SUPPORTED -#define PNG_WRITE_SHIFT_SUPPORTED -#define PNG_WRITE_sPLT_SUPPORTED -#define PNG_WRITE_sRGB_SUPPORTED -#define PNG_WRITE_SUPPORTED -#define PNG_WRITE_SWAP_ALPHA_SUPPORTED -#define PNG_WRITE_SWAP_SUPPORTED -#define PNG_WRITE_tEXt_SUPPORTED -#define PNG_WRITE_TEXT_SUPPORTED -#define PNG_WRITE_tIME_SUPPORTED -#define PNG_WRITE_TRANSFORMS_SUPPORTED -#define PNG_WRITE_tRNS_SUPPORTED -#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_WRITE_USER_TRANSFORM_SUPPORTED -#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#define PNG_WRITE_zTXt_SUPPORTED -#define PNG_zTXt_SUPPORTED -/* end of options */ -#endif /* PNGLCONF_H */ diff --git a/extlib/zlib b/extlib/zlib new file mode 160000 index 00000000..50893291 --- /dev/null +++ b/extlib/zlib @@ -0,0 +1 @@ +Subproject commit 50893291621658f355bc5b4d450a8d06a563053d diff --git a/extlib/zlib/zconf.h b/extlib/zlib/zconf.h deleted file mode 100644 index 4add89e7..00000000 --- a/extlib/zlib/zconf.h +++ /dev/null @@ -1,432 +0,0 @@ -/* 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: zconf.h 8485 2011-02-27 16:51:58Z manolo $ */ - -#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 !(defined(WINDOWS) || defined(WIN32)) -# define HAVE_UNISTD_H -#endif - -#ifdef HAVE_UNISTD_H /* may be 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/extlib/zlib/zlib.h b/extlib/zlib/zlib.h deleted file mode 100644 index bfbba83e..00000000 --- a/extlib/zlib/zlib.h +++ /dev/null @@ -1,1613 +0,0 @@ -/* 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/extlib/zlib/zlib.lib b/extlib/zlib/zlib.lib deleted file mode 100644 index 4d1bd8018582970f4bfe2085e8a9d617c6b0a3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117868 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 E0OHtC7XSbN diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06b3f6dd..f5426dca 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,12 +11,10 @@ add_definitions( ${PNG_CFLAGS_OTHER}) link_directories( - ${PNG_LIBRARY_DIRS} - ${ZLIB_LIBRARY_DIRS}) + ${PNG_LIBRARY_DIRS}) add_definitions( - ${PNG_CFLAGS_OTHER} - ${ZLIB_CFLAGS_OTHER}) + ${PNG_CFLAGS_OTHER}) include_directories( "${CMAKE_CURRENT_SOURCE_DIR}" @@ -128,6 +126,9 @@ if(WIN32) win32/freeze.cpp win32/w32main.cpp win32/resource.rc) + + set(platform_LIBRARIES + comctl32) elseif(APPLE) add_definitions( -mmacosx-version-min=10.6 @@ -315,7 +316,7 @@ target_link_libraries(solvespace "${PNG_LIBRARIES}" "${platform_LIBRARIES}") -if(WIN32) +if(WIN32 AND NOT MINGW) set_target_properties(solvespace PROPERTIES LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO") endif() diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c44f9027..4e04f90f 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,2 +1,4 @@ add_executable(ttf2c ttf2c.cpp) +target_link_libraries(ttf2c + comctl32)