Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/3rdparty/libpng/png.h

    r561 r846  
     1
    12/* png.h - header file for PNG reference library
    23 *
    3  * libpng version 1.2.40 - September 10, 2009
    4  * Copyright (c) 1998-2009 Glenn Randers-Pehrson
     4 * libpng version 1.4.0 - January 3, 2010
     5 * Copyright (c) 1998-2010 Glenn Randers-Pehrson
    56 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
    67 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
     
    1112 *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
    1213 *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
    13  *  libpng versions 0.97, January 1998, through 1.2.40 - September 10, 2009: Glenn
     14 *  libpng versions 0.97, January 1998, through 1.4.0 - January 3, 2010: Glenn
    1415 *  See also "Contributing Authors", below.
    1516 *
     
    105106 *    1.2.6                   13    10206  12.so.0.1.2.6
    106107 *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
    107  *    1.0.17rc1               10    10017  10.so.0.1.0.17rc1
     108 *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
    108109 *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
    109  *    1.0.17                  10    10017  10.so.0.1.0.17
     110 *    1.0.17                  10    10017  12.so.0.1.0.17
    110111 *    1.2.7                   13    10207  12.so.0.1.2.7
    111112 *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
    112  *    1.0.18rc1-5             10    10018  10.so.0.1.0.18rc1-5
     113 *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
    113114 *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
    114  *    1.0.18                  10    10018  10.so.0.1.0.18
     115 *    1.0.18                  10    10018  12.so.0.1.0.18
    115116 *    1.2.8                   13    10208  12.so.0.1.2.8
    116117 *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
     
    118119 *    1.2.9rc1                13    10209  12.so.0.9[.0]
    119120 *    1.2.9                   13    10209  12.so.0.9[.0]
    120  *    1.2.10beta1-8           13    10210  12.so.0.10[.0]
    121  *    1.2.10rc1-3             13    10210  12.so.0.10[.0]
     121 *    1.2.10beta1-7           13    10210  12.so.0.10[.0]
     122 *    1.2.10rc1-2             13    10210  12.so.0.10[.0]
    122123 *    1.2.10                  13    10210  12.so.0.10[.0]
     124 *    1.4.0beta1-5            14    10400  14.so.0.0[.0]
    123125 *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
    124  *    1.0.19rc1-5             10    10019  10.so.0.19[.0]
    125  *    1.2.11rc1-5             13    10211  12.so.0.11[.0]
    126  *    1.0.19                  10    10019  10.so.0.19[.0]
     126 *    1.4.0beta7-8            14    10400  14.so.0.0[.0]
    127127 *    1.2.11                  13    10211  12.so.0.11[.0]
    128  *    1.0.20                  10    10020  10.so.0.20[.0]
    129128 *    1.2.12                  13    10212  12.so.0.12[.0]
    130  *    1.2.13beta1             13    10213  12.so.0.13[.0]
    131  *    1.0.21                  10    10021  10.so.0.21[.0]
     129 *    1.4.0beta9-14           14    10400  14.so.0.0[.0]
    132130 *    1.2.13                  13    10213  12.so.0.13[.0]
    133  *    1.2.14beta1-2           13    10214  12.so.0.14[.0]
    134  *    1.0.22rc1               10    10022  10.so.0.22[.0]
    135  *    1.2.14rc1               13    10214  12.so.0.14[.0]
    136  *    1.0.22                  10    10022  10.so.0.22[.0]
    137  *    1.2.14                  13    10214  12.so.0.14[.0]
    138  *    1.2.15beta1-6           13    10215  12.so.0.15[.0]
    139  *    1.0.23rc1-5             10    10023  10.so.0.23[.0]
    140  *    1.2.15rc1-5             13    10215  12.so.0.15[.0]
    141  *    1.0.23                  10    10023  10.so.0.23[.0]
    142  *    1.2.15                  13    10215  12.so.0.15[.0]
    143  *    1.2.16beta1-2           13    10216  12.so.0.16[.0]
    144  *    1.2.16rc1               13    10216  12.so.0.16[.0]
    145  *    1.0.24                  10    10024  10.so.0.24[.0]
    146  *    1.2.16                  13    10216  12.so.0.16[.0]
    147  *    1.2.17beta1-2           13    10217  12.so.0.17[.0]
    148  *    1.0.25rc1               10    10025  10.so.0.25[.0]
    149  *    1.2.17rc1-3             13    10217  12.so.0.17[.0]
    150  *    1.0.25                  10    10025  10.so.0.25[.0]
    151  *    1.2.17                  13    10217  12.so.0.17[.0]
    152  *    1.0.26                  10    10026  10.so.0.26[.0]
    153  *    1.2.18                  13    10218  12.so.0.18[.0]
    154  *    1.2.19beta1-31          13    10219  12.so.0.19[.0]
    155  *    1.0.27rc1-6             10    10027  10.so.0.27[.0]
    156  *    1.2.19rc1-6             13    10219  12.so.0.19[.0]
    157  *    1.0.27                  10    10027  10.so.0.27[.0]
    158  *    1.2.19                  13    10219  12.so.0.19[.0]
    159  *    1.2.20beta01-04         13    10220  12.so.0.20[.0]
    160  *    1.0.28rc1-6             10    10028  10.so.0.28[.0]
    161  *    1.2.20rc1-6             13    10220  12.so.0.20[.0]
    162  *    1.0.28                  10    10028  10.so.0.28[.0]
    163  *    1.2.20                  13    10220  12.so.0.20[.0]
    164  *    1.2.21beta1-2           13    10221  12.so.0.21[.0]
    165  *    1.2.21rc1-3             13    10221  12.so.0.21[.0]
    166  *    1.0.29                  10    10029  10.so.0.29[.0]
    167  *    1.2.21                  13    10221  12.so.0.21[.0]
    168  *    1.2.22beta1-4           13    10222  12.so.0.22[.0]
    169  *    1.0.30rc1               10    10030  10.so.0.30[.0]
    170  *    1.2.22rc1               13    10222  12.so.0.22[.0]
    171  *    1.0.30                  10    10030  10.so.0.30[.0]
    172  *    1.2.22                  13    10222  12.so.0.22[.0]
    173  *    1.2.23beta01-05         13    10223  12.so.0.23[.0]
    174  *    1.2.23rc01              13    10223  12.so.0.23[.0]
    175  *    1.2.23                  13    10223  12.so.0.23[.0]
    176  *    1.2.24beta01-02         13    10224  12.so.0.24[.0]
    177  *    1.2.24rc01              13    10224  12.so.0.24[.0]
    178  *    1.2.24                  13    10224  12.so.0.24[.0]
    179  *    1.2.25beta01-06         13    10225  12.so.0.25[.0]
    180  *    1.2.25rc01-02           13    10225  12.so.0.25[.0]
    181  *    1.0.31                  10    10031  10.so.0.31[.0]
    182  *    1.2.25                  13    10225  12.so.0.25[.0]
    183  *    1.2.26beta01-06         13    10226  12.so.0.26[.0]
    184  *    1.2.26rc01              13    10226  12.so.0.26[.0]
    185  *    1.2.26                  13    10226  12.so.0.26[.0]
    186  *    1.0.32                  10    10032  10.so.0.32[.0]
    187  *    1.2.27beta01-06         13    10227  12.so.0.27[.0]
    188  *    1.2.27rc01              13    10227  12.so.0.27[.0]
    189  *    1.0.33                  10    10033  10.so.0.33[.0]
    190  *    1.2.27                  13    10227  12.so.0.27[.0]
    191  *    1.0.34                  10    10034  10.so.0.34[.0]
    192  *    1.2.28                  13    10228  12.so.0.28[.0]
    193  *    1.2.29beta01-03         13    10229  12.so.0.29[.0]
    194  *    1.2.29rc01              13    10229  12.so.0.29[.0]
    195  *    1.0.35                  10    10035  10.so.0.35[.0]
    196  *    1.2.29                  13    10229  12.so.0.29[.0]
    197  *    1.0.37                  10    10037  10.so.0.37[.0]
    198  *    1.2.30beta01-04         13    10230  12.so.0.30[.0]
    199  *    1.0.38rc01-08           10    10038  10.so.0.38[.0]
    200  *    1.2.30rc01-08           13    10230  12.so.0.30[.0]
    201  *    1.0.38                  10    10038  10.so.0.38[.0]
    202  *    1.2.30                  13    10230  12.so.0.30[.0]
    203  *    1.0.39rc01-03           10    10039  10.so.0.39[.0]
    204  *    1.2.31rc01-03           13    10231  12.so.0.31[.0]
    205  *    1.0.39                  10    10039  10.so.0.39[.0]
    206  *    1.2.31                  13    10231  12.so.0.31[.0]
    207  *    1.2.32beta01-02         13    10232  12.so.0.32[.0]
    208  *    1.0.40rc01              10    10040  10.so.0.40[.0]
    209  *    1.2.32rc01              13    10232  12.so.0.32[.0]
    210  *    1.0.40                  10    10040  10.so.0.40[.0]
    211  *    1.2.32                  13    10232  12.so.0.32[.0]
    212  *    1.2.33beta01-02         13    10233  12.so.0.33[.0]
    213  *    1.2.33rc01-02           13    10233  12.so.0.33[.0]
    214  *    1.0.41rc01              10    10041  10.so.0.41[.0]
    215  *    1.2.33                  13    10233  12.so.0.33[.0]
    216  *    1.0.41                  10    10041  10.so.0.41[.0]
    217  *    1.2.34beta01-07         13    10234  12.so.0.34[.0]
    218  *    1.0.42rc01              10    10042  10.so.0.42[.0]
    219  *    1.2.34rc01              13    10234  12.so.0.34[.0]
    220  *    1.0.42                  10    10042  10.so.0.42[.0]
    221  *    1.2.34                  13    10234  12.so.0.34[.0]
    222  *    1.2.35beta01-03         13    10235  12.so.0.35[.0]
    223  *    1.0.43rc01-02           10    10043  10.so.0.43[.0]
    224  *    1.2.35rc01-02           13    10235  12.so.0.35[.0]
    225  *    1.0.43                  10    10043  10.so.0.43[.0]
    226  *    1.2.35                  13    10235  12.so.0.35[.0]
    227  *    1.2.36beta01-05         13    10236  12.so.0.36[.0]
    228  *    1.2.36rc01              13    10236  12.so.0.36[.0]
    229  *    1.0.44                  10    10044  10.so.0.44[.0]
    230  *    1.2.36                  13    10236  12.so.0.36[.0]
    231  *    1.2.37beta01-03         13    10237  12.so.0.37[.0]
    232  *    1.2.37rc01              13    10237  12.so.0.37[.0]
    233  *    1.2.37                  13    10237  12.so.0.37[.0]
    234  *    1.2.45                  10    10045  12.so.0.45[.0]
    235  *    1.0.46                  10    10046  10.so.0.46[.0]
    236  *    1.2.38beta01            13    10238  12.so.0.38[.0]
    237  *    1.2.38rc01-03           13    10238  12.so.0.38[.0]
    238  *    1.0.47                  10    10047  10.so.0.47[.0]
    239  *    1.2.38                  13    10238  12.so.0.38[.0]
    240  *    1.2.39beta01-05         13    10239  12.so.0.39[.0]
    241  *    1.2.39rc01              13    10239  12.so.0.39[.0]
    242  *    1.0.48                  10    10048  10.so.0.48[.0]
    243  *    1.2.39                  13    10239  12.so.0.39[.0]
    244  *    1.2.40beta01            13    10240  12.so.0.40[.0]
    245  *    1.2.40rc01              13    10240  12.so.0.40[.0]
    246  *    1.0.49                  10    10049  10.so.0.49[.0]
    247  *    1.2.40                  13    10240  12.so.0.40[.0]
     131 *    1.4.0beta15-36          14    10400  14.so.0.0[.0]
     132 *    1.4.0beta37-87          14    10400  14.so.14.0[.0]
     133 *    1.4.0rc01               14    10400  14.so.14.0[.0]
     134 *    1.4.0beta88-109         14    10400  14.so.14.0[.0]
     135 *    1.4.0rc02-08            14    10400  14.so.14.0[.0]
     136 *    1.4.0                   14    10400  14.so.14.0[.0]
    248137 *
    249138 *    Henceforth the source version will match the shared-library major
     
    255144 *    were given the previous public release number plus a letter, until
    256145 *    version 1.0.6j; from then on they were given the upcoming public
    257  *    release number plus "betaNN" or "rcNN".
     146 *    release number plus "betaNN" or "rcN".
    258147 *
    259148 *    Binary incompatibility exists only when applications make direct access
     
    277166 * This code is released under the libpng license.
    278167 *
    279  * libpng versions 1.2.6, August 15, 2004, through 1.2.40, September 10, 2009, are
    280  * Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are
     168 * libpng versions 1.2.6, August 15, 2004, through 1.4.0, January 3, 2010, are
     169 * Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are
    281170 * distributed according to the same disclaimer and license as libpng-1.2.5
    282171 * with the following individual added to the list of Contributing Authors:
     
    366255 * boxes and the like:
    367256 *
    368  * printf("%s",png_get_copyright(NULL));
     257 *     printf("%s",png_get_copyright(NULL));
    369258 *
    370259 * Also, the PNG logo (in PNG format, of course) is supplied in the
     
    389278 * =========================
    390279 *
    391  *    September 10, 2009
     280 *    January 3, 2010
    392281 *
    393282 *    Since the PNG Development group is an ad-hoc body, we can't make
     
    395284 *
    396285 *    This is your unofficial assurance that libpng from version 0.71 and
    397  *    upward through 1.2.40 are Y2K compliant.  It is my belief that earlier
     286 *    upward through 1.4.0 are Y2K compliant.  It is my belief that earlier
    398287 *    versions were also Y2K compliant.
    399288 *
     
    451340
    452341/* Version information for png.h - this should match the version in png.c */
    453 #define PNG_LIBPNG_VER_STRING "1.2.40"
     342#define PNG_LIBPNG_VER_STRING "1.4.0"
    454343#define PNG_HEADER_VERSION_STRING \
    455    " libpng version 1.2.40 - September 10, 2009\n"
    456 
    457 #define PNG_LIBPNG_VER_SONUM   0
    458 #define PNG_LIBPNG_VER_DLLNUM  13
     344   " libpng version 1.4.0 - January 3, 2010\n"
     345
     346#define PNG_LIBPNG_VER_SONUM   14
     347#define PNG_LIBPNG_VER_DLLNUM  14
    459348
    460349/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
    461350#define PNG_LIBPNG_VER_MAJOR   1
    462 #define PNG_LIBPNG_VER_MINOR   2
    463 #define PNG_LIBPNG_VER_RELEASE 40
     351#define PNG_LIBPNG_VER_MINOR   4
     352#define PNG_LIBPNG_VER_RELEASE 0
    464353/* This should match the numeric part of the final component of
    465354 * PNG_LIBPNG_VER_STRING, omitting any leading zero:
     
    483372                                       PNG_LIBPNG_BUILD_PRIVATE */
    484373
    485 #define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
     374#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_BETA
    486375
    487376/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
     
    491380 * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
    492381 */
    493 #define PNG_LIBPNG_VER 10240 /* 1.2.40 */
     382#define PNG_LIBPNG_VER 10400 /* 1.4.0 */
    494383
    495384#ifndef PNG_VERSION_INFO_ONLY
     
    498387#endif
    499388
     389#ifdef _AIX
     390#define jmpbuf __jmpbuf
     391#endif
     392
    500393/* Include all user configurable info, including optional assembler routines */
    501394#include "pngconf.h"
    502395
    503396/*
    504  * Added at libpng-1.2.8 */
    505 /* Ref MSDN: Private as priority over Special
     397 * Added at libpng-1.2.8
     398 *
     399 * Ref MSDN: Private as priority over Special
    506400 * VS_FF_PRIVATEBUILD File *was not* built using standard release
    507401 * procedures. If this value is given, the StringFileInfo block must
     
    514408 */
    515409
    516 #if defined(PNG_USER_PRIVATEBUILD)
     410#ifdef PNG_USER_PRIVATEBUILD
    517411#  define PNG_LIBPNG_BUILD_TYPE \
    518412          (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
    519413#else
    520 #  if defined(PNG_LIBPNG_SPECIALBUILD)
     414#  ifdef PNG_LIBPNG_SPECIALBUILD
    521415#    define PNG_LIBPNG_BUILD_TYPE \
    522416            (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
     
    539433 */
    540434
    541 #ifndef PNG_NO_TYPECAST_NULL
    542 #define int_p_NULL                (int *)NULL
    543 #define png_bytep_NULL            (png_bytep)NULL
    544 #define png_bytepp_NULL           (png_bytepp)NULL
    545 #define png_doublep_NULL          (png_doublep)NULL
    546 #define png_error_ptr_NULL        (png_error_ptr)NULL
    547 #define png_flush_ptr_NULL        (png_flush_ptr)NULL
    548 #define png_free_ptr_NULL         (png_free_ptr)NULL
    549 #define png_infopp_NULL           (png_infopp)NULL
    550 #define png_malloc_ptr_NULL       (png_malloc_ptr)NULL
    551 #define png_read_status_ptr_NULL  (png_read_status_ptr)NULL
    552 #define png_rw_ptr_NULL           (png_rw_ptr)NULL
    553 #define png_structp_NULL          (png_structp)NULL
    554 #define png_uint_16p_NULL         (png_uint_16p)NULL
    555 #define png_voidp_NULL            (png_voidp)NULL
    556 #define png_write_status_ptr_NULL (png_write_status_ptr)NULL
    557 #else
    558 #define int_p_NULL                NULL
    559 #define png_bytep_NULL            NULL
    560 #define png_bytepp_NULL           NULL
    561 #define png_doublep_NULL          NULL
    562 #define png_error_ptr_NULL        NULL
    563 #define png_flush_ptr_NULL        NULL
    564 #define png_free_ptr_NULL         NULL
    565 #define png_infopp_NULL           NULL
    566 #define png_malloc_ptr_NULL       NULL
    567 #define png_read_status_ptr_NULL  NULL
    568 #define png_rw_ptr_NULL           NULL
    569 #define png_structp_NULL          NULL
    570 #define png_uint_16p_NULL         NULL
    571 #define png_voidp_NULL            NULL
    572 #define png_write_status_ptr_NULL NULL
    573 #endif
    574 
    575435/* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
    576436#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
     
    578438 * the version above.
    579439 */
    580 #ifdef PNG_USE_GLOBAL_ARRAYS
    581 PNG_EXPORT_VAR (PNG_CONST char) png_libpng_ver[18];
    582   /* Need room for 99.99.99beta99z */
    583 #else
    584440#define png_libpng_ver png_get_header_ver(NULL)
    585 #endif
    586 
    587 #ifdef PNG_USE_GLOBAL_ARRAYS
    588 /* This was removed in version 1.0.5c */
    589 /* Structures to facilitate easy interlacing.  See png.c for more details */
    590 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_start[7];
    591 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_inc[7];
    592 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_ystart[7];
    593 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_yinc[7];
    594 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_mask[7];
    595 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_dsp_mask[7];
    596 /* This isn't currently used.  If you need it, see png.c for more details.
    597 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_height[7];
    598 */
    599 #endif
    600441
    601442#endif /* PNG_NO_EXTERN */
     
    699540
    700541/* Supported compression types for text in PNG files (tEXt, and zTXt).
    701  * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed.
    702  */
     542 * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
    703543#define PNG_TEXT_COMPRESSION_NONE_WR -3
    704544#define PNG_TEXT_COMPRESSION_zTXt_WR -2
     
    734574 * know about their semantics.
    735575 */
    736 #define PNG_CHUNK_NAME_LENGTH 5
    737576typedef struct png_unknown_chunk_t
    738577{
    739     png_byte name[PNG_CHUNK_NAME_LENGTH];
     578    png_byte name[5];
    740579    png_byte *data;
    741580    png_size_t size;
     
    790629typedef struct png_info_struct
    791630{
    792    /* The following are necessary for every PNG file */
    793    png_uint_32 width;       /* width of image in pixels (from IHDR) */
    794    png_uint_32 height;      /* height of image in pixels (from IHDR) */
    795    png_uint_32 valid;       /* valid chunk data (see PNG_INFO_ below) */
    796    png_uint_32 rowbytes;    /* bytes needed to hold an untransformed row */
    797    png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
    798    png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
    799    png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
    800    png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
    801    png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
     631   /* the following are necessary for every PNG file */
     632   png_uint_32 width PNG_DEPSTRUCT;       /* width of image in pixels (from IHDR) */
     633   png_uint_32 height PNG_DEPSTRUCT;      /* height of image in pixels (from IHDR) */
     634   png_uint_32 valid PNG_DEPSTRUCT;       /* valid chunk data (see PNG_INFO_ below) */
     635   png_size_t rowbytes PNG_DEPSTRUCT;     /* bytes needed to hold an untransformed row */
     636   png_colorp palette PNG_DEPSTRUCT;      /* array of color values (valid & PNG_INFO_PLTE) */
     637   png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in "palette" (PLTE) */
     638   png_uint_16 num_trans PNG_DEPSTRUCT;   /* number of transparent palette color (tRNS) */
     639   png_byte bit_depth PNG_DEPSTRUCT;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
     640   png_byte color_type PNG_DEPSTRUCT;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
    802641   /* The following three should have been named *_method not *_type */
    803    png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
    804    png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
    805    png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
     642   png_byte compression_type PNG_DEPSTRUCT; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
     643   png_byte filter_type PNG_DEPSTRUCT;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
     644   png_byte interlace_type PNG_DEPSTRUCT; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
    806645
    807646   /* The following is informational only on read, and not used on writes. */
    808    png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
    809    png_byte pixel_depth;    /* number of bits per pixel */
    810    png_byte spare_byte;     /* to align the data, and for future use */
    811    png_byte signature[8];   /* magic bytes read by libpng from start of file */
     647   png_byte channels PNG_DEPSTRUCT;       /* number of data channels per pixel (1, 2, 3, 4) */
     648   png_byte pixel_depth PNG_DEPSTRUCT;    /* number of bits per pixel */
     649   png_byte spare_byte PNG_DEPSTRUCT;     /* to align the data, and for future use */
     650   png_byte signature[8] PNG_DEPSTRUCT;   /* magic bytes read by libpng from start of file */
    812651
    813652   /* The rest of the data is optional.  If you are reading, check the
     
    822661    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
    823662    */
    824    float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
    825 #endif
    826 
    827 #if defined(PNG_sRGB_SUPPORTED)
     663   float gamma PNG_DEPSTRUCT; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
     664#endif
     665
     666#ifdef PNG_sRGB_SUPPORTED
    828667    /* GR-P, 0.96a */
    829668    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
    830    png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */
    831 #endif
    832 
    833 #if defined(PNG_TEXT_SUPPORTED)
     669   png_byte srgb_intent PNG_DEPSTRUCT; /* sRGB rendering intent [0, 1, 2, or 3] */
     670#endif
     671
     672#ifdef PNG_TEXT_SUPPORTED
    834673   /* The tEXt, and zTXt chunks contain human-readable textual data in
    835674    * uncompressed, compressed, and optionally compressed forms, respectively.
     
    840679    * be in an image.
    841680    */
    842    int num_text; /* number of comments read/to write */
    843    int max_text; /* current size of text array */
    844    png_textp text; /* array of comments read/to write */
     681   int num_text PNG_DEPSTRUCT; /* number of comments read/to write */
     682   int max_text PNG_DEPSTRUCT; /* current size of text array */
     683   png_textp text PNG_DEPSTRUCT; /* array of comments read/to write */
    845684#endif /* PNG_TEXT_SUPPORTED */
    846685
    847 #if defined(PNG_tIME_SUPPORTED)
     686#ifdef PNG_tIME_SUPPORTED
    848687   /* The tIME chunk holds the last time the displayed image data was
    849688    * modified.  See the png_time struct for the contents of this struct.
    850689    */
    851    png_time mod_time;
    852 #endif
    853 
    854 #if defined(PNG_sBIT_SUPPORTED)
     690   png_time mod_time PNG_DEPSTRUCT;
     691#endif
     692
     693#ifdef PNG_sBIT_SUPPORTED
    855694   /* The sBIT chunk specifies the number of significant high-order bits
    856695    * in the pixel data.  Values are in the range [1, bit_depth], and are
     
    859698    * (valid & PNG_INFO_sBIT) is non-zero.
    860699    */
    861    png_color_8 sig_bit; /* significant bits in color channels */
     700   png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in color channels */
    862701#endif
    863702
     
    873712    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
    874713    */
    875    png_bytep trans; /* transparent values for paletted image */
    876    png_color_16 trans_values; /* transparent color for non-palette image */
     714   png_bytep trans_alpha PNG_DEPSTRUCT;    /* alpha values for paletted image */
     715   png_color_16 trans_color PNG_DEPSTRUCT; /* transparent color for non-palette image */
    877716#endif
    878717
     
    884723    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
    885724    */
    886    png_color_16 background;
    887 #endif
    888 
    889 #if defined(PNG_oFFs_SUPPORTED)
     725   png_color_16 background PNG_DEPSTRUCT;
     726#endif
     727
     728#ifdef PNG_oFFs_SUPPORTED
    890729   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
    891730    * and downwards from the top-left corner of the display, page, or other
     
    893732    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
    894733    */
    895    png_int_32 x_offset; /* x offset on page */
    896    png_int_32 y_offset; /* y offset on page */
    897    png_byte offset_unit_type; /* offset units type */
    898 #endif
    899 
    900 #if defined(PNG_pHYs_SUPPORTED)
     734   png_int_32 x_offset PNG_DEPSTRUCT; /* x offset on page */
     735   png_int_32 y_offset PNG_DEPSTRUCT; /* y offset on page */
     736   png_byte offset_unit_type PNG_DEPSTRUCT; /* offset units type */
     737#endif
     738
     739#ifdef PNG_pHYs_SUPPORTED
    901740   /* The pHYs chunk gives the physical pixel density of the image for
    902741    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
    903742    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
    904743    */
    905    png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
    906    png_uint_32 y_pixels_per_unit; /* vertical pixel density */
    907    png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
    908 #endif
    909 
    910 #if defined(PNG_hIST_SUPPORTED)
     744   png_uint_32 x_pixels_per_unit PNG_DEPSTRUCT; /* horizontal pixel density */
     745   png_uint_32 y_pixels_per_unit PNG_DEPSTRUCT; /* vertical pixel density */
     746   png_byte phys_unit_type PNG_DEPSTRUCT; /* resolution type (see PNG_RESOLUTION_ below) */
     747#endif
     748
     749#ifdef PNG_hIST_SUPPORTED
    911750   /* The hIST chunk contains the relative frequency or importance of the
    912751    * various palette entries, so that a viewer can intelligently select a
     
    915754    * is non-zero.
    916755    */
    917    png_uint_16p hist;
     756   png_uint_16p hist PNG_DEPSTRUCT;
    918757#endif
    919758
     
    926765    */
    927766#ifdef PNG_FLOATING_POINT_SUPPORTED
    928    float x_white;
    929    float y_white;
    930    float x_red;
    931    float y_red;
    932    float x_green;
    933    float y_green;
    934    float x_blue;
    935    float y_blue;
    936 #endif
    937 #endif
    938 
    939 #if defined(PNG_pCAL_SUPPORTED)
     767   float x_white PNG_DEPSTRUCT;
     768   float y_white PNG_DEPSTRUCT;
     769   float x_red PNG_DEPSTRUCT;
     770   float y_red PNG_DEPSTRUCT;
     771   float x_green PNG_DEPSTRUCT;
     772   float y_green PNG_DEPSTRUCT;
     773   float x_blue PNG_DEPSTRUCT;
     774   float y_blue PNG_DEPSTRUCT;
     775#endif
     776#endif
     777
     778#ifdef PNG_pCAL_SUPPORTED
    940779   /* The pCAL chunk describes a transformation between the stored pixel
    941780    * values and original physical data values used to create the image.
     
    949788    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
    950789    */
    951    png_charp pcal_purpose;  /* pCAL chunk description string */
    952    png_int_32 pcal_X0;      /* minimum value */
    953    png_int_32 pcal_X1;      /* maximum value */
    954    png_charp pcal_units;    /* Latin-1 string giving physical units */
    955    png_charpp pcal_params;  /* ASCII strings containing parameter values */
    956    png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
    957    png_byte pcal_nparams;   /* number of parameters given in pcal_params */
     790   png_charp pcal_purpose PNG_DEPSTRUCT;  /* pCAL chunk description string */
     791   png_int_32 pcal_X0 PNG_DEPSTRUCT;      /* minimum value */
     792   png_int_32 pcal_X1 PNG_DEPSTRUCT;      /* maximum value */
     793   png_charp pcal_units PNG_DEPSTRUCT;    /* Latin-1 string giving physical units */
     794   png_charpp pcal_params PNG_DEPSTRUCT;  /* ASCII strings containing parameter values */
     795   png_byte pcal_type PNG_DEPSTRUCT;      /* equation type (see PNG_EQUATION_ below) */
     796   png_byte pcal_nparams PNG_DEPSTRUCT;   /* number of parameters given in pcal_params */
    958797#endif
    959798
    960799/* New members added in libpng-1.0.6 */
    961 #ifdef PNG_FREE_ME_SUPPORTED
    962    png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
    963 #endif
     800   png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is responsible for freeing */
    964801
    965802#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
    966803 defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
    967804   /* Storage for unknown chunks that the library doesn't recognize. */
    968    png_unknown_chunkp unknown_chunks;
    969    png_size_t unknown_chunks_num;
    970 #endif
    971 
    972 #if defined(PNG_iCCP_SUPPORTED)
     805   png_unknown_chunkp unknown_chunks PNG_DEPSTRUCT;
     806   png_size_t unknown_chunks_num PNG_DEPSTRUCT;
     807#endif
     808
     809#ifdef PNG_iCCP_SUPPORTED
    973810   /* iCCP chunk data. */
    974    png_charp iccp_name;     /* profile name */
    975    png_charp iccp_profile;  /* International Color Consortium profile data */
     811   png_charp iccp_name PNG_DEPSTRUCT;     /* profile name */
     812   png_charp iccp_profile PNG_DEPSTRUCT;  /* International Color Consortium profile data */
    976813                            /* Note to maintainer: should be png_bytep */
    977    png_uint_32 iccp_proflen;  /* ICC profile data length */
    978    png_byte iccp_compression; /* Always zero */
    979 #endif
    980 
    981 #if defined(PNG_sPLT_SUPPORTED)
     814   png_uint_32 iccp_proflen PNG_DEPSTRUCT;  /* ICC profile data length */
     815   png_byte iccp_compression PNG_DEPSTRUCT; /* Always zero */
     816#endif
     817
     818#ifdef PNG_sPLT_SUPPORTED
    982819   /* Data on sPLT chunks (there may be more than one). */
    983    png_sPLT_tp splt_palettes;
    984    png_uint_32 splt_palettes_num;
    985 #endif
    986 
    987 #if defined(PNG_sCAL_SUPPORTED)
     820   png_sPLT_tp splt_palettes PNG_DEPSTRUCT;
     821   png_uint_32 splt_palettes_num PNG_DEPSTRUCT;
     822#endif
     823
     824#ifdef PNG_sCAL_SUPPORTED
    988825   /* The sCAL chunk describes the actual physical dimensions of the
    989826    * subject matter of the graphic.  The chunk contains a unit specification
     
    993830    * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
    994831    */
    995    png_byte scal_unit;         /* unit of physical scale */
     832   png_byte scal_unit PNG_DEPSTRUCT;         /* unit of physical scale */
    996833#ifdef PNG_FLOATING_POINT_SUPPORTED
    997    double scal_pixel_width;    /* width of one pixel */
    998    double scal_pixel_height;   /* height of one pixel */
     834   double scal_pixel_width PNG_DEPSTRUCT;    /* width of one pixel */
     835   double scal_pixel_height PNG_DEPSTRUCT;   /* height of one pixel */
    999836#endif
    1000837#ifdef PNG_FIXED_POINT_SUPPORTED
    1001    png_charp scal_s_width;     /* string containing height */
    1002    png_charp scal_s_height;    /* string containing width */
    1003 #endif
    1004 #endif
    1005 
    1006 #if defined(PNG_INFO_IMAGE_SUPPORTED)
     838   png_charp scal_s_width PNG_DEPSTRUCT;     /* string containing height */
     839   png_charp scal_s_height PNG_DEPSTRUCT;    /* string containing width */
     840#endif
     841#endif
     842
     843#ifdef PNG_INFO_IMAGE_SUPPORTED
    1007844   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
    1008845   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
    1009    png_bytepp row_pointers;        /* the image bits */
     846   png_bytepp row_pointers PNG_DEPSTRUCT;        /* the image bits */
    1010847#endif
    1011848
    1012849#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
    1013    png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */
     850   png_fixed_point int_gamma PNG_DEPSTRUCT; /* gamma of image, if (valid & PNG_INFO_gAMA) */
    1014851#endif
    1015852
    1016853#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
    1017    png_fixed_point int_x_white;
    1018    png_fixed_point int_y_white;
    1019    png_fixed_point int_x_red;
    1020    png_fixed_point int_y_red;
    1021    png_fixed_point int_x_green;
    1022    png_fixed_point int_y_green;
    1023    png_fixed_point int_x_blue;
    1024    png_fixed_point int_y_blue;
     854   png_fixed_point int_x_white PNG_DEPSTRUCT;
     855   png_fixed_point int_y_white PNG_DEPSTRUCT;
     856   png_fixed_point int_x_red PNG_DEPSTRUCT;
     857   png_fixed_point int_y_red PNG_DEPSTRUCT;
     858   png_fixed_point int_x_green PNG_DEPSTRUCT;
     859   png_fixed_point int_y_green PNG_DEPSTRUCT;
     860   png_fixed_point int_x_blue PNG_DEPSTRUCT;
     861   png_fixed_point int_y_blue PNG_DEPSTRUCT;
    1025862#endif
    1026863
     
    1034871#define PNG_UINT_32_MAX ((png_uint_32)(-1))
    1035872#define PNG_SIZE_MAX ((png_size_t)(-1))
    1036 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    1037 /* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
    1038 #define PNG_MAX_UINT PNG_UINT_31_MAX
    1039 #endif
    1040873
    1041874/* These describe the color_type field in png_info. */
     
    1134967{
    1135968   png_uint_32 width; /* width of row */
    1136    png_uint_32 rowbytes; /* number of bytes in row */
     969   png_size_t rowbytes; /* number of bytes in row */
    1137970   png_byte color_type; /* color type of row */
    1138971   png_byte bit_depth; /* bit depth of row */
     
    11691002
    11701003#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
    1171     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
    1172     defined(PNG_LEGACY_SUPPORTED)
     1004    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
    11731005typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
    11741006    png_row_infop, png_bytep));
    11751007#endif
    11761008
    1177 #if defined(PNG_USER_CHUNKS_SUPPORTED)
     1009#ifdef PNG_USER_CHUNKS_SUPPORTED
    11781010typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
    11791011#endif
    1180 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
     1012#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
    11811013typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
     1014#endif
     1015#ifdef PNG_SETJMP_SUPPORTED
     1016/* This must match the function definition in <setjmp.h>, and the
     1017 * application must include this before png.h to obtain the definition
     1018 * of jmp_buf.
     1019 */
     1020typedef void (PNGAPI *png_longjmp_ptr) PNGARG((jmp_buf, int));
    11821021#endif
    11831022
     
    11951034#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
    11961035#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
    1197 #define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only, deprecated */
     1036#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
    11981037/* Added to libpng-1.2.34 */
    1199 #define PNG_TRANSFORM_STRIP_FILLER_BEFORE 0x0800  /* write only */
    1200 #define PNG_TRANSFORM_STRIP_FILLER_AFTER  0x1000  /* write only */
     1038#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
     1039#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
     1040/* Added to libpng-1.4.0 */
     1041#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
    12011042
    12021043/* Flags for MNG supported features */
     
    12051046#define PNG_ALL_MNG_FEATURES        0x05
    12061047
    1207 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
     1048typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_alloc_size_t));
    12081049typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
    12091050
     
    12181059{
    12191060#ifdef PNG_SETJMP_SUPPORTED
    1220    jmp_buf jmpbuf;            /* used in png_error */
    1221 #endif
    1222    png_error_ptr error_fn;    /* function for printing errors and aborting */
    1223    png_error_ptr warning_fn;  /* function for printing warnings */
    1224    png_voidp error_ptr;       /* user supplied struct for error functions */
    1225    png_rw_ptr write_data_fn;  /* function for writing output data */
    1226    png_rw_ptr read_data_fn;   /* function for reading input data */
    1227    png_voidp io_ptr;          /* ptr to application struct for I/O functions */
    1228 
    1229 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
    1230    png_user_transform_ptr read_user_transform_fn; /* user read transform */
    1231 #endif
    1232 
    1233 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
    1234    png_user_transform_ptr write_user_transform_fn; /* user write transform */
     1061   jmp_buf jmpbuf PNG_DEPSTRUCT;            /* used in png_error */
     1062   png_longjmp_ptr longjmp_fn PNG_DEPSTRUCT;/* setjmp non-local goto function. */
     1063#endif
     1064   png_error_ptr error_fn PNG_DEPSTRUCT;    /* function for printing errors and aborting */
     1065   png_error_ptr warning_fn PNG_DEPSTRUCT;  /* function for printing warnings */
     1066   png_voidp error_ptr PNG_DEPSTRUCT;       /* user supplied struct for error functions */
     1067   png_rw_ptr write_data_fn PNG_DEPSTRUCT;  /* function for writing output data */
     1068   png_rw_ptr read_data_fn PNG_DEPSTRUCT;   /* function for reading input data */
     1069   png_voidp io_ptr PNG_DEPSTRUCT;          /* ptr to application struct for I/O functions */
     1070
     1071#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
     1072   png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read transform */
     1073#endif
     1074
     1075#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
     1076   png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write transform */
    12351077#endif
    12361078
    12371079/* These were added in libpng-1.0.2 */
    1238 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
     1080#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
    12391081#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
    12401082    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
    1241    png_voidp user_transform_ptr; /* user supplied struct for user transform */
    1242    png_byte user_transform_depth;    /* bit depth of user transformed pixels */
    1243    png_byte user_transform_channels; /* channels in user transformed pixels */
    1244 #endif
    1245 #endif
    1246 
    1247    png_uint_32 mode;          /* tells us where we are in the PNG file */
    1248    png_uint_32 flags;         /* flags indicating various things to libpng */
    1249    png_uint_32 transformations; /* which transformations to perform */
    1250 
    1251    z_stream zstream;          /* pointer to decompression structure (below) */
    1252    png_bytep zbuf;            /* buffer for zlib */
    1253    png_size_t zbuf_size;      /* size of zbuf */
    1254    int zlib_level;            /* holds zlib compression level */
    1255    int zlib_method;           /* holds zlib compression method */
    1256    int zlib_window_bits;      /* holds zlib compression window bits */
    1257    int zlib_mem_level;        /* holds zlib compression memory level */
    1258    int zlib_strategy;         /* holds zlib compression strategy */
    1259 
    1260    png_uint_32 width;         /* width of image in pixels */
    1261    png_uint_32 height;        /* height of image in pixels */
    1262    png_uint_32 num_rows;      /* number of rows in current pass */
    1263    png_uint_32 usr_width;     /* width of row at start of write */
    1264    png_uint_32 rowbytes;      /* size of row in bytes */
    1265    png_uint_32 irowbytes;     /* size of current interlaced row in bytes */
    1266    png_uint_32 iwidth;        /* width of current interlaced row in pixels */
    1267    png_uint_32 row_number;    /* current row in interlace pass */
    1268    png_bytep prev_row;        /* buffer to save previous (unfiltered) row */
    1269    png_bytep row_buf;         /* buffer to save current (unfiltered) row */
    1270 #ifndef PNG_NO_WRITE_FILTER
    1271    png_bytep sub_row;         /* buffer to save "sub" row when filtering */
    1272    png_bytep up_row;          /* buffer to save "up" row when filtering */
    1273    png_bytep avg_row;         /* buffer to save "avg" row when filtering */
    1274    png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
    1275 #endif
    1276    png_row_info row_info;     /* used for transformation routines */
    1277 
    1278    png_uint_32 idat_size;     /* current IDAT size for read */
    1279    png_uint_32 crc;           /* current chunk CRC value */
    1280    png_colorp palette;        /* palette from the input file */
    1281    png_uint_16 num_palette;   /* number of color entries in palette */
    1282    png_uint_16 num_trans;     /* number of transparency values */
    1283    png_byte chunk_name[5];    /* null-terminated name of current chunk */
    1284    png_byte compression;      /* file compression type (always 0) */
    1285    png_byte filter;           /* file filter type (always 0) */
    1286    png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
    1287    png_byte pass;             /* current interlace pass (0 - 6) */
    1288    png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
    1289    png_byte color_type;       /* color type of file */
    1290    png_byte bit_depth;        /* bit depth of file */
    1291    png_byte usr_bit_depth;    /* bit depth of users row */
    1292    png_byte pixel_depth;      /* number of bits per pixel */
    1293    png_byte channels;         /* number of channels in file */
    1294    png_byte usr_channels;     /* channels at start of write */
    1295    png_byte sig_bytes;        /* magic bytes read/written from start of file */
     1083   png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct for user transform */
     1084   png_byte user_transform_depth PNG_DEPSTRUCT;    /* bit depth of user transformed pixels */
     1085   png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user transformed pixels */
     1086#endif
     1087#endif
     1088
     1089   png_uint_32 mode PNG_DEPSTRUCT;          /* tells us where we are in the PNG file */
     1090   png_uint_32 flags PNG_DEPSTRUCT;         /* flags indicating various things to libpng */
     1091   png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations to perform */
     1092
     1093   z_stream zstream PNG_DEPSTRUCT;          /* pointer to decompression structure (below) */
     1094   png_bytep zbuf PNG_DEPSTRUCT;            /* buffer for zlib */
     1095   png_size_t zbuf_size PNG_DEPSTRUCT;      /* size of zbuf */
     1096   int zlib_level PNG_DEPSTRUCT;            /* holds zlib compression level */
     1097   int zlib_method PNG_DEPSTRUCT;           /* holds zlib compression method */
     1098   int zlib_window_bits PNG_DEPSTRUCT;      /* holds zlib compression window bits */
     1099   int zlib_mem_level PNG_DEPSTRUCT;        /* holds zlib compression memory level */
     1100   int zlib_strategy PNG_DEPSTRUCT;         /* holds zlib compression strategy */
     1101
     1102   png_uint_32 width PNG_DEPSTRUCT;         /* width of image in pixels */
     1103   png_uint_32 height PNG_DEPSTRUCT;        /* height of image in pixels */
     1104   png_uint_32 num_rows PNG_DEPSTRUCT;      /* number of rows in current pass */
     1105   png_uint_32 usr_width PNG_DEPSTRUCT;     /* width of row at start of write */
     1106   png_size_t rowbytes PNG_DEPSTRUCT;       /* size of row in bytes */
     1107   png_size_t irowbytes PNG_DEPSTRUCT;      /* size of current interlaced row in bytes */
     1108   png_uint_32 iwidth PNG_DEPSTRUCT;        /* width of current interlaced row in pixels */
     1109   png_uint_32 row_number PNG_DEPSTRUCT;    /* current row in interlace pass */
     1110   png_bytep prev_row PNG_DEPSTRUCT;        /* buffer to save previous (unfiltered) row */
     1111   png_bytep row_buf PNG_DEPSTRUCT;         /* buffer to save current (unfiltered) row */
     1112   png_bytep sub_row PNG_DEPSTRUCT;         /* buffer to save "sub" row when filtering */
     1113   png_bytep up_row PNG_DEPSTRUCT;          /* buffer to save "up" row when filtering */
     1114   png_bytep avg_row PNG_DEPSTRUCT;         /* buffer to save "avg" row when filtering */
     1115   png_bytep paeth_row PNG_DEPSTRUCT;       /* buffer to save "Paeth" row when filtering */
     1116   png_row_info row_info PNG_DEPSTRUCT;     /* used for transformation routines */
     1117
     1118   png_uint_32 idat_size PNG_DEPSTRUCT;     /* current IDAT size for read */
     1119   png_uint_32 crc PNG_DEPSTRUCT;           /* current chunk CRC value */
     1120   png_colorp palette PNG_DEPSTRUCT;        /* palette from the input file */
     1121   png_uint_16 num_palette PNG_DEPSTRUCT;   /* number of color entries in palette */
     1122   png_uint_16 num_trans PNG_DEPSTRUCT;     /* number of transparency values */
     1123   png_byte chunk_name[5] PNG_DEPSTRUCT;    /* null-terminated name of current chunk */
     1124   png_byte compression PNG_DEPSTRUCT;      /* file compression type (always 0) */
     1125   png_byte filter PNG_DEPSTRUCT;           /* file filter type (always 0) */
     1126   png_byte interlaced PNG_DEPSTRUCT;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
     1127   png_byte pass PNG_DEPSTRUCT;             /* current interlace pass (0 - 6) */
     1128   png_byte do_filter PNG_DEPSTRUCT;        /* row filter flags (see PNG_FILTER_ below ) */
     1129   png_byte color_type PNG_DEPSTRUCT;       /* color type of file */
     1130   png_byte bit_depth PNG_DEPSTRUCT;        /* bit depth of file */
     1131   png_byte usr_bit_depth PNG_DEPSTRUCT;    /* bit depth of users row */
     1132   png_byte pixel_depth PNG_DEPSTRUCT;      /* number of bits per pixel */
     1133   png_byte channels PNG_DEPSTRUCT;         /* number of channels in file */
     1134   png_byte usr_channels PNG_DEPSTRUCT;     /* channels at start of write */
     1135   png_byte sig_bytes PNG_DEPSTRUCT;        /* magic bytes read/written from start of file */
    12961136
    12971137#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
    1298 #ifdef PNG_LEGACY_SUPPORTED
    1299    png_byte filler;           /* filler byte for pixel expansion */
    1300 #else
    1301    png_uint_16 filler;           /* filler bytes for pixel expansion */
    1302 #endif
    1303 #endif
    1304 
    1305 #if defined(PNG_bKGD_SUPPORTED)
    1306    png_byte background_gamma_type;
     1138   png_uint_16 filler PNG_DEPSTRUCT;           /* filler bytes for pixel expansion */
     1139#endif
     1140
     1141#ifdef PNG_bKGD_SUPPORTED
     1142   png_byte background_gamma_type PNG_DEPSTRUCT;
    13071143#  ifdef PNG_FLOATING_POINT_SUPPORTED
    1308    float background_gamma;
     1144   float background_gamma PNG_DEPSTRUCT;
    13091145#  endif
    1310    png_color_16 background;   /* background color in screen gamma space */
    1311 #if defined(PNG_READ_GAMMA_SUPPORTED)
    1312    png_color_16 background_1; /* background normalized to gamma 1.0 */
     1146   png_color_16 background PNG_DEPSTRUCT;   /* background color in screen gamma space */
     1147#ifdef PNG_READ_GAMMA_SUPPORTED
     1148   png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized to gamma 1.0 */
    13131149#endif
    13141150#endif /* PNG_bKGD_SUPPORTED */
    13151151
    1316 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
    1317    png_flush_ptr output_flush_fn; /* Function for flushing output */
    1318    png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
    1319    png_uint_32 flush_rows;    /* number of rows written since last flush */
     1152#ifdef PNG_WRITE_FLUSH_SUPPORTED
     1153   png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing output */
     1154   png_uint_32 flush_dist PNG_DEPSTRUCT;    /* how many rows apart to flush, 0 - no flush */
     1155   png_uint_32 flush_rows PNG_DEPSTRUCT;    /* number of rows written since last flush */
    13201156#endif
    13211157
    13221158#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
    1323    int gamma_shift;      /* number of "insignificant" bits 16-bit gamma */
     1159   int gamma_shift PNG_DEPSTRUCT;      /* number of "insignificant" bits 16-bit gamma */
    13241160#ifdef PNG_FLOATING_POINT_SUPPORTED
    1325    float gamma;          /* file gamma value */
    1326    float screen_gamma;   /* screen gamma value (display_exponent) */
     1161   float gamma PNG_DEPSTRUCT;          /* file gamma value */
     1162   float screen_gamma PNG_DEPSTRUCT;   /* screen gamma value (display_exponent) */
    13271163#endif
    13281164#endif
    13291165
    13301166#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
    1331    png_bytep gamma_table;     /* gamma table for 8-bit depth files */
    1332    png_bytep gamma_from_1;    /* converts from 1.0 to screen */
    1333    png_bytep gamma_to_1;      /* converts from file to 1.0 */
    1334    png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
    1335    png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
    1336    png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
     1167   png_bytep gamma_table PNG_DEPSTRUCT;     /* gamma table for 8-bit depth files */
     1168   png_bytep gamma_from_1 PNG_DEPSTRUCT;    /* converts from 1.0 to screen */
     1169   png_bytep gamma_to_1 PNG_DEPSTRUCT;      /* converts from file to 1.0 */
     1170   png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit depth files */
     1171   png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to screen */
     1172   png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */
    13371173#endif
    13381174
    13391175#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
    1340    png_color_8 sig_bit;       /* significant bits in each available channel */
     1176   png_color_8 sig_bit PNG_DEPSTRUCT;       /* significant bits in each available channel */
    13411177#endif
    13421178
    13431179#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
    1344    png_color_8 shift;         /* shift for significant bit tranformation */
     1180   png_color_8 shift PNG_DEPSTRUCT;         /* shift for significant bit tranformation */
    13451181#endif
    13461182
    13471183#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
    13481184 || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
    1349    png_bytep trans;           /* transparency values for paletted files */
    1350    png_color_16 trans_values; /* transparency values for non-paletted files */
    1351 #endif
    1352 
    1353    png_read_status_ptr read_row_fn;   /* called after each row is decoded */
    1354    png_write_status_ptr write_row_fn; /* called after each row is encoded */
     1185   png_bytep trans_alpha PNG_DEPSTRUCT;           /* alpha values for paletted files */
     1186   png_color_16 trans_color PNG_DEPSTRUCT;  /* transparent color for non-paletted files */
     1187#endif
     1188
     1189   png_read_status_ptr read_row_fn PNG_DEPSTRUCT;   /* called after each row is decoded */
     1190   png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each row is encoded */
    13551191#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
    1356    png_progressive_info_ptr info_fn; /* called after header data fully read */
    1357    png_progressive_row_ptr row_fn;   /* called after each prog. row is decoded */
    1358    png_progressive_end_ptr end_fn;   /* called after image is complete */
    1359    png_bytep save_buffer_ptr;        /* current location in save_buffer */
    1360    png_bytep save_buffer;            /* buffer for previously read data */
    1361    png_bytep current_buffer_ptr;     /* current location in current_buffer */
    1362    png_bytep current_buffer;         /* buffer for recently used data */
    1363    png_uint_32 push_length;          /* size of current input chunk */
    1364    png_uint_32 skip_length;          /* bytes to skip in input data */
    1365    png_size_t save_buffer_size;      /* amount of data now in save_buffer */
    1366    png_size_t save_buffer_max;       /* total size of save_buffer */
    1367    png_size_t buffer_size;           /* total amount of available input data */
    1368    png_size_t current_buffer_size;   /* amount of data now in current_buffer */
    1369    int process_mode;                 /* what push library is currently doing */
    1370    int cur_palette;                  /* current push library palette index */
    1371 
    1372 #  if defined(PNG_TEXT_SUPPORTED)
    1373      png_size_t current_text_size;   /* current size of text input data */
    1374      png_size_t current_text_left;   /* how much text left to read in input */
    1375      png_charp current_text;         /* current text chunk buffer */
    1376      png_charp current_text_ptr;     /* current location in current_text */
    1377 #  endif /* PNG_TEXT_SUPPORTED */
     1192   png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header data fully read */
     1193   png_progressive_row_ptr row_fn PNG_DEPSTRUCT;   /* called after each prog. row is decoded */
     1194   png_progressive_end_ptr end_fn PNG_DEPSTRUCT;   /* called after image is complete */
     1195   png_bytep save_buffer_ptr PNG_DEPSTRUCT;        /* current location in save_buffer */
     1196   png_bytep save_buffer PNG_DEPSTRUCT;            /* buffer for previously read data */
     1197   png_bytep current_buffer_ptr PNG_DEPSTRUCT;     /* current location in current_buffer */
     1198   png_bytep current_buffer PNG_DEPSTRUCT;         /* buffer for recently used data */
     1199   png_uint_32 push_length PNG_DEPSTRUCT;          /* size of current input chunk */
     1200   png_uint_32 skip_length PNG_DEPSTRUCT;          /* bytes to skip in input data */
     1201   png_size_t save_buffer_size PNG_DEPSTRUCT;      /* amount of data now in save_buffer */
     1202   png_size_t save_buffer_max PNG_DEPSTRUCT;       /* total size of save_buffer */
     1203   png_size_t buffer_size PNG_DEPSTRUCT;           /* total amount of available input data */
     1204   png_size_t current_buffer_size PNG_DEPSTRUCT;   /* amount of data now in current_buffer */
     1205   int process_mode PNG_DEPSTRUCT;                 /* what push library is currently doing */
     1206   int cur_palette PNG_DEPSTRUCT;                  /* current push library palette index */
     1207
     1208#  ifdef PNG_TEXT_SUPPORTED
     1209     png_size_t current_text_size PNG_DEPSTRUCT;   /* current size of text input data */
     1210     png_size_t current_text_left PNG_DEPSTRUCT;   /* how much text left to read in input */
     1211     png_charp current_text PNG_DEPSTRUCT;         /* current text chunk buffer */
     1212     png_charp current_text_ptr PNG_DEPSTRUCT;     /* current location in current_text */
     1213#  endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
     1214
    13781215#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
    13791216
    13801217#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
    1381 /* for the Borland special 64K segment handler */
    1382    png_bytepp offset_table_ptr;
    1383    png_bytep offset_table;
    1384    png_uint_16 offset_table_number;
    1385    png_uint_16 offset_table_count;
    1386    png_uint_16 offset_table_count_free;
    1387 #endif
    1388 
    1389 #if defined(PNG_READ_DITHER_SUPPORTED)
    1390    png_bytep palette_lookup;         /* lookup table for dithering */
    1391    png_bytep dither_index;           /* index translation for palette files */
     1218/* For the Borland special 64K segment handler */
     1219   png_bytepp offset_table_ptr PNG_DEPSTRUCT;
     1220   png_bytep offset_table PNG_DEPSTRUCT;
     1221   png_uint_16 offset_table_number PNG_DEPSTRUCT;
     1222   png_uint_16 offset_table_count PNG_DEPSTRUCT;
     1223   png_uint_16 offset_table_count_free PNG_DEPSTRUCT;
     1224#endif
     1225
     1226#ifdef PNG_READ_DITHER_SUPPORTED
     1227   png_bytep palette_lookup PNG_DEPSTRUCT;         /* lookup table for dithering */
     1228   png_bytep dither_index PNG_DEPSTRUCT;           /* index translation for palette files */
    13921229#endif
    13931230
    13941231#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
    1395    png_uint_16p hist;                /* histogram */
    1396 #endif
    1397 
    1398 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
    1399    png_byte heuristic_method;        /* heuristic for row filter selection */
    1400    png_byte num_prev_filters;        /* number of weights for previous rows */
    1401    png_bytep prev_filters;           /* filter type(s) of previous row(s) */
    1402    png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
    1403    png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
    1404    png_uint_16p filter_costs;        /* relative filter calculation cost */
    1405    png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
    1406 #endif
    1407 
    1408 #if defined(PNG_TIME_RFC1123_SUPPORTED)
    1409    png_charp time_buffer;            /* String to hold RFC 1123 time text */
     1232   png_uint_16p hist PNG_DEPSTRUCT;                /* histogram */
     1233#endif
     1234
     1235#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
     1236   png_byte heuristic_method PNG_DEPSTRUCT;        /* heuristic for row filter selection */
     1237   png_byte num_prev_filters PNG_DEPSTRUCT;        /* number of weights for previous rows */
     1238   png_bytep prev_filters PNG_DEPSTRUCT;           /* filter type(s) of previous row(s) */
     1239   png_uint_16p filter_weights PNG_DEPSTRUCT;      /* weight(s) for previous line(s) */
     1240   png_uint_16p inv_filter_weights PNG_DEPSTRUCT;  /* 1/weight(s) for previous line(s) */
     1241   png_uint_16p filter_costs PNG_DEPSTRUCT;        /* relative filter calculation cost */
     1242   png_uint_16p inv_filter_costs PNG_DEPSTRUCT;    /* 1/relative filter calculation cost */
     1243#endif
     1244
     1245#ifdef PNG_TIME_RFC1123_SUPPORTED
     1246   png_charp time_buffer PNG_DEPSTRUCT;            /* String to hold RFC 1123 time text */
    14101247#endif
    14111248
    14121249/* New members added in libpng-1.0.6 */
    14131250
    1414 #ifdef PNG_FREE_ME_SUPPORTED
    1415    png_uint_32 free_me;   /* flags items libpng is responsible for freeing */
    1416 #endif
    1417 
    1418 #if defined(PNG_USER_CHUNKS_SUPPORTED)
    1419    png_voidp user_chunk_ptr;
    1420    png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
     1251   png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is responsible for freeing */
     1252
     1253#ifdef PNG_USER_CHUNKS_SUPPORTED
     1254   png_voidp user_chunk_ptr PNG_DEPSTRUCT;
     1255   png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read chunk handler */
    14211256#endif
    14221257
    14231258#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
    1424    int num_chunk_list;
    1425    png_bytep chunk_list;
     1259   int num_chunk_list PNG_DEPSTRUCT;
     1260   png_bytep chunk_list PNG_DEPSTRUCT;
    14261261#endif
    14271262
    14281263/* New members added in libpng-1.0.3 */
    1429 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
    1430    png_byte rgb_to_gray_status;
     1264#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
     1265   png_byte rgb_to_gray_status PNG_DEPSTRUCT;
    14311266   /* These were changed from png_byte in libpng-1.0.6 */
    1432    png_uint_16 rgb_to_gray_red_coeff;
    1433    png_uint_16 rgb_to_gray_green_coeff;
    1434    png_uint_16 rgb_to_gray_blue_coeff;
     1267   png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT;
     1268   png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT;
     1269   png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT;
    14351270#endif
    14361271
     
    14401275    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
    14411276/* Changed from png_byte to png_uint_32 at version 1.2.0 */
    1442 #ifdef PNG_1_0_X
    1443    png_byte mng_features_permitted;
    1444 #else
    1445    png_uint_32 mng_features_permitted;
    1446 #endif /* PNG_1_0_X */
     1277   png_uint_32 mng_features_permitted PNG_DEPSTRUCT;
    14471278#endif
    14481279
    14491280/* New member added in libpng-1.0.7 */
    14501281#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
    1451    png_fixed_point int_gamma;
     1282   png_fixed_point int_gamma PNG_DEPSTRUCT;
    14521283#endif
    14531284
    14541285/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
    1455 #if defined(PNG_MNG_FEATURES_SUPPORTED)
    1456    png_byte filter_type;
    1457 #endif
    1458 
    1459 #if defined(PNG_1_0_X)
    1460 /* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
    1461    png_uint_32 row_buf_size;
     1286#ifdef PNG_MNG_FEATURES_SUPPORTED
     1287   png_byte filter_type PNG_DEPSTRUCT;
    14621288#endif
    14631289
    14641290/* New members added in libpng-1.2.0 */
    1465 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
    1466 #  if !defined(PNG_1_0_X)
    1467 #    if defined(PNG_MMX_CODE_SUPPORTED)
    1468    png_byte     mmx_bitdepth_threshold;
    1469    png_uint_32  mmx_rowbytes_threshold;
    1470 #    endif
    1471    png_uint_32  asm_flags;
    1472 #  endif
    1473 #endif
    14741291
    14751292/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
    14761293#ifdef PNG_USER_MEM_SUPPORTED
    1477    png_voidp mem_ptr;            /* user supplied struct for mem functions */
    1478    png_malloc_ptr malloc_fn;     /* function for allocating memory */
    1479    png_free_ptr free_fn;         /* function for freeing memory */
     1294   png_voidp mem_ptr PNG_DEPSTRUCT;                /* user supplied struct for mem functions */
     1295   png_malloc_ptr malloc_fn PNG_DEPSTRUCT;         /* function for allocating memory */
     1296   png_free_ptr free_fn PNG_DEPSTRUCT;             /* function for freeing memory */
    14801297#endif
    14811298
    14821299/* New member added in libpng-1.0.13 and 1.2.0 */
    1483    png_bytep big_row_buf;        /* buffer to save current (unfiltered) row */
    1484 
    1485 #if defined(PNG_READ_DITHER_SUPPORTED)
     1300   png_bytep big_row_buf PNG_DEPSTRUCT;         /* buffer to save current (unfiltered) row */
     1301
     1302#ifdef PNG_READ_DITHER_SUPPORTED
    14861303/* The following three members were added at version 1.0.14 and 1.2.4 */
    1487    png_bytep dither_sort;        /* working sort array */
    1488    png_bytep index_to_palette;   /* where the original index currently is */
    1489                                  /* in the palette */
    1490    png_bytep palette_to_index;   /* which original index points to this */
    1491                                  /* palette color */
     1304   png_bytep dither_sort PNG_DEPSTRUCT;            /* working sort array */
     1305   png_bytep index_to_palette PNG_DEPSTRUCT;       /* where the original index currently is */
     1306                                     /* in the palette */
     1307   png_bytep palette_to_index PNG_DEPSTRUCT;       /* which original index points to this */
     1308                                     /* palette color */
    14921309#endif
    14931310
    14941311/* New members added in libpng-1.0.16 and 1.2.6 */
    1495    png_byte compression_type;
     1312   png_byte compression_type PNG_DEPSTRUCT;
    14961313
    14971314#ifdef PNG_SET_USER_LIMITS_SUPPORTED
    1498    png_uint_32 user_width_max;
    1499    png_uint_32 user_height_max;
     1315   png_uint_32 user_width_max PNG_DEPSTRUCT;
     1316   png_uint_32 user_height_max PNG_DEPSTRUCT;
     1317   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
     1318    * chunks that can be stored (0x7fffffff means unlimited).
     1319    */
     1320   png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT;
    15001321#endif
    15011322
    15021323/* New member added in libpng-1.0.25 and 1.2.17 */
    1503 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
     1324#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
    15041325   /* Storage for unknown chunk that the library doesn't recognize. */
    1505    png_unknown_chunk unknown_chunk;
     1326   png_unknown_chunk unknown_chunk PNG_DEPSTRUCT;
    15061327#endif
    15071328
    15081329/* New members added in libpng-1.2.26 */
    1509   png_uint_32 old_big_row_buf_size, old_prev_row_size;
     1330  png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT;
     1331  png_uint_32 old_prev_row_size PNG_DEPSTRUCT;
    15101332
    15111333/* New member added in libpng-1.2.30 */
    1512   png_charp chunkdata;  /* buffer for reading chunk data */
    1513 
     1334  png_charp chunkdata PNG_DEPSTRUCT;  /* buffer for reading chunk data */
     1335
     1336/* New member added in libpng-1.4.0 */
     1337#ifdef PNG_IO_STATE_SUPPORTED
     1338   png_uint_32 io_state PNG_DEPSTRUCT;
     1339#endif
    15141340};
    15151341
     
    15181344 * do not agree upon the version number.
    15191345 */
    1520 typedef png_structp version_1_2_40;
     1346typedef png_structp version_1_4_0;
    15211347
    15221348typedef png_struct FAR * FAR * png_structpp;
     
    15451371   png_size_t num_to_check));
    15461372
    1547 /* Simple signature checking function.  This is the same as calling
    1548  * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
    1549  */
    1550 extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num));
    1551 
    15521373/* Allocate and initialize png_ptr struct for reading, and any other memory. */
    15531374extern PNG_EXPORT(png_structp,png_create_read_struct)
    15541375   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
    1555    png_error_ptr error_fn, png_error_ptr warn_fn));
     1376   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
    15561377
    15571378/* Allocate and initialize png_ptr struct for writing, and any other memory */
    15581379extern PNG_EXPORT(png_structp,png_create_write_struct)
    15591380   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
    1560    png_error_ptr error_fn, png_error_ptr warn_fn));
     1381   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
    15611382
    15621383#ifdef PNG_WRITE_SUPPORTED
    1563 extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
     1384extern PNG_EXPORT(png_size_t,png_get_compression_buffer_size)
    15641385   PNGARG((png_structp png_ptr));
    15651386#endif
     
    15671388#ifdef PNG_WRITE_SUPPORTED
    15681389extern PNG_EXPORT(void,png_set_compression_buffer_size)
    1569    PNGARG((png_structp png_ptr, png_uint_32 size));
     1390   PNGARG((png_structp png_ptr, png_size_t size));
     1391#endif
     1392
     1393/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
     1394 * match up.
     1395 */
     1396#ifdef PNG_SETJMP_SUPPORTED
     1397/* This function returns the jmp_buf built in to *png_ptr.  It must be
     1398 * supplied with an appropriate 'longjmp' function to use on that jmp_buf
     1399 * unless the default error function is overridden in which case NULL is
     1400 * acceptable.  The size of the jmp_buf is checked against the actual size
     1401 * allocated by the library - the call will return NULL on a mismatch
     1402 * indicating an ABI mismatch.
     1403 */
     1404extern PNG_EXPORT(jmp_buf*, png_set_longjmp_fn)
     1405   PNGARG((png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
     1406#  define png_jmpbuf(png_ptr) \
     1407   (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
     1408#else
     1409#  define png_jmpbuf(png_ptr) \
     1410   (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
    15701411#endif
    15711412
     
    15781419   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
    15791420   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
    1580    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
     1421   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
    15811422extern PNG_EXPORT(png_structp,png_create_write_struct_2)
    15821423   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
    15831424   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
    1584    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
    1585 #endif
     1425   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
     1426#endif
     1427
     1428/* Write the PNG file signature. */
     1429extern PNG_EXPORT(void,png_write_sig) PNGARG((png_structp png_ptr));
    15861430
    15871431/* Write a PNG chunk - size, type, (optional) data, CRC. */
     
    16021446/* Allocate and initialize the info structure */
    16031447extern PNG_EXPORT(png_infop,png_create_info_struct)
    1604    PNGARG((png_structp png_ptr));
    1605 
    1606 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    1607 /* Initialize the info structure (old interface - DEPRECATED) */
    1608 extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr));
    1609 #undef png_info_init
    1610 #define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
    1611     png_sizeof(png_info));
    1612 #endif
     1448   PNGARG((png_structp png_ptr)) PNG_ALLOCATED;
    16131449
    16141450extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
     
    16211457   png_infop info_ptr));
    16221458
    1623 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
     1459#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
    16241460/* Read the information before the actual image data. */
    16251461extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
     
    16271463#endif
    16281464
    1629 #if defined(PNG_TIME_RFC1123_SUPPORTED)
     1465#ifdef PNG_TIME_RFC1123_SUPPORTED
    16301466extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
    16311467   PNGARG((png_structp png_ptr, png_timep ptime));
    16321468#endif
    16331469
    1634 #if !defined(_WIN32_WCE)
    1635 /* "time.h" functions are not supported on WindowsCE */
    1636 #if defined(PNG_WRITE_tIME_SUPPORTED)
     1470#ifdef PNG_CONVERT_tIME_SUPPORTED
    16371471/* Convert from a struct tm to png_time */
    16381472extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
     
    16421476extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
    16431477   time_t ttime));
    1644 #endif /* PNG_WRITE_tIME_SUPPORTED */
    1645 #endif /* _WIN32_WCE */
    1646 
    1647 #if defined(PNG_READ_EXPAND_SUPPORTED)
     1478#endif /* PNG_CONVERT_tIME_SUPPORTED */
     1479
     1480#ifdef PNG_READ_EXPAND_SUPPORTED
    16481481/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
    16491482extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
    1650 #if !defined(PNG_1_0_X)
    16511483extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
    16521484  png_ptr));
    1653 #endif
    16541485extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
    16551486extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
    1656 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    1657 /* Deprecated */
    1658 extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr));
    1659 #endif
    16601487#endif
    16611488
     
    16651492#endif
    16661493
    1667 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
     1494#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
    16681495/* Expand the grayscale to 24-bit RGB if necessary. */
    16691496extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
    16701497#endif
    16711498
    1672 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
     1499#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
    16731500/* Reduce RGB to grayscale. */
    16741501#ifdef PNG_FLOATING_POINT_SUPPORTED
     
    16851512   png_colorp palette));
    16861513
    1687 #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
     1514#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
    16881515extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
    16891516#endif
     
    17071534#define PNG_FILLER_AFTER 1
    17081535/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
    1709 #if !defined(PNG_1_0_X)
    17101536extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
    17111537   png_uint_32 filler, int flags));
    1712 #endif
    17131538#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
    17141539
     
    17451570#endif
    17461571
    1747 #if defined(PNG_READ_BACKGROUND_SUPPORTED)
     1572#ifdef PNG_READ_BACKGROUND_SUPPORTED
    17481573/* Handle alpha and tRNS by replacing with a background color. */
    17491574#ifdef PNG_FLOATING_POINT_SUPPORTED
     
    17581583#endif
    17591584
    1760 #if defined(PNG_READ_16_TO_8_SUPPORTED)
     1585#ifdef PNG_READ_16_TO_8_SUPPORTED
    17611586/* Strip the second byte of information from a 16-bit depth file. */
    17621587extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
    17631588#endif
    17641589
    1765 #if defined(PNG_READ_DITHER_SUPPORTED)
     1590#ifdef PNG_READ_DITHER_SUPPORTED
    17661591/* Turn on dithering, and reduce the palette to the number of colors available. */
    17671592extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
     
    17701595#endif
    17711596
    1772 #if defined(PNG_READ_GAMMA_SUPPORTED)
     1597#ifdef PNG_READ_GAMMA_SUPPORTED
    17731598/* Handle gamma correction. Screen_gamma=(display_exponent) */
    17741599#ifdef PNG_FLOATING_POINT_SUPPORTED
     
    17781603#endif
    17791604
    1780 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    1781 #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
    1782     defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
    1783 /* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
    1784 /* Deprecated and will be removed.  Use png_permit_mng_features() instead. */
    1785 extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
    1786    int empty_plte_permitted));
    1787 #endif
    1788 #endif
    1789 
    1790 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
     1605
     1606#ifdef PNG_WRITE_FLUSH_SUPPORTED
    17911607/* Set how many lines between output flushes - 0 for no flushing */
    17921608extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
     
    18021618   png_infop info_ptr));
    18031619
    1804 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
     1620#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
    18051621/* Read one or more rows of image data. */
    18061622extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
     
    18081624#endif
    18091625
    1810 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
     1626#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
    18111627/* Read a row of data. */
    18121628extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
     
    18151631#endif
    18161632
    1817 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
     1633#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
    18181634/* Read the whole image into memory at once. */
    18191635extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
     
    18331649   png_bytepp image));
    18341650
    1835 /* Writes the end of the PNG file. */
     1651/* Write the end of the PNG file. */
    18361652extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
    18371653   png_infop info_ptr));
    18381654
    1839 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
     1655#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
    18401656/* Read the end of the PNG file. */
    18411657extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
     
    18511667   png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
    18521668
    1853 /* Free all memory used by the read (old method - NOT DLL EXPORTED) */
    1854 extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
    1855    png_infop end_info_ptr));
    1856 
    18571669/* Free any memory associated with the png_struct and the png_info_structs */
    18581670extern PNG_EXPORT(void,png_destroy_write_struct)
    18591671   PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
    1860 
    1861 /* Free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
    1862 extern void png_write_destroy PNGARG((png_structp png_ptr));
    18631672
    18641673/* Set the libpng method of handling chunk CRC errors */
     
    19201729#define PNG_FILTER_VALUE_LAST  5
    19211730
    1922 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */
     1731#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
    19231732/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
    19241733 * defines, either the default (minimum-sum-of-absolute-differences), or
     
    19951804 */
    19961805
    1997 #if !defined(PNG_NO_STDIO)
     1806#ifdef PNG_STDIO_SUPPORTED
    19981807/* Initialize the input/output for the PNG file to the default functions. */
    19991808extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
     
    20481857#endif
    20491858
    2050 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
    2051     defined(PNG_LEGACY_SUPPORTED)
     1859#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
    20521860extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
    20531861   png_ptr, png_user_transform_ptr read_user_transform_fn));
    20541862#endif
    20551863
    2056 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
    2057     defined(PNG_LEGACY_SUPPORTED)
     1864#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
    20581865extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
    20591866   png_ptr, png_user_transform_ptr write_user_transform_fn));
     
    20611868
    20621869#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
    2063     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
    2064     defined(PNG_LEGACY_SUPPORTED)
     1870    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
    20651871extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
    20661872   png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
     
    21031909
    21041910extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
    2105    png_uint_32 size));
    2106 
    2107 #if defined(PNG_1_0_X)
    2108 #  define png_malloc_warn png_malloc
    2109 #else
     1911   png_alloc_size_t size)) PNG_ALLOCATED;
     1912/* Added at libpng version 1.4.0 */
     1913extern PNG_EXPORT(png_voidp,png_calloc) PNGARG((png_structp png_ptr,
     1914   png_alloc_size_t size)) PNG_ALLOCATED;
     1915
    21101916/* Added at libpng version 1.2.4 */
    21111917extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
    2112    png_uint_32 size));
    2113 #endif
     1918   png_alloc_size_t size)) PNG_ALLOCATED;
    21141919
    21151920/* Frees a pointer allocated by png_malloc() */
    21161921extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
    2117 
    2118 #if defined(PNG_1_0_X)
    2119 /* Function to allocate memory for zlib. */
    2120 extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
    2121    uInt size));
    2122 
    2123 /* Function to free memory for zlib */
    2124 extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
    2125 #endif
    21261922
    21271923/* Free data that was allocated internally */
    21281924extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
    21291925   png_infop info_ptr, png_uint_32 free_me, int num));
    2130 #ifdef PNG_FREE_ME_SUPPORTED
    21311926/* Reassign responsibility for freeing existing data, whether allocated
    2132  * by libpng or by the application
    2133  */
     1927 * by libpng or by the application */
    21341928extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
    21351929   png_infop info_ptr, int freer, png_uint_32 mask));
    2136 #endif
    21371930/* Assignments for png_data_freer */
    21381931#define PNG_DESTROY_WILL_FREE_DATA 1
     
    21561949#ifdef PNG_USER_MEM_SUPPORTED
    21571950extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
    2158    png_uint_32 size));
     1951   png_alloc_size_t size)) PNG_ALLOCATED;
    21591952extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
    21601953   png_voidp ptr));
    21611954#endif
    2162 
    2163 extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
    2164    png_voidp s1, png_voidp s2, png_uint_32 size));
    2165 
    2166 extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
    2167    png_voidp s1, int value, png_uint_32 size));
    2168 
    2169 #if defined(USE_FAR_KEYWORD)  /* memory model conversion function */
    2170 extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
    2171    int check));
    2172 #endif /* USE_FAR_KEYWORD */
    21731955
    21741956#ifndef PNG_NO_ERROR_TEXT
    21751957/* Fatal error in PNG image of libpng - can't continue */
    21761958extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
    2177    png_const_charp error_message));
     1959   png_const_charp error_message)) PNG_NORETURN;
    21781960
    21791961/* The same, but the chunk name is prepended to the error string. */
    21801962extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
    2181    png_const_charp error_message));
     1963   png_const_charp error_message)) PNG_NORETURN;
     1964
    21821965#else
    21831966/* Fatal error in PNG image of libpng - can't continue */
    2184 extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr));
    2185 #endif
    2186 
    2187 #ifndef PNG_NO_WARNINGS
     1967extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN;
     1968#endif
     1969
    21881970/* Non-fatal error in libpng.  Can continue, but may have a problem. */
    21891971extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
    21901972   png_const_charp warning_message));
    21911973
    2192 #ifdef PNG_READ_SUPPORTED
    21931974/* Non-fatal error in libpng, chunk name is prepended to message. */
    21941975extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
    21951976   png_const_charp warning_message));
    2196 #endif /* PNG_READ_SUPPORTED */
    2197 #endif /* PNG_NO_WARNINGS */
     1977
     1978#ifdef PNG_BENIGN_ERRORS_SUPPORTED
     1979/* Benign error in libpng.  Can continue, but may have a problem.
     1980 * User can choose whether to handle as a fatal error or as a warning. */
     1981extern PNG_EXPORT(void,png_benign_error) PNGARG((png_structp png_ptr,
     1982   png_const_charp warning_message));
     1983
     1984/* Same, chunk name is prepended to message. */
     1985extern PNG_EXPORT(void,png_chunk_benign_error) PNGARG((png_structp png_ptr,
     1986   png_const_charp warning_message));
     1987
     1988extern PNG_EXPORT(void,png_set_benign_errors) PNGARG((png_structp
     1989   png_ptr, int allowed));
     1990#endif
    21981991
    21991992/* The png_set_<chunk> functions are for storing values in the png_info_struct.
     
    22142007
    22152008/* Returns number of bytes needed to hold a transformed row. */
    2216 extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
     2009extern PNG_EXPORT(png_size_t,png_get_rowbytes) PNGARG((png_structp png_ptr,
    22172010png_infop info_ptr));
    22182011
    2219 #if defined(PNG_INFO_IMAGE_SUPPORTED)
     2012#ifdef PNG_INFO_IMAGE_SUPPORTED
    22202013/* Returns row_pointers, which is an array of pointers to scanlines that was
    22212014 * returned from png_read_png().
     
    22932086png_infop info_ptr));
    22942087
    2295 #if defined(PNG_bKGD_SUPPORTED)
     2088#ifdef PNG_bKGD_SUPPORTED
    22962089extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
    22972090   png_infop info_ptr, png_color_16p *background));
    22982091#endif
    22992092
    2300 #if defined(PNG_bKGD_SUPPORTED)
     2093#ifdef PNG_bKGD_SUPPORTED
    23012094extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
    23022095   png_infop info_ptr, png_color_16p background));
    23032096#endif
    23042097
    2305 #if defined(PNG_cHRM_SUPPORTED)
     2098#ifdef PNG_cHRM_SUPPORTED
    23062099#ifdef PNG_FLOATING_POINT_SUPPORTED
    23072100extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
     
    23192112#endif
    23202113
    2321 #if defined(PNG_cHRM_SUPPORTED)
     2114#ifdef PNG_cHRM_SUPPORTED
    23222115#ifdef PNG_FLOATING_POINT_SUPPORTED
    23232116extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
     
    23342127#endif
    23352128
    2336 #if defined(PNG_gAMA_SUPPORTED)
     2129#ifdef PNG_gAMA_SUPPORTED
    23372130#ifdef PNG_FLOATING_POINT_SUPPORTED
    23382131extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
     
    23432136#endif
    23442137
    2345 #if defined(PNG_gAMA_SUPPORTED)
     2138#ifdef PNG_gAMA_SUPPORTED
    23462139#ifdef PNG_FLOATING_POINT_SUPPORTED
    23472140extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
     
    23522145#endif
    23532146
    2354 #if defined(PNG_hIST_SUPPORTED)
     2147#ifdef PNG_hIST_SUPPORTED
    23552148extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
    23562149   png_infop info_ptr, png_uint_16p *hist));
    23572150#endif
    23582151
    2359 #if defined(PNG_hIST_SUPPORTED)
     2152#ifdef PNG_hIST_SUPPORTED
    23602153extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
    23612154   png_infop info_ptr, png_uint_16p hist));
     
    23722165   int filter_method));
    23732166
    2374 #if defined(PNG_oFFs_SUPPORTED)
     2167#ifdef PNG_oFFs_SUPPORTED
    23752168extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
    23762169   png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
     
    23782171#endif
    23792172
    2380 #if defined(PNG_oFFs_SUPPORTED)
     2173#ifdef PNG_oFFs_SUPPORTED
    23812174extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
    23822175   png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
     
    23842177#endif
    23852178
    2386 #if defined(PNG_pCAL_SUPPORTED)
     2179#ifdef PNG_pCAL_SUPPORTED
    23872180extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
    23882181   png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
     
    23902183#endif
    23912184
    2392 #if defined(PNG_pCAL_SUPPORTED)
     2185#ifdef PNG_pCAL_SUPPORTED
    23932186extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
    23942187   png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
     
    23962189#endif
    23972190
    2398 #if defined(PNG_pHYs_SUPPORTED)
     2191#ifdef PNG_pHYs_SUPPORTED
    23992192extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
    24002193   png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
    24012194#endif
    24022195
    2403 #if defined(PNG_pHYs_SUPPORTED)
     2196#ifdef PNG_pHYs_SUPPORTED
    24042197extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
    24052198   png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
     
    24122205   png_infop info_ptr, png_colorp palette, int num_palette));
    24132206
    2414 #if defined(PNG_sBIT_SUPPORTED)
     2207#ifdef PNG_sBIT_SUPPORTED
    24152208extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
    24162209   png_infop info_ptr, png_color_8p *sig_bit));
    24172210#endif
    24182211
    2419 #if defined(PNG_sBIT_SUPPORTED)
     2212#ifdef PNG_sBIT_SUPPORTED
    24202213extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
    24212214   png_infop info_ptr, png_color_8p sig_bit));
    24222215#endif
    24232216
    2424 #if defined(PNG_sRGB_SUPPORTED)
     2217#ifdef PNG_sRGB_SUPPORTED
    24252218extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
    24262219   png_infop info_ptr, int *intent));
    24272220#endif
    24282221
    2429 #if defined(PNG_sRGB_SUPPORTED)
     2222#ifdef PNG_sRGB_SUPPORTED
    24302223extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
    24312224   png_infop info_ptr, int intent));
     
    24342227#endif
    24352228
    2436 #if defined(PNG_iCCP_SUPPORTED)
     2229#ifdef PNG_iCCP_SUPPORTED
    24372230extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
    24382231   png_infop info_ptr, png_charpp name, int *compression_type,
     
    24412234#endif
    24422235
    2443 #if defined(PNG_iCCP_SUPPORTED)
     2236#ifdef PNG_iCCP_SUPPORTED
    24442237extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
    24452238   png_infop info_ptr, png_charp name, int compression_type,
     
    24482241#endif
    24492242
    2450 #if defined(PNG_sPLT_SUPPORTED)
     2243#ifdef PNG_sPLT_SUPPORTED
    24512244extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
    24522245   png_infop info_ptr, png_sPLT_tpp entries));
    24532246#endif
    24542247
    2455 #if defined(PNG_sPLT_SUPPORTED)
     2248#ifdef PNG_sPLT_SUPPORTED
    24562249extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
    24572250   png_infop info_ptr, png_sPLT_tp entries, int nentries));
    24582251#endif
    24592252
    2460 #if defined(PNG_TEXT_SUPPORTED)
     2253#ifdef PNG_TEXT_SUPPORTED
    24612254/* png_get_text also returns the number of text chunks in *num_text */
    24622255extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
     
    24642257#endif
    24652258
    2466 /*
    2467  *  Note while png_set_text() will accept a structure whose text,
    2468  *  language, and  translated keywords are NULL pointers, the structure
    2469  *  returned by png_get_text will always contain regular
    2470  *  zero-terminated C strings.  They might be empty strings but
    2471  *  they will never be NULL pointers.
    2472  */
    2473 
    2474 #if defined(PNG_TEXT_SUPPORTED)
     2259/* Note while png_set_text() will accept a structure whose text,
     2260 * language, and  translated keywords are NULL pointers, the structure
     2261 * returned by png_get_text will always contain regular
     2262 * zero-terminated C strings.  They might be empty strings but
     2263 * they will never be NULL pointers.
     2264 */
     2265
     2266#ifdef PNG_TEXT_SUPPORTED
    24752267extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
    24762268   png_infop info_ptr, png_textp text_ptr, int num_text));
    24772269#endif
    24782270
    2479 #if defined(PNG_tIME_SUPPORTED)
     2271#ifdef PNG_tIME_SUPPORTED
    24802272extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
    24812273   png_infop info_ptr, png_timep *mod_time));
    24822274#endif
    24832275
    2484 #if defined(PNG_tIME_SUPPORTED)
     2276#ifdef PNG_tIME_SUPPORTED
    24852277extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
    24862278   png_infop info_ptr, png_timep mod_time));
    24872279#endif
    24882280
    2489 #if defined(PNG_tRNS_SUPPORTED)
     2281#ifdef PNG_tRNS_SUPPORTED
    24902282extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
    2491    png_infop info_ptr, png_bytep *trans, int *num_trans,
    2492    png_color_16p *trans_values));
    2493 #endif
    2494 
    2495 #if defined(PNG_tRNS_SUPPORTED)
     2283   png_infop info_ptr, png_bytep *trans_alpha, int *num_trans,
     2284   png_color_16p *trans_color));
     2285#endif
     2286
     2287#ifdef PNG_tRNS_SUPPORTED
    24962288extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
    2497    png_infop info_ptr, png_bytep trans, int num_trans,
    2498    png_color_16p trans_values));
    2499 #endif
    2500 
    2501 #if defined(PNG_tRNS_SUPPORTED)
    2502 #endif
    2503 
    2504 #if defined(PNG_sCAL_SUPPORTED)
     2289   png_infop info_ptr, png_bytep trans_alpha, int num_trans,
     2290   png_color_16p trans_color));
     2291#endif
     2292
     2293#ifdef PNG_tRNS_SUPPORTED
     2294#endif
     2295
     2296#ifdef PNG_sCAL_SUPPORTED
    25052297#ifdef PNG_FLOATING_POINT_SUPPORTED
    25062298extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
     
    25142306#endif /* PNG_sCAL_SUPPORTED */
    25152307
    2516 #if defined(PNG_sCAL_SUPPORTED)
     2308#ifdef PNG_sCAL_SUPPORTED
    25172309#ifdef PNG_FLOATING_POINT_SUPPORTED
    25182310extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
     
    25412333   chunk_name));
    25422334#endif
    2543 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
     2335#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
    25442336extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
    25452337   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
     
    25572349   png_infop info_ptr, int mask));
    25582350
    2559 #if defined(PNG_INFO_IMAGE_SUPPORTED)
     2351#ifdef PNG_INFO_IMAGE_SUPPORTED
    25602352/* The "params" pointer is currently not used and is for future expansion. */
    25612353extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
     
    25692361#endif
    25702362
    2571 /* Define PNG_DEBUG at compile time for debugging information.  Higher
    2572  * numbers for PNG_DEBUG mean more debugging information.  This has
    2573  * only been added since version 0.95 so it is not implemented throughout
    2574  * libpng yet, but more support will be added as needed.
    2575  */
    2576 #ifdef PNG_DEBUG
    2577 #if (PNG_DEBUG > 0)
    2578 #if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
    2579 #include <crtdbg.h>
    2580 #if (PNG_DEBUG > 1)
    2581 #ifndef _DEBUG
    2582 #  define _DEBUG
    2583 #endif
    2584 #ifndef png_debug
    2585 #define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)
    2586 #endif
    2587 #ifndef png_debug1
    2588 #define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)
    2589 #endif
    2590 #ifndef png_debug2
    2591 #define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)
    2592 #endif
    2593 #endif
    2594 #else /* PNG_DEBUG_FILE || !_MSC_VER */
    2595 #ifndef PNG_DEBUG_FILE
    2596 #define PNG_DEBUG_FILE stderr
    2597 #endif /* PNG_DEBUG_FILE */
    2598 
    2599 #if (PNG_DEBUG > 1)
    2600 /* Note: ["%s"m PNG_STRING_NEWLINE] probably does not work on non-ISO
    2601  * compilers.
    2602  */
    2603 #  ifdef __STDC__
    2604 #    ifndef png_debug
    2605 #      define png_debug(l,m) \
    2606        { \
    2607        int num_tabs=l; \
    2608        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
    2609          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
    2610        }
    2611 #    endif
    2612 #    ifndef png_debug1
    2613 #      define png_debug1(l,m,p1) \
    2614        { \
    2615        int num_tabs=l; \
    2616        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
    2617          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
    2618        }
    2619 #    endif
    2620 #    ifndef png_debug2
    2621 #      define png_debug2(l,m,p1,p2) \
    2622        { \
    2623        int num_tabs=l; \
    2624        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
    2625          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
    2626        }
    2627 #    endif
    2628 #  else /* __STDC __ */
    2629 #    ifndef png_debug
    2630 #      define png_debug(l,m) \
    2631        { \
    2632        int num_tabs=l; \
    2633        char format[256]; \
    2634        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
    2635          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
    2636          m,PNG_STRING_NEWLINE); \
    2637        fprintf(PNG_DEBUG_FILE,format); \
    2638        }
    2639 #    endif
    2640 #    ifndef png_debug1
    2641 #      define png_debug1(l,m,p1) \
    2642        { \
    2643        int num_tabs=l; \
    2644        char format[256]; \
    2645        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
    2646          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
    2647          m,PNG_STRING_NEWLINE); \
    2648        fprintf(PNG_DEBUG_FILE,format,p1); \
    2649        }
    2650 #    endif
    2651 #    ifndef png_debug2
    2652 #      define png_debug2(l,m,p1,p2) \
    2653        { \
    2654        int num_tabs=l; \
    2655        char format[256]; \
    2656        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
    2657          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
    2658          m,PNG_STRING_NEWLINE); \
    2659        fprintf(PNG_DEBUG_FILE,format,p1,p2); \
    2660        }
    2661 #    endif
    2662 #  endif /* __STDC __ */
    2663 #endif /* (PNG_DEBUG > 1) */
    2664 
    2665 #endif /* _MSC_VER */
    2666 #endif /* (PNG_DEBUG > 0) */
    2667 #endif /* PNG_DEBUG */
    2668 #ifndef png_debug
    2669 #define png_debug(l, m)
    2670 #endif
    2671 #ifndef png_debug1
    2672 #define png_debug1(l, m, p1)
    2673 #endif
    2674 #ifndef png_debug2
    2675 #define png_debug2(l, m, p1, p2)
    2676 #endif
    2677 
    26782363extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
    26792364extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
     
    26922377#define PNG_HANDLE_CHUNK_ALWAYS       3
    26932378
    2694 /* Added to version 1.2.0 */
    2695 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
    2696 #if defined(PNG_MMX_CODE_SUPPORTED)
    2697 #define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED  0x01  /* not user-settable */
    2698 #define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU    0x02  /* not user-settable */
    2699 #define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  0x04
    2700 #define PNG_ASM_FLAG_MMX_READ_INTERLACE    0x08
    2701 #define PNG_ASM_FLAG_MMX_READ_FILTER_SUB   0x10
    2702 #define PNG_ASM_FLAG_MMX_READ_FILTER_UP    0x20
    2703 #define PNG_ASM_FLAG_MMX_READ_FILTER_AVG   0x40
    2704 #define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
    2705 #define PNG_ASM_FLAGS_INITIALIZED          0x80000000  /* not user-settable */
    2706 
    2707 #define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  \
    2708                            | PNG_ASM_FLAG_MMX_READ_INTERLACE    \
    2709                            | PNG_ASM_FLAG_MMX_READ_FILTER_SUB   \
    2710                            | PNG_ASM_FLAG_MMX_READ_FILTER_UP    \
    2711                            | PNG_ASM_FLAG_MMX_READ_FILTER_AVG   \
    2712                            | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
    2713 #define PNG_MMX_WRITE_FLAGS ( 0 )
    2714 
    2715 #define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
    2716                       | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU   \
    2717                       | PNG_MMX_READ_FLAGS                \
    2718                       | PNG_MMX_WRITE_FLAGS )
    2719 
    2720 #define PNG_SELECT_READ   1
    2721 #define PNG_SELECT_WRITE  2
    2722 #endif /* PNG_MMX_CODE_SUPPORTED */
    2723 
    2724 #if !defined(PNG_1_0_X)
    2725 /* pngget.c */
    2726 extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
    2727    PNGARG((int flag_select, int *compilerID));
    2728 
    2729 /* pngget.c */
    2730 extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
    2731    PNGARG((int flag_select));
    2732 
    2733 /* pngget.c */
    2734 extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
    2735    PNGARG((png_structp png_ptr));
    2736 
    2737 /* pngget.c */
    2738 extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
    2739    PNGARG((png_structp png_ptr));
    2740 
    2741 /* pngget.c */
    2742 extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
    2743    PNGARG((png_structp png_ptr));
    2744 
    2745 /* pngset.c */
    2746 extern PNG_EXPORT(void,png_set_asm_flags)
    2747    PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
    2748 
    2749 /* pngset.c */
    2750 extern PNG_EXPORT(void,png_set_mmx_thresholds)
    2751    PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
    2752    png_uint_32 mmx_rowbytes_threshold));
    2753 
    2754 #endif /* PNG_1_0_X */
    2755 
    2756 #if !defined(PNG_1_0_X)
    2757 /* png.c, pnggccrd.c, or pngvcrd.c */
    2758 extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
    2759 #endif /* PNG_1_0_X */
    2760 #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
    2761 
    27622379/* Strip the prepended error numbers ("#nnn ") from error and warning
    27632380 * messages before passing them to the error or warning handler.
     
    27682385#endif
    27692386
    2770 /* Added at libpng-1.2.6 */
     2387/* Added in libpng-1.2.6 */
    27712388#ifdef PNG_SET_USER_LIMITS_SUPPORTED
    27722389extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
     
    27762393extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
    27772394   png_ptr));
    2778 #endif
    2779 
    2780 
    2781 /* Maintainer: Put new public prototypes here ^, in libpng.3, and in
    2782  * project defs
     2395/* Added in libpng-1.4.0 */
     2396extern PNG_EXPORT(void,png_set_chunk_cache_max) PNGARG((png_structp
     2397   png_ptr, png_uint_32 user_chunk_cache_max));
     2398extern PNG_EXPORT(png_uint_32,png_get_chunk_cache_max)
     2399   PNGARG((png_structp png_ptr));
     2400#endif
     2401
     2402#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
     2403PNG_EXPORT(png_uint_32,png_get_pixels_per_inch) PNGARG((png_structp png_ptr,
     2404png_infop info_ptr));
     2405
     2406PNG_EXPORT(png_uint_32,png_get_x_pixels_per_inch) PNGARG((png_structp png_ptr,
     2407png_infop info_ptr));
     2408
     2409PNG_EXPORT(png_uint_32,png_get_y_pixels_per_inch) PNGARG((png_structp png_ptr,
     2410png_infop info_ptr));
     2411
     2412PNG_EXPORT(float,png_get_x_offset_inches) PNGARG((png_structp png_ptr,
     2413png_infop info_ptr));
     2414
     2415PNG_EXPORT(float,png_get_y_offset_inches) PNGARG((png_structp png_ptr,
     2416png_infop info_ptr));
     2417
     2418#ifdef PNG_pHYs_SUPPORTED
     2419PNG_EXPORT(png_uint_32,png_get_pHYs_dpi) PNGARG((png_structp png_ptr,
     2420png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
     2421#endif /* PNG_pHYs_SUPPORTED */
     2422#endif  /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
     2423
     2424/* Added in libpng-1.4.0 */
     2425#ifdef PNG_IO_STATE_SUPPORTED
     2426extern PNG_EXPORT(png_uint_32,png_get_io_state) PNGARG((png_structp png_ptr));
     2427
     2428extern PNG_EXPORT(png_bytep,png_get_io_chunk_name)
     2429   PNGARG((png_structp png_ptr));
     2430
     2431/* The flags returned by png_get_io_state() are the following: */
     2432#define PNG_IO_NONE        0x0000   /* no I/O at this moment */
     2433#define PNG_IO_READING     0x0001   /* currently reading */
     2434#define PNG_IO_WRITING     0x0002   /* currently writing */
     2435#define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
     2436#define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
     2437#define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
     2438#define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
     2439#define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
     2440#define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
     2441#endif /* ?PNG_IO_STATE_SUPPORTED */
     2442
     2443/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
     2444 * defs
    27832445 */
    27842446
     
    28212483       (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
    28222484       (png_uint_32)32767) / (png_uint_32)65535L)
    2823 
    28242485#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
    28252486
    2826 /* Inline macros to do direct reads of bytes from the input buffer.  These
    2827  * require that you are using an architecture that uses PNG byte ordering
    2828  * (MSB first) and supports unaligned data storage.  I think that PowerPC
    2829  * in big-endian mode and 680x0 are the only ones that will support this.
    2830  * The x86 line of processors definitely do not.  The png_get_int_32()
    2831  * routine also assumes we are using two's complement format for negative
    2832  * values, which is almost certainly true.
    2833  */
    2834 #if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
    2835 #  define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
    2836 #  define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
    2837 #  define png_get_int_32(buf)  ( *((png_int_32p)  (buf)))
     2487#ifdef PNG_USE_READ_MACROS
     2488/* Inline macros to do direct reads of bytes from the input buffer.
     2489 * The png_get_int_32() routine assumes we are using two's complement
     2490 * format for negative values, which is almost certainly true.
     2491 */
     2492/* We could make special-case BIG_ENDIAN macros that do direct reads here */
     2493#  define png_get_uint_32(buf) \
     2494     (((png_uint_32)(*(buf)) << 24) + \
     2495      ((png_uint_32)(*((buf) + 1)) << 16) + \
     2496      ((png_uint_32)(*((buf) + 2)) << 8) + \
     2497      ((png_uint_32)(*((buf) + 3))))
     2498#  define png_get_uint_16(buf) \
     2499     (((png_uint_32)(*(buf)) << 8) + \
     2500      ((png_uint_32)(*((buf) + 1))))
     2501#ifdef PNG_GET_INT_32_SUPPORTED
     2502#  define png_get_int_32(buf) \
     2503     (((png_int_32)(*(buf)) << 24) + \
     2504      ((png_int_32)(*((buf) + 1)) << 16) + \
     2505      ((png_int_32)(*((buf) + 2)) << 8) + \
     2506      ((png_int_32)(*((buf) + 3))))
     2507#endif
    28382508#else
    28392509extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
    28402510extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
     2511#ifdef PNG_GET_INT_32_SUPPORTED
    28412512extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
    2842 #endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
     2513#endif
     2514#endif
    28432515extern PNG_EXPORT(png_uint_32,png_get_uint_31)
    28442516  PNGARG((png_structp png_ptr, png_bytep buf));
    28452517/* No png_get_int_16 -- may be added if there's a real need for it. */
    28462518
    2847 /* Place a 32-bit number into a buffer in PNG byte order (big-endian).
    2848  */
     2519/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
    28492520extern PNG_EXPORT(void,png_save_uint_32)
    28502521   PNGARG((png_bytep buf, png_uint_32 i));
     
    28622533/* ************************************************************************* */
    28632534
    2864 /* These next functions are used internally in the code.  They generally
    2865  * shouldn't be used unless you are writing code to add or replace some
    2866  * functionality in libpng.  More information about most functions can
    2867  * be found in the files where the functions are located.
    2868  */
    2869 
    2870 
    2871 /* Various modes of operation, that are visible to applications because
    2872  * they are used for unknown chunk location.
     2535/* Various modes of operation.  Note that after an init, mode is set to
     2536 * zero automatically when the structure is created.
    28732537 */
    28742538#define PNG_HAVE_IHDR               0x01
     
    28772541#define PNG_AFTER_IDAT              0x08 /* Have complete zlib datastream */
    28782542#define PNG_HAVE_IEND               0x10
    2879 
    2880 #if defined(PNG_INTERNAL)
    2881 
    2882 /* More modes of operation.  Note that after an init, mode is set to
    2883  * zero automatically when the structure is created.
    2884  */
    28852543#define PNG_HAVE_gAMA               0x20
    28862544#define PNG_HAVE_cHRM               0x40
    2887 #define PNG_HAVE_sRGB               0x80
    2888 #define PNG_HAVE_CHUNK_HEADER      0x100
    2889 #define PNG_WROTE_tIME             0x200
    2890 #define PNG_WROTE_INFO_BEFORE_PLTE 0x400
    2891 #define PNG_BACKGROUND_IS_GRAY     0x800
    2892 #define PNG_HAVE_PNG_SIGNATURE    0x1000
    2893 #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
    2894 
    2895 /* Flags for the transformations the PNG library does on the image data */
    2896 #define PNG_BGR                0x0001
    2897 #define PNG_INTERLACE          0x0002
    2898 #define PNG_PACK               0x0004
    2899 #define PNG_SHIFT              0x0008
    2900 #define PNG_SWAP_BYTES         0x0010
    2901 #define PNG_INVERT_MONO        0x0020
    2902 #define PNG_DITHER             0x0040
    2903 #define PNG_BACKGROUND         0x0080
    2904 #define PNG_BACKGROUND_EXPAND  0x0100
    2905                           /*   0x0200 unused */
    2906 #define PNG_16_TO_8            0x0400
    2907 #define PNG_RGBA               0x0800
    2908 #define PNG_EXPAND             0x1000
    2909 #define PNG_GAMMA              0x2000
    2910 #define PNG_GRAY_TO_RGB        0x4000
    2911 #define PNG_FILLER             0x8000L
    2912 #define PNG_PACKSWAP          0x10000L
    2913 #define PNG_SWAP_ALPHA        0x20000L
    2914 #define PNG_STRIP_ALPHA       0x40000L
    2915 #define PNG_INVERT_ALPHA      0x80000L
    2916 #define PNG_USER_TRANSFORM   0x100000L
    2917 #define PNG_RGB_TO_GRAY_ERR  0x200000L
    2918 #define PNG_RGB_TO_GRAY_WARN 0x400000L
    2919 #define PNG_RGB_TO_GRAY      0x600000L  /* two bits, RGB_TO_GRAY_ERR|WARN */
    2920                        /*    0x800000L     Unused */
    2921 #define PNG_ADD_ALPHA       0x1000000L  /* Added to libpng-1.2.7 */
    2922 #define PNG_EXPAND_tRNS     0x2000000L  /* Added to libpng-1.2.9 */
    2923                        /*   0x4000000L  unused */
    2924                        /*   0x8000000L  unused */
    2925                        /*  0x10000000L  unused */
    2926                        /*  0x20000000L  unused */
    2927                        /*  0x40000000L  unused */
    2928 
    2929 /* Flags for png_create_struct */
    2930 #define PNG_STRUCT_PNG   0x0001
    2931 #define PNG_STRUCT_INFO  0x0002
    2932 
    2933 /* Scaling factor for filter heuristic weighting calculations */
    2934 #define PNG_WEIGHT_SHIFT 8
    2935 #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
    2936 #define PNG_COST_SHIFT 3
    2937 #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
    2938 
    2939 /* Flags for the png_ptr->flags rather than declaring a byte for each one */
    2940 #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
    2941 #define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002
    2942 #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004
    2943 #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008
    2944 #define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010
    2945 #define PNG_FLAG_ZLIB_FINISHED            0x0020
    2946 #define PNG_FLAG_ROW_INIT                 0x0040
    2947 #define PNG_FLAG_FILLER_AFTER             0x0080
    2948 #define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
    2949 #define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
    2950 #define PNG_FLAG_CRC_CRITICAL_USE         0x0400
    2951 #define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
    2952 #define PNG_FLAG_FREE_PLTE                0x1000
    2953 #define PNG_FLAG_FREE_TRNS                0x2000
    2954 #define PNG_FLAG_FREE_HIST                0x4000
    2955 #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
    2956 #define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000L
    2957 #define PNG_FLAG_LIBRARY_MISMATCH         0x20000L
    2958 #define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000L
    2959 #define PNG_FLAG_STRIP_ERROR_TEXT         0x80000L
    2960 #define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000L
    2961 #define PNG_FLAG_ADD_ALPHA                0x200000L  /* Added to libpng-1.2.8 */
    2962 #define PNG_FLAG_STRIP_ALPHA              0x400000L  /* Added to libpng-1.2.8 */
    2963                                   /*      0x800000L  unused */
    2964                                   /*     0x1000000L  unused */
    2965                                   /*     0x2000000L  unused */
    2966                                   /*     0x4000000L  unused */
    2967                                   /*     0x8000000L  unused */
    2968                                   /*    0x10000000L  unused */
    2969                                   /*    0x20000000L  unused */
    2970                                   /*    0x40000000L  unused */
    2971 
    2972 #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
    2973                                      PNG_FLAG_CRC_ANCILLARY_NOWARN)
    2974 
    2975 #define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
    2976                                      PNG_FLAG_CRC_CRITICAL_IGNORE)
    2977 
    2978 #define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
    2979                                      PNG_FLAG_CRC_CRITICAL_MASK)
    2980 
    2981 /* Save typing and make code easier to understand */
    2982 
    2983 #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
    2984    abs((int)((c1).green) - (int)((c2).green)) + \
    2985    abs((int)((c1).blue) - (int)((c2).blue)))
    2986 
    2987 /* Added to libpng-1.2.6 JB */
    2988 #define PNG_ROWBYTES(pixel_bits, width) \
    2989     ((pixel_bits) >= 8 ? \
    2990     ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
    2991     (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
    2992 
    2993 /* PNG_OUT_OF_RANGE returns true if value is outside the range
    2994  * ideal-delta..ideal+delta.  Each argument is evaluated twice.
    2995  * "ideal" and "delta" should be constants, normally simple
    2996  * integers, "value" a variable. Added to libpng-1.2.6 JB
    2997  */
    2998 #define PNG_OUT_OF_RANGE(value, ideal, delta) \
    2999         ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
    3000 
    3001 /* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
    3002 #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
    3003 /* Place to hold the signature string for a PNG file. */
    3004 #ifdef PNG_USE_GLOBAL_ARRAYS
    3005    PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8];
    3006 #else
    3007 #endif
    3008 #endif /* PNG_NO_EXTERN */
    3009 
    3010 /* Constant strings for known chunk types.  If you need to add a chunk,
    3011  * define the name here, and add an invocation of the macro in png.c and
    3012  * wherever it's needed.
    3013  */
    3014 #define PNG_IHDR png_byte png_IHDR[5] = { 73,  72,  68,  82, '\0'}
    3015 #define PNG_IDAT png_byte png_IDAT[5] = { 73,  68,  65,  84, '\0'}
    3016 #define PNG_IEND png_byte png_IEND[5] = { 73,  69,  78,  68, '\0'}
    3017 #define PNG_PLTE png_byte png_PLTE[5] = { 80,  76,  84,  69, '\0'}
    3018 #define PNG_bKGD png_byte png_bKGD[5] = { 98,  75,  71,  68, '\0'}
    3019 #define PNG_cHRM png_byte png_cHRM[5] = { 99,  72,  82,  77, '\0'}
    3020 #define PNG_gAMA png_byte png_gAMA[5] = {103,  65,  77,  65, '\0'}
    3021 #define PNG_hIST png_byte png_hIST[5] = {104,  73,  83,  84, '\0'}
    3022 #define PNG_iCCP png_byte png_iCCP[5] = {105,  67,  67,  80, '\0'}
    3023 #define PNG_iTXt png_byte png_iTXt[5] = {105,  84,  88, 116, '\0'}
    3024 #define PNG_oFFs png_byte png_oFFs[5] = {111,  70,  70, 115, '\0'}
    3025 #define PNG_pCAL png_byte png_pCAL[5] = {112,  67,  65,  76, '\0'}
    3026 #define PNG_sCAL png_byte png_sCAL[5] = {115,  67,  65,  76, '\0'}
    3027 #define PNG_pHYs png_byte png_pHYs[5] = {112,  72,  89, 115, '\0'}
    3028 #define PNG_sBIT png_byte png_sBIT[5] = {115,  66,  73,  84, '\0'}
    3029 #define PNG_sPLT png_byte png_sPLT[5] = {115,  80,  76,  84, '\0'}
    3030 #define PNG_sRGB png_byte png_sRGB[5] = {115,  82,  71,  66, '\0'}
    3031 #define PNG_tEXt png_byte png_tEXt[5] = {116,  69,  88, 116, '\0'}
    3032 #define PNG_tIME png_byte png_tIME[5] = {116,  73,  77,  69, '\0'}
    3033 #define PNG_tRNS png_byte png_tRNS[5] = {116,  82,  78,  83, '\0'}
    3034 #define PNG_zTXt png_byte png_zTXt[5] = {122,  84,  88, 116, '\0'}
    3035 
    3036 #ifdef PNG_USE_GLOBAL_ARRAYS
    3037 PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
    3038 PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5];
    3039 PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5];
    3040 PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5];
    3041 PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5];
    3042 PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5];
    3043 PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5];
    3044 PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5];
    3045 PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5];
    3046 PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5];
    3047 PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5];
    3048 PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5];
    3049 PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5];
    3050 PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5];
    3051 PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5];
    3052 PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5];
    3053 PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5];
    3054 PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5];
    3055 PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
    3056 PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
    3057 PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
    3058 #endif /* PNG_USE_GLOBAL_ARRAYS */
    3059 
    3060 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    3061 /* Initialize png_ptr struct for reading, and allocate any other memory.
    3062  * (old interface - DEPRECATED - use png_create_read_struct instead).
    3063  */
    3064 extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr));
    3065 #undef png_read_init
    3066 #define png_read_init(png_ptr) png_read_init_3(&png_ptr, \
    3067     PNG_LIBPNG_VER_STRING,  png_sizeof(png_struct));
    3068 #endif
    3069 
    3070 extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr,
    3071     png_const_charp user_png_ver, png_size_t png_struct_size));
    3072 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    3073 extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
    3074     png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
    3075     png_info_size));
    3076 #endif
    3077 
    3078 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
    3079 /* Initialize png_ptr struct for writing, and allocate any other memory.
    3080  * (old interface - DEPRECATED - use png_create_write_struct instead).
    3081  */
    3082 extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr));
    3083 #undef png_write_init
    3084 #define png_write_init(png_ptr) png_write_init_3(&png_ptr, \
    3085     PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
    3086 #endif
    3087 
    3088 extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr,
    3089     png_const_charp user_png_ver, png_size_t png_struct_size));
    3090 extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr,
    3091     png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
    3092     png_info_size));
    3093 
    3094 /* Allocate memory for an internal libpng struct */
    3095 PNG_EXTERN png_voidp png_create_struct PNGARG((int type));
    3096 
    3097 /* Free memory from internal libpng struct */
    3098 PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr));
    3099 
    3100 PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr
    3101   malloc_fn, png_voidp mem_ptr));
    3102 PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,
    3103    png_free_ptr free_fn, png_voidp mem_ptr));
    3104 
    3105 /* Free any memory that info_ptr points to and reset struct. */
    3106 PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,
    3107    png_infop info_ptr));
    3108 
    3109 #ifndef PNG_1_0_X
    3110 /* Function to allocate memory for zlib. */
    3111 PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size));
    3112 
    3113 /* Function to free memory for zlib */
    3114 PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr));
    3115 
    3116 #ifdef PNG_SIZE_T
    3117 /* Function to convert a sizeof an item to png_sizeof item */
    3118    PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
    3119 #endif
    3120 
    3121 /* Next four functions are used internally as callbacks.  PNGAPI is required
    3122  * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3.
    3123  */
    3124 
    3125 PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr,
    3126    png_bytep data, png_size_t length));
    3127 
    3128 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
    3129 PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr,
    3130    png_bytep buffer, png_size_t length));
    3131 #endif
    3132 
    3133 PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr,
    3134    png_bytep data, png_size_t length));
    3135 
    3136 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
    3137 #if !defined(PNG_NO_STDIO)
    3138 PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr));
    3139 #endif
    3140 #endif
    3141 #else /* PNG_1_0_X */
    3142 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
    3143 PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr,
    3144    png_bytep buffer, png_size_t length));
    3145 #endif
    3146 #endif /* PNG_1_0_X */
    3147 
    3148 /* Reset the CRC variable */
    3149 PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr));
    3150 
    3151 /* Write the "data" buffer to whatever output you are using. */
    3152 PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
    3153    png_size_t length));
    3154 
    3155 /* Read data from whatever input you are using into the "data" buffer */
    3156 PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
    3157    png_size_t length));
    3158 
    3159 /* Read bytes into buf, and update png_ptr->crc */
    3160 PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
    3161    png_size_t length));
    3162 
    3163 /* Decompress data in a chunk that uses compression */
    3164 #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
    3165     defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
    3166 PNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr,
    3167    int comp_type, png_size_t chunklength,
    3168    png_size_t prefix_length, png_size_t *data_length));
    3169 #endif
    3170 
    3171 /* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
    3172 PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip));
    3173 
    3174 /* Read the CRC from the file and compare it to the libpng calculated CRC */
    3175 PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr));
    3176 
    3177 /* Calculate the CRC over a section of data.  Note that we are only
    3178  * passing a maximum of 64K on systems that have this as a memory limit,
    3179  * since this is the maximum buffer size we can specify.
    3180  */
    3181 PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
    3182    png_size_t length));
    3183 
    3184 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
    3185 PNG_EXTERN void png_flush PNGARG((png_structp png_ptr));
    3186 #endif
    3187 
    3188 /* Simple function to write the signature */
    3189 PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr));
    3190 
    3191 /* Write various chunks */
    3192 
    3193 /* Write the IHDR chunk, and update the png_struct with the necessary
    3194  * information.
    3195  */
    3196 PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
    3197    png_uint_32 height,
    3198    int bit_depth, int color_type, int compression_method, int filter_method,
    3199    int interlace_method));
    3200 
    3201 PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
    3202    png_uint_32 num_pal));
    3203 
    3204 PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,
    3205    png_size_t length));
    3206 
    3207 PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr));
    3208 
    3209 #if defined(PNG_WRITE_gAMA_SUPPORTED)
    3210 #ifdef PNG_FLOATING_POINT_SUPPORTED
    3211 PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma));
    3212 #endif
    3213 #ifdef PNG_FIXED_POINT_SUPPORTED
    3214 PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point
    3215     file_gamma));
    3216 #endif
    3217 #endif
    3218 
    3219 #if defined(PNG_WRITE_sBIT_SUPPORTED)
    3220 PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit,
    3221    int color_type));
    3222 #endif
    3223 
    3224 #if defined(PNG_WRITE_cHRM_SUPPORTED)
    3225 #ifdef PNG_FLOATING_POINT_SUPPORTED
    3226 PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,
    3227    double white_x, double white_y,
    3228    double red_x, double red_y, double green_x, double green_y,
    3229    double blue_x, double blue_y));
    3230 #endif
    3231 #ifdef PNG_FIXED_POINT_SUPPORTED
    3232 PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,
    3233    png_fixed_point int_white_x, png_fixed_point int_white_y,
    3234    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
    3235    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
    3236    png_fixed_point int_blue_y));
    3237 #endif
    3238 #endif
    3239 
    3240 #if defined(PNG_WRITE_sRGB_SUPPORTED)
    3241 PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
    3242    int intent));
    3243 #endif
    3244 
    3245 #if defined(PNG_WRITE_iCCP_SUPPORTED)
    3246 PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
    3247    png_charp name, int compression_type,
    3248    png_charp profile, int proflen));
    3249    /* Note to maintainer: profile should be png_bytep */
    3250 #endif
    3251 
    3252 #if defined(PNG_WRITE_sPLT_SUPPORTED)
    3253 PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
    3254    png_sPLT_tp palette));
    3255 #endif
    3256 
    3257 #if defined(PNG_WRITE_tRNS_SUPPORTED)
    3258 PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans,
    3259    png_color_16p values, int number, int color_type));
    3260 #endif
    3261 
    3262 #if defined(PNG_WRITE_bKGD_SUPPORTED)
    3263 PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,
    3264    png_color_16p values, int color_type));
    3265 #endif
    3266 
    3267 #if defined(PNG_WRITE_hIST_SUPPORTED)
    3268 PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist,
    3269    int num_hist));
    3270 #endif
    3271 
    3272 #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
    3273     defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
    3274 PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
    3275    png_charp key, png_charpp new_key));
    3276 #endif
    3277 
    3278 #if defined(PNG_WRITE_tEXt_SUPPORTED)
    3279 PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key,
    3280    png_charp text, png_size_t text_len));
    3281 #endif
    3282 
    3283 #if defined(PNG_WRITE_zTXt_SUPPORTED)
    3284 PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key,
    3285    png_charp text, png_size_t text_len, int compression));
    3286 #endif
    3287 
    3288 #if defined(PNG_WRITE_iTXt_SUPPORTED)
    3289 PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,
    3290    int compression, png_charp key, png_charp lang, png_charp lang_key,
    3291    png_charp text));
    3292 #endif
    3293 
    3294 #if defined(PNG_TEXT_SUPPORTED)  /* Added at version 1.0.14 and 1.2.4 */
    3295 PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,
    3296    png_infop info_ptr, png_textp text_ptr, int num_text));
    3297 #endif
    3298 
    3299 #if defined(PNG_WRITE_oFFs_SUPPORTED)
    3300 PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,
    3301    png_int_32 x_offset, png_int_32 y_offset, int unit_type));
    3302 #endif
    3303 
    3304 #if defined(PNG_WRITE_pCAL_SUPPORTED)
    3305 PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,
    3306    png_int_32 X0, png_int_32 X1, int type, int nparams,
    3307    png_charp units, png_charpp params));
    3308 #endif
    3309 
    3310 #if defined(PNG_WRITE_pHYs_SUPPORTED)
    3311 PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,
    3312    png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
    3313    int unit_type));
    3314 #endif
    3315 
    3316 #if defined(PNG_WRITE_tIME_SUPPORTED)
    3317 PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,
    3318    png_timep mod_time));
    3319 #endif
    3320 
    3321 #if defined(PNG_WRITE_sCAL_SUPPORTED)
    3322 #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
    3323 PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr,
    3324    int unit, double width, double height));
    3325 #else
    3326 #ifdef PNG_FIXED_POINT_SUPPORTED
    3327 PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,
    3328    int unit, png_charp width, png_charp height));
    3329 #endif
    3330 #endif
    3331 #endif
    3332 
    3333 /* Called when finished processing a row of data */
    3334 PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
    3335 
    3336 /* Internal use only.   Called before first row of data */
    3337 PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr));
    3338 
    3339 #if defined(PNG_READ_GAMMA_SUPPORTED)
    3340 PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr));
    3341 #endif
    3342 
    3343 /* Combine a row of data, dealing with alpha, etc. if requested */
    3344 PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
    3345    int mask));
    3346 
    3347 #if defined(PNG_READ_INTERLACING_SUPPORTED)
    3348 /* Expand an interlaced row */
    3349 /* OLD pre-1.0.9 interface:
    3350 PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
    3351    png_bytep row, int pass, png_uint_32 transformations));
    3352  */
    3353 PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr));
    3354 #endif
    3355 
    3356 /* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
    3357 
    3358 #if defined(PNG_WRITE_INTERLACING_SUPPORTED)
    3359 /* Grab pixels out of a row for an interlaced pass */
    3360 PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
    3361    png_bytep row, int pass));
    3362 #endif
    3363 
    3364 /* Unfilter a row */
    3365 PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr,
    3366    png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter));
    3367 
    3368 /* Choose the best filter to use and filter the row data */
    3369 PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,
    3370    png_row_infop row_info));
    3371 
    3372 /* Write out the filtered row. */
    3373 PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr,
    3374    png_bytep filtered_row));
    3375 /* Finish a row while reading, dealing with interlacing passes, etc. */
    3376 PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));
    3377 
    3378 /* Initialize the row buffers, etc. */
    3379 PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr));
    3380 /* Optional call to update the users info structure */
    3381 PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
    3382    png_infop info_ptr));
    3383 
    3384 /* These are the functions that do the transformations */
    3385 #if defined(PNG_READ_FILLER_SUPPORTED)
    3386 PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
    3387    png_bytep row, png_uint_32 filler, png_uint_32 flags));
    3388 #endif
    3389 
    3390 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
    3391 PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,
    3392    png_bytep row));
    3393 #endif
    3394 
    3395 #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
    3396 PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,
    3397    png_bytep row));
    3398 #endif
    3399 
    3400 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
    3401 PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,
    3402    png_bytep row));
    3403 #endif
    3404 
    3405 #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
    3406 PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,
    3407    png_bytep row));
    3408 #endif
    3409 
    3410 #if defined(PNG_WRITE_FILLER_SUPPORTED) || \
    3411     defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
    3412 PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info,
    3413    png_bytep row, png_uint_32 flags));
    3414 #endif
    3415 
    3416 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
    3417 PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row));
    3418 #endif
    3419 
    3420 #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
    3421 PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row));
    3422 #endif
    3423 
    3424 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
    3425 PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop
    3426    row_info, png_bytep row));
    3427 #endif
    3428 
    3429 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
    3430 PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info,
    3431    png_bytep row));
    3432 #endif
    3433 
    3434 #if defined(PNG_READ_PACK_SUPPORTED)
    3435 PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row));
    3436 #endif
    3437 
    3438 #if defined(PNG_READ_SHIFT_SUPPORTED)
    3439 PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row,
    3440    png_color_8p sig_bits));
    3441 #endif
    3442 
    3443 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
    3444 PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row));
    3445 #endif
    3446 
    3447 #if defined(PNG_READ_16_TO_8_SUPPORTED)
    3448 PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row));
    3449 #endif
    3450 
    3451 #if defined(PNG_READ_DITHER_SUPPORTED)
    3452 PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info,
    3453    png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup));
    3454 
    3455 #  if defined(PNG_CORRECT_PALETTE_SUPPORTED)
    3456 PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr,
    3457    png_colorp palette, int num_palette));
    3458 #  endif
    3459 #endif
    3460 
    3461 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
    3462 PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row));
    3463 #endif
    3464 
    3465 #if defined(PNG_WRITE_PACK_SUPPORTED)
    3466 PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info,
    3467    png_bytep row, png_uint_32 bit_depth));
    3468 #endif
    3469 
    3470 #if defined(PNG_WRITE_SHIFT_SUPPORTED)
    3471 PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row,
    3472    png_color_8p bit_depth));
    3473 #endif
    3474 
    3475 #if defined(PNG_READ_BACKGROUND_SUPPORTED)
    3476 #if defined(PNG_READ_GAMMA_SUPPORTED)
    3477 PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
    3478    png_color_16p trans_values, png_color_16p background,
    3479    png_color_16p background_1,
    3480    png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1,
    3481    png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1,
    3482    png_uint_16pp gamma_16_to_1, int gamma_shift));
    3483 #else
    3484 PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
    3485    png_color_16p trans_values, png_color_16p background));
    3486 #endif
    3487 #endif
    3488 
    3489 #if defined(PNG_READ_GAMMA_SUPPORTED)
    3490 PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row,
    3491    png_bytep gamma_table, png_uint_16pp gamma_16_table,
    3492    int gamma_shift));
    3493 #endif
    3494 
    3495 #if defined(PNG_READ_EXPAND_SUPPORTED)
    3496 PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info,
    3497    png_bytep row, png_colorp palette, png_bytep trans, int num_trans));
    3498 PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info,
    3499    png_bytep row, png_color_16p trans_value));
    3500 #endif
    3501 
    3502 /* The following decodes the appropriate chunks, and does error correction,
    3503  * then calls the appropriate callback for the chunk if it is valid.
    3504  */
    3505 
    3506 /* Decode the IHDR chunk */
    3507 PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr,
    3508    png_uint_32 length));
    3509 PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr,
    3510    png_uint_32 length));
    3511 PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr,
    3512    png_uint_32 length));
    3513 
    3514 #if defined(PNG_READ_bKGD_SUPPORTED)
    3515 PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr,
    3516    png_uint_32 length));
    3517 #endif
    3518 
    3519 #if defined(PNG_READ_cHRM_SUPPORTED)
    3520 PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr,
    3521    png_uint_32 length));
    3522 #endif
    3523 
    3524 #if defined(PNG_READ_gAMA_SUPPORTED)
    3525 PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr,
    3526    png_uint_32 length));
    3527 #endif
    3528 
    3529 #if defined(PNG_READ_hIST_SUPPORTED)
    3530 PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr,
    3531    png_uint_32 length));
    3532 #endif
    3533 
    3534 #if defined(PNG_READ_iCCP_SUPPORTED)
    3535 extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr,
    3536    png_uint_32 length));
    3537 #endif /* PNG_READ_iCCP_SUPPORTED */
    3538 
    3539 #if defined(PNG_READ_iTXt_SUPPORTED)
    3540 PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
    3541    png_uint_32 length));
    3542 #endif
    3543 
    3544 #if defined(PNG_READ_oFFs_SUPPORTED)
    3545 PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr,
    3546    png_uint_32 length));
    3547 #endif
    3548 
    3549 #if defined(PNG_READ_pCAL_SUPPORTED)
    3550 PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
    3551    png_uint_32 length));
    3552 #endif
    3553 
    3554 #if defined(PNG_READ_pHYs_SUPPORTED)
    3555 PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr,
    3556    png_uint_32 length));
    3557 #endif
    3558 
    3559 #if defined(PNG_READ_sBIT_SUPPORTED)
    3560 PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr,
    3561    png_uint_32 length));
    3562 #endif
    3563 
    3564 #if defined(PNG_READ_sCAL_SUPPORTED)
    3565 PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
    3566    png_uint_32 length));
    3567 #endif
    3568 
    3569 #if defined(PNG_READ_sPLT_SUPPORTED)
    3570 extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr,
    3571    png_uint_32 length));
    3572 #endif /* PNG_READ_sPLT_SUPPORTED */
    3573 
    3574 #if defined(PNG_READ_sRGB_SUPPORTED)
    3575 PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr,
    3576    png_uint_32 length));
    3577 #endif
    3578 
    3579 #if defined(PNG_READ_tEXt_SUPPORTED)
    3580 PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr,
    3581    png_uint_32 length));
    3582 #endif
    3583 
    3584 #if defined(PNG_READ_tIME_SUPPORTED)
    3585 PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr,
    3586    png_uint_32 length));
    3587 #endif
    3588 
    3589 #if defined(PNG_READ_tRNS_SUPPORTED)
    3590 PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr,
    3591    png_uint_32 length));
    3592 #endif
    3593 
    3594 #if defined(PNG_READ_zTXt_SUPPORTED)
    3595 PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
    3596    png_uint_32 length));
    3597 #endif
    3598 
    3599 PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
    3600    png_infop info_ptr, png_uint_32 length));
    3601 
    3602 PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr,
    3603    png_bytep chunk_name));
    3604 
    3605 /* Handle the transformations for reading and writing */
    3606 PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr));
    3607 PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr));
    3608 
    3609 PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr));
    3610 
    3611 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
    3612 PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr,
    3613    png_infop info_ptr));
    3614 PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr,
    3615    png_infop info_ptr));
    3616 PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr));
    3617 PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr,
    3618    png_uint_32 length));
    3619 PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr));
    3620 PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr));
    3621 PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr,
    3622    png_bytep buffer, png_size_t buffer_length));
    3623 PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr));
    3624 PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr,
    3625    png_bytep buffer, png_size_t buffer_length));
    3626 PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr));
    3627 PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr,
    3628    png_infop info_ptr, png_uint_32 length));
    3629 PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr,
    3630    png_infop info_ptr));
    3631 PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr,
    3632    png_infop info_ptr));
    3633 PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
    3634 PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr,
    3635    png_infop info_ptr));
    3636 PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr,
    3637    png_infop info_ptr));
    3638 PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr));
    3639 #if defined(PNG_READ_tEXt_SUPPORTED)
    3640 PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr,
    3641    png_infop info_ptr, png_uint_32 length));
    3642 PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr,
    3643    png_infop info_ptr));
    3644 #endif
    3645 #if defined(PNG_READ_zTXt_SUPPORTED)
    3646 PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr,
    3647    png_infop info_ptr, png_uint_32 length));
    3648 PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr,
    3649    png_infop info_ptr));
    3650 #endif
    3651 #if defined(PNG_READ_iTXt_SUPPORTED)
    3652 PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr,
    3653    png_infop info_ptr, png_uint_32 length));
    3654 PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,
    3655    png_infop info_ptr));
    3656 #endif
    3657 
    3658 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
    3659 
    3660 #ifdef PNG_MNG_FEATURES_SUPPORTED
    3661 PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,
    3662    png_bytep row));
    3663 PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,
    3664    png_bytep row));
    3665 #endif
    3666 
    3667 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
    3668 #if defined(PNG_MMX_CODE_SUPPORTED)
    3669 /* png.c */ /* PRIVATE */
    3670 PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr));
    3671 #endif
    3672 #endif
    3673 
    3674 #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
    3675 PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr,
    3676 png_infop info_ptr));
    3677 
    3678 PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr,
    3679 png_infop info_ptr));
    3680 
    3681 PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr,
    3682 png_infop info_ptr));
    3683 
    3684 PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr,
    3685 png_infop info_ptr));
    3686 
    3687 PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr,
    3688 png_infop info_ptr));
    3689 
    3690 #if defined(PNG_pHYs_SUPPORTED)
    3691 PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr,
    3692 png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
    3693 #endif /* PNG_pHYs_SUPPORTED */
    3694 #endif  /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
    3695 
    3696 /* Read the chunk header (length + type name) */
    3697 PNG_EXTERN png_uint_32 png_read_chunk_header PNGARG((png_structp png_ptr));
    3698 
    3699 /* Added at libpng version 1.2.34 */
    3700 #if defined(PNG_cHRM_SUPPORTED)
    3701 PNG_EXTERN int png_check_cHRM_fixed  PNGARG((png_structp png_ptr,
    3702    png_fixed_point int_white_x, png_fixed_point int_white_y,
    3703    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
    3704    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
    3705    png_fixed_point int_blue_y));
    3706 #endif
    3707 
    3708 #if defined(PNG_cHRM_SUPPORTED)
    3709 #if !defined(PNG_NO_CHECK_cHRM)
    3710 /* Added at libpng version 1.2.34 */
    3711 PNG_EXTERN void png_64bit_product (long v1, long v2, unsigned long *hi_product,
    3712    unsigned long *lo_product);
    3713 #endif
    3714 #endif
    3715 
    3716 /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
    3717 
    3718 #endif /* PNG_INTERNAL */
    37192545
    37202546#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.