
/* pngconf.h - machine configurable file for libpng
 *
 * libpng version 1.5.0beta16 - April 1, 2010
 *
 * Copyright (c) 1998-2010 Glenn Randers-Pehrson
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 *
 * This code is released under the libpng license.
 * For conditions of distribution and use, see the disclaimer
 * and license in png.h
 *
 */

/* Any machine specific code is near the front of this file, so if you
 * are configuring libpng for a machine, you may want to read the section
 * starting here down to where it starts to typedef png_color, png_text,
 * and png_info.
 */

#ifndef PNGCONF_H
#define PNGCONF_H

#ifndef PNG_NO_LIMITS_H
#  include <limits.h>
#endif

/*
 * Added at libpng-1.2.8
 *
 * PNG_USER_CONFIG has to be defined on the compiler command line. This
 * includes the resource compiler for Windows DLL configurations.
 */
#ifdef PNG_USER_CONFIG
#  ifndef PNG_USER_PRIVATEBUILD
#    define PNG_USER_PRIVATEBUILD
#  endif
#  include "pngusr.h"
#endif

/*
 * If you create a private DLL you need to define in "pngusr.h" the followings:
 * #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
 *        the DLL was built>
 *  e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
 * #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
 *        distinguish your DLL from those of the official release. These
 *        correspond to the trailing letters that come after the version
 *        number and must match your private DLL name>
 *  e.g. // private DLL "libpng13gx.dll"
 *       #define PNG_USER_DLLFNAME_POSTFIX "gx"
 *
 * The following macros are also at your disposal if you want to complete the
 * DLL VERSIONINFO structure.
 * - PNG_USER_VERSIONINFO_COMMENTS
 * - PNG_USER_VERSIONINFO_COMPANYNAME
 * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
 */

#ifdef __STDC__
#  ifdef SPECIALBUILD
#    pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD) \
       are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.")
#  endif

#  ifdef PRIVATEBUILD
#    pragma message("PRIVATEBUILD is deprecated.\
       Use PNG_USER_PRIVATEBUILD instead.")
#    define PNG_USER_PRIVATEBUILD PRIVATEBUILD
#  endif
#endif /* __STDC__ */

/* End of material added to libpng-1.2.8 */

#ifndef PNG_VERSION_INFO_ONLY

/* This is the size of the compression buffer, and thus the size of
 * an IDAT chunk.  Make this whatever size you feel is best for your
 * machine.  One of these will be allocated per png_struct.  When this
 * is full, it writes the data to the disk, and does some other
 * calculations.  Making this an extremely small size will slow
 * the library down, but you may want to experiment to determine
 * where it becomes significant, if you are concerned with memory
 * usage.  Note that zlib allocates at least 32Kb also.  For readers,
 * this describes the size of the buffer available to read the data in.
 * Unless this gets smaller than the size of a row (compressed),
 * it should not make much difference how big this is.
 */

#ifndef PNG_ZBUF_SIZE
#  define PNG_ZBUF_SIZE 8192
#endif

/* Enable if you want a write-only libpng */

#ifndef PNG_NO_READ_SUPPORTED
#  define PNG_READ_SUPPORTED
#endif

/* Enable if you want a read-only libpng */

#ifndef PNG_NO_WRITE_SUPPORTED
#  define PNG_WRITE_SUPPORTED
#endif

/* Enabled in 1.4.0. */
#ifdef PNG_ALLOW_BENIGN_ERRORS
#  define png_benign_error png_warning
#  define png_chunk_benign_error png_chunk_warning
#else
#  ifndef PNG_BENIGN_ERRORS_SUPPORTED
#    define png_benign_error png_error
#    define png_chunk_benign_error png_chunk_error
#  endif
#endif

/* Added at libpng version 1.4.0 */
#if !defined(PNG_NO_WARNINGS) && !defined(PNG_WARNINGS_SUPPORTED)
#  define PNG_WARNINGS_SUPPORTED
#endif

/* Added at libpng version 1.4.0 */
#if !defined(PNG_NO_ERROR_TEXT) && !defined(PNG_ERROR_TEXT_SUPPORTED)
#  define PNG_ERROR_TEXT_SUPPORTED
#endif

/* Added at libpng version 1.4.0 */
#if !defined(PNG_NO_CHECK_cHRM) && !defined(PNG_CHECK_cHRM_SUPPORTED)
#  define PNG_CHECK_cHRM_SUPPORTED
#endif

/* Added at libpng version 1.4.0 */
#if !defined(PNG_NO_ALIGNED_MEMORY) && !defined(PNG_ALIGNED_MEMORY_SUPPORTED)
#  define PNG_ALIGNED_MEMORY_SUPPORTED
#endif

/* Enabled by default in 1.2.0.  You can disable this if you don't need to
 * support PNGs that are embedded in MNG datastreams
 */
#ifndef PNG_NO_MNG_FEATURES
#  ifndef PNG_MNG_FEATURES_SUPPORTED
#    define PNG_MNG_FEATURES_SUPPORTED
#  endif
#endif

/* Added at libpng version 1.4.0 */
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
#  ifndef PNG_FLOATING_POINT_SUPPORTED
#    define PNG_FLOATING_POINT_SUPPORTED
#  endif
#endif

/* Added at libpng-1.4.0beta49 for testing (this test is no longer used
 * in libpng and png_calloc() is always present)
 */
#define PNG_CALLOC_SUPPORTED

/* If you are running on a machine where you cannot allocate more
 * than 64K of memory at once, uncomment this.  While libpng will not
 * normally need that much memory in a chunk (unless you load up a very
 * large file), zlib needs to know how big of a chunk it can use, and
 * libpng thus makes sure to check any memory allocation to verify it
 * will fit into memory.
#define PNG_MAX_MALLOC_64K
 */
#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
#  define PNG_MAX_MALLOC_64K
#endif

/* This macro protects us against machines that don't have function
 * prototypes (ie K&R style headers).  If your compiler does not handle
 * function prototypes, define this macro and use the included ansi2knr.
 * I've always been able to use _NO_PROTO as the indicator, but you may
 * need to drag the empty declaration out in front of here, or change the
 * ifdef to suit your own needs.
 */
#ifndef PNGARG

#  ifdef OF /* zlib prototype munger */
#    define PNGARG(arglist) OF(arglist)
#  else

#    ifdef _NO_PROTO
#      define PNGARG(arglist) ()
#    else
#      define PNGARG(arglist) arglist
#    endif /* _NO_PROTO */

#  endif /* OF */

#endif /* PNGARG */

/* 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 allows the calling convention of every exported function and
 * every function called via a user supplied function pointer to be
 * specified.  This is done 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).
 *
 *
 * Two common cases are supported:
 *
 * PNGAPI_RULE=0  Use the operating system convention for PNGAPI and
 *                the 'C' calling convention (from PNGCAPI) for
 *                callbacks (PNGCBAPI).
 * PNGAPI_RULE=1  Use PNGCAPI - the 'C' calling convention - throughout.
 *                This is correct on Cygwin implementations, assumed to
 *                be correct on MingW compilations and likely to work
 *                in C/C++ only environments everywhere else.
 *
 * 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.
 */
#ifndef PNGAPI_RULE
#  define PNGAPI_RULE 0
#endif

/* 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.
 *
 * 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.
 *
 * NOTE: this is poorly tested and may miss many cases, the default
 * (everything empty) is harmless unless the result is a DLL that is
 * intended to be distributed!
 */
#if defined(__CYGWIN__)
  /* Cygwin: force PNGCAPI to cdecl. */
#  ifndef PNGCAPI
#    define PNGCAPI __cdecl
#  endif

  /* Provide the appropriate defaults for exporting a symbol from
   * the DLL and forcing import.  Always set these - the choice to
   * use them is made below.
   */
#  ifndef PNG_DLL_EXPORT
#    define PNG_DLL_EXPORT __declspec(dllexport)
#  endif
#  ifndef PNG_DLL_IMPORT
#    define PNG_DLL_IMPORT __declspec(dllimport)
#  endif

#else /* !Cygwin */
#  if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\
        defined(_WIN32) || defined(__WIN32__) ) &&\
      ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\
        defined(_M_X64) || defined(_M_IA64) )
    /* Windows system (DOS doesn't support DLLs) running on x86/x64 and
     * not being built under Cygwin or by a MingW compiler.
     */
#    if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800))
#      ifndef PNGCAPI
#        define PNGCAPI __cdecl
#      endif
#      if PNGAPI_RULE == 0 && !defined(PNGAPI)
#        define PNGAPI __stdcall
#      endif
#    else
      /* An older compiler, or one not detected (erroneously) above. */
#      ifndef PNGCAPI
#        define PNGCAPI _cdecl
#      endif
#      if PNGAPI_RULE == 0 && !defined(PNGAPI)
#        define PNGAPI _stdcall
#      endif
#    endif /* compiler/api */
    /* NOTE: PNGCBAPI always defaults to PNGCAPI. */

#    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 /* !Cygwin && !Windows/x86 */
#    if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
#      ifndef PNGAPI
#        define PNGAPI _System
#      endif
#    else /* !Cygwin && !Windows/x86 && !OS/2 */
      /* Use the defaults */
#    endif /* other system, !OS/2 */
#  endif /* !Windows/x86 */
#endif /* !Cygwin */

/* Now do all the defaulting . */
#ifndef PNGCAPI
#  define PNGCAPI
#endif
#ifndef PNGCBAPI
#  define PNGCBAPI PNGCAPI
#endif
#ifndef PNGAPI
#  define PNGAPI PNGCAPI
#endif

/* The default for PNG_IMPEXP depends on whether the library is
 * being built or used.
 */
#ifndef PNG_IMPEXP
#  ifdef PNGLIB_BUILD
    /* Building the library */
#    if (defined(DLL_EXPORT)/*from libtool*/ ||\
	defined(_WINDLL) || defined(_DLL) || defined(__DLL__) ||\
	defined(PNG_BUILD_DLL)) && defined(PNG_DLL_EXPORT)
      /* Building a DLL. */
#      define PNG_IMPEXP PNG_DLL_EXPORT
#    endif /* DLL */
#  else
    /* Using the library */
#    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
#  endif

#  ifndef PNG_IMPEXP
#    define PNG_IMPEXP
#  endif
#endif

#ifndef PNG_EXPORT_TYPE
#  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
#endif
#ifndef PNG_EXPORT
#  define PNG_EXPORT(type, name, args, attributes, ordinal)\
     PNG_EXPORT_TYPE(type) (PNGAPI name) PNGARG(args) attributes
#endif

/* Use PNG_REMOVED to comment out a removed interface. */
#ifndef PNG_REMOVED
#  define PNG_REMOVED(name, ordinal)
#endif

#ifndef PNG_CALLBACK
#  define PNG_CALLBACK(type, name, args, attributes)\
   type (PNGCBAPI name) PNGARG(args) attributes
#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.
   */
#  ifdef __GNUC__
#    ifndef PNG_USE_RESULT
#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
#    endif
#    ifndef PNG_NORETURN
#      define PNG_NORETURN   __attribute__((__noreturn__))
#    endif
#    ifndef PNG_ALLOCATED
#      define PNG_ALLOCATED  __attribute__((__malloc__))
#    endif

    /* This specifically protects structure members that should only be
     * accessed from within the library, therefore should be empty during
     * a library build.
     */
#    ifndef PNGLIB_BUILD
#      ifndef PNG_DEPRECATED
#        define PNG_DEPRECATED __attribute__((__deprecated__))
#      endif
#      ifndef PNG_DEPSTRUCT
#        define PNG_DEPSTRUCT  __attribute__((__deprecated__))
#      endif
#      ifndef PNG_PRIVATE
#        if 0 /* Doesn't work so we use deprecated instead*/
#          define PNG_PRIVATE \
            __attribute__((warning("This function is not exported by libpng.")))
#        else
#          define PNG_PRIVATE \
            __attribute__((__deprecated__))
#        endif
#      endif /* PNG_PRIVATE */
#    endif /* PNGLIB_BUILD */
#  endif /* __GNUC__ */
#endif /* PNG_PEDANTIC_WARNINGS */

#ifndef PNG_DEPRECATED
#  define PNG_DEPRECATED  /* Use of this function is deprecated */
#endif
#ifndef PNG_USE_RESULT
#  define PNG_USE_RESULT  /* The result of this function must be checked */
#endif
#ifndef PNG_NORETURN
#  define PNG_NORETURN    /* This function does not return */
#endif
#ifndef PNG_ALLOCATED
#  define PNG_ALLOCATED   /* The result of the function is new memory */
#endif
#ifndef PNG_DEPSTRUCT
#  define PNG_DEPSTRUCT   /* Access to this struct member is deprecated */
#endif
#ifndef PNG_PRIVATE
#  define PNG_PRIVATE     /* This is a private libpng function */
#endif

/* This protects us against compilers that run on a windowing system
 * and thus don't have or would rather us not use the stdio types:
 * stdin, stdout, and stderr.  The only one currently used is stderr
 * in png_error() and png_warning().  #defining PNG_NO_CONSOLE_IO will
 * prevent these from being compiled and used. #defining PNG_NO_STDIO
 * will also prevent these, plus will prevent the entire set of stdio
 * macros and functions (FILE *, printf, etc.) from being compiled and used,
 * unless (PNG_DEBUG > 0) has been #defined.
 *
 * #define PNG_NO_CONSOLE_IO
 * #define PNG_NO_STDIO
 */

#if !defined(PNG_NO_STDIO) && !defined(PNG_STDIO_SUPPORTED)
#  define PNG_STDIO_SUPPORTED
#endif

#ifdef PNG_NO_STDIO
#  ifndef PNG_NO_CONSOLE_IO
#    define PNG_NO_CONSOLE_IO
#  endif
#  ifdef PNG_DEBUG
#    if (PNG_DEBUG > 0)
#      include <stdio.h>
#    endif
#  endif
#else
#  include <stdio.h>
#endif

#if !(defined PNG_NO_CONSOLE_IO) && !defined(PNG_CONSOLE_IO_SUPPORTED)
#  define PNG_CONSOLE_IO_SUPPORTED
#endif

/* PNG_SETJMP_NOT_SUPPORTED and PNG_NO_SETJMP_SUPPORTED are deprecated. */
#if !defined(PNG_NO_SETJMP) && \
    !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED)
#  define PNG_SETJMP_SUPPORTED
#endif

#ifdef PNG_SETJMP_SUPPORTED
#  include <setjmp.h>
#endif

#ifdef BSD
#  include <strings.h>
#else
#  include <string.h>
#endif

/* Other defines for things like memory and the like can go here.  */

/* This controls how fine the dithering gets.  As this allocates
 * a largish chunk of memory (32K), those who are not as concerned
 * with dithering quality can decrease some or all of these.
 */
#ifndef PNG_DITHER_RED_BITS
#  define PNG_DITHER_RED_BITS 5
#endif
#ifndef PNG_DITHER_GREEN_BITS
#  define PNG_DITHER_GREEN_BITS 5
#endif
#ifndef PNG_DITHER_BLUE_BITS
#  define PNG_DITHER_BLUE_BITS 5
#endif

/* This controls how fine the gamma correction becomes when you
 * are only interested in 8 bits anyway.  Increasing this value
 * results in more memory being used, and more pow() functions
 * being called to fill in the gamma tables.  Don't set this value
 * less then 8, and even that may not work (I haven't tested it).
 */
#ifndef PNG_MAX_GAMMA_8
#  define PNG_MAX_GAMMA_8 11
#endif

/* This controls how much a difference in gamma we can tolerate before
 * we actually start doing gamma conversion.
 */
#ifndef PNG_GAMMA_THRESHOLD
#  define PNG_GAMMA_THRESHOLD 0.05
#endif

/* The following uses const char * instead of char * for error
 * and warning message functions, so some compilers won't complain.
 * If you do not want to use const, define PNG_NO_CONST here.
 */
#ifndef PNG_CONST
#  ifndef PNG_NO_CONST
#    define PNG_CONST const
#  else
#    define PNG_CONST
#  endif
#endif

/* The following defines give you the ability to remove code from the
 * library that you will not be using.  I wish I could figure out how to
 * automate this, but I can't do that without making it seriously hard
 * on the users.  So if you are not using an ability, change the #define
 * to and #undef, and that part of the library will not be compiled.  If
 * your linker can't find a function, you may want to make sure the
 * ability is defined here.  Some of these depend upon some others being
 * defined.  I haven't figured out all the interactions here, so you may
 * have to experiment awhile to get everything to compile.  If you are
 * creating or using a shared library, you probably shouldn't touch this,
 * as it will affect the size of the structures, and this will cause bad
 * things to happen if the library and/or application ever change.
 */

/* Any features you will not be using can be undef'ed here */

/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
 * to turn it off with PNG_NO_READ|WRITE_TRANSFORMS on the compile line,
 * then pick and choose which ones to define without having to edit this
 * file. It is safe to use the PNG_NO_READ|WRITE_TRANSFORMS
 * if you only want to have a png-compliant reader/writer but don't need
 * any of the extra transformations.  This saves about 80 kbytes in a
 * typical installation of the library. (PNG_NO_* form added in version
 * 1.0.1c, for consistency; PNG_*_TRANSFORMS_NOT_SUPPORTED deprecated in
 * 1.4.0)
 */

/* Ignore attempt to turn off both floating and fixed point support */
#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \
    !defined(PNG_NO_FIXED_POINT_SUPPORTED)
#  define PNG_FIXED_POINT_SUPPORTED
#endif

#ifdef PNG_READ_SUPPORTED

/* PNG_READ_TRANSFORMS_NOT_SUPPORTED is deprecated. */
#  if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
      !defined(PNG_NO_READ_TRANSFORMS)
#    define PNG_READ_TRANSFORMS_SUPPORTED
#  endif

#  ifdef PNG_READ_TRANSFORMS_SUPPORTED
#    ifndef PNG_NO_READ_EXPAND
#      define PNG_READ_EXPAND_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_SHIFT
#      define PNG_READ_SHIFT_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_PACK
#      define PNG_READ_PACK_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_BGR
#      define PNG_READ_BGR_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_SWAP
#      define PNG_READ_SWAP_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_PACKSWAP
#      define PNG_READ_PACKSWAP_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_INVERT
#      define PNG_READ_INVERT_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_BACKGROUND
#      define PNG_READ_BACKGROUND_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_16_TO_8
#      define PNG_READ_16_TO_8_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_FILLER
#      define PNG_READ_FILLER_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_GAMMA
#      define PNG_READ_GAMMA_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_GRAY_TO_RGB
#      define PNG_READ_GRAY_TO_RGB_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_SWAP_ALPHA
#      define PNG_READ_SWAP_ALPHA_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_INVERT_ALPHA
#      define PNG_READ_INVERT_ALPHA_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_STRIP_ALPHA
#      define PNG_READ_STRIP_ALPHA_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_USER_TRANSFORM
#      define PNG_READ_USER_TRANSFORM_SUPPORTED
#    endif
#    ifndef PNG_NO_READ_RGB_TO_GRAY
#      define PNG_READ_RGB_TO_GRAY_SUPPORTED
#    endif
#  endif /* PNG_READ_TRANSFORMS_SUPPORTED */

#  ifndef PNG_NO_PROGRESSIVE_READ
#    define PNG_PROGRESSIVE_READ_SUPPORTED
#  endif
/* You can define PNG_NO_PROGRESSIVE_READ if you don't do progressive reading.
 * This is not talking about interlacing capability!  You'll still have
 * interlacing unless you change the following define which is required
 * for PNG-compliant decoders:
 */

#  define PNG_READ_INTERLACING_SUPPORTED

  /* PNG_NO_SEQUENTIAL_READ_SUPPORTED is deprecated. */
#  if !defined(PNG_NO_SEQUENTIAL_READ) && \
      !defined(PNG_SEQUENTIAL_READ_SUPPORTED) && \
      !defined(PNG_NO_SEQUENTIAL_READ_SUPPORTED)
#    define PNG_SEQUENTIAL_READ_SUPPORTED
#  endif

#  ifndef PNG_NO_READ_COMPOSITE_NODIV
#    ifndef PNG_NO_READ_COMPOSITED_NODIV  /* libpng-1.0.x misspelling */
      /* well tested on Intel, SGI */
#      define PNG_READ_COMPOSITE_NODIV_SUPPORTED
#    endif
#  endif

#  if !defined(PNG_NO_GET_INT_32) || defined(PNG_READ_oFFS_SUPPORTED) || \
      defined(PNG_READ_pCAL_SUPPORTED)
#    ifndef PNG_GET_INT_32_SUPPORTED
#      define PNG_GET_INT_32_SUPPORTED
#    endif
#  endif

#endif /* PNG_READ_SUPPORTED */

#ifdef PNG_WRITE_SUPPORTED

/* PNG_WRITE_TRANSFORMS_NOT_SUPPORTED is deprecated. */
#  if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
      !defined(PNG_NO_WRITE_TRANSFORMS)
#    define PNG_WRITE_TRANSFORMS_SUPPORTED
#  endif

#  ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
#    ifndef PNG_NO_WRITE_SHIFT
#      define PNG_WRITE_SHIFT_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_PACK
#      define PNG_WRITE_PACK_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_BGR
#      define PNG_WRITE_BGR_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_SWAP
#      define PNG_WRITE_SWAP_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_PACKSWAP
#      define PNG_WRITE_PACKSWAP_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_INVERT
#      define PNG_WRITE_INVERT_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_FILLER
#      define PNG_WRITE_FILLER_SUPPORTED   /* same as WRITE_STRIP_ALPHA */
#    endif
#    ifndef PNG_NO_WRITE_SWAP_ALPHA
#      define PNG_WRITE_SWAP_ALPHA_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_INVERT_ALPHA
#      define PNG_WRITE_INVERT_ALPHA_SUPPORTED
#    endif
#    ifndef PNG_NO_WRITE_USER_TRANSFORM
#      define PNG_WRITE_USER_TRANSFORM_SUPPORTED
#    endif
#  endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */

#  if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \
      !defined(PNG_WRITE_INTERLACING_SUPPORTED)
    /* This is not required for PNG-compliant encoders, but can cause
     * trouble if left undefined
     */
#    define PNG_WRITE_INTERLACING_SUPPORTED
#  endif

#  if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \
      !defined(PNG_WRITE_WEIGHTED_FILTER) && \
      defined(PNG_FLOATING_POINT_SUPPORTED)
#    define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
#  endif

#  ifndef PNG_NO_WRITE_FLUSH
#    define PNG_WRITE_FLUSH_SUPPORTED
#  endif

#  if !defined(PNG_NO_SAVE_INT_32) || defined(PNG_WRITE_oFFS_SUPPORTED) || \
      defined(PNG_WRITE_pCAL_SUPPORTED)
#    ifndef PNG_SAVE_INT_32_SUPPORTED
#      define PNG_SAVE_INT_32_SUPPORTED
#    endif
#  endif

#endif /* PNG_WRITE_SUPPORTED */

#define PNG_NO_ERROR_NUMBERS

#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
#  ifndef PNG_NO_USER_TRANSFORM_PTR
#    define PNG_USER_TRANSFORM_PTR_SUPPORTED
#  endif
#endif

#if defined(PNG_STDIO_SUPPORTED) && !defined(PNG_TIME_RFC1123_SUPPORTED)
#  define PNG_TIME_RFC1123_SUPPORTED
#endif

/* This adds extra functions in pngget.c for accessing data from the
 * info pointer (added in version 0.99)
 * png_get_image_width()
 * png_get_image_height()
 * png_get_bit_depth()
 * png_get_color_type()
 * png_get_compression_type()
 * png_get_filter_type()
 * png_get_interlace_type()
 * png_get_pixel_aspect_ratio()
 * png_get_pixels_per_meter()
 * png_get_x_offset_pixels()
 * png_get_y_offset_pixels()
 * png_get_x_offset_microns()
 * png_get_y_offset_microns()
 */
#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED)
#  define PNG_EASY_ACCESS_SUPPORTED
#endif

/* Added at libpng-1.2.0 */
#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED)
#  define PNG_USER_MEM_SUPPORTED
#endif

/* Added at libpng-1.2.6 */
#ifndef PNG_NO_SET_USER_LIMITS
#  ifndef PNG_SET_USER_LIMITS_SUPPORTED
#    define PNG_SET_USER_LIMITS_SUPPORTED
#  endif
  /* Feature added at libpng-1.4.0, this flag added at 1.4.1 */
#  ifndef PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
#    define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
#  endif
  /* Feature added at libpng-1.4.1, this flag added at 1.4.1 */
#  ifndef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
#    define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
#  endif
#endif

/* Added at libpng-1.2.43 */
#ifndef PNG_NO_USER_LIMITS
#  ifndef PNG_USER_LIMITS_SUPPORTED
#    define PNG_USER_LIMITS_SUPPORTED
#  endif
#endif

/* Added at libpng-1.0.16 and 1.2.6.  To accept all valid PNGs no matter
 * how large, set these two limits to 0x7fffffffL
 */
#ifndef PNG_USER_WIDTH_MAX
#  define PNG_USER_WIDTH_MAX 1000000L
#endif
#ifndef PNG_USER_HEIGHT_MAX
#  define PNG_USER_HEIGHT_MAX 1000000L
#endif

/* Added at libpng-1.2.43.  To accept all valid PNGs no matter
 * how large, set these two limits to 0.
 */
#ifndef PNG_USER_CHUNK_CACHE_MAX
#  define PNG_USER_CHUNK_CACHE_MAX 0
#endif

/* Added at libpng-1.2.43 */
#ifndef PNG_USER_CHUNK_MALLOC_MAX
#  define PNG_USER_CHUNK_MALLOC_MAX 0
#endif

/* Added at libpng-1.4.0 */
#if !defined(PNG_NO_IO_STATE) && !defined(PNG_IO_STATE_SUPPORTED)
#  define PNG_IO_STATE_SUPPORTED
#endif

#ifndef PNG_LITERAL_SHARP
#  define PNG_LITERAL_SHARP 0x23
#endif
#ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
#  define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
#endif
#ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
#  define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
#endif
#ifndef PNG_STRING_NEWLINE
#  define PNG_STRING_NEWLINE "\n"
#endif

/* These are currently experimental features, define them if you want */

/* Very little testing, not enabled by default. */
/*
#ifdef PNG_READ_SUPPORTED
#  ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
#    define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
#  endif
#endif
*/

/* This is only for PowerPC big-endian and 680x0 systems */
/* some testing, not enabled by default. */
/*
#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED
#  define PNG_READ_BIG_ENDIAN_SUPPORTED
#endif
*/

#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
#  define PNG_USE_READ_MACROS
#endif

/* Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING */
#if !defined(PNG_NO_POINTER_INDEXING) && \
    !defined(PNG_POINTER_INDEXING_SUPPORTED)
#  define PNG_POINTER_INDEXING_SUPPORTED
#endif


/* Any chunks you are not interested in, you can undef here.  The
 * ones that allocate memory may be expecially important (hIST,
 * tEXt, zTXt, tRNS, pCAL).  Others will just save time and make png_info
 * a bit smaller.
 */

/* The size of the png_text structure changed in libpng-1.0.6 when
 * iTXt support was added.  iTXt support was turned off by default through
 * libpng-1.2.x, to support old apps that malloc the png_text structure
 * instead of calling png_set_text() and letting libpng malloc it.  It
 * was turned on by default in libpng-1.4.0.
 */

/* PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */
#if defined(PNG_READ_SUPPORTED) && \
    !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
    !defined(PNG_NO_READ_ANCILLARY_CHUNKS)
#  define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
#endif

/* PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */
#if defined(PNG_WRITE_SUPPORTED) && \
    !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
    !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
#  define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
#endif

#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED

#  ifdef PNG_NO_READ_TEXT
#    define PNG_NO_READ_iTXt
#    define PNG_NO_READ_tEXt
#    define PNG_NO_READ_zTXt
#  endif

#  ifndef PNG_NO_READ_bKGD
#    define PNG_READ_bKGD_SUPPORTED
#    define PNG_bKGD_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_cHRM
#    define PNG_READ_cHRM_SUPPORTED
#    define PNG_cHRM_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_gAMA
#    define PNG_READ_gAMA_SUPPORTED
#    define PNG_gAMA_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_hIST
#    define PNG_READ_hIST_SUPPORTED
#    define PNG_hIST_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_iCCP
#    define PNG_READ_iCCP_SUPPORTED
#    define PNG_iCCP_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_iTXt
#    ifndef PNG_READ_iTXt_SUPPORTED
#      define PNG_READ_iTXt_SUPPORTED
#    endif
#    ifndef PNG_iTXt_SUPPORTED
#      define PNG_iTXt_SUPPORTED
#    endif
#  endif
#  ifndef PNG_NO_READ_oFFs
#    define PNG_READ_oFFs_SUPPORTED
#    define PNG_oFFs_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_pCAL
#    define PNG_READ_pCAL_SUPPORTED
#    define PNG_pCAL_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_sCAL
#    define PNG_READ_sCAL_SUPPORTED
#    define PNG_sCAL_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_pHYs
#    define PNG_READ_pHYs_SUPPORTED
#    define PNG_pHYs_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_sBIT
#    define PNG_READ_sBIT_SUPPORTED
#    define PNG_sBIT_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_sPLT
#    define PNG_READ_sPLT_SUPPORTED
#    define PNG_sPLT_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_sRGB
#    define PNG_READ_sRGB_SUPPORTED
#    define PNG_sRGB_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_tEXt
#    define PNG_READ_tEXt_SUPPORTED
#    define PNG_tEXt_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_tIME
#    define PNG_READ_tIME_SUPPORTED
#    define PNG_tIME_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_tRNS
#    define PNG_READ_tRNS_SUPPORTED
#    define PNG_tRNS_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_zTXt
#    define PNG_READ_zTXt_SUPPORTED
#    define PNG_zTXt_SUPPORTED
#  endif
#  ifndef PNG_NO_READ_OPT_PLTE
    /* This only affects support of the optional PLTE chunk in RGB and RGBA
     * images.
     */
#    define PNG_READ_OPT_PLTE_SUPPORTED
#  endif
#  if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
      defined(PNG_READ_zTXt_SUPPORTED)
#    define PNG_READ_TEXT_SUPPORTED
#    define PNG_TEXT_SUPPORTED
#  endif

#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */

#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
#  ifndef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
#    define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
#  endif
#  ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
#    define PNG_UNKNOWN_CHUNKS_SUPPORTED
#  endif
#  ifndef PNG_READ_USER_CHUNKS_SUPPORTED
#    define PNG_READ_USER_CHUNKS_SUPPORTED
#  endif
#endif
#ifndef PNG_NO_READ_USER_CHUNKS
#  ifndef PNG_READ_USER_CHUNKS_SUPPORTED
#    define PNG_READ_USER_CHUNKS_SUPPORTED
#  endif
#  ifndef PNG_USER_CHUNKS_SUPPORTED
#    define PNG_USER_CHUNKS_SUPPORTED
#  endif
#endif
#ifndef PNG_NO_HANDLE_AS_UNKNOWN
#  ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#    define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#  endif
#endif

#ifdef PNG_WRITE_SUPPORTED
#  ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED

#    ifdef PNG_NO_WRITE_TEXT
#      define PNG_NO_WRITE_iTXt
#      define PNG_NO_WRITE_tEXt
#      define PNG_NO_WRITE_zTXt
#    endif
#    ifndef PNG_NO_WRITE_bKGD
#      define PNG_WRITE_bKGD_SUPPORTED
#      ifndef PNG_bKGD_SUPPORTED
#        define PNG_bKGD_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_cHRM
#      define PNG_WRITE_cHRM_SUPPORTED
#      ifndef PNG_cHRM_SUPPORTED
#        define PNG_cHRM_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_gAMA
#      define PNG_WRITE_gAMA_SUPPORTED
#      ifndef PNG_gAMA_SUPPORTED
#        define PNG_gAMA_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_hIST
#      define PNG_WRITE_hIST_SUPPORTED
#      ifndef PNG_hIST_SUPPORTED
#        define PNG_hIST_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_iCCP
#      define PNG_WRITE_iCCP_SUPPORTED
#      ifndef PNG_iCCP_SUPPORTED
#        define PNG_iCCP_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_iTXt
#      ifndef PNG_WRITE_iTXt_SUPPORTED
#        define PNG_WRITE_iTXt_SUPPORTED
#      endif
#      ifndef PNG_iTXt_SUPPORTED
#        define PNG_iTXt_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_oFFs
#      define PNG_WRITE_oFFs_SUPPORTED
#      ifndef PNG_oFFs_SUPPORTED
#        define PNG_oFFs_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_pCAL
#      define PNG_WRITE_pCAL_SUPPORTED
#      ifndef PNG_pCAL_SUPPORTED
#        define PNG_pCAL_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_sCAL
#      define PNG_WRITE_sCAL_SUPPORTED
#      ifndef PNG_sCAL_SUPPORTED
#        define PNG_sCAL_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_pHYs
#      define PNG_WRITE_pHYs_SUPPORTED
#      ifndef PNG_pHYs_SUPPORTED
#        define PNG_pHYs_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_sBIT
#      define PNG_WRITE_sBIT_SUPPORTED
#      ifndef PNG_sBIT_SUPPORTED
#        define PNG_sBIT_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_sPLT
#      define PNG_WRITE_sPLT_SUPPORTED
#      ifndef PNG_sPLT_SUPPORTED
#        define PNG_sPLT_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_sRGB
#      define PNG_WRITE_sRGB_SUPPORTED
#      ifndef PNG_sRGB_SUPPORTED
#        define PNG_sRGB_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_tEXt
#      define PNG_WRITE_tEXt_SUPPORTED
#      ifndef PNG_tEXt_SUPPORTED
#        define PNG_tEXt_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_tIME
#      define PNG_WRITE_tIME_SUPPORTED
#      ifndef PNG_tIME_SUPPORTED
#        define PNG_tIME_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_tRNS
#      define PNG_WRITE_tRNS_SUPPORTED
#      ifndef PNG_tRNS_SUPPORTED
#        define PNG_tRNS_SUPPORTED
#      endif
#    endif
#    ifndef PNG_NO_WRITE_zTXt
#      define PNG_WRITE_zTXt_SUPPORTED
#      ifndef PNG_zTXt_SUPPORTED
#        define PNG_zTXt_SUPPORTED
#      endif
#    endif
#    if defined(PNG_WRITE_iTXt_SUPPORTED) || \
        defined(PNG_WRITE_tEXt_SUPPORTED) || \
        defined(PNG_WRITE_zTXt_SUPPORTED)
#      define PNG_WRITE_TEXT_SUPPORTED
#      ifndef PNG_TEXT_SUPPORTED
#        define PNG_TEXT_SUPPORTED
#      endif
#    endif

#    ifdef PNG_WRITE_tIME_SUPPORTED
#      ifndef PNG_NO_CONVERT_tIME
        /* The "tm" structure is not supported on WindowsCE */
#        ifndef _WIN32_WCE
#          ifndef PNG_CONVERT_tIME_SUPPORTED
#            define PNG_CONVERT_tIME_SUPPORTED
#          endif
#        endif
#      endif
#    endif

#  endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */

#  ifndef PNG_NO_WRITE_FILTER
#    ifndef PNG_WRITE_FILTER_SUPPORTED
#      define PNG_WRITE_FILTER_SUPPORTED
#    endif
#  endif

#  ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
#    define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
#    ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
#      define PNG_UNKNOWN_CHUNKS_SUPPORTED
#    endif
#  endif
#  ifndef PNG_NO_HANDLE_AS_UNKNOWN
#    ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#      define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#    endif
#  endif
#endif /* PNG_WRITE_SUPPORTED */

/* Turn this off to disable png_read_png() and png_write_png() and
 * leave the row_pointers member out of the info structure.
 */
#ifndef PNG_NO_INFO_IMAGE
#  define PNG_INFO_IMAGE_SUPPORTED
#endif

/* Need the time information for converting tIME chunks */
#ifdef PNG_CONVERT_tIME_SUPPORTED
  /* "time.h" functions are not supported on WindowsCE */
#  include <time.h>
#endif

/* Some typedefs to get us started.  These should be safe on most of the
 * common platforms.  The typedefs should be at least as large as the
 * numbers suggest (a png_uint_32 must be at least 32 bits long), but they
 * don't have to be exactly that size.  Some compilers dislike passing
 * unsigned shorts as function parameters, so you may be better off using
 * unsigned int for png_uint_16.
 */

#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL)
typedef unsigned int png_uint_32;
typedef int png_int_32;
#else
typedef unsigned long png_uint_32;
typedef long png_int_32;
#endif
typedef unsigned short png_uint_16;
typedef short png_int_16;
typedef unsigned char png_byte;

#ifdef PNG_NO_SIZE_T
typedef unsigned int png_size_t;
#else
typedef size_t png_size_t;
#endif
#define png_sizeof(x) sizeof(x)

/* The following is needed for medium model support.  It cannot be in the
 * pngpriv.h header.  Needs modification for other compilers besides
 * MSC.  Model independent support declares all arrays and pointers to be
 * large using the far keyword.  The zlib version used must also support
 * model independent data.  As of version zlib 1.0.4, the necessary changes
 * have been made in zlib.  The USE_FAR_KEYWORD define triggers other
 * changes that are needed. (Tim Wegner)
 */

/* Separate compiler dependencies (problem here is that zlib.h always
 * defines FAR. (SJT)
 */
#ifdef __BORLANDC__
#  if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
#    define LDATA 1
#  else
#    define LDATA 0
#  endif
  /* GRR:  why is Cygwin in here?  Cygwin is not Borland C... */
#  if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__)
#    define PNG_MAX_MALLOC_64K
#    if (LDATA != 1)
#      ifndef FAR
#        define FAR __far
#      endif
#      define USE_FAR_KEYWORD
#    endif   /* LDATA != 1 */
         /* Possibly useful for moving data out of default segment.
          * Uncomment it if you want. Could also define FARDATA as
          * const if your compiler supports it. (SJT)
#        define FARDATA FAR
          */
#  endif  /* __WIN32__, __FLAT__, __CYGWIN__ */
#endif   /* __BORLANDC__ */


/* Suggest testing for specific compiler first before testing for
 * FAR.  The Watcom compiler defines both __MEDIUM__ and M_I86MM,
 * making reliance oncertain keywords suspect. (SJT)
 */

/* MSC Medium model */
#ifdef FAR
#  ifdef M_I86MM
#    define USE_FAR_KEYWORD
#    define FARDATA FAR
#    include <dos.h>
#  endif
#endif

/* SJT: default case */
#ifndef FAR
#  define FAR
#endif

/* At this point FAR is always defined */
#ifndef FARDATA
#  define FARDATA
#endif

/* Typedef for floating-point numbers that are converted
 * to fixed-point with a multiple of 100,000, e.g., int_gamma
 */
typedef png_int_32 png_fixed_point;

/* Add typedefs for pointers */
typedef void            FAR * png_voidp;
typedef png_byte        FAR * png_bytep;
typedef png_uint_32     FAR * png_uint_32p;
typedef png_int_32      FAR * png_int_32p;
typedef png_uint_16     FAR * png_uint_16p;
typedef png_int_16      FAR * png_int_16p;
typedef PNG_CONST char  FAR * png_const_charp;
typedef char            FAR * png_charp;
typedef png_fixed_point FAR * png_fixed_point_p;

#ifndef PNG_NO_STDIO
typedef FILE            * png_FILE_p;
#endif

#ifdef PNG_FLOATING_POINT_SUPPORTED
typedef double          FAR * png_doublep;
#endif

/* Pointers to pointers; i.e. arrays */
typedef png_byte        FAR * FAR * png_bytepp;
typedef png_uint_32     FAR * FAR * png_uint_32pp;
typedef png_int_32      FAR * FAR * png_int_32pp;
typedef png_uint_16     FAR * FAR * png_uint_16pp;
typedef png_int_16      FAR * FAR * png_int_16pp;
typedef PNG_CONST char  FAR * FAR * png_const_charpp;
typedef char            FAR * FAR * png_charpp;
typedef png_fixed_point FAR * FAR * png_fixed_point_pp;
#ifdef PNG_FLOATING_POINT_SUPPORTED
typedef double          FAR * FAR * png_doublepp;
#endif

/* Pointers to pointers to pointers; i.e., pointer to array */
typedef char            FAR * FAR * FAR * png_charppp;

#define PNG_USE_LOCAL_ARRAYS /* Not used in libpng, defined for legacy apps */

/* Users may want to use these so they are not private.  Any library
 * functions that are passed far data must be model-independent.
 */

/* Memory model/platform independent fns */
#ifndef PNG_ABORT
#  ifdef _WINDOWS_
#    define PNG_ABORT() ExitProcess(0)
#  else
#    define PNG_ABORT() abort()
#  endif
#endif

#ifdef USE_FAR_KEYWORD
/* Use this to make far-to-near assignments */
#  define CHECK   1
#  define NOCHECK 0
#  define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK))
#  define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK))
#  define png_strcpy  _fstrcpy
#  define png_strncpy _fstrncpy   /* Added to v 1.2.6 */
#  define png_strlen  _fstrlen
#  define png_memcmp  _fmemcmp    /* SJT: added */
#  define png_memcpy  _fmemcpy
#  define png_memset  _fmemset
#  define png_sprintf sprintf
#else
#  ifdef _WINDOWS_  /* Favor Windows over C runtime fns */
#    define CVT_PTR(ptr)         (ptr)
#    define CVT_PTR_NOCHECK(ptr) (ptr)
#    define png_strcpy  lstrcpyA
#    define png_strncpy lstrcpynA
#    define png_strlen  lstrlenA
#    define png_memcmp  memcmp
#    define png_memcpy  CopyMemory
#    define png_memset  memset
#    define png_sprintf wsprintfA
#  else
#    define CVT_PTR(ptr)         (ptr)
#    define CVT_PTR_NOCHECK(ptr) (ptr)
#    define png_strcpy  strcpy
#    define png_strncpy strncpy     /* Added to v 1.2.6 */
#    define png_strlen  strlen
#    define png_memcmp  memcmp      /* SJT: added */
#    define png_memcpy  memcpy
#    define png_memset  memset
#    define png_sprintf sprintf
#    ifndef PNG_NO_SNPRINTF
#      ifdef _MSC_VER
#        define png_snprintf _snprintf   /* Added to v 1.2.19 */
#        define png_snprintf2 _snprintf
#        define png_snprintf6 _snprintf
#      else
#        define png_snprintf snprintf   /* Added to v 1.2.19 */
#        define png_snprintf2 snprintf
#        define png_snprintf6 snprintf
#      endif
#    else
      /* You don't have or don't want to use snprintf().  Caution: Using
       * sprintf instead of snprintf exposes your application to accidental
       * or malevolent buffer overflows.  If you don't have snprintf()
       * as a general rule you should provide one (you can get one from
       * Portable OpenSSH).
       */
#      define png_snprintf(s1,n,fmt,x1) sprintf(s1,fmt,x1)
#      define png_snprintf2(s1,n,fmt,x1,x2) sprintf(s1,fmt,x1,x2)
#      define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \
          sprintf(s1,fmt,x1,x2,x3,x4,x5,x6)
#    endif
#  endif
#endif

/* png_alloc_size_t is guaranteed to be no smaller than png_size_t,
 * and no smaller than png_uint_32.  Casts from png_size_t or png_uint_32
 * to png_alloc_size_t are not necessary; in fact, it is recommended
 * not to use them at all so that the compiler can complain when something
 * turns out to be problematic.
 * Casts in the other direction (from png_alloc_size_t to png_size_t or
 * png_uint_32) should be explicitly applied; however, we do not expect
 * to encounter practical situations that require such conversions.
 */
#if defined(__TURBOC__) && !defined(__FLAT__)
#  define png_mem_alloc farmalloc
#  define png_mem_free  farfree
   typedef unsigned long png_alloc_size_t;
#else
#  if defined(_MSC_VER) && defined(MAXSEG_64K)
#    define png_mem_alloc(s) halloc(s, 1)
#    define png_mem_free     hfree
     typedef unsigned long    png_alloc_size_t;
#  else
#    if defined(_WINDOWS_) && (!defined(INT_MAX) || INT_MAX <= 0x7ffffffeL)
#      define png_mem_alloc(s) HeapAlloc(GetProcessHeap(), 0, s)
#      define png_mem_free(p)  HeapFree(GetProcessHeap(), 0, p)
       typedef DWORD            png_alloc_size_t;
#    else
#      define png_mem_alloc malloc
#      define png_mem_free  free
       typedef png_size_t    png_alloc_size_t;
#    endif
#  endif
#endif
/* End of memory model/platform independent support */

/* Just a little check that someone hasn't tried to define something
 * contradictory.
 */
#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
#  undef PNG_ZBUF_SIZE
#  define PNG_ZBUF_SIZE 65536L
#endif


/* Added at libpng-1.2.8 */
#endif /* PNG_VERSION_INFO_ONLY */

#endif /* PNGCONF_H */
