home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pdflb302.zip / pdf / lpng.1-0-8 / pngrutil.i < prev    next >
Text File  |  2000-09-08  |  144KB  |  4,587 lines

  1. #line 219 "..\\zlib.1-1-3\\zconf.h"
  2. typedef unsigned char  Byte;   
  3.  
  4. typedef unsigned int   uInt;   
  5. typedef unsigned long  uLong;  
  6. #line 228
  7.    typedef Byte   Bytef;
  8.  
  9. typedef char   charf;
  10. typedef int    intf;
  11. typedef uInt   uIntf;
  12. typedef uLong  uLongf;
  13. #line 236
  14.    typedef void  *voidpf;
  15.    typedef void     *voidp;
  16. #line 63 "..\\zlib.1-1-3\\zlib.h"
  17. typedef voidpf (*alloc_func) (voidpf opaque, uInt items, uInt size);
  18. typedef void   (*free_func)  (voidpf opaque, voidpf address);
  19.  
  20. struct internal_state;
  21.  
  22. typedef struct z_stream_s {
  23.     Bytef    *next_in;   
  24.     uInt     avail_in;   
  25.     uLong    total_in;   
  26.  
  27.     Bytef    *next_out;  
  28.     uInt     avail_out;  
  29.     uLong    total_out;  
  30.  
  31.     char     *msg;       
  32.     struct internal_state  *state;  
  33.  
  34.     alloc_func zalloc;   
  35.     free_func  zfree;    
  36.     voidpf     opaque;   
  37.  
  38.     int     data_type;   
  39.     uLong   adler;       
  40.     uLong   reserved;    
  41. } z_stream;
  42.  
  43. typedef z_stream  *z_streamp;
  44. #line 171
  45. extern const char *  zlibVersion (void);
  46. #line 201
  47. extern int  deflate (z_streamp strm, int flush);
  48. #line 279
  49. extern int  deflateEnd (z_streamp strm);
  50. #line 314
  51. extern int  inflate (z_streamp strm, int flush);
  52. #line 383
  53. extern int  inflateEnd (z_streamp strm);
  54. #line 444
  55. extern int  deflateSetDictionary 
  56.  
  57. (z_streamp strm, const Bytef *dictionary, uInt dictLength);
  58. #line 480
  59. extern int  deflateCopy 
  60. (z_streamp dest, z_streamp source);
  61. #line 498
  62. extern int  deflateReset (z_streamp strm);
  63. #line 509
  64. extern int  deflateParams 
  65.  
  66. (z_streamp strm, int level, int strategy);
  67. #line 553
  68. extern int  inflateSetDictionary 
  69.  
  70. (z_streamp strm, const Bytef *dictionary, uInt dictLength);
  71. #line 572
  72. extern int  inflateSync (z_streamp strm);
  73. #line 587
  74. extern int  inflateReset (z_streamp strm);
  75. #line 608
  76. extern int  compress 
  77. (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
  78. #line 623
  79. extern int  compress2 
  80.  
  81. (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
  82. #line 638
  83. extern int  uncompress 
  84. (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
  85. #line 657
  86. typedef voidp gzFile;
  87.  
  88. extern gzFile  gzopen  (const char *path, const char *mode);
  89. #line 675
  90. extern gzFile  gzdopen  (int fd, const char *mode);
  91. #line 688
  92. extern int  gzsetparams (gzFile file, int level, int strategy);
  93. #line 696
  94. extern int     gzread  (gzFile file, voidp buf, unsigned len);
  95. #line 704
  96. extern int     gzwrite 
  97. (gzFile file, const voidp buf, unsigned len);
  98. #line 712
  99. extern int    gzprintf (gzFile file, const char *format, ...);
  100. #line 719
  101. extern int  gzputs (gzFile file, const char *s);
  102. #line 726
  103. extern char *  gzgets (gzFile file, char *buf, int len);
  104. #line 735
  105. extern int     gzputc (gzFile file, int c);
  106. #line 741
  107. extern int     gzgetc (gzFile file);
  108. #line 747
  109. extern int     gzflush (gzFile file, int flush);
  110. #line 757
  111. extern long     gzseek 
  112. (gzFile file, long offset, int whence);
  113. #line 775
  114. extern int     gzrewind (gzFile file);
  115. #line 782
  116. extern long     gztell (gzFile file);
  117. #line 791
  118. extern int  gzeof (gzFile file);
  119. #line 797
  120. extern int     gzclose (gzFile file);
  121. #line 804
  122. extern const char *  gzerror (gzFile file, int *errnum);
  123. #line 821
  124. extern uLong  adler32 (uLong adler, const Bytef *buf, uInt len);
  125. #line 838
  126. extern uLong  crc32   (uLong crc, const Bytef *buf, uInt len);
  127. #line 860
  128. extern int  deflateInit_ 
  129. (z_streamp strm, int level, const char *version, int stream_size);
  130. extern int  inflateInit_ 
  131. (z_streamp strm, const char *version, int stream_size);
  132. extern int  deflateInit2_ 
  133. #line 867
  134. (z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);
  135. extern int  inflateInit2_ 
  136. (z_streamp strm, int windowBits, const char *version, int stream_size);
  137. #line 882
  138.     struct internal_state {int dummy;};  
  139. #line 885
  140. extern const char   *  zError           (int err);
  141. extern int             inflateSyncPoint (z_streamp z);
  142. extern const uLongf *  get_crc_table    (void);
  143. #line 3 "F:\\Ibmcxxo\\INCLUDE\\stdio.h"
  144.       #pragma info(none)
  145.  
  146.          #pragma info(none)
  147.  
  148.       #pragma info(restore)
  149. #line 43
  150.       typedef unsigned int size_t;
  151. #line 46
  152.    enum _OPERATIONS { _IOINIT, _IOREAD, _IOWRITE, _IOREPOSITION,
  153.                       _IOFLUSH, _IOUNDEFOP };
  154. #line 51
  155.    #pragma pack(1)
  156.    typedef struct __file {   
  157.       unsigned char     *_bufPtr;
  158.       unsigned long int  _filler1;  
  159.       unsigned long int  _userFlags;
  160.       unsigned long int  _bufLen;
  161.       unsigned long int  _ungetCount;
  162.       unsigned long int  _filler2;  
  163.       unsigned char      _ungetBuf[2];
  164.       char               _filler3;  
  165.       enum _OPERATIONS   _lastOp;
  166.       signed char        _orientation;
  167.       unsigned char     *_buf;
  168.       unsigned long int  _bufCount;
  169.       unsigned long int  _count;
  170.       } FILE;
  171.    #pragma pack()
  172.  
  173.    typedef struct __fpos_t {   
  174.       long int __fpos_elem[2];
  175.       } fpos_t;
  176. #line 108
  177.          typedef char *__va_list;
  178. #line 114
  179.    extern FILE *const  stdin;
  180.    extern FILE *const  stdout;
  181.    extern FILE *const  stderr;
  182. #line 123
  183.    extern int       _Optlink fprintf(FILE *, const char *, ...);
  184.    extern int       _Optlink fscanf(FILE *, const char *, ...);
  185.    extern int       _Optlink printf(const char *, ...);
  186.    extern int       _Optlink scanf(const char *, ...);
  187.    extern int       _Optlink sprintf(char *, const char *, ...);
  188.    extern int       _Optlink sscanf(const char *, const char *, ...);
  189.    extern void      _Optlink clearerr(FILE *);
  190.    extern int       _Optlink fclose(FILE *);
  191.    extern int       _Optlink feof(FILE *);
  192.    extern int       _Optlink ferror(FILE *);
  193.    extern int       _Optlink fflush(FILE *);
  194.    extern int       _Optlink fgetc(FILE *);
  195.    extern int       _Optlink fgetpos(FILE *, fpos_t *);
  196.    extern char    * _Optlink fgets(char *, int, FILE *);
  197.    extern FILE    * _Optlink fopen(const char *, const char *);
  198.    extern int       _Optlink fputc(int, FILE *);
  199.    extern int       _Optlink fputs(const char *, FILE *);
  200.    extern size_t    _Optlink fread(void *, size_t, size_t, FILE *);
  201.    extern FILE    * _Optlink freopen(const char *, const char *, FILE *);
  202.    extern int       _Optlink fseek(FILE *, long int, int);
  203.    extern int       _Optlink fsetpos(FILE *, const fpos_t *);
  204.    extern long int  _Optlink ftell(FILE *);
  205.    extern size_t    _Optlink fwrite(const void *, size_t, size_t, FILE *);
  206.    extern int              _Optlink getc(FILE *);
  207.    extern int              _Optlink getchar(void);
  208.    extern char    * _Optlink gets(char *);
  209.    extern void      _Optlink perror(const char *);
  210.    extern int              _Optlink putc(int, FILE *);
  211.    extern int              _Optlink putchar(int);
  212.    extern int       _Optlink puts(const char *);
  213.    extern int       _Optlink remove(const char *);
  214.    extern int       _Optlink rename(const char *, const char *);
  215.    extern void      _Optlink rewind(FILE *);
  216.    extern void      _Optlink setbuf(FILE *, char *);
  217.    extern int       _Optlink setvbuf(FILE *, char *, int, size_t);
  218.    extern FILE    * _Optlink tmpfile(void);
  219.    extern char    * _Optlink tmpnam(char *);
  220.    extern int       _Optlink ungetc(int, FILE *);
  221.    extern int       _Optlink vfprintf(FILE *, const char *, __va_list);
  222.    extern int       _Optlink vprintf(const char *, __va_list);
  223.    extern int       _Optlink vsprintf(char *, const char *, __va_list);
  224. #line 247
  225.             #pragma map(fprintf, "_fprintfieee")
  226.             #pragma map(printf, "_printfieee")
  227.             #pragma map(sprintf, "_sprintfieee")
  228.             #pragma map(fscanf, "_fscanfieee")
  229.             #pragma map(scanf, "_scanfieee")
  230.             #pragma map(sscanf, "_sscanfieee")
  231.             #pragma map(vfprintf, "_vfprintfieee")
  232.             #pragma map(vprintf, "_vprintfieee")
  233.             #pragma map(vsprintf, "_vsprintfieee")
  234. #line 279
  235.       int _Optlink _fcloseall(void);
  236.       int _Optlink _rmtmp(void);
  237. #line 284
  238.       extern FILE * _Optlink fdopen(int, const char *);
  239.       extern int    _Optlink fgetchar(void);
  240.       extern int    _Optlink fileno(FILE *);
  241.       extern int    _Optlink flushall(void);
  242.       extern int    _Optlink fputchar(int);
  243.       extern char * _Optlink tempnam(char *, char *);
  244.       extern int    _Optlink unlink(const char *);
  245.  
  246.       extern FILE * _Optlink _fdopen(int, const char *);
  247.       extern int    _Optlink _fgetchar(void);
  248.       extern int    _Optlink _fileno(FILE *);
  249.       extern int    _Optlink _flushall(void);
  250.       extern int    _Optlink _fputchar(int);
  251.       extern char * _Optlink _tempnam(char *, char *);
  252.       extern int    _Optlink _unlink(const char *);
  253.  
  254.       extern int    _Optlink _set_crt_msg_handle(int);
  255. #line 320
  256.             #pragma map(fdopen, "_fdopen")
  257.             #pragma map(fgetchar, "_fgetchar")
  258.             #pragma map(fileno, "_fileno")
  259.             #pragma map(flushall, "_flushall")
  260.             #pragma map(fputchar, "_fputchar")
  261.             #pragma map(tempnam, "_tempnam")
  262. #line 328
  263.                #pragma map(unlink, "_unlink")
  264. #line 355
  265.       #pragma info(none)
  266.  
  267.          #pragma info(restore)
  268.  
  269.       #pragma info(restore)
  270. #line 5 "F:\\Ibmcxxo\\INCLUDE\\sys/types.h"
  271.       #pragma info(none)
  272.  
  273.          #pragma info(none)
  274.  
  275.       #pragma info(restore)
  276. #line 30
  277.                typedef signed int ssize_t;
  278. #line 35
  279.                typedef unsigned short ino_t;
  280. #line 41
  281.                typedef double time_t;
  282. #line 45
  283.                typedef short dev_t;
  284. #line 50
  285.                typedef long off_t;
  286. #line 62
  287.       #pragma info(none)
  288.  
  289.          #pragma info(restore)
  290.  
  291.       #pragma info(restore)
  292. #line 3 "F:\\Ibmcxxo\\INCLUDE\\setjmp.h"
  293.       #pragma info(none)
  294.  
  295.          #pragma info(none)
  296.  
  297.       #pragma info(restore)
  298. #line 42
  299.       typedef int jmp_buf[8];
  300. #line 47
  301.    extern int  _Optlink setjmp(jmp_buf);
  302.    extern void  _Optlink longjmp(jmp_buf, int);
  303. #line 61
  304.       #pragma info(none)
  305.  
  306.          #pragma info(restore)
  307.  
  308.       #pragma info(restore)
  309. #line 3 "F:\\Ibmcxxo\\INCLUDE\\string.h"
  310.       #pragma info(none)
  311.  
  312.          #pragma info(none)
  313.  
  314.       #pragma info(restore)
  315. #line 88
  316.          char  *_Builtin __strcpy(char*, const char*);
  317.          int    _Builtin __strcmp(const char*, const char*);
  318.          size_t _Builtin __strlen(const char*);
  319.          char  *_Builtin __strchr(const char*, int);
  320.          char  *_Builtin __strrchr(const char*, int);
  321.          char  *_Builtin __strcat(char*, const char*);
  322.          extern char *  _Optlink strcat(char *, const char *);
  323.          extern char *  _Optlink strchr(const char *, int);
  324.          extern int     _Optlink strcmp(const char *, const char *);
  325.          extern char *  _Optlink strcpy(char *, const char *);
  326.          extern size_t  _Optlink strlen(const char *);
  327.          extern char *  _Optlink strrchr(const char *, int);
  328. #line 108
  329.       #pragma isolated_call(__strcpy)
  330.       #pragma isolated_call(__strcmp)
  331.       #pragma isolated_call(__strlen)
  332.       #pragma isolated_call(__strchr)
  333.       #pragma isolated_call(__strrchr)
  334.       #pragma isolated_call(__strcat)
  335. #line 127
  336.             char *_Builtin __strncat(char *, const char *, size_t);
  337.             int   _Builtin __strncmp(const char *, const char *, size_t);
  338.             char *_Builtin __strncpy(char *, const char *, size_t);
  339.             extern char * _Optlink strncat(char *, const char *, size_t);
  340.             extern int    _Optlink strncmp(const char *, const char *, size_t);
  341.             extern char * _Optlink strncpy(char *, const char *, size_t);
  342. #line 137
  343.          #pragma isolated_call(__strncat)
  344.          #pragma isolated_call(__strncmp)
  345.          #pragma isolated_call(__strncpy)
  346. #line 176
  347.    extern int     _Optlink strcoll(const char *, const char *);
  348.    extern size_t  _Optlink strcspn(const char *, const char *);
  349.    extern char *  _Optlink strerror(int);
  350.    extern size_t  _Optlink strspn(const char *, const char *);
  351.    extern char  * _Optlink strtok(char*, const char *);
  352.    extern size_t  _Optlink strxfrm(char *, const char *, size_t);
  353. #line 186
  354.       extern char  * _Optlink strpbrk(const char *, const char *);
  355.       extern char  * _Optlink strstr(const char *, const char *);
  356. #line 214
  357.             void *_Builtin __memchr(const void *, int, size_t);
  358.             void *_Builtin __memcpy(void *, const void *, size_t);
  359.             int   _Builtin __memcmp(const void *, const void *, size_t);
  360.             void *_Builtin __memmove(void *, const void *, size_t);
  361.             void *_Builtin __memset(void *, int, size_t);
  362.             extern void * _Optlink memchr(const void *, int, size_t);
  363.             extern int    _Optlink memcmp(const void *, const void *, size_t);
  364.             extern void * _Optlink memcpy(void *, const void *, size_t);
  365.             extern void * _Optlink memmove(void *, const void *, size_t);
  366.             extern void * _Optlink memset(void *, int, size_t);
  367. #line 231
  368.          #pragma isolated_call(__memchr)
  369.          #pragma isolated_call(__memcpy)
  370.          #pragma isolated_call(__memcmp)
  371.          #pragma isolated_call(__memmove)
  372.          #pragma isolated_call(__memset)
  373. #line 247
  374.       extern void * _Optlink memccpy(void *, const void *, int, unsigned int);
  375.       extern int    _Optlink memicmp(const void *, const void *, unsigned int);
  376.  
  377.       extern void * _Optlink _fmemcpy(void *, const void *, size_t);
  378.       extern void * _Optlink _fmemchr(const void *, int, size_t);
  379.       extern int    _Optlink _fmemcmp(const void *, const void *, size_t);
  380.       extern void * _Optlink _fmemset(void *, int, size_t);
  381.       extern void * _Optlink _fmemccpy(void *, const void *, int, unsigned int);
  382.       extern int    _Optlink _fmemicmp(const void *, const void *, unsigned int);
  383. #line 281
  384.             #pragma map(_fmemcpy, "memcpy")
  385.             #pragma map(_fmemchr, "memchr")
  386.             #pragma map(_fmemcmp, "memcmp")
  387.             #pragma map(_fmemset, "memset")
  388.             #pragma map(_fmemccpy, "memccpy")
  389.             #pragma map(_fmemicmp, "memicmp")
  390. #line 299
  391.       char * _Optlink strdup(const char *);
  392.       int    _Optlink stricmp(const char *, const char *);
  393.       char * _Optlink strlwr(char *);
  394.       int    _Optlink strnicmp(const char *, const char *, size_t);
  395.       char * _Optlink strupr(char *);
  396.       int    _Optlink strcmpi(const char *, const char *);
  397.       char * _Optlink strrev(char *);
  398.       char * _Optlink strset(char *, int);
  399.       char * _Optlink strnset(char *, int, size_t);
  400.       char * _Optlink _strerror(const char *);
  401. #line 340
  402.       size_t  _Optlink _fstrcspn(const char *, const char *);
  403.       char  * _Optlink _fstrdup(const char *);
  404.       char  * _Optlink _nstrdup(const char *);
  405.       int     _Optlink _fstricmp(const char *, const char *);
  406.       char  * _Optlink _fstrlwr(char *);
  407.       int     _Optlink _fstrnicmp(const char *, const char *, size_t);
  408.       char  * _Optlink _fstrnset(char *, int, size_t);
  409.       char  * _Optlink _fstrpbrk(const char *, const char *);
  410.       char  * _Optlink _fstrrev(char *);
  411.       char  * _Optlink _fstrset(char *, int);
  412.       size_t  _Optlink _fstrspn(const char *, const char *);
  413.       char  * _Optlink _fstrstr(const char *, const char *);
  414.       char  * _Optlink _fstrtok(char*, const char *);
  415.       char  * _Optlink _fstrupr(char *);
  416.       void  * _Optlink _fmemmove(void *, const void *, size_t);
  417.       char  * _Optlink _fstrcat(char *, const char *);
  418.       char  * _Optlink _fstrchr(const char *, int);
  419.       int     _Optlink _fstrcmp(const char *, const char *);
  420.       char  * _Optlink _fstrcpy(char *, const char *);
  421.       size_t  _Optlink _fstrlen(const char *);
  422.       char  * _Optlink _fstrncat(char *, const char *, size_t);
  423.       int     _Optlink _fstrncmp(const char *, const char *, size_t);
  424.       char  * _Optlink _fstrncpy(char *, const char *, size_t);
  425.       char  * _Optlink _fstrrchr(const char *, int);
  426. #line 392
  427.             #pragma map(_fstrcspn, "strcspn")
  428.             #pragma map(_fstrdup, "strdup")
  429.             #pragma map(_nstrdup, "strdup")
  430.             #pragma map(_fstricmp, "stricmp")
  431.             #pragma map(_fstrlwr, "strlwr")
  432.             #pragma map(_fstrnicmp, "strnicmp")
  433.             #pragma map(_fstrnset, "strnset")
  434.             #pragma map(_fstrpbrk, "strpbrk")
  435.             #pragma map(_fstrrev, "strrev")
  436.             #pragma map(_fstrset, "strset")
  437.             #pragma map(_fstrspn, "strspn")
  438.             #pragma map(_fstrstr, "strstr")
  439.             #pragma map(_fstrtok, "strtok")
  440.             #pragma map(_fstrupr, "strupr")
  441.             #pragma map(_fmemmove, "memmove")
  442.             #pragma map(_fstrcat, "strcat")
  443.             #pragma map(_fstrchr, "strchr")
  444.             #pragma map(_fstrcmp, "strcmp")
  445.             #pragma map(_fstrcpy, "strcpy")
  446.             #pragma map(_fstrlen, "strlen")
  447.             #pragma map(_fstrncat, "strncat")
  448.             #pragma map(_fstrncmp, "strncmp")
  449.             #pragma map(_fstrncpy, "strncpy")
  450.             #pragma map(_fstrrchr, "strrchr")
  451. #line 497
  452.       #pragma info(none)
  453.  
  454.          #pragma info(restore)
  455.  
  456.       #pragma info(restore)
  457. #line 3 "F:\\Ibmcxxo\\INCLUDE\\stdlib.h"
  458.       #pragma info(none)
  459.  
  460.          #pragma info(none)
  461.  
  462.       #pragma info(restore)
  463. #line 61
  464.       typedef unsigned short wchar_t;
  465. #line 64
  466.    typedef struct _div_t {
  467.        int quot;         
  468.        int rem;          
  469.        } div_t;
  470.  
  471.    typedef struct _ldiv_t {
  472.        long int quot;    
  473.        long int rem;     
  474.        } ldiv_t;
  475. #line 75
  476.       typedef struct _lldiv_t {
  477.          long long int quot;    
  478.          long long int rem;     
  479.          } lldiv_t;
  480. #line 102
  481.          typedef unsigned long _System _EH_RTN(void *,void *,void *,void *);
  482. #line 108
  483.    extern int  _Optlink _eh_del(_EH_RTN *);
  484.    extern int  _Optlink _eh_add(_EH_RTN *);
  485. #line 126
  486.          extern int  _mb_cur_max;
  487. #line 133
  488.    extern int       _Optlink atoi(const char *);
  489.    extern long int  _Optlink atol(const char *);
  490.    extern long int  _Optlink strtol(const char *, char **, int);
  491.    extern unsigned long int  _Optlink strtoul(const char *, char **, int);
  492.    extern int       _Optlink rand(void);
  493.    extern void      _Optlink srand(unsigned int);
  494.    extern void *   ( _Optlink calloc)(size_t, size_t);
  495.    extern void     ( _Optlink free)(void *);
  496.    extern void *   ( _Optlink malloc)(size_t);
  497.    extern void *   ( _Optlink realloc)(void *, size_t);
  498.    extern void      _Optlink abort(void);
  499.    extern int              _Optlink atexit(void (*)(void));
  500.    extern void             _Optlink exit(int);
  501.    extern char *    _Optlink getenv(const char *);
  502.    extern int       _Optlink system(const char *);
  503.    extern void *    _Optlink bsearch(const void *, const void *, size_t, size_t,
  504.                               int (*_Optlink)(const void *, const void *));
  505.    extern void      _Optlink qsort(void *, size_t, size_t,
  506.                             int (*_Optlink)(const void *, const void *));
  507.    extern div_t     _Optlink div(int, int);
  508.    extern ldiv_t    _Optlink ldiv(long int, long int);
  509.    extern int       _Optlink mblen(const char *, size_t);
  510.    extern int       _Optlink mbtowc(wchar_t *, const char *, size_t);
  511.    extern int       _Optlink wctomb(char *, wchar_t);
  512.    extern size_t    _Optlink mbstowcs(wchar_t *, const char *, size_t);
  513.    extern size_t    _Optlink wcstombs(char *, const wchar_t *, size_t);
  514.  
  515.    extern long long int  _Optlink atoll(const char *);
  516.    extern lldiv_t  _Optlink lldiv(long long int, long long int);
  517.    extern long long int  _Optlink strtoll(const char *, char **, int);
  518.    extern unsigned long long int  _Optlink strtoull(const char *, char **, int);
  519. #line 173
  520.       extern int       _Optlink abs (int);
  521.       extern long int  _Optlink labs(long int);
  522.       int           _Builtin __abs(int);
  523.       long int      _Builtin __labs(long int);
  524. #line 180
  525.          long long int _Builtin __llabs(long long int);
  526.          extern long long int  _Optlink llabs(long long int);
  527. #line 224
  528.             void *_Builtin __alloca(size_t);
  529. #line 231
  530.                unsigned char _Builtin __parmdwords(void);
  531. #line 235
  532.          extern long double  _Optlink _atold(const char *);
  533.          extern char *  _Optlink  ecvt(double, int, int *, int *);
  534.          extern char *  _Optlink _ecvt(double, int, int *, int *);
  535.          extern char *  _Optlink  fcvt(double, int, int *, int *);
  536.          extern char *  _Optlink _fcvt(double, int, int *, int *);
  537.          extern int     _Optlink _freemod(unsigned long);
  538.          extern char *  _Optlink _fullpath(char *, const char *, size_t);
  539.          extern char *  _Optlink  gcvt(double, int, char *);
  540.          extern char *  _Optlink _gcvt(double, int, char *);
  541.          extern int    ( _Optlink _heapmin)(void);
  542.          extern char *  _Optlink  itoa(int, char *, int);
  543.          extern char *  _Optlink _itoa(int, char *, int);
  544.          extern int     _Optlink _loadmod(char *, unsigned long *);
  545.          extern char *  _Optlink  ltoa( long, char *, int);
  546.          extern char *  _Optlink _ltoa( long, char *, int);
  547.          extern size_t  _Optlink _msize(void *);
  548.          extern int     _Optlink  putenv(const char *);
  549.          extern int     _Optlink _putenv(const char *);
  550.          extern long double  _Optlink  strtold(const char *, char **);
  551.          extern long double  _Optlink _strtold(const char *, char **);
  552.          extern char *  _Optlink  ultoa(unsigned long, char *, int);
  553.          extern char *  _Optlink _ultoa(unsigned long, char *, int);
  554.  
  555.          extern char *  _Optlink  lltoa(long long, char *, int);
  556.          extern char *  _Optlink _lltoa(long long, char *, int);
  557.          extern char *  _Optlink  ulltoa(unsigned long long, char *, int);
  558.          extern char *  _Optlink _ulltoa(unsigned long long, char *, int);
  559. #line 301
  560.                #pragma map(ecvt, "_ecvt")
  561.                #pragma map(fcvt, "_fcvt")
  562.                #pragma map(gcvt, "_gcvt")
  563.                #pragma map(itoa, "_itoa")
  564.                #pragma map(ltoa, "_ltoa")
  565.                #pragma map(ultoa, "_ultoa")
  566.                #pragma map(lltoa, "_lltoa")
  567.                #pragma map(ulltoa, "_ulltoa")
  568.                #pragma map(putenv, "_putenv")
  569.                #pragma map(_strtold, "strtold")
  570. #line 411
  571.             extern void * _Optlink _ncalloc(size_t, size_t);
  572.             extern void * _Optlink _fcalloc(size_t, size_t);
  573.             extern void   _Optlink _nfree(void*);
  574.             extern void   _Optlink _ffree(void*);
  575.             extern void * _Optlink _nmalloc(size_t);
  576.             extern void * _Optlink _fmalloc(size_t);
  577.             extern void * _Optlink _nrealloc(void*, size_t);
  578.             extern void * _Optlink _frealloc(void*, size_t);
  579.             extern int    _Optlink _nheapmin(void);
  580.             extern int    _Optlink _fheapmin(void);
  581. #line 435
  582.                   #pragma map(_ncalloc, "calloc")
  583.                   #pragma map(_fcalloc, "calloc")
  584.                   #pragma map(_nfree, "free" )
  585.                   #pragma map(_ffree, "free" )
  586.                   #pragma map(_nmalloc, "malloc")
  587.                   #pragma map(_fmalloc, "malloc")
  588.                   #pragma map(_nrealloc, "realloc")
  589.                   #pragma map(_frealloc, "realloc")
  590.                   #pragma map(_nheapmin, "_heapmin")
  591.                   #pragma map(_fheapmin, "_heapmin")
  592. #line 471
  593.                #pragma map(atof, "_atofieee")
  594.                #pragma map(strtod, "_strtodieee")
  595. #line 481
  596.                void  _Builtin __enable(void);
  597.                void  _Builtin __disable(void);
  598. #line 493
  599.                   extern int  errno;
  600. #line 503
  601.                   extern int  _doserrno;
  602. #line 508
  603.             extern const    char ** _environ;
  604.             extern unsigned char    _osmajor;
  605.             extern unsigned char    _osminor;
  606.             extern unsigned char    _osmode;
  607. #line 515
  608.             enum {
  609.                DOS_MODE,                
  610.                OS2_MODE,                
  611.                NT_MODE,                 
  612.                WINDOWS_MODE             
  613.                };
  614.  
  615.             typedef int (__onexit_t)(void);
  616.             typedef __onexit_t *onexit_t;
  617. #line 534
  618.             extern void  _Optlink _exit(int);
  619.             extern onexit_t     _Optlink  onexit(onexit_t);
  620.             extern onexit_t     _Optlink _onexit(onexit_t);
  621.  
  622.             extern void  _Optlink _makepath(char *, const char *, const char *, const char *, const char *);
  623.             extern void  _Optlink _splitpath(const char *, char *, char *, char *, char *);
  624.             extern void  _Optlink _searchenv(char *, char *, char *);
  625.             extern void  _Optlink  swab(char *, char *, int);
  626.             extern void  _Optlink _swab(char *, char *, int);
  627.  
  628.             extern int  _Optlink rpmatch(const char *);
  629.             extern int  _Optlink csid(const char *);
  630.             extern int  _Optlink wcsid(const wchar_t);
  631. #line 550
  632.                   unsigned long long _Builtin __llrotl(unsigned long long, int);
  633.                   unsigned long long _Builtin __llrotr(unsigned long long, int);
  634. #line 555
  635.                unsigned long  _Builtin __lrotl(unsigned long, int);
  636.                unsigned long  _Builtin __lrotr(unsigned long, int);
  637.                unsigned short _Builtin __srotl(unsigned short, int);
  638.                unsigned short _Builtin __srotr(unsigned short, int);
  639.                unsigned char  _Builtin __crotl(unsigned char, int);
  640.                unsigned char  _Builtin __crotr(unsigned char, int);
  641. #line 591
  642.                   #pragma map(rpmatch, "_rpmatch")
  643.                   #pragma map(csid, "_csid")
  644.                   #pragma map(wcsid, "_wcsid")
  645.                   #pragma map(onexit, "_onexit")
  646.                   #pragma map(swab, "_swab")
  647. #line 635
  648.    extern double  _Optlink atof(const char *);
  649.    extern double  _Optlink strtod(const char *, char **);
  650. #line 690
  651.       #pragma info(none)
  652.  
  653.          #pragma info(restore)
  654.  
  655.       #pragma info(restore)
  656. #line 3 "F:\\Ibmcxxo\\INCLUDE\\math.h"
  657.       #pragma info(none)
  658.  
  659.          #pragma info(none)
  660.  
  661.       #pragma info(restore)
  662. #line 45
  663.    extern const double  _infinity;
  664. #line 55
  665.          double _Builtin __fabs(double);
  666.          extern double  _Optlink fabs(double);
  667. #line 59
  668.       #pragma isolated_call(__fabs)
  669. #line 64
  670.    extern float  _Optlink acosf(float);
  671.    extern float  _Optlink asinf(float);
  672.    extern float  _Optlink atanf(float);
  673.    extern float  _Optlink atan2f(float, float);
  674.    extern float  _Optlink ceilf(float);
  675.    extern float  _Optlink cosf(float);
  676.    extern float  _Optlink coshf(float);
  677.    extern float  _Optlink expf(float);
  678.    extern float  _Optlink fabsf(float);
  679.    extern float  _Optlink floorf(float);
  680.    extern float  _Optlink fmodf(float, float);
  681.    extern float  _Optlink frexpf(float, int *);
  682.    extern float  _Optlink ldexpf(float, int);
  683.    extern float  _Optlink logf(float);
  684.    extern float  _Optlink log10f(float);
  685.    extern float  _Optlink modff(float, float *);
  686.    extern float  _Optlink powf(float, float);
  687.    extern float  _Optlink sinf(float);
  688.    extern float  _Optlink sinhf(float);
  689.    extern float  _Optlink sqrtf(float);
  690.    extern float  _Optlink tanf(float);
  691.    extern float  _Optlink tanhf(float);
  692.  
  693.    extern double  _Optlink ceil(double);
  694.    extern double  _Optlink cosh(double);
  695.    extern double  _Optlink floor(double);
  696.    extern double  _Optlink fmod(double, double);
  697.    extern double  _Optlink frexp(double, int *);
  698.    extern double  _Optlink ldexp(double, int);
  699.    extern double  _Optlink modf(double, double *);
  700.    extern double  _Optlink pow(double, double);
  701.    extern double  _Optlink sinh(double);
  702.    extern double  _Optlink tanh(double);
  703.  
  704.    extern long double  _Optlink acosl(long double);
  705.    extern long double  _Optlink asinl(long double);
  706.    extern long double  _Optlink atanl(long double);
  707.    extern long double  _Optlink atan2l(long double, long double);
  708.    extern long double  _Optlink ceill(long double);
  709.    extern long double  _Optlink cosl(long double);
  710.    extern long double  _Optlink coshl(long double);
  711.    extern long double  _Optlink expl(long double);
  712.    extern long double  _Optlink fabsl(long double);
  713.    extern long double  _Optlink floorl(long double);
  714.    extern long double  _Optlink fmodl(long double, long double);
  715.    extern long double  _Optlink frexpl(long double, int *);
  716.    extern long double  _Optlink ldexpl(long double, int);
  717.    extern long double  _Optlink logl(long double);
  718.    extern long double  _Optlink log10l(long double);
  719.    extern long double  _Optlink modfl(long double, long double *);
  720.    extern long double  _Optlink powl(long double, long double);
  721.    extern long double  _Optlink sinl(long double);
  722.    extern long double  _Optlink sinhl(long double);
  723.    extern long double  _Optlink sqrtl(long double);
  724.    extern long double  _Optlink tanl(long double);
  725.    extern long double  _Optlink tanhl(long double);
  726.  
  727.    extern float  _Optlink __powif(float, int);
  728.    extern double  _Optlink __powi(double, int);
  729.    extern long double  _Optlink __powil(long double, int);
  730. #line 159
  731.          extern double  _Optlink sin(double);
  732.          extern double  _Optlink cos(double);
  733.          extern double  _Optlink tan(double);
  734.          extern double  _Optlink acos(double);
  735.          extern double  _Optlink asin(double);
  736.          extern double  _Optlink atan(double);
  737.          extern double  _Optlink sqrt(double);
  738.  
  739.       extern double  _Optlink atan2(double, double);
  740.       extern double  _Optlink exp(double);
  741.       extern double  _Optlink log(double);
  742.       extern double  _Optlink log10(double);
  743. #line 329
  744.       extern double  _Optlink _erf(double);
  745.       extern double  _Optlink _erfc(double);
  746.       extern double  _Optlink _gamma(double);
  747.       extern double  _Optlink _hypot(double, double);
  748.       extern double  _Optlink _j0(double);
  749.       extern double  _Optlink _j1(double);
  750.       extern double  _Optlink _jn(int, double);
  751.       extern double  _Optlink _y0(double);
  752.       extern double  _Optlink _y1(double);
  753.       extern double  _Optlink _yn(int, double);
  754.       extern double  _Optlink erf(double);
  755.       extern double  _Optlink erfc(double);
  756.       extern double  _Optlink gamma(double);
  757.       extern double  _Optlink hypot(double, double);
  758.       extern double  _Optlink j0(double);
  759.       extern double  _Optlink j1(double);
  760.       extern double  _Optlink jn(int, double);
  761.       extern double  _Optlink y0(double);
  762.       extern double  _Optlink y1(double);
  763.       extern double  _Optlink yn(int, double);
  764. #line 391
  765.             #pragma map(erf, "_erf")
  766.             #pragma map(erfc, "_erfc")
  767.             #pragma map(gamma, "_gamma")
  768.             #pragma map(hypot, "_hypot")
  769.             #pragma map(j0, "_j0")
  770.             #pragma map(j1, "_j1")
  771.             #pragma map(jn, "_jn")
  772.             #pragma map(y0, "_y0")
  773.             #pragma map(y1, "_y1")
  774.             #pragma map(yn, "_yn")
  775. #line 416
  776.          extern const long double  _LHUGE_VAL;
  777. #line 434
  778.             struct complex {
  779.                double x, y;              
  780.                };
  781.  
  782.             double  _Optlink _cabs(struct complex);
  783. #line 444
  784.          struct _exception {
  785.             int type;                
  786.             char *name;              
  787.             double arg1;             
  788.             double arg2;             
  789.             double retval;           
  790.             };
  791. #line 454
  792.          int _matherr(struct _exception*);
  793.          int  matherr(struct _exception*);
  794. #line 461
  795.                #pragma map(matherr, "_matherr")
  796. #line 528
  797.       #pragma info(none)
  798.  
  799.          #pragma info(restore)
  800.  
  801.       #pragma info(restore)
  802. #line 3 "F:\\Ibmcxxo\\INCLUDE\\time.h"
  803.       #pragma info(none)
  804.  
  805.          #pragma info(none)
  806.  
  807.       #pragma info(restore)
  808. #line 56
  809.    typedef unsigned long clock_t;
  810. #line 65
  811.       struct tm {
  812.          int tm_sec;       
  813.          int tm_min;       
  814.          int tm_hour;      
  815.          int tm_mday;      
  816.          int tm_mon;       
  817.          int tm_year;      
  818.          int tm_wday;      
  819.          int tm_yday;      
  820.          int tm_isdst;     
  821.       };
  822. #line 78
  823.    extern clock_t     _Optlink clock(void);
  824.    extern double      _Optlink difftime(time_t, time_t);
  825.    extern time_t      _Optlink mktime(struct tm *);
  826.    extern time_t      _Optlink time(time_t *);
  827.    extern char *      _Optlink asctime(const struct tm *);
  828.    extern char *      _Optlink ctime(const time_t *);
  829.    extern struct tm * _Optlink gmtime(const time_t *);
  830.    extern struct tm * _Optlink localtime(const time_t *);
  831.    extern size_t      _Optlink strftime(char *, size_t, const char *, const struct tm *);
  832. #line 115
  833.          #pragma map(difftime, "__difftime")
  834.          #pragma map(mktime, "__mktime")
  835.          #pragma map(time, "__time")
  836.          #pragma map(ctime, "__ctime")
  837.          #pragma map(gmtime, "__gmtime")
  838.          #pragma map(localtime, "__localtime")
  839. #line 125
  840.       extern char * _Optlink strptime(const char *, const char *, struct tm *);
  841. #line 133
  842.       extern int    _daylight;  
  843.       extern int    daylight;
  844.       extern long   _timezone;  
  845.       extern long   timezone;
  846.       extern char * _tzname[2];  
  847.       extern char * tzname[2];
  848.       extern void   _Optlink tzset(void);
  849.       extern void   _Optlink _tzset(void);
  850.       extern char * _Optlink _strdate(char *);
  851.       extern char * _Optlink _strtime(char *);
  852. #line 149
  853.             #pragma map(daylight, "_daylight")
  854.             #pragma map(tzname, "_tzname")
  855.             #pragma map(tzset, "_tzset")
  856. #line 161
  857.       #pragma info(none)
  858.  
  859.          #pragma info(restore)
  860.  
  861.       #pragma info(restore)
  862. #line 886 "pngconf.h"
  863. typedef unsigned long png_uint_32;
  864. typedef long png_int_32;
  865. typedef unsigned short png_uint_16;
  866. typedef short png_int_16;
  867. typedef unsigned char png_byte;
  868. #line 894
  869. typedef size_t png_size_t;
  870. #line 959
  871. typedef png_int_32 png_fixed_point;
  872. #line 962
  873. typedef void             * png_voidp;
  874. typedef png_byte         * png_bytep;
  875. typedef png_uint_32      * png_uint_32p;
  876. typedef png_int_32       * png_int_32p;
  877. typedef png_uint_16      * png_uint_16p;
  878. typedef png_int_16       * png_int_16p;
  879. typedef const char   * png_const_charp;
  880. typedef char             * png_charp;
  881. typedef png_fixed_point  * png_fixed_point_p;
  882. #line 974
  883. typedef FILE                * png_FILE_p;
  884. #line 977
  885. typedef double           * png_doublep;
  886. #line 981
  887. typedef png_byte         *  * png_bytepp;
  888. typedef png_uint_32      *  * png_uint_32pp;
  889. typedef png_int_32       *  * png_int_32pp;
  890. typedef png_uint_16      *  * png_uint_16pp;
  891. typedef png_int_16       *  * png_int_16pp;
  892. typedef const char   *  * png_const_charpp;
  893. typedef char             *  * png_charpp;
  894. typedef png_fixed_point  *  * png_fixed_point_pp;
  895.  
  896. typedef double           *  * png_doublepp;
  897. #line 994
  898. typedef char             *  *  * png_charppp;
  899. #line 1000
  900. typedef charf *         png_zcharp;
  901. typedef charf *  *   png_zcharpp;
  902. typedef z_stream  *  png_zstreamp;
  903. #line 305 "png.h"
  904. extern   char png_libpng_ver[12];  
  905. #line 314
  906. extern   int png_pass_start[7];
  907. extern   int png_pass_inc[7];
  908. extern   int png_pass_ystart[7];
  909. extern   int png_pass_yinc[7];
  910. extern   int png_pass_mask[7];
  911. extern   int png_pass_dsp_mask[7];
  912. #line 334
  913. typedef struct png_color_struct
  914. {
  915.    png_byte red;
  916.    png_byte green;
  917.    png_byte blue;
  918. } png_color;
  919. typedef png_color  * png_colorp;
  920. typedef png_color  *  * png_colorpp;
  921.  
  922. typedef struct png_color_16_struct
  923. {
  924.    png_byte index;     
  925.    png_uint_16 red;    
  926.    png_uint_16 green;
  927.    png_uint_16 blue;
  928.    png_uint_16 gray;   
  929. } png_color_16;
  930. typedef png_color_16  * png_color_16p;
  931. typedef png_color_16  *  * png_color_16pp;
  932.  
  933. typedef struct png_color_8_struct
  934. {
  935.    png_byte red;    
  936.    png_byte green;
  937.    png_byte blue;
  938.    png_byte gray;   
  939.    png_byte alpha;  
  940. } png_color_8;
  941. typedef png_color_8  * png_color_8p;
  942. typedef png_color_8  *  * png_color_8pp;
  943. #line 369
  944. typedef struct png_sPLT_entry_struct
  945. {
  946.    png_uint_16 red;
  947.    png_uint_16 green;
  948.    png_uint_16 blue;
  949.    png_uint_16 alpha;
  950.    png_uint_16 frequency;
  951. } png_sPLT_entry;
  952. typedef png_sPLT_entry  * png_sPLT_entryp;
  953. typedef png_sPLT_entry  *  * png_sPLT_entrypp;
  954. #line 385
  955. typedef struct png_sPLT_struct
  956. {
  957.    png_charp name;            
  958.    png_byte depth;            
  959.    png_sPLT_entryp entries;   
  960.    png_int_32 nentries;       
  961. } png_sPLT_t;
  962. typedef png_sPLT_t  * png_sPLT_tp;
  963. typedef png_sPLT_t  *  * png_sPLT_tpp;
  964. #line 404
  965. typedef struct png_text_struct
  966. {
  967.    int  compression;       
  968. #line 411
  969.    png_charp key;           
  970.    png_charp text;         
  971.  
  972.    png_size_t text_length;  
  973. #line 422
  974. } png_text;
  975. typedef png_text  * png_textp;
  976. typedef png_text  *  * png_textpp;
  977. #line 443
  978. typedef struct png_time_struct
  979. {
  980.    png_uint_16 year;  
  981.    png_byte month;    
  982.    png_byte day;      
  983.    png_byte hour;     
  984.    png_byte minute;   
  985.    png_byte second;   
  986. } png_time;
  987. typedef png_time  * png_timep;
  988. typedef png_time  *  * png_timepp;
  989. #line 461
  990. typedef struct png_unknown_chunk_t
  991. {
  992.     png_byte name[5];
  993.     png_byte *data;
  994.     png_size_t size;
  995. #line 468
  996.     png_byte location;  
  997. }
  998. png_unknown_chunk;
  999. typedef png_unknown_chunk  * png_unknown_chunkp;
  1000. typedef png_unknown_chunk  *  * png_unknown_chunkpp;
  1001. #line 514
  1002. typedef struct png_info_struct
  1003. {
  1004.  
  1005.    png_uint_32 width;        
  1006.    png_uint_32 height;       
  1007.    png_uint_32 valid;        
  1008.    png_uint_32 rowbytes;     
  1009.    png_colorp palette;       
  1010.    png_uint_16 num_palette;  
  1011.    png_uint_16 num_trans;    
  1012.    png_byte bit_depth;       
  1013.    png_byte color_type;      
  1014.    png_byte compression_type;  
  1015.    png_byte filter_type;     
  1016.    png_byte interlace_type;  
  1017. #line 531
  1018.    png_byte channels;        
  1019.    png_byte pixel_depth;     
  1020.    png_byte spare_byte;      
  1021.    png_byte signature[8];    
  1022. #line 547
  1023.    float gamma;  
  1024. #line 553
  1025.    png_byte srgb_intent;  
  1026. #line 565
  1027.    int num_text;  
  1028.    int max_text;  
  1029.    png_textp text;  
  1030. #line 574
  1031.    png_time mod_time;
  1032. #line 584
  1033.    png_color_8 sig_bit;  
  1034. #line 598
  1035.    png_bytep trans;  
  1036.    png_color_16 trans_values;  
  1037. #line 609
  1038.    png_color_16 background;
  1039. #line 618
  1040.    png_int_32 x_offset;  
  1041.    png_int_32 y_offset;  
  1042.    png_byte offset_unit_type;  
  1043. #line 628
  1044.    png_uint_32 x_pixels_per_unit;  
  1045.    png_uint_32 y_pixels_per_unit;  
  1046.    png_byte phys_unit_type;  
  1047. #line 640
  1048.    png_uint_16p hist;
  1049. #line 651
  1050.    float x_white;
  1051.    float y_white;
  1052.    float x_red;
  1053.    float y_red;
  1054.    float x_green;
  1055.    float y_green;
  1056.    float x_blue;
  1057.    float y_blue;
  1058. #line 674
  1059.    png_charp pcal_purpose;   
  1060.    png_int_32 pcal_X0;       
  1061.    png_int_32 pcal_X1;       
  1062.    png_charp pcal_units;     
  1063.    png_charpp pcal_params;   
  1064.    png_byte pcal_type;       
  1065.    png_byte pcal_nparams;    
  1066. #line 684
  1067.    png_uint_32 free_me;      
  1068. #line 689
  1069.    png_unknown_chunkp unknown_chunks;
  1070.    png_size_t unknown_chunks_num;
  1071. #line 695
  1072.    png_charp iccp_name;      
  1073.    png_charp iccp_profile;   
  1074.    png_uint_32 iccp_proflen;   
  1075.    png_byte iccp_compression;  
  1076. #line 703
  1077.    png_sPLT_tp splt_palettes;
  1078.    png_uint_32 splt_palettes_num;
  1079. #line 715
  1080.    png_byte scal_unit;          
  1081.  
  1082.    double scal_pixel_width;     
  1083.    double scal_pixel_height;    
  1084. #line 721
  1085.    png_charp scal_s_width;      
  1086.    png_charp scal_s_height;     
  1087. #line 729
  1088.    png_bytepp row_pointers;         
  1089. #line 733
  1090.    png_fixed_point int_gamma;  
  1091. #line 737
  1092.    png_fixed_point int_x_white;
  1093.    png_fixed_point int_y_white;
  1094.    png_fixed_point int_x_red;
  1095.    png_fixed_point int_y_red;
  1096.    png_fixed_point int_x_green;
  1097.    png_fixed_point int_y_green;
  1098.    png_fixed_point int_x_blue;
  1099.    png_fixed_point int_y_blue;
  1100. #line 747
  1101. } png_info;
  1102.  
  1103. typedef png_info  * png_infop;
  1104. typedef png_info  *  * png_infopp;
  1105. #line 841
  1106. typedef struct png_row_info_struct
  1107. {
  1108.    png_uint_32 width;  
  1109.    png_uint_32 rowbytes;  
  1110.    png_byte color_type;  
  1111.    png_byte bit_depth;  
  1112.    png_byte channels;  
  1113.    png_byte pixel_depth;  
  1114. } png_row_info;
  1115.  
  1116. typedef png_row_info  * png_row_infop;
  1117. typedef png_row_info  *  * png_row_infopp;
  1118. #line 860
  1119. typedef struct png_struct_def png_struct;
  1120. typedef png_struct  * png_structp;
  1121.  
  1122. typedef void (_cdecl *png_error_ptr) (png_structp, png_const_charp);
  1123. typedef void (_cdecl *png_rw_ptr) (png_structp, png_bytep, png_size_t);
  1124. typedef void (_cdecl *png_flush_ptr) (png_structp);
  1125. typedef void (_cdecl *png_read_status_ptr) 
  1126. (png_structp, png_uint_32, int);
  1127. typedef void (_cdecl *png_write_status_ptr) 
  1128. (png_structp, png_uint_32, int);
  1129. #line 872
  1130. typedef void (_cdecl *png_progressive_info_ptr) (png_structp, png_infop);
  1131. typedef void (_cdecl *png_progressive_end_ptr) (png_structp, png_infop);
  1132. typedef void (_cdecl *png_progressive_row_ptr) 
  1133. (png_structp, png_bytep, png_uint_32, int);
  1134. #line 881
  1135. typedef void (_cdecl *png_user_transform_ptr) 
  1136. (png_structp, png_row_infop, png_bytep);
  1137. #line 886
  1138. typedef int (_cdecl *png_user_chunk_ptr) (png_structp, png_unknown_chunkp);
  1139. #line 889
  1140. typedef void (_cdecl *png_unknown_chunk_ptr) (png_structp);
  1141. #line 907
  1142. typedef png_voidp (*png_malloc_ptr) (png_structp, png_size_t);
  1143. typedef void (*png_free_ptr) (png_structp, png_voidp);
  1144. #line 917
  1145. struct png_struct_def
  1146. {
  1147.  
  1148.    jmp_buf jmpbuf;             
  1149.  
  1150.    png_error_ptr error_fn;     
  1151.    png_error_ptr warning_fn;   
  1152.    png_voidp error_ptr;        
  1153.    png_rw_ptr write_data_fn;   
  1154.    png_rw_ptr read_data_fn;    
  1155.    png_voidp io_ptr;           
  1156. #line 930
  1157.    png_user_transform_ptr read_user_transform_fn;  
  1158. #line 934
  1159.    png_user_transform_ptr write_user_transform_fn;  
  1160. #line 941
  1161.    png_voidp user_transform_ptr;  
  1162.    png_byte user_transform_depth;     
  1163.    png_byte user_transform_channels;  
  1164. #line 947
  1165.    png_uint_32 mode;           
  1166.    png_uint_32 flags;          
  1167.    png_uint_32 transformations;  
  1168.  
  1169.    z_stream zstream;           
  1170.    png_bytep zbuf;             
  1171.    png_size_t zbuf_size;       
  1172.    int zlib_level;             
  1173.    int zlib_method;            
  1174.    int zlib_window_bits;       
  1175.    int zlib_mem_level;         
  1176.    int zlib_strategy;          
  1177.  
  1178.    png_uint_32 width;          
  1179.    png_uint_32 height;         
  1180.    png_uint_32 num_rows;       
  1181.    png_uint_32 usr_width;      
  1182.    png_uint_32 rowbytes;       
  1183.    png_uint_32 irowbytes;      
  1184.    png_uint_32 iwidth;         
  1185.    png_uint_32 row_number;     
  1186.    png_bytep prev_row;         
  1187.    png_bytep row_buf;          
  1188.    png_bytep sub_row;          
  1189.    png_bytep up_row;           
  1190.    png_bytep avg_row;          
  1191.    png_bytep paeth_row;        
  1192.    png_row_info row_info;      
  1193.  
  1194.    png_uint_32 idat_size;      
  1195.    png_uint_32 crc;            
  1196.    png_colorp palette;         
  1197.    png_uint_16 num_palette;    
  1198.    png_uint_16 num_trans;      
  1199.    png_byte chunk_name[5];     
  1200.    png_byte compression;       
  1201.    png_byte filter;            
  1202.    png_byte interlaced;        
  1203.    png_byte pass;              
  1204.    png_byte do_filter;         
  1205.    png_byte color_type;        
  1206.    png_byte bit_depth;         
  1207.    png_byte usr_bit_depth;     
  1208.    png_byte pixel_depth;       
  1209.    png_byte channels;          
  1210.    png_byte usr_channels;      
  1211.    png_byte sig_bytes;         
  1212. #line 999
  1213.    png_uint_16 filler;            
  1214. #line 1004
  1215.    png_byte background_gamma_type;
  1216.  
  1217.    float background_gamma;
  1218.  
  1219.    png_color_16 background;    
  1220.  
  1221.      png_color_16 background_1;  
  1222. #line 1015
  1223.    png_flush_ptr output_flush_fn; 
  1224.    png_uint_32 flush_dist;     
  1225.    png_uint_32 flush_rows;     
  1226. #line 1021
  1227.    int gamma_shift;       
  1228.  
  1229.    float gamma;           
  1230.    float screen_gamma;    
  1231. #line 1029
  1232.    png_bytep gamma_table;      
  1233.    png_bytep gamma_from_1;     
  1234.    png_bytep gamma_to_1;       
  1235.    png_uint_16pp gamma_16_table;  
  1236.    png_uint_16pp gamma_16_from_1;  
  1237.    png_uint_16pp gamma_16_to_1;  
  1238. #line 1038
  1239.    png_color_8 sig_bit;        
  1240. #line 1042
  1241.    png_color_8 shift;          
  1242. #line 1047
  1243.    png_bytep trans;            
  1244.    png_color_16 trans_values;  
  1245. #line 1051
  1246.    png_read_status_ptr read_row_fn;    
  1247.    png_write_status_ptr write_row_fn;  
  1248.  
  1249.    png_progressive_info_ptr info_fn;  
  1250.    png_progressive_row_ptr row_fn;    
  1251.    png_progressive_end_ptr end_fn;    
  1252.    png_bytep save_buffer_ptr;         
  1253.    png_bytep save_buffer;             
  1254.    png_bytep current_buffer_ptr;      
  1255.    png_bytep current_buffer;          
  1256.    png_uint_32 push_length;           
  1257.    png_uint_32 skip_length;           
  1258.    png_size_t save_buffer_size;       
  1259.    png_size_t save_buffer_max;        
  1260.    png_size_t buffer_size;            
  1261.    png_size_t current_buffer_size;    
  1262.    int process_mode;                  
  1263.    int cur_palette;                   
  1264. #line 1071
  1265.      png_size_t current_text_size;    
  1266.      png_size_t current_text_left;    
  1267.      png_charp current_text;          
  1268.      png_charp current_text_ptr;      
  1269. #line 1089
  1270.    png_bytep palette_lookup;          
  1271.    png_bytep dither_index;            
  1272. #line 1094
  1273.    png_uint_16p hist;                 
  1274. #line 1098
  1275.    png_byte heuristic_method;         
  1276.    png_byte num_prev_filters;         
  1277.    png_bytep prev_filters;            
  1278.    png_uint_16p filter_weights;       
  1279.    png_uint_16p inv_filter_weights;   
  1280.    png_uint_16p filter_costs;         
  1281.    png_uint_16p inv_filter_costs;     
  1282. #line 1108
  1283.    png_charp time_buffer;             
  1284. #line 1120
  1285.    png_uint_32 free_me;        
  1286. #line 1124
  1287.    png_voidp user_chunk_ptr;
  1288.    png_user_chunk_ptr read_user_chunk_fn;  
  1289. #line 1129
  1290.    int num_chunk_list;
  1291.    png_bytep chunk_list;
  1292. #line 1134
  1293.    png_byte rgb_to_gray_status;
  1294.    png_uint_16 rgb_to_gray_red_coeff;
  1295.    png_uint_16 rgb_to_gray_green_coeff;
  1296.    png_uint_16 rgb_to_gray_blue_coeff;
  1297. #line 1142
  1298.    png_byte empty_plte_permitted;
  1299. #line 1146
  1300.    png_fixed_point int_gamma;
  1301. #line 1149
  1302. };
  1303. #line 1154
  1304. typedef png_structp version_1_0_8;
  1305.  
  1306. typedef png_struct  *  * png_structpp;
  1307. #line 1165
  1308. extern  png_uint_32 _cdecl png_access_version_number (void);
  1309. #line 1170
  1310. extern  void _cdecl png_set_sig_bytes 
  1311. (png_structp png_ptr, int num_bytes);
  1312. #line 1178
  1313. extern  int _cdecl png_sig_cmp 
  1314. (png_bytep sig, png_size_t start, png_size_t num_to_check);
  1315. #line 1184
  1316. extern  int _cdecl png_check_sig (png_bytep sig, int num);
  1317. #line 1187
  1318. extern  png_structp _cdecl png_create_read_struct
  1319.  
  1320. (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn);
  1321. #line 1192
  1322. extern  png_structp _cdecl png_create_write_struct
  1323.  
  1324. (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn);
  1325.  
  1326. extern  png_uint_32 _cdecl png_get_compression_buffer_size
  1327.    (png_structp png_ptr);
  1328.  
  1329. extern  void _cdecl png_set_compression_buffer_size
  1330.    (png_structp png_ptr, png_uint_32 size);
  1331. #line 1203
  1332. extern  int _cdecl png_reset_zstream (png_structp png_ptr);
  1333. #line 1217
  1334. extern  void _cdecl png_write_chunk 
  1335. (png_structp png_ptr, png_bytep chunk_name, png_bytep data, png_size_t length);
  1336. #line 1221
  1337. extern  void _cdecl png_write_chunk_start 
  1338. (png_structp png_ptr, png_bytep chunk_name, png_uint_32 length);
  1339. #line 1225
  1340. extern  void _cdecl png_write_chunk_data 
  1341. (png_structp png_ptr, png_bytep data, png_size_t length);
  1342. #line 1229
  1343. extern  void _cdecl png_write_chunk_end (png_structp png_ptr);
  1344. #line 1232
  1345. extern  png_infop _cdecl png_create_info_struct
  1346.    (png_structp png_ptr);
  1347. #line 1236
  1348. extern void png_info_init (png_infop info_ptr);
  1349. #line 1239
  1350. extern  void _cdecl png_write_info_before_PLTE 
  1351. (png_structp png_ptr, png_infop info_ptr);
  1352. extern  void _cdecl png_write_info 
  1353. (png_structp png_ptr, png_infop info_ptr);
  1354. #line 1245
  1355. extern  void _cdecl png_read_info 
  1356. (png_structp png_ptr, png_infop info_ptr);
  1357. #line 1249
  1358. extern  png_charp _cdecl png_convert_to_rfc1123
  1359.    (png_structp png_ptr, png_timep ptime);
  1360. #line 1257
  1361. extern  void _cdecl png_convert_from_struct_tm 
  1362. (png_timep ptime, struct tm * ttime);
  1363. #line 1261
  1364. extern  void _cdecl png_convert_from_time_t 
  1365. (png_timep ptime, time_t ttime);
  1366. #line 1268
  1367. extern  void _cdecl png_set_expand (png_structp png_ptr);
  1368. extern  void _cdecl png_set_gray_1_2_4_to_8 (png_structp png_ptr);
  1369. extern  void _cdecl png_set_palette_to_rgb (png_structp png_ptr);
  1370. extern  void _cdecl png_set_tRNS_to_alpha (png_structp png_ptr);
  1371. #line 1276
  1372. extern  void _cdecl png_set_bgr (png_structp png_ptr);
  1373. #line 1281
  1374. extern  void _cdecl png_set_gray_to_rgb (png_structp png_ptr);
  1375. #line 1287
  1376. extern  void _cdecl png_set_rgb_to_gray 
  1377. (png_structp png_ptr, int error_action, double red, double green );
  1378.  
  1379. extern  void _cdecl png_set_rgb_to_gray_fixed 
  1380. (png_structp png_ptr, int error_action, png_fixed_point red, png_fixed_point green );
  1381. extern  png_byte _cdecl png_get_rgb_to_gray_status 
  1382. (png_structp png_ptr);
  1383. #line 1296
  1384. extern  void _cdecl png_build_grayscale_palette 
  1385. (int bit_depth, png_colorp palette);
  1386. #line 1300
  1387. extern  void _cdecl png_set_strip_alpha (png_structp png_ptr);
  1388. #line 1305
  1389. extern  void _cdecl png_set_swap_alpha (png_structp png_ptr);
  1390. #line 1310
  1391. extern  void _cdecl png_set_invert_alpha (png_structp png_ptr);
  1392. #line 1315
  1393. extern  void _cdecl png_set_filler 
  1394. (png_structp png_ptr, png_uint_32 filler, int flags);
  1395. #line 1324
  1396. extern  void _cdecl png_set_swap (png_structp png_ptr);
  1397. #line 1329
  1398. extern  void _cdecl png_set_packing (png_structp png_ptr);
  1399. #line 1334
  1400. extern  void _cdecl png_set_packswap (png_structp png_ptr);
  1401. #line 1339
  1402. extern  void _cdecl png_set_shift 
  1403. (png_structp png_ptr, png_color_8p true_bits);
  1404. #line 1346
  1405. extern  int _cdecl png_set_interlace_handling (png_structp png_ptr);
  1406. #line 1351
  1407. extern  void _cdecl png_set_invert_mono (png_structp png_ptr);
  1408. #line 1357
  1409. extern  void _cdecl png_set_background 
  1410.  
  1411. (png_structp png_ptr, png_color_16p background_color, int background_gamma_code, int need_expand, double background_gamma);
  1412. #line 1369
  1413. extern  void _cdecl png_set_strip_16 (png_structp png_ptr);
  1414. #line 1374
  1415. extern  void _cdecl png_set_dither 
  1416.  
  1417. (png_structp png_ptr, png_colorp palette, int num_palette, int maximum_colors, png_uint_16p histogram, int full_dither);
  1418. #line 1382
  1419. extern  void _cdecl png_set_gamma 
  1420. (png_structp png_ptr, double screen_gamma, double default_file_gamma);
  1421. #line 1390
  1422. extern  void _cdecl png_permit_empty_plte 
  1423. (png_structp png_ptr, int empty_plte_permitted);
  1424. #line 1396
  1425. extern  void _cdecl png_set_flush (png_structp png_ptr, int nrows);
  1426.  
  1427. extern  void _cdecl png_write_flush (png_structp png_ptr);
  1428. #line 1402
  1429. extern  void _cdecl png_start_read_image (png_structp png_ptr);
  1430. #line 1405
  1431. extern  void _cdecl png_read_update_info 
  1432. (png_structp png_ptr, png_infop info_ptr);
  1433. #line 1409
  1434. extern  void _cdecl png_read_rows 
  1435. (png_structp png_ptr, png_bytepp row, png_bytepp display_row, png_uint_32 num_rows);
  1436. #line 1413
  1437. extern  void _cdecl png_read_row 
  1438.  
  1439. (png_structp png_ptr, png_bytep row, png_bytep display_row);
  1440. #line 1418
  1441. extern  void _cdecl png_read_image 
  1442. (png_structp png_ptr, png_bytepp image);
  1443. #line 1422
  1444. extern  void _cdecl png_write_row 
  1445. (png_structp png_ptr, png_bytep row);
  1446. #line 1426
  1447. extern  void _cdecl png_write_rows 
  1448. (png_structp png_ptr, png_bytepp row, png_uint_32 num_rows);
  1449. #line 1430
  1450. extern  void _cdecl png_write_image 
  1451. (png_structp png_ptr, png_bytepp image);
  1452. #line 1434
  1453. extern  void _cdecl png_write_end 
  1454. (png_structp png_ptr, png_infop info_ptr);
  1455. #line 1438
  1456. extern  void _cdecl png_read_end 
  1457. (png_structp png_ptr, png_infop info_ptr);
  1458. #line 1442
  1459. extern  void _cdecl png_destroy_info_struct 
  1460. (png_structp png_ptr, png_infopp info_ptr_ptr);
  1461. #line 1446
  1462. extern  void _cdecl png_destroy_read_struct 
  1463. (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr);
  1464. #line 1450
  1465. extern void png_read_destroy 
  1466. (png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr);
  1467. #line 1454
  1468. extern  void _cdecl png_destroy_write_struct
  1469.    (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr);
  1470. #line 1458
  1471. extern void png_write_destroy_info (png_infop info_ptr);
  1472. #line 1461
  1473. extern void png_write_destroy (png_structp png_ptr);
  1474. #line 1464
  1475. extern  void _cdecl png_set_crc_action 
  1476. (png_structp png_ptr, int crit_action, int ancil_action);
  1477. #line 1494
  1478. extern  void _cdecl png_set_filter 
  1479. (png_structp png_ptr, int method, int filters);
  1480. #line 1551
  1481. extern  void _cdecl png_set_filter_heuristics 
  1482.  
  1483. (png_structp png_ptr, int heuristic_method, int num_weights, png_doublep filter_weights, png_doublep filter_costs);
  1484. #line 1572
  1485. extern  void _cdecl png_set_compression_level 
  1486. (png_structp png_ptr, int level);
  1487.  
  1488. extern  void _cdecl png_set_compression_mem_level
  1489.    (png_structp png_ptr, int mem_level);
  1490.  
  1491. extern  void _cdecl png_set_compression_strategy
  1492.    (png_structp png_ptr, int strategy);
  1493.  
  1494. extern  void _cdecl png_set_compression_window_bits
  1495.    (png_structp png_ptr, int window_bits);
  1496.  
  1497. extern  void _cdecl png_set_compression_method 
  1498. (png_structp png_ptr, int method);
  1499. #line 1598
  1500. extern  void _cdecl png_init_io (png_structp png_ptr, png_FILE_p fp);
  1501. #line 1609
  1502. extern  void _cdecl png_set_error_fn 
  1503. (png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn);
  1504. #line 1613
  1505. extern  png_voidp _cdecl png_get_error_ptr (png_structp png_ptr);
  1506. #line 1620
  1507. extern  void _cdecl png_set_write_fn 
  1508. (png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn);
  1509. #line 1624
  1510. extern  void _cdecl png_set_read_fn 
  1511. (png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn);
  1512. #line 1628
  1513. extern  png_voidp _cdecl png_get_io_ptr (png_structp png_ptr);
  1514.  
  1515. extern  void _cdecl png_set_read_status_fn 
  1516. (png_structp png_ptr, png_read_status_ptr read_row_fn);
  1517.  
  1518. extern  void _cdecl png_set_write_status_fn 
  1519. (png_structp png_ptr, png_write_status_ptr write_row_fn);
  1520. #line 1646
  1521. extern  void _cdecl png_set_read_user_transform_fn 
  1522. (png_structp png_ptr, png_user_transform_ptr read_user_transform_fn);
  1523. #line 1652
  1524. extern  void _cdecl png_set_write_user_transform_fn 
  1525. (png_structp png_ptr, png_user_transform_ptr write_user_transform_fn);
  1526. #line 1659
  1527. extern  void _cdecl png_set_user_transform_info 
  1528.  
  1529. (png_structp png_ptr, png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels);
  1530.  
  1531. extern  png_voidp _cdecl png_get_user_transform_ptr
  1532.    (png_structp png_ptr);
  1533. #line 1668
  1534. extern  void _cdecl png_set_read_user_chunk_fn 
  1535. (png_structp png_ptr, png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn);
  1536. extern  png_voidp _cdecl png_get_user_chunk_ptr 
  1537. (png_structp png_ptr);
  1538. #line 1678
  1539. extern  void _cdecl png_set_progressive_read_fn 
  1540. #line 1681
  1541. (png_structp png_ptr, png_voidp progressive_ptr, png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn);
  1542. #line 1684
  1543. extern  png_voidp _cdecl png_get_progressive_ptr
  1544.    (png_structp png_ptr);
  1545. #line 1688
  1546. extern  void _cdecl png_process_data 
  1547. (png_structp png_ptr, png_infop info_ptr, png_bytep buffer, png_size_t buffer_size);
  1548. #line 1694
  1549. extern  void _cdecl png_progressive_combine_row 
  1550. (png_structp png_ptr, png_bytep old_row, png_bytep new_row);
  1551. #line 1698
  1552. extern  png_voidp _cdecl png_malloc 
  1553. (png_structp png_ptr, png_uint_32 size);
  1554. #line 1702
  1555. extern  void _cdecl png_free (png_structp png_ptr, png_voidp ptr);
  1556. #line 1705
  1557. extern  void _cdecl png_free_data 
  1558. (png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num);
  1559. #line 1710
  1560. extern  void _cdecl png_data_freer 
  1561. (png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask);
  1562. #line 1739
  1563. extern  png_voidp _cdecl png_memcpy_check 
  1564. (png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 size);
  1565.  
  1566. extern  png_voidp _cdecl png_memset_check 
  1567. (png_structp png_ptr, png_voidp s1, int value, png_uint_32 size);
  1568. #line 1751
  1569. extern  void _cdecl png_error 
  1570. (png_structp png_ptr, png_const_charp error);
  1571. #line 1755
  1572. extern  void _cdecl png_chunk_error 
  1573. (png_structp png_ptr, png_const_charp error);
  1574. #line 1759
  1575. extern  void _cdecl png_warning 
  1576. (png_structp png_ptr, png_const_charp message);
  1577. #line 1763
  1578. extern  void _cdecl png_chunk_warning 
  1579. (png_structp png_ptr, png_const_charp message);
  1580. #line 1779
  1581. extern  png_uint_32 _cdecl png_get_valid 
  1582. (png_structp png_ptr, png_infop info_ptr, png_uint_32 flag);
  1583. #line 1783
  1584. extern  png_uint_32 _cdecl png_get_rowbytes 
  1585. (png_structp png_ptr, png_infop info_ptr);
  1586. #line 1789
  1587. extern  png_bytepp _cdecl png_get_rows 
  1588. (png_structp png_ptr, png_infop info_ptr);
  1589. #line 1793
  1590. extern  void _cdecl png_set_rows 
  1591. (png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers);
  1592. #line 1798
  1593. extern  png_byte _cdecl png_get_channels 
  1594. (png_structp png_ptr, png_infop info_ptr);
  1595. #line 1803
  1596. extern  png_uint_32 _cdecl png_get_image_width 
  1597. (png_structp png_ptr, png_infop info_ptr);
  1598. #line 1807
  1599. extern  png_uint_32 _cdecl png_get_image_height 
  1600. (png_structp png_ptr, png_infop info_ptr);
  1601. #line 1811
  1602. extern  png_byte _cdecl png_get_bit_depth 
  1603. (png_structp png_ptr, png_infop info_ptr);
  1604. #line 1815
  1605. extern  png_byte _cdecl png_get_color_type 
  1606. (png_structp png_ptr, png_infop info_ptr);
  1607. #line 1819
  1608. extern  png_byte _cdecl png_get_filter_type 
  1609. (png_structp png_ptr, png_infop info_ptr);
  1610. #line 1823
  1611. extern  png_byte _cdecl png_get_interlace_type 
  1612. (png_structp png_ptr, png_infop info_ptr);
  1613. #line 1827
  1614. extern  png_byte _cdecl png_get_compression_type 
  1615. (png_structp png_ptr, png_infop info_ptr);
  1616. #line 1831
  1617. extern  png_uint_32 _cdecl png_get_pixels_per_meter 
  1618. (png_structp png_ptr, png_infop info_ptr);
  1619. extern  png_uint_32 _cdecl png_get_x_pixels_per_meter 
  1620. (png_structp png_ptr, png_infop info_ptr);
  1621. extern  png_uint_32 _cdecl png_get_y_pixels_per_meter 
  1622. (png_structp png_ptr, png_infop info_ptr);
  1623. #line 1840
  1624. extern  float _cdecl png_get_pixel_aspect_ratio 
  1625. (png_structp png_ptr, png_infop info_ptr);
  1626. #line 1845
  1627. extern  png_int_32 _cdecl png_get_x_offset_pixels 
  1628. (png_structp png_ptr, png_infop info_ptr);
  1629. extern  png_int_32 _cdecl png_get_y_offset_pixels 
  1630. (png_structp png_ptr, png_infop info_ptr);
  1631. extern  png_int_32 _cdecl png_get_x_offset_microns 
  1632. (png_structp png_ptr, png_infop info_ptr);
  1633. extern  png_int_32 _cdecl png_get_y_offset_microns 
  1634. (png_structp png_ptr, png_infop info_ptr);
  1635. #line 1857
  1636. extern  png_bytep _cdecl png_get_signature 
  1637. (png_structp png_ptr, png_infop info_ptr);
  1638. #line 1861
  1639. extern  png_uint_32 _cdecl png_get_bKGD 
  1640. (png_structp png_ptr, png_infop info_ptr, png_color_16p *background);
  1641. #line 1866
  1642. extern  void _cdecl png_set_bKGD 
  1643. (png_structp png_ptr, png_infop info_ptr, png_color_16p background);
  1644. #line 1872
  1645. extern  png_uint_32 _cdecl png_get_cHRM 
  1646. #line 1875
  1647. (png_structp png_ptr, png_infop info_ptr, double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, double *blue_y);
  1648. #line 1878
  1649. extern  png_uint_32 _cdecl png_get_cHRM_fixed 
  1650. #line 1882
  1651. (png_structp png_ptr, png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point *int_blue_x, png_fixed_point *int_blue_y);
  1652. #line 1888
  1653. extern  void _cdecl png_set_cHRM 
  1654.  
  1655. (png_structp png_ptr, png_infop info_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y);
  1656. #line 1893
  1657. extern  void _cdecl png_set_cHRM_fixed 
  1658. #line 1897
  1659. (png_structp png_ptr, png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, png_fixed_point int_blue_y);
  1660. #line 1903
  1661. extern  png_uint_32 _cdecl png_get_gAMA 
  1662. (png_structp png_ptr, png_infop info_ptr, double *file_gamma);
  1663.  
  1664. extern  png_uint_32 _cdecl png_get_gAMA_fixed 
  1665. (png_structp png_ptr, png_infop info_ptr, png_fixed_point *int_file_gamma);
  1666. #line 1912
  1667. extern  void _cdecl png_set_gAMA 
  1668. (png_structp png_ptr, png_infop info_ptr, double file_gamma);
  1669.  
  1670. extern  void _cdecl png_set_gAMA_fixed 
  1671. (png_structp png_ptr, png_infop info_ptr, png_fixed_point int_file_gamma);
  1672. #line 1920
  1673. extern  png_uint_32 _cdecl png_get_hIST 
  1674. (png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist);
  1675. #line 1925
  1676. extern  void _cdecl png_set_hIST 
  1677. (png_structp png_ptr, png_infop info_ptr, png_uint_16p hist);
  1678. #line 1929
  1679. extern  png_uint_32 _cdecl png_get_IHDR 
  1680. #line 1932
  1681. (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_type, int *compression_type, int *filter_type);
  1682.  
  1683. extern  void _cdecl png_set_IHDR 
  1684.  
  1685. (png_structp png_ptr, png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_type, int compression_type, int filter_type);
  1686. #line 1939
  1687. extern  png_uint_32 _cdecl png_get_oFFs 
  1688.  
  1689. (png_structp png_ptr, png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type);
  1690. #line 1945
  1691. extern  void _cdecl png_set_oFFs 
  1692.  
  1693. (png_structp png_ptr, png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, int unit_type);
  1694. #line 1951
  1695. extern  png_uint_32 _cdecl png_get_pCAL 
  1696.  
  1697. (png_structp png_ptr, png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, png_charp *units, png_charpp *params);
  1698. #line 1957
  1699. extern  void _cdecl png_set_pCAL 
  1700.  
  1701. (png_structp png_ptr, png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params);
  1702. #line 1963
  1703. extern  png_uint_32 _cdecl png_get_pHYs 
  1704. (png_structp png_ptr, png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type);
  1705. #line 1968
  1706. extern  void _cdecl png_set_pHYs 
  1707. (png_structp png_ptr, png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type);
  1708. #line 1972
  1709. extern  png_uint_32 _cdecl png_get_PLTE 
  1710. (png_structp png_ptr, png_infop info_ptr, png_colorp *palette, int *num_palette);
  1711.  
  1712. extern  void _cdecl png_set_PLTE 
  1713. (png_structp png_ptr, png_infop info_ptr, png_colorp palette, int num_palette);
  1714. #line 1979
  1715. extern  png_uint_32 _cdecl png_get_sBIT 
  1716. (png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit);
  1717. #line 1984
  1718. extern  void _cdecl png_set_sBIT 
  1719. (png_structp png_ptr, png_infop info_ptr, png_color_8p sig_bit);
  1720. #line 1989
  1721. extern  png_uint_32 _cdecl png_get_sRGB 
  1722. (png_structp png_ptr, png_infop info_ptr, int *intent);
  1723. #line 1994
  1724. extern  void _cdecl png_set_sRGB 
  1725. (png_structp png_ptr, png_infop info_ptr, int intent);
  1726. extern  void _cdecl png_set_sRGB_gAMA_and_cHRM 
  1727. (png_structp png_ptr, png_infop info_ptr, int intent);
  1728. #line 2001
  1729. extern  png_uint_32 _cdecl png_get_iCCP 
  1730.  
  1731. (png_structp png_ptr, png_infop info_ptr, png_charpp name, int *compression_type, png_charpp profile, png_uint_32 *proflen);
  1732. #line 2007
  1733. extern  void _cdecl png_set_iCCP 
  1734.  
  1735. (png_structp png_ptr, png_infop info_ptr, png_charp name, int compression_type, png_charp profile, png_uint_32 proflen);
  1736. #line 2013
  1737. extern  png_uint_32 _cdecl png_get_sPLT 
  1738. (png_structp png_ptr, png_infop info_ptr, png_sPLT_tpp entries);
  1739. #line 2018
  1740. extern  void _cdecl png_set_sPLT 
  1741. (png_structp png_ptr, png_infop info_ptr, png_sPLT_tp entries, int nentries);
  1742. #line 2024
  1743. extern  png_uint_32 _cdecl png_get_text 
  1744. (png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, int *num_text);
  1745. #line 2037
  1746. extern  void _cdecl png_set_text 
  1747. (png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, int num_text);
  1748. #line 2042
  1749. extern  png_uint_32 _cdecl png_get_tIME 
  1750. (png_structp png_ptr, png_infop info_ptr, png_timep *mod_time);
  1751. #line 2047
  1752. extern  void _cdecl png_set_tIME 
  1753. (png_structp png_ptr, png_infop info_ptr, png_timep mod_time);
  1754. #line 2052
  1755. extern  png_uint_32 _cdecl png_get_tRNS 
  1756.  
  1757. (png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values);
  1758. #line 2058
  1759. extern  void _cdecl png_set_tRNS 
  1760.  
  1761. (png_structp png_ptr, png_infop info_ptr, png_bytep trans, int num_trans, png_color_16p trans_values);
  1762. #line 2068
  1763. extern  png_uint_32 _cdecl png_get_sCAL 
  1764. (png_structp png_ptr, png_infop info_ptr, int *unit, double *width, double *height);
  1765. #line 2080
  1766. extern  void _cdecl png_set_sCAL 
  1767. (png_structp png_ptr, png_infop info_ptr, int unit, double width, double height);
  1768. #line 2084
  1769. extern  void _cdecl png_set_sCAL_s 
  1770. (png_structp png_ptr, png_infop info_ptr, int unit, png_charp swidth, png_charp sheight);
  1771. #line 2099
  1772. extern  void _cdecl png_set_keep_unknown_chunks 
  1773. (png_structp png_ptr, int keep, png_bytep chunk_list, int num_chunks);
  1774. extern  void _cdecl png_set_unknown_chunks 
  1775. (png_structp png_ptr, png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns);
  1776. extern  void _cdecl png_set_unknown_chunk_location
  1777.    (png_structp png_ptr, png_infop info_ptr, int chunk, int location);
  1778. extern  png_uint_32 _cdecl png_get_unknown_chunks 
  1779. (png_structp png_ptr, png_infop info_ptr, png_unknown_chunkpp entries);
  1780. #line 2112
  1781. extern  void _cdecl png_set_invalid 
  1782. (png_structp png_ptr, png_infop info_ptr, int mask);
  1783. #line 2117
  1784. extern  void _cdecl png_read_png 
  1785. #line 2120
  1786. (png_structp png_ptr, png_infop info_ptr, int transforms, voidp params);
  1787. extern  void _cdecl png_write_png 
  1788. #line 2124
  1789. (png_structp png_ptr, png_infop info_ptr, int transforms, voidp params);
  1790. #line 2178
  1791. extern  png_bytep _cdecl png_sig_bytes (void);
  1792.  
  1793. extern  png_charp _cdecl png_get_copyright (png_structp png_ptr);
  1794. extern  png_charp _cdecl png_get_header_ver (png_structp png_ptr);
  1795. extern  png_charp _cdecl png_get_header_version (png_structp png_ptr);
  1796. extern  png_charp _cdecl png_get_libpng_ver (png_structp png_ptr);
  1797. #line 2333
  1798.    extern   png_byte png_sig[8];
  1799. #line 2366
  1800. extern   const png_byte png_IHDR[5];
  1801. extern   const png_byte png_IDAT[5];
  1802. extern   const png_byte png_IEND[5];
  1803. extern   const png_byte png_PLTE[5];
  1804. extern   const png_byte png_bKGD[5];
  1805. extern   const png_byte png_cHRM[5];
  1806. extern   const png_byte png_gAMA[5];
  1807. extern   const png_byte png_hIST[5];
  1808. extern   const png_byte png_iCCP[5];
  1809. extern   const png_byte png_iTXt[5];
  1810. extern   const png_byte png_oFFs[5];
  1811. extern   const png_byte png_pCAL[5];
  1812. extern   const png_byte png_sCAL[5];
  1813. extern   const png_byte png_pHYs[5];
  1814. extern   const png_byte png_sBIT[5];
  1815. extern   const png_byte png_sPLT[5];
  1816. extern   const png_byte png_sRGB[5];
  1817. extern   const png_byte png_tEXt[5];
  1818. extern   const png_byte png_tIME[5];
  1819. extern   const png_byte png_tRNS[5];
  1820. extern   const png_byte png_zTXt[5];
  1821. #line 2406
  1822.  png_int_32 png_get_int_32 (png_bytep buf);
  1823.  
  1824.  png_uint_32 png_get_uint_32 (png_bytep buf);
  1825.  png_uint_16 png_get_uint_16 (png_bytep buf);
  1826. #line 2415
  1827. extern  void _cdecl png_read_init (png_structp png_ptr);
  1828. #line 2418
  1829. extern  void _cdecl png_read_init_2 
  1830.  
  1831. (png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size);
  1832. #line 2425
  1833. extern  void _cdecl png_write_init (png_structp png_ptr);
  1834. #line 2428
  1835. extern  void _cdecl png_write_init_2 
  1836.  
  1837. (png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size);
  1838. #line 2433
  1839.  png_voidp png_create_struct (int type);
  1840. #line 2436
  1841.  void png_destroy_struct (png_voidp struct_ptr);
  1842.  
  1843.  png_voidp png_create_struct_2 
  1844. (int type, png_malloc_ptr malloc_fn);
  1845.  void png_destroy_struct_2 
  1846. (png_voidp struct_ptr, png_free_ptr free_fn);
  1847. #line 2444
  1848.  void png_info_destroy 
  1849. (png_structp png_ptr, png_infop info_ptr);
  1850. #line 2448
  1851.  voidpf png_zalloc (voidpf png_ptr, uInt items, uInt size);
  1852. #line 2451
  1853.  void png_zfree (voidpf png_ptr, voidpf ptr);
  1854. #line 2454
  1855.  void png_reset_crc (png_structp png_ptr);
  1856. #line 2457
  1857.  void png_write_data 
  1858. (png_structp png_ptr, png_bytep data, png_size_t length);
  1859. #line 2461
  1860.  void png_read_data 
  1861. (png_structp png_ptr, png_bytep data, png_size_t length);
  1862. #line 2465
  1863.  void png_crc_read 
  1864. (png_structp png_ptr, png_bytep buf, png_size_t length);
  1865. #line 2471
  1866.  png_charp png_decompress_chunk 
  1867.  
  1868. (png_structp png_ptr, int comp_type, png_charp chunkdata, png_size_t chunklength, png_size_t prefix_length, png_size_t *data_length);
  1869. #line 2477
  1870.  int png_crc_finish (png_structp png_ptr, png_uint_32 skip);
  1871. #line 2480
  1872.  int png_crc_error (png_structp png_ptr);
  1873. #line 2486
  1874.  void png_calculate_crc 
  1875. (png_structp png_ptr, png_bytep ptr, png_size_t length);
  1876. #line 2490
  1877.  void png_flush (png_structp png_ptr);
  1878. #line 2497
  1879.  void png_save_uint_32 (png_bytep buf, png_uint_32 i);
  1880. #line 2500
  1881.  void png_save_int_32 (png_bytep buf, png_int_32 i);
  1882. #line 2507
  1883.  void png_save_uint_16 (png_bytep buf, unsigned int i);
  1884. #line 2510
  1885.  void png_write_sig (png_structp png_ptr);
  1886. #line 2517
  1887.  void png_write_IHDR 
  1888. #line 2520
  1889. (png_structp png_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int compression_type, int filter_type, int interlace_type);
  1890.  
  1891.  void png_write_PLTE 
  1892. (png_structp png_ptr, png_colorp palette, png_uint_32 num_pal);
  1893.  
  1894.  void png_write_IDAT 
  1895. (png_structp png_ptr, png_bytep data, png_size_t length);
  1896.  
  1897.  void png_write_IEND (png_structp png_ptr);
  1898. #line 2532
  1899.  void png_write_gAMA (png_structp png_ptr, double file_gamma);
  1900. #line 2535
  1901.  void png_write_gAMA_fixed 
  1902. (png_structp png_ptr, png_fixed_point file_gamma);
  1903. #line 2541
  1904.  void png_write_sBIT 
  1905. (png_structp png_ptr, png_color_8p sbit, int color_type);
  1906. #line 2547
  1907.  void png_write_cHRM 
  1908. #line 2550
  1909. (png_structp png_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y);
  1910. #line 2553
  1911.  void png_write_cHRM_fixed 
  1912. #line 2557
  1913. (png_structp png_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, png_fixed_point int_blue_y);
  1914. #line 2562
  1915.  void png_write_sRGB 
  1916. (png_structp png_ptr, int intent);
  1917. #line 2567
  1918.  void png_write_iCCP 
  1919.  
  1920. (png_structp png_ptr, png_charp name, int compression_type, png_charp profile, int proflen);
  1921. #line 2573
  1922.  void png_write_sPLT 
  1923. (png_structp png_ptr, png_sPLT_tp palette);
  1924. #line 2578
  1925.  void png_write_tRNS 
  1926. (png_structp png_ptr, png_bytep trans, png_color_16p values, int number, int color_type);
  1927. #line 2583
  1928.  void png_write_bKGD 
  1929. (png_structp png_ptr, png_color_16p values, int color_type);
  1930. #line 2588
  1931.  void png_write_hIST 
  1932. (png_structp png_ptr, png_uint_16p hist, int num_hist);
  1933. #line 2594
  1934.  png_size_t png_check_keyword 
  1935. (png_structp png_ptr, png_charp key, png_charpp new_key);
  1936. #line 2599
  1937.  void png_write_tEXt 
  1938. (png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len);
  1939. #line 2604
  1940.  void png_write_zTXt 
  1941. (png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len, int compression);
  1942. #line 2615
  1943.  void png_write_oFFs 
  1944. (png_structp png_ptr, png_uint_32 x_offset, png_uint_32 y_offset, int unit_type);
  1945. #line 2620
  1946.  void png_write_pCAL 
  1947.  
  1948. (png_structp png_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params);
  1949. #line 2626
  1950.  void png_write_pHYs 
  1951.  
  1952. (png_structp png_ptr, png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, int unit_type);
  1953. #line 2632
  1954.  void png_write_tIME 
  1955. (png_structp png_ptr, png_timep mod_time);
  1956. #line 2638
  1957.  void png_write_sCAL 
  1958. (png_structp png_ptr, int unit, double width, double height);
  1959. #line 2649
  1960.  void png_write_finish_row (png_structp png_ptr);
  1961. #line 2652
  1962.  void png_write_start_row (png_structp png_ptr);
  1963. #line 2655
  1964.  void png_build_gamma_table (png_structp png_ptr);
  1965. #line 2659
  1966.  void png_combine_row 
  1967. (png_structp png_ptr, png_bytep row, int mask);
  1968. #line 2664
  1969.  void png_do_read_interlace 
  1970. (png_row_infop row_info, png_bytep row, int pass, png_uint_32 transformations);
  1971. #line 2670
  1972.  void png_do_write_interlace 
  1973. (png_row_infop row_info, png_bytep row, int pass);
  1974. #line 2675
  1975.  void png_read_filter_row 
  1976. (png_structp png_ptr, png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter);
  1977. #line 2679
  1978.  void png_write_find_filter 
  1979. (png_structp png_ptr, png_row_infop row_info);
  1980. #line 2683
  1981.  void png_write_filtered_row 
  1982. (png_structp png_ptr, png_bytep filtered_row);
  1983.  
  1984.  void png_read_finish_row (png_structp png_ptr);
  1985. #line 2689
  1986.  void png_read_start_row (png_structp png_ptr);
  1987.  
  1988.  void png_read_transform_info 
  1989. (png_structp png_ptr, png_infop info_ptr);
  1990. #line 2696
  1991.  void png_do_read_filler 
  1992. (png_row_infop row_info, png_bytep row, png_uint_32 filler, png_uint_32 flags);
  1993. #line 2701
  1994.  void png_do_read_swap_alpha 
  1995. (png_row_infop row_info, png_bytep row);
  1996. #line 2706
  1997.  void png_do_write_swap_alpha 
  1998. (png_row_infop row_info, png_bytep row);
  1999. #line 2711
  2000.  void png_do_read_invert_alpha 
  2001. (png_row_infop row_info, png_bytep row);
  2002. #line 2716
  2003.  void png_do_write_invert_alpha 
  2004. (png_row_infop row_info, png_bytep row);
  2005. #line 2722
  2006.  void png_do_strip_filler 
  2007. (png_row_infop row_info, png_bytep row, png_uint_32 flags);
  2008. #line 2727
  2009.  void png_do_swap (png_row_infop row_info, png_bytep row);
  2010. #line 2731
  2011.  void png_do_packswap (png_row_infop row_info, png_bytep row);
  2012. #line 2735
  2013.  int png_do_rgb_to_gray 
  2014. (png_structp png_ptr, png_row_infop row_info, png_bytep row);
  2015. #line 2740
  2016.  void png_do_gray_to_rgb 
  2017. (png_row_infop row_info, png_bytep row);
  2018. #line 2745
  2019.  void png_do_unpack (png_row_infop row_info, png_bytep row);
  2020. #line 2749
  2021.  void png_do_unshift 
  2022. (png_row_infop row_info, png_bytep row, png_color_8p sig_bits);
  2023. #line 2754
  2024.  void png_do_invert (png_row_infop row_info, png_bytep row);
  2025. #line 2758
  2026.  void png_do_chop (png_row_infop row_info, png_bytep row);
  2027. #line 2762
  2028.  void png_do_dither 
  2029. (png_row_infop row_info, png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup);
  2030. #line 2772
  2031.  void png_do_bgr (png_row_infop row_info, png_bytep row);
  2032. #line 2776
  2033.  void png_do_pack 
  2034. (png_row_infop row_info, png_bytep row, png_uint_32 bit_depth);
  2035. #line 2781
  2036.  void png_do_shift 
  2037. (png_row_infop row_info, png_bytep row, png_color_8p bit_depth);
  2038. #line 2786
  2039.  void png_do_background 
  2040. #line 2791
  2041. (png_row_infop row_info, png_bytep row, png_color_16p trans_values, png_color_16p background, png_color_16p background_1, png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, png_uint_16pp gamma_16_to_1, int gamma_shift);
  2042. #line 2795
  2043.  void png_do_gamma 
  2044.  
  2045. (png_row_infop row_info, png_bytep row, png_bytep gamma_table, png_uint_16pp gamma_16_table, int gamma_shift);
  2046. #line 2801
  2047.  void png_do_expand_palette 
  2048. (png_row_infop row_info, png_bytep row, png_colorp palette, png_bytep trans, int num_trans);
  2049.  void png_do_expand 
  2050. (png_row_infop row_info, png_bytep row, png_color_16p trans_value);
  2051. #line 2812
  2052.  void png_handle_IHDR 
  2053. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2054.  void png_handle_PLTE 
  2055. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2056.  void png_handle_IEND 
  2057. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2058. #line 2820
  2059.  void png_handle_bKGD 
  2060. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2061. #line 2825
  2062.  void png_handle_cHRM 
  2063. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2064. #line 2830
  2065.  void png_handle_gAMA 
  2066. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2067. #line 2835
  2068.  void png_handle_hIST 
  2069. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2070. #line 2840
  2071. extern void png_handle_iCCP 
  2072. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2073. #line 2850
  2074.  void png_handle_oFFs 
  2075. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2076. #line 2855
  2077.  void png_handle_pCAL 
  2078. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2079. #line 2860
  2080.  void png_handle_pHYs 
  2081. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2082. #line 2865
  2083.  void png_handle_sBIT 
  2084. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2085. #line 2870
  2086.  void png_handle_sCAL 
  2087. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2088. #line 2875
  2089. extern void png_handle_sPLT 
  2090. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2091. #line 2880
  2092.  void png_handle_sRGB 
  2093. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2094. #line 2885
  2095.  void png_handle_tEXt 
  2096. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2097. #line 2890
  2098.  void png_handle_tIME 
  2099. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2100. #line 2895
  2101.  void png_handle_tRNS 
  2102. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2103. #line 2900
  2104.  void png_handle_zTXt 
  2105. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2106. #line 2905
  2107.  int png_handle_as_unknown 
  2108. (png_structp png_ptr, png_bytep chunk_name);
  2109. #line 2909
  2110.  void png_handle_unknown 
  2111. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2112.  
  2113.  void png_check_chunk_name 
  2114. (png_structp png_ptr, png_bytep chunk_name);
  2115. #line 2916
  2116.  void png_do_read_transformations (png_structp png_ptr);
  2117.  void png_do_write_transformations (png_structp png_ptr);
  2118.  
  2119.  void png_init_read_transformations (png_structp png_ptr);
  2120. #line 2922
  2121.  void png_push_read_chunk 
  2122. (png_structp png_ptr, png_infop info_ptr);
  2123.  void png_push_read_sig 
  2124. (png_structp png_ptr, png_infop info_ptr);
  2125.  void png_push_check_crc (png_structp png_ptr);
  2126.  void png_push_crc_skip 
  2127. (png_structp png_ptr, png_uint_32 length);
  2128.  void png_push_crc_finish (png_structp png_ptr);
  2129.  void png_push_fill_buffer 
  2130. (png_structp png_ptr, png_bytep buffer, png_size_t length);
  2131.  void png_push_save_buffer (png_structp png_ptr);
  2132.  void png_push_restore_buffer 
  2133. (png_structp png_ptr, png_bytep buffer, png_size_t buffer_length);
  2134.  void png_push_read_IDAT (png_structp png_ptr);
  2135.  void png_process_IDAT_data 
  2136. (png_structp png_ptr, png_bytep buffer, png_size_t buffer_length);
  2137.  void png_push_process_row (png_structp png_ptr);
  2138.  void png_push_handle_unknown 
  2139. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2140.  void png_push_have_info 
  2141. (png_structp png_ptr, png_infop info_ptr);
  2142.  void png_push_have_end 
  2143. (png_structp png_ptr, png_infop info_ptr);
  2144.  void png_push_have_row (png_structp png_ptr, png_bytep row);
  2145.  void png_push_read_end 
  2146. (png_structp png_ptr, png_infop info_ptr);
  2147.  void png_process_some_data 
  2148. (png_structp png_ptr, png_infop info_ptr);
  2149.  void png_read_push_finish_row (png_structp png_ptr);
  2150.  
  2151.  void png_push_handle_tEXt 
  2152. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2153.  void png_push_read_tEXt 
  2154. (png_structp png_ptr, png_infop info_ptr);
  2155. #line 2958
  2156.  void png_push_handle_zTXt 
  2157. (png_structp png_ptr, png_infop info_ptr, png_uint_32 length);
  2158.  void png_push_read_zTXt 
  2159. (png_structp png_ptr, png_infop info_ptr);
  2160. #line 43 "pngrutil.c"
  2161. png_uint_32  
  2162. png_get_uint_32(png_bytep buf)
  2163. {
  2164.    png_uint_32 i = ((png_uint_32)(*buf) << 24) +
  2165.       ((png_uint_32)(*(buf + 1)) << 16) +
  2166.       ((png_uint_32)(*(buf + 2)) << 8) +
  2167.       (png_uint_32)(*(buf + 3));
  2168.  
  2169.    return (i);
  2170. }
  2171. #line 58
  2172. png_int_32  
  2173. png_get_int_32(png_bytep buf)
  2174. {
  2175.    png_int_32 i = ((png_int_32)(*buf) << 24) +
  2176.       ((png_int_32)(*(buf + 1)) << 16) +
  2177.       ((png_int_32)(*(buf + 2)) << 8) +
  2178.       (png_int_32)(*(buf + 3));
  2179.  
  2180.    return (i);
  2181. }
  2182. #line 71
  2183. png_uint_16  
  2184. png_get_uint_16(png_bytep buf)
  2185. {
  2186.    png_uint_16 i = (png_uint_16)(((png_uint_16)(*buf) << 8) +
  2187.       (png_uint_16)(*(buf + 1)));
  2188.  
  2189.    return (i);
  2190. }
  2191. #line 82
  2192. void  
  2193. png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length)
  2194. {
  2195.    png_read_data(png_ptr, buf, length);
  2196.    png_calculate_crc(png_ptr, buf, length);
  2197. }
  2198. #line 93
  2199. int  
  2200. png_crc_finish(png_structp png_ptr, png_uint_32 skip)
  2201. {
  2202.    png_size_t i;
  2203.    png_size_t istop = png_ptr->zbuf_size;
  2204.  
  2205.    for (i = (png_size_t)skip; i > istop; i -= istop)
  2206.    {
  2207.       png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
  2208.    }
  2209.    if (i)
  2210.    {
  2211.       png_crc_read(png_ptr, png_ptr->zbuf, i);
  2212.    }
  2213.  
  2214.    if (png_crc_error(png_ptr))
  2215.    {
  2216.       if (((png_ptr->chunk_name[0] & 0x20) &&                 
  2217.            !(png_ptr->flags & 0x0200)) ||
  2218.           (!(png_ptr->chunk_name[0] & 0x20) &&              
  2219.           (png_ptr->flags & 0x0400)))
  2220.       {
  2221.          png_chunk_warning(png_ptr, "CRC error");
  2222.       }
  2223.       else
  2224.       {
  2225.          png_chunk_error(png_ptr, "CRC error");
  2226.       }
  2227.       return (1);
  2228.    }
  2229.  
  2230.    return (0);
  2231. }
  2232. #line 129
  2233. int  
  2234. png_crc_error(png_structp png_ptr)
  2235. {
  2236.    png_byte crc_bytes[4];
  2237.    png_uint_32 crc;
  2238.    int need_crc = 1;
  2239.  
  2240.    if (png_ptr->chunk_name[0] & 0x20)                      
  2241.    {
  2242.       if ((png_ptr->flags & (0x0100 | 0x0200)) ==
  2243.           (0x0100 | 0x0200))
  2244.          need_crc = 0;
  2245.    }
  2246.    else                                                     
  2247.    {
  2248.       if (png_ptr->flags & 0x0800)
  2249.          need_crc = 0;
  2250.    }
  2251.  
  2252.    png_read_data(png_ptr, crc_bytes, 4);
  2253.  
  2254.    if (need_crc)
  2255.    {
  2256.       crc = png_get_uint_32(crc_bytes);
  2257.       return ((int)(crc != png_ptr->crc));
  2258.    }
  2259.    else
  2260.       return (0);
  2261. }
  2262. #line 168
  2263. png_charp  
  2264. png_decompress_chunk(png_structp png_ptr, int comp_type,
  2265.                               png_charp chunkdata, png_size_t chunklength,
  2266.                               png_size_t prefix_size, png_size_t *newlength)
  2267. {
  2268.    static char msg[] = "Error decoding compressed text";
  2269.    png_charp text = 0;
  2270.    png_size_t text_size;
  2271.  
  2272.    if (comp_type == 0)
  2273.    {
  2274.       int ret = 0;
  2275.       png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size);
  2276.       png_ptr->zstream.avail_in = (uInt)(chunklength - prefix_size);
  2277.       png_ptr->zstream.next_out = png_ptr->zbuf;
  2278.       png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
  2279.  
  2280.       text_size = 0;
  2281.       text = 0;
  2282.  
  2283.       while (png_ptr->zstream.avail_in)
  2284.       {
  2285.          ret = inflate(&png_ptr->zstream, 1);
  2286.          if (ret != 0 && ret != 1)
  2287.          {
  2288.             if (png_ptr->zstream.msg != 0)
  2289.                png_warning(png_ptr, png_ptr->zstream.msg);
  2290.             else
  2291.                png_warning(png_ptr, msg);
  2292.             inflateReset(&png_ptr->zstream);
  2293.             png_ptr->zstream.avail_in = 0;
  2294.  
  2295.             if (text ==  0)
  2296.             {
  2297.                text_size = prefix_size + sizeof(msg) + 1;
  2298.                text = (png_charp)png_malloc(png_ptr, text_size);
  2299.                __memcpy(text, chunkdata, prefix_size);
  2300.             }
  2301.  
  2302.             text[text_size - 1] = 0x00;
  2303. #line 210
  2304.             text_size = (png_size_t)(chunklength - (text - chunkdata) - 1);
  2305.             text_size = sizeof(msg) > text_size ? text_size : sizeof(msg);
  2306.             __memcpy(text + prefix_size, msg, text_size + 1);
  2307.             break;
  2308.          }
  2309.          if (!png_ptr->zstream.avail_out || ret == 1)
  2310.          {
  2311.             if (text == 0)
  2312.             {
  2313.                text_size = prefix_size +
  2314.                    png_ptr->zbuf_size - png_ptr->zstream.avail_out;
  2315.                text = (png_charp)png_malloc(png_ptr, text_size + 1);
  2316.  
  2317. __memcpy(text + prefix_size, png_ptr->zbuf, text_size - prefix_size);
  2318.                __memcpy(text, chunkdata, prefix_size);
  2319.                *(text + text_size) = 0x00;
  2320.             }
  2321.             else
  2322.             {
  2323.                png_charp tmp;
  2324.  
  2325.                tmp = text;
  2326.                text = (png_charp)png_malloc(png_ptr, (png_uint_32)(text_size +
  2327.                   png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1));
  2328.                __memcpy(text, tmp, text_size);
  2329.                png_free(png_ptr, tmp);
  2330.  
  2331. __memcpy(text + text_size, png_ptr->zbuf, (png_ptr->zbuf_size - png_ptr->zstream.avail_out));
  2332.                text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
  2333.                *(text + text_size) = 0x00;
  2334.             }
  2335.             if (ret == 1)
  2336.                break;
  2337.             else
  2338.             {
  2339.                png_ptr->zstream.next_out = png_ptr->zbuf;
  2340.                png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
  2341.             }
  2342.          }
  2343.       }
  2344.       if (ret != 1)
  2345.       {
  2346.  
  2347.          char umsg[50];
  2348.  
  2349.          if (ret == (-5))
  2350.             sprintf(umsg,"Buffer error in compressed datastream in %s chunk",
  2351.                 png_ptr->chunk_name);
  2352.          else if (ret == (-3))
  2353.             sprintf(umsg,"Data error in compressed datastream in %s chunk",
  2354.                 png_ptr->chunk_name);
  2355.          else
  2356.             sprintf(umsg,"Incomplete compressed datastream in %s chunk",
  2357.                 png_ptr->chunk_name);
  2358.          png_warning(png_ptr, umsg);
  2359. #line 269
  2360.       }
  2361.  
  2362.       inflateReset(&png_ptr->zstream);
  2363.       png_ptr->zstream.avail_in = 0;
  2364.  
  2365.       png_free(png_ptr, chunkdata);
  2366.       chunkdata = text;
  2367.       *newlength=text_size;
  2368.    }
  2369.    else  
  2370.    {
  2371.  
  2372.       char umsg[50];
  2373.  
  2374.       sprintf(umsg, "Unknown zTXt compression type %d", comp_type);
  2375.       png_warning(png_ptr, umsg);
  2376. #line 290
  2377.       text_size = (png_size_t)(chunklength - (text - chunkdata));
  2378.       text_size = sizeof(msg) > text_size ? text_size : sizeof(msg);
  2379.       __memcpy(text, msg, text_size);
  2380.    }
  2381.  
  2382.    return chunkdata;
  2383. }
  2384. #line 300
  2385. void  
  2386. png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2387. {
  2388.    png_byte buf[13];
  2389.    png_uint_32 width, height;
  2390.    int bit_depth, color_type, compression_type, filter_type;
  2391.    int interlace_type;
  2392.  
  2393.    ;
  2394.  
  2395.    if (png_ptr->mode & 0x01)
  2396.       png_error(png_ptr, "Out of place IHDR");
  2397. #line 314
  2398.    if (length != 13)
  2399.       png_error(png_ptr, "Invalid IHDR chunk");
  2400.  
  2401.    png_ptr->mode |= 0x01;
  2402.  
  2403.    png_crc_read(png_ptr, buf, 13);
  2404.    png_crc_finish(png_ptr, 0);
  2405.  
  2406.    width = png_get_uint_32(buf);
  2407.    height = png_get_uint_32(buf + 4);
  2408.    bit_depth = buf[8];
  2409.    color_type = buf[9];
  2410.    compression_type = buf[10];
  2411.    filter_type = buf[11];
  2412.    interlace_type = buf[12];
  2413. #line 331
  2414.    if (width == 0 || width > ((png_uint_32)0x7fffffffL) || height == 0 ||
  2415.         height > ((png_uint_32)0x7fffffffL))
  2416.       png_error(png_ptr, "Invalid image size in IHDR");
  2417. #line 336
  2418.    if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
  2419.       bit_depth != 8 && bit_depth != 16)
  2420.       png_error(png_ptr, "Invalid bit depth in IHDR");
  2421.  
  2422.    if (color_type < 0 || color_type == 1 ||
  2423.       color_type == 5 || color_type > 6)
  2424.       png_error(png_ptr, "Invalid color type in IHDR");
  2425.  
  2426.    if (((color_type == (2 | 1)) && bit_depth > 8) ||
  2427.        ((color_type == (2) ||
  2428.          color_type == (4) ||
  2429.          color_type == (2 | 4)) && bit_depth < 8))
  2430.       png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
  2431.  
  2432.    if (interlace_type >= 2)
  2433.       png_error(png_ptr, "Unknown interlace method in IHDR");
  2434.  
  2435.    if (compression_type != 0)
  2436.       png_error(png_ptr, "Unknown compression method in IHDR");
  2437.  
  2438.    if (filter_type != 0)
  2439.       png_error(png_ptr, "Unknown filter method in IHDR");
  2440. #line 360
  2441.    png_ptr->width = width;
  2442.    png_ptr->height = height;
  2443.    png_ptr->bit_depth = (png_byte)bit_depth;
  2444.    png_ptr->interlaced = (png_byte)interlace_type;
  2445.    png_ptr->color_type = (png_byte)color_type;
  2446. #line 367
  2447.    switch (png_ptr->color_type)
  2448.    {
  2449.       case 0:
  2450.       case (2 | 1):
  2451.          png_ptr->channels = 1;
  2452.          break;
  2453.       case (2):
  2454.          png_ptr->channels = 3;
  2455.          break;
  2456.       case (4):
  2457.          png_ptr->channels = 2;
  2458.          break;
  2459.       case (2 | 4):
  2460.          png_ptr->channels = 4;
  2461.          break;
  2462.    }
  2463. #line 385
  2464.    png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth *
  2465.    png_ptr->channels);
  2466.    png_ptr->rowbytes = ((png_ptr->width *
  2467.       (png_uint_32)png_ptr->pixel_depth + 7) >> 3);
  2468.    ;
  2469.    ;
  2470.    ;
  2471.    png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
  2472.       color_type, interlace_type, compression_type, filter_type);
  2473. }
  2474. #line 397
  2475. void  
  2476. png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2477. {
  2478.    png_colorp palette;
  2479.    int num, i;
  2480.  
  2481.    png_colorp pal_ptr;
  2482. #line 406
  2483.    ;
  2484.  
  2485.    if (!(png_ptr->mode & 0x01))
  2486.       png_error(png_ptr, "Missing IHDR before PLTE");
  2487.    else if (png_ptr->mode & 0x04)
  2488.    {
  2489.       png_warning(png_ptr, "Invalid PLTE after IDAT");
  2490.       png_crc_finish(png_ptr, length);
  2491.       return;
  2492.    }
  2493.    else if (png_ptr->mode & 0x02)
  2494.       png_error(png_ptr, "Duplicate PLTE chunk");
  2495.  
  2496.    png_ptr->mode |= 0x02;
  2497. #line 429
  2498.    if (length > 768 || length % 3)
  2499.    {
  2500.       if (png_ptr->color_type != (2 | 1))
  2501.       {
  2502.          png_warning(png_ptr, "Invalid palette chunk");
  2503.          png_crc_finish(png_ptr, length);
  2504.          return;
  2505.       }
  2506.       else
  2507.       {
  2508.          png_error(png_ptr, "Invalid palette chunk");
  2509.       }
  2510.    }
  2511.  
  2512.    num = (int)length / 3;
  2513.  
  2514.    palette = (png_colorp)png_zalloc(png_ptr, (uInt)num, sizeof (png_color));
  2515. #line 448
  2516.    for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
  2517.    {
  2518.       png_byte buf[3];
  2519.  
  2520.       png_crc_read(png_ptr, buf, 3);
  2521.       pal_ptr->red = buf[0];
  2522.       pal_ptr->green = buf[1];
  2523.       pal_ptr->blue = buf[2];
  2524.    }
  2525. #line 477
  2526.    {
  2527.       png_crc_finish(png_ptr, 0);
  2528.    }
  2529. #line 507
  2530.    png_ptr->palette = palette;
  2531.    png_ptr->num_palette = (png_uint_16)num;
  2532. #line 511
  2533.    png_free_data(png_ptr, info_ptr, 0x1000, 0);
  2534.    png_ptr->free_me |= 0x1000;
  2535. #line 516
  2536.    png_set_PLTE(png_ptr, info_ptr, palette, num);
  2537. #line 519
  2538.    if (png_ptr->color_type == (2 | 1))
  2539.    {
  2540.       if (info_ptr != 0 && (info_ptr->valid & 0x0010))
  2541.       {
  2542.          if (png_ptr->num_trans > (png_uint_16)num)
  2543.          {
  2544.             png_warning(png_ptr, "Truncating incorrect tRNS chunk length");
  2545.             png_ptr->num_trans = (png_uint_16)num;
  2546.          }
  2547.          if (info_ptr->num_trans > (png_uint_16)num)
  2548.          {
  2549.             png_warning(png_ptr, "Truncating incorrect info tRNS chunk length");
  2550.             info_ptr->num_trans = (png_uint_16)num;
  2551.          }
  2552.       }
  2553.    }
  2554. #line 537
  2555. }
  2556.  
  2557. void  
  2558. png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2559. {
  2560.    ;
  2561.  
  2562.    if (!(png_ptr->mode & 0x01) || !(png_ptr->mode & 0x04))
  2563.    {
  2564.       png_error(png_ptr, "No image in file");
  2565. #line 549
  2566.       if (info_ptr == 0)
  2567.          return;
  2568.    }
  2569.  
  2570.    png_ptr->mode |= (0x08 | 0x10);
  2571.  
  2572.    if (length != 0)
  2573.    {
  2574.       png_warning(png_ptr, "Incorrect IEND chunk length");
  2575.    }
  2576.    png_crc_finish(png_ptr, length);
  2577. }
  2578. #line 563
  2579. void  
  2580. png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2581. {
  2582.    png_fixed_point igamma;
  2583.  
  2584.    float file_gamma;
  2585.  
  2586.    png_byte buf[4];
  2587.  
  2588.    ;
  2589.  
  2590.    if (!(png_ptr->mode & 0x01))
  2591.       png_error(png_ptr, "Missing IHDR before gAMA");
  2592.    else if (png_ptr->mode & 0x04)
  2593.    {
  2594.       png_warning(png_ptr, "Invalid gAMA after IDAT");
  2595.       png_crc_finish(png_ptr, length);
  2596.       return;
  2597.    }
  2598.    else if (png_ptr->mode & 0x02)
  2599.  
  2600.       png_warning(png_ptr, "Out of place gAMA chunk");
  2601.  
  2602.    else if (info_ptr != 0 && (info_ptr->valid & 0x0001)
  2603.  
  2604.       && !(info_ptr->valid & 0x0800)
  2605.  
  2606.       )
  2607.    {
  2608.       png_warning(png_ptr, "Duplicate gAMA chunk");
  2609.       png_crc_finish(png_ptr, length);
  2610.       return;
  2611.    }
  2612.  
  2613.    if (length != 4)
  2614.    {
  2615.       png_warning(png_ptr, "Incorrect gAMA chunk length");
  2616.       png_crc_finish(png_ptr, length);
  2617.       return;
  2618.    }
  2619.  
  2620.    png_crc_read(png_ptr, buf, 4);
  2621.    if (png_crc_finish(png_ptr, 0))
  2622.       return;
  2623.  
  2624.    igamma = (png_fixed_point)png_get_uint_32(buf);
  2625.  
  2626.    if (igamma == 0)
  2627.       return;
  2628. #line 614
  2629.    if (info_ptr->valid & 0x0800)
  2630.       if(igamma < 45000L || igamma > 46000L)
  2631.       {
  2632.          png_warning(png_ptr,
  2633.            "Ignoring incorrect gAMA value when sRGB is also present");
  2634.  
  2635.          fprintf(stderr, "gamma = (%d/100000)\n", (int)igamma);
  2636.  
  2637.          return;
  2638.       }
  2639. #line 627
  2640.    file_gamma = (float)igamma / (float)100000.0;
  2641.  
  2642.      png_ptr->gamma = file_gamma;
  2643.  
  2644.      png_set_gAMA(png_ptr, info_ptr, file_gamma);
  2645. #line 634
  2646.    png_set_gAMA_fixed(png_ptr, info_ptr, igamma);
  2647.  
  2648. }
  2649. #line 640
  2650. void  
  2651. png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2652. {
  2653.    png_size_t truelen;
  2654.    png_byte buf[4];
  2655.  
  2656.    ;
  2657.  
  2658.    buf[0] = buf[1] = buf[2] = buf[3] = 0;
  2659.  
  2660.    if (!(png_ptr->mode & 0x01))
  2661.       png_error(png_ptr, "Missing IHDR before sBIT");
  2662.    else if (png_ptr->mode & 0x04)
  2663.    {
  2664.       png_warning(png_ptr, "Invalid sBIT after IDAT");
  2665.       png_crc_finish(png_ptr, length);
  2666.       return;
  2667.    }
  2668.    else if (png_ptr->mode & 0x02)
  2669.    {
  2670.  
  2671.       png_warning(png_ptr, "Out of place sBIT chunk");
  2672.    }
  2673.    else if (info_ptr != 0 && (info_ptr->valid & 0x0002))
  2674.    {
  2675.       png_warning(png_ptr, "Duplicate sBIT chunk");
  2676.       png_crc_finish(png_ptr, length);
  2677.       return;
  2678.    }
  2679.  
  2680.    if (png_ptr->color_type == (2 | 1))
  2681.       truelen = 3;
  2682.    else
  2683.       truelen = (png_size_t)png_ptr->channels;
  2684.  
  2685.    if (length != truelen)
  2686.    {
  2687.       png_warning(png_ptr, "Incorrect sBIT chunk length");
  2688.       png_crc_finish(png_ptr, length);
  2689.       return;
  2690.    }
  2691.  
  2692.    png_crc_read(png_ptr, buf, truelen);
  2693.    if (png_crc_finish(png_ptr, 0))
  2694.       return;
  2695.  
  2696.    if (png_ptr->color_type & 2)
  2697.    {
  2698.       png_ptr->sig_bit.red = buf[0];
  2699.       png_ptr->sig_bit.green = buf[1];
  2700.       png_ptr->sig_bit.blue = buf[2];
  2701.       png_ptr->sig_bit.alpha = buf[3];
  2702.    }
  2703.    else
  2704.    {
  2705.       png_ptr->sig_bit.gray = buf[0];
  2706.       png_ptr->sig_bit.red = buf[0];
  2707.       png_ptr->sig_bit.green = buf[0];
  2708.       png_ptr->sig_bit.blue = buf[0];
  2709.       png_ptr->sig_bit.alpha = buf[1];
  2710.    }
  2711.    png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit));
  2712. }
  2713. #line 706
  2714. void  
  2715. png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2716. {
  2717.    png_byte buf[4];
  2718.  
  2719.    float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
  2720.  
  2721.    png_fixed_point int_x_white, int_y_white, int_x_red, int_y_red, int_x_green,
  2722.       int_y_green, int_x_blue, int_y_blue;
  2723.  
  2724.    ;
  2725.  
  2726.    if (!(png_ptr->mode & 0x01))
  2727.       png_error(png_ptr, "Missing IHDR before cHRM");
  2728.    else if (png_ptr->mode & 0x04)
  2729.    {
  2730.       png_warning(png_ptr, "Invalid cHRM after IDAT");
  2731.       png_crc_finish(png_ptr, length);
  2732.       return;
  2733.    }
  2734.    else if (png_ptr->mode & 0x02)
  2735.  
  2736.       png_warning(png_ptr, "Missing PLTE before cHRM");
  2737.  
  2738.    else if (info_ptr != 0 && (info_ptr->valid & 0x0004)
  2739.  
  2740.       && !(info_ptr->valid & 0x0800)
  2741.  
  2742.       )
  2743.    {
  2744.       png_warning(png_ptr, "Duplicate cHRM chunk");
  2745.       png_crc_finish(png_ptr, length);
  2746.       return;
  2747.    }
  2748.  
  2749.    if (length != 32)
  2750.    {
  2751.       png_warning(png_ptr, "Incorrect cHRM chunk length");
  2752.       png_crc_finish(png_ptr, length);
  2753.       return;
  2754.    }
  2755.  
  2756.    png_crc_read(png_ptr, buf, 4);
  2757.    int_x_white = (png_fixed_point)png_get_uint_32(buf);
  2758.  
  2759.    png_crc_read(png_ptr, buf, 4);
  2760.    int_y_white = (png_fixed_point)png_get_uint_32(buf);
  2761.  
  2762.    if (int_x_white > 80000L || int_y_white > 80000L ||
  2763.       int_x_white + int_y_white > 100000L)
  2764.    {
  2765.       png_warning(png_ptr, "Invalid cHRM white point");
  2766.       png_crc_finish(png_ptr, 24);
  2767.       return;
  2768.    }
  2769.  
  2770.    png_crc_read(png_ptr, buf, 4);
  2771.    int_x_red = (png_fixed_point)png_get_uint_32(buf);
  2772.  
  2773.    png_crc_read(png_ptr, buf, 4);
  2774.    int_y_red = (png_fixed_point)png_get_uint_32(buf);
  2775.  
  2776.    if (int_x_red > 80000L || int_y_red > 80000L ||
  2777.       int_x_red + int_y_red > 100000L)
  2778.    {
  2779.       png_warning(png_ptr, "Invalid cHRM red point");
  2780.       png_crc_finish(png_ptr, 16);
  2781.       return;
  2782.    }
  2783.  
  2784.    png_crc_read(png_ptr, buf, 4);
  2785.    int_x_green = (png_fixed_point)png_get_uint_32(buf);
  2786.  
  2787.    png_crc_read(png_ptr, buf, 4);
  2788.    int_y_green = (png_fixed_point)png_get_uint_32(buf);
  2789.  
  2790.    if (int_x_green > 80000L || int_y_green > 80000L ||
  2791.       int_x_green + int_y_green > 100000L)
  2792.    {
  2793.       png_warning(png_ptr, "Invalid cHRM green point");
  2794.       png_crc_finish(png_ptr, 8);
  2795.       return;
  2796.    }
  2797.  
  2798.    png_crc_read(png_ptr, buf, 4);
  2799.    int_x_blue = (png_fixed_point)png_get_uint_32(buf);
  2800.  
  2801.    png_crc_read(png_ptr, buf, 4);
  2802.    int_y_blue = (png_fixed_point)png_get_uint_32(buf);
  2803.  
  2804.    if (int_x_blue > 80000L || int_y_blue > 80000L ||
  2805.       int_x_blue + int_y_blue > 100000L)
  2806.    {
  2807.       png_warning(png_ptr, "Invalid cHRM blue point");
  2808.       png_crc_finish(png_ptr, 0);
  2809.       return;
  2810.    }
  2811.  
  2812.    white_x = (float)int_x_white / (float)100000.0;
  2813.    white_y = (float)int_y_white / (float)100000.0;
  2814.    red_x   = (float)int_x_red   / (float)100000.0;
  2815.    red_y   = (float)int_y_red   / (float)100000.0;
  2816.    green_x = (float)int_x_green / (float)100000.0;
  2817.    green_y = (float)int_y_green / (float)100000.0;
  2818.    blue_x  = (float)int_x_blue  / (float)100000.0;
  2819.    blue_y  = (float)int_y_blue  / (float)100000.0;
  2820. #line 815
  2821.    if (info_ptr->valid & 0x0800)
  2822.       {
  2823.       if (__abs(int_x_white - 31270L) > 1000 ||
  2824.           __abs(int_y_white - 32900L) > 1000 ||
  2825.           __abs(int_x_red - 64000L) > 1000 ||
  2826.           __abs(int_y_red - 33000L) > 1000 ||
  2827.           __abs(int_x_green - 30000L) > 1000 ||
  2828.           __abs(int_y_green - 60000L) > 1000 ||
  2829.           __abs(int_x_blue - 15000L) > 1000 ||
  2830.           __abs(int_y_blue - 6000L) > 1000)
  2831.          {
  2832.  
  2833.             png_warning(png_ptr,
  2834.               "Ignoring incorrect cHRM value when sRGB is also present");
  2835. #line 831
  2836.             fprintf(stderr,"wx=%f, wy=%f, rx=%f, ry=%f\n",
  2837.                white_x, white_y, red_x, red_y);
  2838.             fprintf(stderr,"gx=%f, gy=%f, bx=%f, by=%f\n",
  2839.                green_x, green_y, blue_x, blue_y);
  2840. #line 842
  2841.          }
  2842.          png_crc_finish(png_ptr, 0);
  2843.          return;
  2844.       }
  2845. #line 849
  2846.    png_set_cHRM(png_ptr, info_ptr,
  2847.       white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y);
  2848. #line 853
  2849.    png_set_cHRM_fixed(png_ptr, info_ptr,
  2850.       int_x_white, int_y_white, int_x_red, int_y_red, int_x_green,
  2851.       int_y_green, int_x_blue, int_y_blue);
  2852.  
  2853.    if (png_crc_finish(png_ptr, 0))
  2854.       return;
  2855. }
  2856. #line 863
  2857. void  
  2858. png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2859. {
  2860.    int intent;
  2861.    png_byte buf[1];
  2862.  
  2863.    ;
  2864.  
  2865.    if (!(png_ptr->mode & 0x01))
  2866.       png_error(png_ptr, "Missing IHDR before sRGB");
  2867.    else if (png_ptr->mode & 0x04)
  2868.    {
  2869.       png_warning(png_ptr, "Invalid sRGB after IDAT");
  2870.       png_crc_finish(png_ptr, length);
  2871.       return;
  2872.    }
  2873.    else if (png_ptr->mode & 0x02)
  2874.  
  2875.       png_warning(png_ptr, "Out of place sRGB chunk");
  2876.  
  2877.    else if (info_ptr != 0 && (info_ptr->valid & 0x0800))
  2878.    {
  2879.       png_warning(png_ptr, "Duplicate sRGB chunk");
  2880.       png_crc_finish(png_ptr, length);
  2881.       return;
  2882.    }
  2883.  
  2884.    if (length != 1)
  2885.    {
  2886.       png_warning(png_ptr, "Incorrect sRGB chunk length");
  2887.       png_crc_finish(png_ptr, length);
  2888.       return;
  2889.    }
  2890.  
  2891.    png_crc_read(png_ptr, buf, 1);
  2892.    if (png_crc_finish(png_ptr, 0))
  2893.       return;
  2894.  
  2895.    intent = buf[0];
  2896.  
  2897.    if (intent >= 4)
  2898.    {
  2899.       png_warning(png_ptr, "Unknown sRGB intent");
  2900.       return;
  2901.    }
  2902. #line 910
  2903.    if ((info_ptr->valid & 0x0001))
  2904.    {
  2905.    int igamma;
  2906.  
  2907.       igamma=(int)info_ptr->int_gamma;
  2908. #line 931
  2909.       if(igamma < 45000L || igamma > 46000L)
  2910.       {
  2911.          png_warning(png_ptr,
  2912.            "Ignoring incorrect gAMA value when sRGB is also present");
  2913. #line 937
  2914.          fprintf(stderr,"incorrect gamma=(%d/100000)\n",(int)png_ptr->int_gamma);
  2915. #line 944
  2916.       }
  2917.    }
  2918. #line 950
  2919.    if (info_ptr->valid & 0x0004)
  2920.       if (__abs(info_ptr->int_x_white - 31270L) > 1000 ||
  2921.           __abs(info_ptr->int_y_white - 32900L) > 1000 ||
  2922.           __abs(info_ptr->int_x_red - 64000L) > 1000 ||
  2923.           __abs(info_ptr->int_y_red - 33000L) > 1000 ||
  2924.           __abs(info_ptr->int_x_green - 30000L) > 1000 ||
  2925.           __abs(info_ptr->int_y_green - 60000L) > 1000 ||
  2926.           __abs(info_ptr->int_x_blue - 15000L) > 1000 ||
  2927.           __abs(info_ptr->int_y_blue - 6000L) > 1000)
  2928.          {
  2929.             png_warning(png_ptr,
  2930.               "Ignoring incorrect cHRM value when sRGB is also present");
  2931.          }
  2932. #line 966
  2933.    png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, intent);
  2934. }
  2935. #line 971
  2936. void  
  2937. png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  2938.  
  2939. {
  2940.    png_charp chunkdata;
  2941.    png_byte compression_type;
  2942.    png_charp profile;
  2943.    png_uint_32 skip = 0;
  2944.    png_size_t slength, prefix_length, data_length;
  2945.  
  2946.    ;
  2947.  
  2948.    if (!(png_ptr->mode & 0x01))
  2949.       png_error(png_ptr, "Missing IHDR before iCCP");
  2950.    else if (png_ptr->mode & 0x04)
  2951.    {
  2952.       png_warning(png_ptr, "Invalid iCCP after IDAT");
  2953.       png_crc_finish(png_ptr, length);
  2954.       return;
  2955.    }
  2956.    else if (png_ptr->mode & 0x02)
  2957.  
  2958.       png_warning(png_ptr, "Out of place iCCP chunk");
  2959.  
  2960.    else if (info_ptr != 0 && (info_ptr->valid & 0x1000))
  2961.    {
  2962.       png_warning(png_ptr, "Duplicate iCCP chunk");
  2963.       png_crc_finish(png_ptr, length);
  2964.       return;
  2965.    }
  2966. #line 1011
  2967.    chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
  2968.    slength = (png_size_t)length;
  2969.    png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
  2970.  
  2971.    if (png_crc_finish(png_ptr, skip))
  2972.    {
  2973.       png_free(png_ptr, chunkdata);
  2974.       return;
  2975.    }
  2976.  
  2977.    chunkdata[slength] = 0x00;
  2978.  
  2979.    for (profile = chunkdata; *profile; profile++)
  2980.         ;
  2981.  
  2982.    ++profile;
  2983. #line 1030
  2984.    if (*profile || profile >= chunkdata + slength)
  2985.    {
  2986.       png_free(png_ptr, chunkdata);
  2987.       png_warning(png_ptr, "malformed iCCP chunk");
  2988.       return;
  2989.    }
  2990. #line 1038
  2991.    compression_type = *profile++;
  2992.  
  2993.    prefix_length = profile - chunkdata;
  2994.    chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata,
  2995.                                     slength, prefix_length, &data_length);
  2996.  
  2997.    png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type,
  2998.                 chunkdata + prefix_length, data_length);
  2999.    png_free(png_ptr, chunkdata);
  3000. }
  3001. #line 1051
  3002. void  
  3003. png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3004.  
  3005. {
  3006.    png_bytep chunkdata;
  3007.    png_bytep entry_start;
  3008.    png_sPLT_t new_palette;
  3009. #line 1061
  3010.    int data_length, entry_size, i;
  3011.    png_uint_32 skip = 0;
  3012.    png_size_t slength;
  3013.  
  3014.    ;
  3015.  
  3016.    if (!(png_ptr->mode & 0x01))
  3017.       png_error(png_ptr, "Missing IHDR before sPLT");
  3018.    else if (png_ptr->mode & 0x04)
  3019.    {
  3020.       png_warning(png_ptr, "Invalid sPLT after IDAT");
  3021.       png_crc_finish(png_ptr, length);
  3022.       return;
  3023.    }
  3024. #line 1085
  3025.    chunkdata = (png_bytep)png_malloc(png_ptr, length + 1);
  3026.    slength = (png_size_t)length;
  3027.    png_crc_read(png_ptr, chunkdata, slength);
  3028.  
  3029.    if (png_crc_finish(png_ptr, skip))
  3030.    {
  3031.       png_free(png_ptr, chunkdata);
  3032.       return;
  3033.    }
  3034.  
  3035.    chunkdata[slength] = 0x00;
  3036.  
  3037.    for (entry_start = chunkdata; *entry_start; entry_start++)
  3038.         ;
  3039.    ++entry_start;
  3040. #line 1102
  3041.    if (entry_start > chunkdata + slength)
  3042.    {
  3043.       png_free(png_ptr, chunkdata);
  3044.       png_warning(png_ptr, "malformed sPLT chunk");
  3045.       return;
  3046.    }
  3047.  
  3048.    new_palette.depth = *entry_start++;
  3049.    entry_size = (new_palette.depth == 8 ? 6 : 10);
  3050.    data_length = (slength - (entry_start - chunkdata));
  3051. #line 1114
  3052.    if (data_length % entry_size)
  3053.    {
  3054.       png_free(png_ptr, chunkdata);
  3055.       png_error(png_ptr, "sPLT chunk has bad length");
  3056.    }
  3057.  
  3058.    new_palette.nentries = data_length / entry_size;
  3059.    new_palette.entries = (png_sPLT_entryp)png_malloc(
  3060.        png_ptr, new_palette.nentries * sizeof(png_sPLT_entry));
  3061. #line 1125
  3062.    for (i = 0; i < new_palette.nentries; i++)
  3063.    {
  3064.       png_sPLT_entryp pp = new_palette.entries + i;
  3065.  
  3066.       if (new_palette.depth == 8)
  3067.       {
  3068.           pp->red = *entry_start++;
  3069.           pp->green = *entry_start++;
  3070.           pp->blue = *entry_start++;
  3071.           pp->alpha = *entry_start++;
  3072.       }
  3073.       else
  3074.       {
  3075.           pp->red   = png_get_uint_16(entry_start); entry_start += 2;
  3076.           pp->green = png_get_uint_16(entry_start); entry_start += 2;
  3077.           pp->blue  = png_get_uint_16(entry_start); entry_start += 2;
  3078.           pp->alpha = png_get_uint_16(entry_start); entry_start += 2;
  3079.       }
  3080.       pp->frequency = png_get_uint_16(entry_start); entry_start += 2;
  3081.    }
  3082. #line 1169
  3083.    new_palette.name = (png_charp)chunkdata;
  3084.  
  3085.    png_set_sPLT(png_ptr, info_ptr, &new_palette, 1);
  3086.  
  3087.    png_free(png_ptr, chunkdata);
  3088.    png_free(png_ptr, new_palette.entries);
  3089. }
  3090. #line 1179
  3091. void  
  3092. png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3093. {
  3094.    ;
  3095.  
  3096.    if (!(png_ptr->mode & 0x01))
  3097.       png_error(png_ptr, "Missing IHDR before tRNS");
  3098.    else if (png_ptr->mode & 0x04)
  3099.    {
  3100.       png_warning(png_ptr, "Invalid tRNS after IDAT");
  3101.       png_crc_finish(png_ptr, length);
  3102.       return;
  3103.    }
  3104.    else if (info_ptr != 0 && (info_ptr->valid & 0x0010))
  3105.    {
  3106.       png_warning(png_ptr, "Duplicate tRNS chunk");
  3107.       png_crc_finish(png_ptr, length);
  3108.       return;
  3109.    }
  3110.  
  3111.    if (png_ptr->color_type == (2 | 1))
  3112.    {
  3113.       if (!(png_ptr->mode & 0x02))
  3114.       {
  3115.  
  3116.          png_warning(png_ptr, "Missing PLTE before tRNS");
  3117.       }
  3118.       else if (length > (png_uint_32)png_ptr->num_palette)
  3119.       {
  3120.          png_warning(png_ptr, "Incorrect tRNS chunk length");
  3121.          png_crc_finish(png_ptr, length);
  3122.          return;
  3123.       }
  3124.       if (length == 0)
  3125.       {
  3126.          png_warning(png_ptr, "Zero length tRNS chunk");
  3127.          png_crc_finish(png_ptr, length);
  3128.          return;
  3129.       }
  3130.  
  3131.       png_ptr->trans = (png_bytep)png_malloc(png_ptr, length);
  3132.       png_crc_read(png_ptr, png_ptr->trans, (png_size_t)length);
  3133.       png_ptr->num_trans = (png_uint_16)length;
  3134.    }
  3135.    else if (png_ptr->color_type == (2))
  3136.    {
  3137.       png_byte buf[6];
  3138.  
  3139.       if (length != 6)
  3140.       {
  3141.          png_warning(png_ptr, "Incorrect tRNS chunk length");
  3142.          png_crc_finish(png_ptr, length);
  3143.          return;
  3144.       }
  3145.  
  3146.       png_crc_read(png_ptr, buf, (png_size_t)length);
  3147.       png_ptr->num_trans = 1;
  3148.       png_ptr->trans_values.red = png_get_uint_16(buf);
  3149.       png_ptr->trans_values.green = png_get_uint_16(buf + 2);
  3150.       png_ptr->trans_values.blue = png_get_uint_16(buf + 4);
  3151.    }
  3152.    else if (png_ptr->color_type == 0)
  3153.    {
  3154.       png_byte buf[6];
  3155.  
  3156.       if (length != 2)
  3157.       {
  3158.          png_warning(png_ptr, "Incorrect tRNS chunk length");
  3159.          png_crc_finish(png_ptr, length);
  3160.          return;
  3161.       }
  3162.  
  3163.       png_crc_read(png_ptr, buf, 2);
  3164.       png_ptr->num_trans = 1;
  3165.       png_ptr->trans_values.gray = png_get_uint_16(buf);
  3166.    }
  3167.    else
  3168.    {
  3169.       png_warning(png_ptr, "tRNS chunk not allowed with alpha channel");
  3170.       png_crc_finish(png_ptr, length);
  3171.       return;
  3172.    }
  3173.  
  3174.    if (png_crc_finish(png_ptr, 0))
  3175.       return;
  3176. #line 1266
  3177.    png_free_data(png_ptr, info_ptr, 0x2000, 0);
  3178.    if (png_ptr->color_type == (2 | 1))
  3179.       png_ptr->free_me |= 0x2000;
  3180. #line 1273
  3181.    png_set_tRNS(png_ptr, info_ptr, png_ptr->trans, png_ptr->num_trans,
  3182.       &(png_ptr->trans_values));
  3183. }
  3184. #line 1279
  3185. void  
  3186. png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3187. {
  3188.    png_size_t truelen;
  3189.    png_byte buf[6];
  3190.  
  3191.    ;
  3192.  
  3193.    if (!(png_ptr->mode & 0x01))
  3194.       png_error(png_ptr, "Missing IHDR before bKGD");
  3195.    else if (png_ptr->mode & 0x04)
  3196.    {
  3197.       png_warning(png_ptr, "Invalid bKGD after IDAT");
  3198.       png_crc_finish(png_ptr, length);
  3199.       return;
  3200.    }
  3201.    else if (png_ptr->color_type == (2 | 1) &&
  3202.             !(png_ptr->mode & 0x02))
  3203.    {
  3204.       png_warning(png_ptr, "Missing PLTE before bKGD");
  3205.       png_crc_finish(png_ptr, length);
  3206.       return;
  3207.    }
  3208.    else if (info_ptr != 0 && (info_ptr->valid & 0x0020))
  3209.    {
  3210.       png_warning(png_ptr, "Duplicate bKGD chunk");
  3211.       png_crc_finish(png_ptr, length);
  3212.       return;
  3213.    }
  3214.  
  3215.    if (png_ptr->color_type == (2 | 1))
  3216.       truelen = 1;
  3217.    else if (png_ptr->color_type & 2)
  3218.       truelen = 6;
  3219.    else
  3220.       truelen = 2;
  3221.  
  3222.    if (length != truelen)
  3223.    {
  3224.       png_warning(png_ptr, "Incorrect bKGD chunk length");
  3225.       png_crc_finish(png_ptr, length);
  3226.       return;
  3227.    }
  3228.  
  3229.    png_crc_read(png_ptr, buf, truelen);
  3230.    if (png_crc_finish(png_ptr, 0))
  3231.       return;
  3232. #line 1331
  3233.    if (png_ptr->color_type == (2 | 1))
  3234.    {
  3235.       png_ptr->background.index = buf[0];
  3236.       if(info_ptr->num_palette)
  3237.       {
  3238.           if(buf[0] > info_ptr->num_palette)
  3239.           {
  3240.              png_warning(png_ptr, "Incorrect bKGD chunk index value");
  3241.              png_crc_finish(png_ptr, length);
  3242.              return;
  3243.           }
  3244.           png_ptr->background.red =
  3245.              (png_uint_16)png_ptr->palette[buf[0]].red;
  3246.           png_ptr->background.green =
  3247.              (png_uint_16)png_ptr->palette[buf[0]].green;
  3248.           png_ptr->background.blue =
  3249.              (png_uint_16)png_ptr->palette[buf[0]].blue;
  3250.       }
  3251.    }
  3252.    else if (!(png_ptr->color_type & 2))  
  3253.    {
  3254.       png_ptr->background.red =
  3255.       png_ptr->background.green =
  3256.       png_ptr->background.blue =
  3257.       png_ptr->background.gray = png_get_uint_16(buf);
  3258.    }
  3259.    else
  3260.    {
  3261.       png_ptr->background.red = png_get_uint_16(buf);
  3262.       png_ptr->background.green = png_get_uint_16(buf + 2);
  3263.       png_ptr->background.blue = png_get_uint_16(buf + 4);
  3264.    }
  3265.  
  3266.    png_set_bKGD(png_ptr, info_ptr, &(png_ptr->background));
  3267. }
  3268. #line 1369
  3269. void  
  3270. png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3271. {
  3272.    int num, i;
  3273.  
  3274.    ;
  3275.  
  3276.    if (!(png_ptr->mode & 0x01))
  3277.       png_error(png_ptr, "Missing IHDR before hIST");
  3278.    else if (png_ptr->mode & 0x04)
  3279.    {
  3280.       png_warning(png_ptr, "Invalid hIST after IDAT");
  3281.       png_crc_finish(png_ptr, length);
  3282.       return;
  3283.    }
  3284.    else if (!(png_ptr->mode & 0x02))
  3285.    {
  3286.       png_warning(png_ptr, "Missing PLTE before hIST");
  3287.       png_crc_finish(png_ptr, length);
  3288.       return;
  3289.    }
  3290.    else if (info_ptr != 0 && (info_ptr->valid & 0x0040))
  3291.    {
  3292.       png_warning(png_ptr, "Duplicate hIST chunk");
  3293.       png_crc_finish(png_ptr, length);
  3294.       return;
  3295.    }
  3296.  
  3297.    if (length != (png_uint_32)(2 * png_ptr->num_palette))
  3298.    {
  3299.       png_warning(png_ptr, "Incorrect hIST chunk length");
  3300.       png_crc_finish(png_ptr, length);
  3301.       return;
  3302.    }
  3303.  
  3304.    num = (int)length / 2 ;
  3305.    png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
  3306.       (png_uint_32)(num * sizeof (png_uint_16)));
  3307.    for (i = 0; i < num; i++)
  3308.    {
  3309.       png_byte buf[2];
  3310.  
  3311.       png_crc_read(png_ptr, buf, 2);
  3312.       png_ptr->hist[i] = png_get_uint_16(buf);
  3313.    }
  3314.  
  3315.    if (png_crc_finish(png_ptr, 0))
  3316.       return;
  3317. #line 1419
  3318.    png_free_data(png_ptr, info_ptr, 0x0008, 0);
  3319.    png_ptr->free_me |= 0x0008;
  3320. #line 1424
  3321.    png_set_hIST(png_ptr, info_ptr, png_ptr->hist);
  3322. }
  3323. #line 1429
  3324. void  
  3325. png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3326. {
  3327.    png_byte buf[9];
  3328.    png_uint_32 res_x, res_y;
  3329.    int unit_type;
  3330.  
  3331.    ;
  3332.  
  3333.    if (!(png_ptr->mode & 0x01))
  3334.       png_error(png_ptr, "Missing IHDR before pHYs");
  3335.    else if (png_ptr->mode & 0x04)
  3336.    {
  3337.       png_warning(png_ptr, "Invalid pHYs after IDAT");
  3338.       png_crc_finish(png_ptr, length);
  3339.       return;
  3340.    }
  3341.    else if (info_ptr != 0 && (info_ptr->valid & 0x0080))
  3342.    {
  3343.       png_warning(png_ptr, "Duplicate pHYs chunk");
  3344.       png_crc_finish(png_ptr, length);
  3345.       return;
  3346.    }
  3347.  
  3348.    if (length != 9)
  3349.    {
  3350.       png_warning(png_ptr, "Incorrect pHYs chunk length");
  3351.       png_crc_finish(png_ptr, length);
  3352.       return;
  3353.    }
  3354.  
  3355.    png_crc_read(png_ptr, buf, 9);
  3356.    if (png_crc_finish(png_ptr, 0))
  3357.       return;
  3358.  
  3359.    res_x = png_get_uint_32(buf);
  3360.    res_y = png_get_uint_32(buf + 4);
  3361.    unit_type = buf[8];
  3362.    png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type);
  3363. }
  3364. #line 1472
  3365. void  
  3366. png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3367. {
  3368.    png_byte buf[9];
  3369.    png_int_32 offset_x, offset_y;
  3370.    int unit_type;
  3371.  
  3372.    ;
  3373.  
  3374.    if (!(png_ptr->mode & 0x01))
  3375.       png_error(png_ptr, "Missing IHDR before oFFs");
  3376.    else if (png_ptr->mode & 0x04)
  3377.    {
  3378.       png_warning(png_ptr, "Invalid oFFs after IDAT");
  3379.       png_crc_finish(png_ptr, length);
  3380.       return;
  3381.    }
  3382.    else if (info_ptr != 0 && (info_ptr->valid & 0x0100))
  3383.    {
  3384.       png_warning(png_ptr, "Duplicate oFFs chunk");
  3385.       png_crc_finish(png_ptr, length);
  3386.       return;
  3387.    }
  3388.  
  3389.    if (length != 9)
  3390.    {
  3391.       png_warning(png_ptr, "Incorrect oFFs chunk length");
  3392.       png_crc_finish(png_ptr, length);
  3393.       return;
  3394.    }
  3395.  
  3396.    png_crc_read(png_ptr, buf, 9);
  3397.    if (png_crc_finish(png_ptr, 0))
  3398.       return;
  3399.  
  3400.    offset_x = png_get_int_32(buf);
  3401.    offset_y = png_get_int_32(buf + 4);
  3402.    unit_type = buf[8];
  3403.    png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type);
  3404. }
  3405. #line 1516
  3406. void  
  3407. png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3408. {
  3409.    png_charp purpose;
  3410.    png_int_32 X0, X1;
  3411.    png_byte type, nparams;
  3412.    png_charp buf, units, endptr;
  3413.    png_charpp params;
  3414.    png_size_t slength;
  3415.    int i;
  3416.  
  3417.    ;
  3418.  
  3419.    if (!(png_ptr->mode & 0x01))
  3420.       png_error(png_ptr, "Missing IHDR before pCAL");
  3421.    else if (png_ptr->mode & 0x04)
  3422.    {
  3423.       png_warning(png_ptr, "Invalid pCAL after IDAT");
  3424.       png_crc_finish(png_ptr, length);
  3425.       return;
  3426.    }
  3427.    else if (info_ptr != 0 && (info_ptr->valid & 0x0400))
  3428.    {
  3429.       png_warning(png_ptr, "Duplicate pCAL chunk");
  3430.       png_crc_finish(png_ptr, length);
  3431.       return;
  3432.    }
  3433. #line 1545
  3434. ;
  3435.    purpose = (png_charp)png_malloc(png_ptr, length + 1);
  3436.    slength = (png_size_t)length;
  3437.    png_crc_read(png_ptr, (png_bytep)purpose, slength);
  3438.  
  3439.    if (png_crc_finish(png_ptr, 0))
  3440.    {
  3441.       png_free(png_ptr, purpose);
  3442.       return;
  3443.    }
  3444.  
  3445.    purpose[slength] = 0x00;  
  3446.  
  3447.    ;
  3448.    for (buf = purpose; *buf; buf++)
  3449.         ;
  3450.  
  3451.    endptr = purpose + slength;
  3452. #line 1566
  3453.    if (endptr <= buf + 12)
  3454.    {
  3455.       png_warning(png_ptr, "Invalid pCAL data");
  3456.       png_free(png_ptr, purpose);
  3457.       return;
  3458.    }
  3459.  
  3460.    ;
  3461.    X0 = png_get_int_32((png_bytep)buf+1);
  3462.    X1 = png_get_int_32((png_bytep)buf+5);
  3463.    type = buf[9];
  3464.    nparams = buf[10];
  3465.    units = buf + 11;
  3466.  
  3467.    ;
  3468. #line 1583
  3469.    if ((type == 0 && nparams != 2) ||
  3470.        (type == 1 && nparams != 3) ||
  3471.        (type == 2 && nparams != 3) ||
  3472.        (type == 3 && nparams != 4))
  3473.    {
  3474.       png_warning(png_ptr, "Invalid pCAL parameters for equation type");
  3475.       png_free(png_ptr, purpose);
  3476.       return;
  3477.    }
  3478.    else if (type >= 4)
  3479.    {
  3480.       png_warning(png_ptr, "Unrecognized equation type for pCAL chunk");
  3481.    }
  3482.  
  3483.    for (buf = units; *buf; buf++)
  3484.         ;
  3485.  
  3486.    ;
  3487.    params = (png_charpp)png_malloc(png_ptr, (png_uint_32)(nparams
  3488.       *sizeof(png_charp))) ;
  3489. #line 1605
  3490.    for (i = 0; i < (int)nparams; i++)
  3491.    {
  3492.       buf++;  
  3493.  
  3494.       ;
  3495.       for (params[i] = buf; *buf != 0x00 && buf <= endptr; buf++)
  3496.            ;
  3497. #line 1614
  3498.       if (buf > endptr)
  3499.       {
  3500.          png_warning(png_ptr, "Invalid pCAL data");
  3501.          png_free(png_ptr, purpose);
  3502.          png_free(png_ptr, params);
  3503.          return;
  3504.       }
  3505.    }
  3506.  
  3507.    png_set_pCAL(png_ptr, info_ptr, purpose, X0, X1, type, nparams,
  3508.       units, params);
  3509.  
  3510.    png_free(png_ptr, purpose);
  3511.    png_free(png_ptr, params);
  3512. }
  3513. #line 1633
  3514. void  
  3515. png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3516. {
  3517.    png_charp buffer, ep;
  3518.  
  3519.    double width, height;
  3520.    png_charp vp;
  3521. #line 1645
  3522.    png_size_t slength;
  3523.  
  3524.    ;
  3525.  
  3526.    if (!(png_ptr->mode & 0x01))
  3527.       png_error(png_ptr, "Missing IHDR before sCAL");
  3528.    else if (png_ptr->mode & 0x04)
  3529.    {
  3530.       png_warning(png_ptr, "Invalid sCAL after IDAT");
  3531.       png_crc_finish(png_ptr, length);
  3532.       return;
  3533.    }
  3534.    else if (info_ptr != 0 && (info_ptr->valid & 0x4000))
  3535.    {
  3536.       png_warning(png_ptr, "Duplicate sCAL chunk");
  3537.       png_crc_finish(png_ptr, length);
  3538.       return;
  3539.    }
  3540. #line 1665
  3541. ;
  3542.    buffer = (png_charp)png_malloc(png_ptr, length + 1);
  3543.    slength = (png_size_t)length;
  3544.    png_crc_read(png_ptr, (png_bytep)buffer, slength);
  3545.  
  3546.    if (png_crc_finish(png_ptr, 0))
  3547.    {
  3548.       png_free(png_ptr, buffer);
  3549.       return;
  3550.    }
  3551.  
  3552.    buffer[slength] = 0x00;  
  3553.  
  3554.    ep = buffer + 1;         
  3555. #line 1681
  3556.    width = strtod(ep, &vp);
  3557.    if (*vp)
  3558.    {
  3559.        png_warning(png_ptr, "malformed width string in sCAL chunk");
  3560.        return;
  3561.    }
  3562. #line 1694
  3563.    for (ep = buffer; *ep; ep++)
  3564.         ;
  3565.    ep++;
  3566. #line 1699
  3567.    height = strtod(ep, &vp);
  3568.    if (*vp)
  3569.    {
  3570.        png_warning(png_ptr, "malformed height string in sCAL chunk");
  3571.        return;
  3572.    }
  3573. #line 1712
  3574.    if (buffer + slength < ep
  3575.  
  3576.       || width <= 0. || height <= 0.
  3577.  
  3578.       )
  3579.    {
  3580.       png_warning(png_ptr, "Invalid sCAL data");
  3581.       png_free(png_ptr, buffer);
  3582. #line 1724
  3583.       return;
  3584.    }
  3585. #line 1729
  3586.    png_set_sCAL(png_ptr, info_ptr, buffer[0], width, height);
  3587. #line 1736
  3588.    png_free(png_ptr, buffer);
  3589. #line 1741
  3590. }
  3591. #line 1745
  3592. void  
  3593. png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3594. {
  3595.    png_byte buf[7];
  3596.    png_time mod_time;
  3597.  
  3598.    ;
  3599.  
  3600.    if (!(png_ptr->mode & 0x01))
  3601.       png_error(png_ptr, "Out of place tIME chunk");
  3602.    else if (info_ptr != 0 && (info_ptr->valid & 0x0200))
  3603.    {
  3604.       png_warning(png_ptr, "Duplicate tIME chunk");
  3605.       png_crc_finish(png_ptr, length);
  3606.       return;
  3607.    }
  3608.  
  3609.    if (png_ptr->mode & 0x04)
  3610.       png_ptr->mode |= 0x08;
  3611.  
  3612.    if (length != 7)
  3613.    {
  3614.       png_warning(png_ptr, "Incorrect tIME chunk length");
  3615.       png_crc_finish(png_ptr, length);
  3616.       return;
  3617.    }
  3618.  
  3619.    png_crc_read(png_ptr, buf, 7);
  3620.    if (png_crc_finish(png_ptr, 0))
  3621.       return;
  3622.  
  3623.    mod_time.second = buf[6];
  3624.    mod_time.minute = buf[5];
  3625.    mod_time.hour = buf[4];
  3626.    mod_time.day = buf[3];
  3627.    mod_time.month = buf[2];
  3628.    mod_time.year = png_get_uint_16(buf);
  3629.  
  3630.    png_set_tIME(png_ptr, info_ptr, &mod_time);
  3631. }
  3632. #line 1789
  3633. void  
  3634. png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3635. {
  3636.    png_textp text_ptr;
  3637.    png_charp key;
  3638.    png_charp text;
  3639.    png_uint_32 skip = 0;
  3640.    png_size_t slength;
  3641.  
  3642.    ;
  3643.  
  3644.    if (!(png_ptr->mode & 0x01))
  3645.       png_error(png_ptr, "Missing IHDR before tEXt");
  3646.  
  3647.    if (png_ptr->mode & 0x04)
  3648.       png_ptr->mode |= 0x08;
  3649. #line 1815
  3650.    key = (png_charp)png_malloc(png_ptr, length + 1);
  3651.    slength = (png_size_t)length;
  3652.    png_crc_read(png_ptr, (png_bytep)key, slength);
  3653.  
  3654.    if (png_crc_finish(png_ptr, skip))
  3655.    {
  3656.       png_free(png_ptr, key);
  3657.       return;
  3658.    }
  3659.  
  3660.    key[slength] = 0x00;
  3661.  
  3662.    for (text = key; *text; text++)
  3663.         ;
  3664.  
  3665.    if (text != key + slength)
  3666.       text++;
  3667.  
  3668.    text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
  3669.    text_ptr->compression = -1;
  3670.    text_ptr->key = key;
  3671. #line 1841
  3672.    text_ptr->text = text;
  3673.    text_ptr->text_length = __strlen(text);
  3674.  
  3675.    png_set_text(png_ptr, info_ptr, text_ptr, 1);
  3676.  
  3677.    png_free(png_ptr, key);
  3678.    png_free(png_ptr, text_ptr);
  3679. }
  3680. #line 1853
  3681. void  
  3682. png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3683. {
  3684.    png_textp text_ptr;
  3685.    png_charp chunkdata;
  3686.    png_charp text;
  3687.    int comp_type;
  3688.    png_size_t slength, prefix_len, data_len;
  3689.  
  3690.    ;
  3691.    if (!(png_ptr->mode & 0x01))
  3692.       png_error(png_ptr, "Missing IHDR before zTXt");
  3693.  
  3694.    if (png_ptr->mode & 0x04)
  3695.       png_ptr->mode |= 0x08;
  3696. #line 1880
  3697.    chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
  3698.    slength = (png_size_t)length;
  3699.    png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
  3700.    if (png_crc_finish(png_ptr, 0))
  3701.    {
  3702.       png_free(png_ptr, chunkdata);
  3703.       return;
  3704.    }
  3705.  
  3706.    chunkdata[slength] = 0x00;
  3707.  
  3708.    for (text = chunkdata; *text; text++)
  3709.         ;
  3710. #line 1895
  3711.    if (text == chunkdata + slength)
  3712.    {
  3713.       comp_type = -1;
  3714.       png_warning(png_ptr, "Zero length zTXt chunk");
  3715.    }
  3716.    else
  3717.    {
  3718.        comp_type = *(++text);
  3719.        text++;         
  3720.    }
  3721.    prefix_len = text - chunkdata;
  3722.  
  3723.    chunkdata = (png_charp)png_decompress_chunk(png_ptr, comp_type, chunkdata,
  3724.                                     (png_size_t)length, prefix_len, &data_len);
  3725.  
  3726.    text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
  3727.    text_ptr->compression = comp_type;
  3728.    text_ptr->key = chunkdata;
  3729. #line 1918
  3730.    text_ptr->text = chunkdata + prefix_len;
  3731.    text_ptr->text_length = data_len;
  3732.  
  3733.    png_set_text(png_ptr, info_ptr, text_ptr, 1);
  3734.  
  3735.    png_free(png_ptr, text_ptr);
  3736.    png_free(png_ptr, chunkdata);
  3737. }
  3738. #line 2026
  3739. void  
  3740. png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
  3741. {
  3742.    png_uint_32 skip = 0;
  3743.  
  3744.    ;
  3745.  
  3746.    if (png_ptr->mode & 0x04)
  3747.    {
  3748. #line 2038
  3749.       if (__memcmp(png_ptr->chunk_name, png_IDAT, 4))   
  3750.          png_ptr->mode |= 0x08;
  3751.    }
  3752.  
  3753.    png_check_chunk_name(png_ptr, png_ptr->chunk_name);
  3754.  
  3755.    if (!(png_ptr->chunk_name[0] & 0x20))
  3756.    {
  3757.  
  3758.       if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
  3759.            3
  3760.  
  3761.            && png_ptr->read_user_chunk_fn == (png_user_chunk_ptr)0
  3762.  
  3763.         )
  3764.  
  3765.           png_chunk_error(png_ptr, "unknown critical chunk");
  3766.    }
  3767. #line 2058
  3768.    if (png_ptr->flags & 0x8000L)
  3769.    {
  3770.        png_unknown_chunk chunk;
  3771. #line 2070
  3772.        __strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
  3773.        chunk.data = (png_bytep)png_malloc(png_ptr, length);
  3774.        png_crc_read(png_ptr, chunk.data, length);
  3775.        chunk.size = length;
  3776.  
  3777.        if(png_ptr->read_user_chunk_fn != (png_user_chunk_ptr)0)
  3778.        {
  3779.  
  3780.           if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0)
  3781.           {
  3782.              if (!(png_ptr->chunk_name[0] & 0x20))
  3783.                 if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
  3784.                      3)
  3785.                    png_chunk_error(png_ptr, "unknown critical chunk");
  3786.              png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
  3787.           }
  3788.        }
  3789.        else
  3790.  
  3791.           png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
  3792.        png_free(png_ptr, chunk.data);
  3793.    }
  3794.    else
  3795.  
  3796.       skip = length;
  3797.  
  3798.    png_crc_finish(png_ptr, skip);
  3799. #line 2102
  3800. }
  3801. #line 2112
  3802. void  
  3803. png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name)
  3804. {
  3805.    ;
  3806.    if (((chunk_name[0]) < 41 || (chunk_name[0]) > 122 || ((chunk_name[0]) > 90 && (chunk_name[0]) < 97)) || ((chunk_name[1]) < 41 || (chunk_name[1]) > 122 || ((chunk_name[1]) > 90 && (chunk_name[1]) < 97)) ||
  3807.        ((chunk_name[2]) < 41 || (chunk_name[2]) > 122 || ((chunk_name[2]) > 90 && (chunk_name[2]) < 97)) || ((chunk_name[3]) < 41 || (chunk_name[3]) > 122 || ((chunk_name[3]) > 90 && (chunk_name[3]) < 97)))
  3808.    {
  3809.       png_chunk_error(png_ptr, "invalid chunk type");
  3810.    }
  3811. }
  3812. #line 2133
  3813. void  
  3814. #line 2137
  3815. png_combine_row
  3816.  
  3817.    (png_structp png_ptr, png_bytep row, int mask)
  3818. {
  3819.    ;
  3820.    if (mask == 0xff)
  3821.    {
  3822. #line 2146
  3823. __memcpy(row, png_ptr->row_buf + 1, (png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3));
  3824.    }
  3825.    else
  3826.    {
  3827.       switch (png_ptr->row_info.pixel_depth)
  3828.       {
  3829.          case 1:
  3830.          {
  3831.             png_bytep sp = png_ptr->row_buf + 1;
  3832.             png_bytep dp = row;
  3833.             int s_inc, s_start, s_end;
  3834.             int m = 0x80;
  3835.             int shift;
  3836.             png_uint_32 i;
  3837.             png_uint_32 row_width = png_ptr->width;
  3838. #line 2163
  3839.             if (png_ptr->transformations & 0x10000L)
  3840.             {
  3841.                 s_start = 0;
  3842.                 s_end = 7;
  3843.                 s_inc = 1;
  3844.             }
  3845.             else
  3846.  
  3847.             {
  3848.                 s_start = 7;
  3849.                 s_end = 0;
  3850.                 s_inc = -1;
  3851.             }
  3852.  
  3853.             shift = s_start;
  3854.  
  3855.             for (i = 0; i < row_width; i++)
  3856.             {
  3857.                if (m & mask)
  3858.                {
  3859.                   int value;
  3860.  
  3861.                   value = (*sp >> shift) & 0x01;
  3862.                   *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
  3863.                   *dp |= (png_byte)(value << shift);
  3864.                }
  3865.  
  3866.                if (shift == s_end)
  3867.                {
  3868.                   shift = s_start;
  3869.                   sp++;
  3870.                   dp++;
  3871.                }
  3872.                else
  3873.                   shift += s_inc;
  3874.  
  3875.                if (m == 1)
  3876.                   m = 0x80;
  3877.                else
  3878.                   m >>= 1;
  3879.             }
  3880.             break;
  3881.          }
  3882.          case 2:
  3883.          {
  3884.             png_bytep sp = png_ptr->row_buf + 1;
  3885.             png_bytep dp = row;
  3886.             int s_start, s_end, s_inc;
  3887.             int m = 0x80;
  3888.             int shift;
  3889.             png_uint_32 i;
  3890.             png_uint_32 row_width = png_ptr->width;
  3891.             int value;
  3892. #line 2218
  3893.             if (png_ptr->transformations & 0x10000L)
  3894.             {
  3895.                s_start = 0;
  3896.                s_end = 6;
  3897.                s_inc = 2;
  3898.             }
  3899.             else
  3900.  
  3901.             {
  3902.                s_start = 6;
  3903.                s_end = 0;
  3904.                s_inc = -2;
  3905.             }
  3906.  
  3907.             shift = s_start;
  3908.  
  3909.             for (i = 0; i < row_width; i++)
  3910.             {
  3911.                if (m & mask)
  3912.                {
  3913.                   value = (*sp >> shift) & 0x03;
  3914.                   *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
  3915.                   *dp |= (png_byte)(value << shift);
  3916.                }
  3917.  
  3918.                if (shift == s_end)
  3919.                {
  3920.                   shift = s_start;
  3921.                   sp++;
  3922.                   dp++;
  3923.                }
  3924.                else
  3925.                   shift += s_inc;
  3926.                if (m == 1)
  3927.                   m = 0x80;
  3928.                else
  3929.                   m >>= 1;
  3930.             }
  3931.             break;
  3932.          }
  3933.          case 4:
  3934.          {
  3935.             png_bytep sp = png_ptr->row_buf + 1;
  3936.             png_bytep dp = row;
  3937.             int s_start, s_end, s_inc;
  3938.             int m = 0x80;
  3939.             int shift;
  3940.             png_uint_32 i;
  3941.             png_uint_32 row_width = png_ptr->width;
  3942.             int value;
  3943. #line 2270
  3944.             if (png_ptr->transformations & 0x10000L)
  3945.             {
  3946.                s_start = 0;
  3947.                s_end = 4;
  3948.                s_inc = 4;
  3949.             }
  3950.             else
  3951.  
  3952.             {
  3953.                s_start = 4;
  3954.                s_end = 0;
  3955.                s_inc = -4;
  3956.             }
  3957.             shift = s_start;
  3958.  
  3959.             for (i = 0; i < row_width; i++)
  3960.             {
  3961.                if (m & mask)
  3962.                {
  3963.                   value = (*sp >> shift) & 0xf;
  3964.                   *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
  3965.                   *dp |= (png_byte)(value << shift);
  3966.                }
  3967.  
  3968.                if (shift == s_end)
  3969.                {
  3970.                   shift = s_start;
  3971.                   sp++;
  3972.                   dp++;
  3973.                }
  3974.                else
  3975.                   shift += s_inc;
  3976.                if (m == 1)
  3977.                   m = 0x80;
  3978.                else
  3979.                   m >>= 1;
  3980.             }
  3981.             break;
  3982.          }
  3983.          default:
  3984.          {
  3985.             png_bytep sp = png_ptr->row_buf + 1;
  3986.             png_bytep dp = row;
  3987.             png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3);
  3988.             png_uint_32 i;
  3989.             png_uint_32 row_width = png_ptr->width;
  3990.             png_byte m = 0x80;
  3991. #line 2319
  3992.             for (i = 0; i < row_width; i++)
  3993.             {
  3994.                if (m & mask)
  3995.                {
  3996.                   __memcpy(dp, sp, pixel_bytes);
  3997.                }
  3998.  
  3999.                sp += pixel_bytes;
  4000.                dp += pixel_bytes;
  4001.  
  4002.                if (m == 1)
  4003.                   m = 0x80;
  4004.                else
  4005.                   m >>= 1;
  4006.             }
  4007.             break;
  4008.          }
  4009.       }
  4010.    }
  4011. }
  4012. #line 2341
  4013. void  
  4014. #line 2345
  4015. png_do_read_interlace
  4016.  
  4017.    (png_row_infop row_info, png_bytep row, int pass,
  4018.    png_uint_32 transformations)
  4019. {
  4020. #line 2357
  4021.    ;
  4022.    if (row != 0 && row_info != 0)
  4023.    {
  4024.       png_uint_32 final_width;
  4025.  
  4026.       final_width = row_info->width * png_pass_inc[pass];
  4027.  
  4028.       switch (row_info->pixel_depth)
  4029.       {
  4030.          case 1:
  4031.          {
  4032.             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
  4033.             png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
  4034.             int sshift, dshift;
  4035.             int s_start, s_end, s_inc;
  4036.             int jstop = png_pass_inc[pass];
  4037.             png_byte v;
  4038.             png_uint_32 i;
  4039.             int j;
  4040. #line 2378
  4041.             if (transformations & 0x10000L)
  4042.             {
  4043.                 sshift = (int)((row_info->width + 7) & 0x07);
  4044.                 dshift = (int)((final_width + 7) & 0x07);
  4045.                 s_start = 7;
  4046.                 s_end = 0;
  4047.                 s_inc = -1;
  4048.             }
  4049.             else
  4050.  
  4051.             {
  4052.                 sshift = 7 - (int)((row_info->width + 7) & 0x07);
  4053.                 dshift = 7 - (int)((final_width + 7) & 0x07);
  4054.                 s_start = 0;
  4055.                 s_end = 7;
  4056.                 s_inc = 1;
  4057.             }
  4058.  
  4059.             for (i = 0; i < row_info->width; i++)
  4060.             {
  4061.                v = (png_byte)((*sp >> sshift) & 0x01);
  4062.                for (j = 0; j < jstop; j++)
  4063.                {
  4064.                   *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
  4065.                   *dp |= (png_byte)(v << dshift);
  4066.                   if (dshift == s_end)
  4067.                   {
  4068.                      dshift = s_start;
  4069.                      dp--;
  4070.                   }
  4071.                   else
  4072.                      dshift += s_inc;
  4073.                }
  4074.                if (sshift == s_end)
  4075.                {
  4076.                   sshift = s_start;
  4077.                   sp--;
  4078.                }
  4079.                else
  4080.                   sshift += s_inc;
  4081.             }
  4082.             break;
  4083.          }
  4084.          case 2:
  4085.          {
  4086.             png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
  4087.             png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
  4088.             int sshift, dshift;
  4089.             int s_start, s_end, s_inc;
  4090.             int jstop = png_pass_inc[pass];
  4091.             png_uint_32 i;
  4092. #line 2431
  4093.             if (transformations & 0x10000L)
  4094.             {
  4095.                sshift = (int)(((row_info->width + 3) & 0x03) << 1);
  4096.                dshift = (int)(((final_width + 3) & 0x03) << 1);
  4097.                s_start = 6;
  4098.                s_end = 0;
  4099.                s_inc = -2;
  4100.             }
  4101.             else
  4102.  
  4103.             {
  4104.                sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
  4105.                dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
  4106.                s_start = 0;
  4107.                s_end = 6;
  4108.                s_inc = 2;
  4109.             }
  4110.  
  4111.             for (i = 0; i < row_info->width; i++)
  4112.             {
  4113.                png_byte v;
  4114.                int j;
  4115.  
  4116.                v = (png_byte)((*sp >> sshift) & 0x03);
  4117.                for (j = 0; j < jstop; j++)
  4118.                {
  4119.                   *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
  4120.                   *dp |= (png_byte)(v << dshift);
  4121.                   if (dshift == s_end)
  4122.                   {
  4123.                      dshift = s_start;
  4124.                      dp--;
  4125.                   }
  4126.                   else
  4127.                      dshift += s_inc;
  4128.                }
  4129.                if (sshift == s_end)
  4130.                {
  4131.                   sshift = s_start;
  4132.                   sp--;
  4133.                }
  4134.                else
  4135.                   sshift += s_inc;
  4136.             }
  4137.             break;
  4138.          }
  4139.          case 4:
  4140.          {
  4141.             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
  4142.             png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
  4143.             int sshift, dshift;
  4144.             int s_start, s_end, s_inc;
  4145.             png_uint_32 i;
  4146.             int jstop = png_pass_inc[pass];
  4147. #line 2487
  4148.             if (transformations & 0x10000L)
  4149.             {
  4150.                sshift = (int)(((row_info->width + 1) & 0x01) << 2);
  4151.                dshift = (int)(((final_width + 1) & 0x01) << 2);
  4152.                s_start = 4;
  4153.                s_end = 0;
  4154.                s_inc = -4;
  4155.             }
  4156.             else
  4157.  
  4158.             {
  4159.                sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
  4160.                dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
  4161.                s_start = 0;
  4162.                s_end = 4;
  4163.                s_inc = 4;
  4164.             }
  4165.  
  4166.             for (i = 0; i < row_info->width; i++)
  4167.             {
  4168.                png_byte v = (png_byte)((*sp >> sshift) & 0xf);
  4169.                int j;
  4170.  
  4171.                for (j = 0; j < jstop; j++)
  4172.                {
  4173.                   *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
  4174.                   *dp |= (png_byte)(v << dshift);
  4175.                   if (dshift == s_end)
  4176.                   {
  4177.                      dshift = s_start;
  4178.                      dp--;
  4179.                   }
  4180.                   else
  4181.                      dshift += s_inc;
  4182.                }
  4183.                if (sshift == s_end)
  4184.                {
  4185.                   sshift = s_start;
  4186.                   sp--;
  4187.                }
  4188.                else
  4189.                   sshift += s_inc;
  4190.             }
  4191.             break;
  4192.          }
  4193.          default:
  4194.          {
  4195.             png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
  4196.             png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes;
  4197.             png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
  4198.  
  4199.             int jstop = png_pass_inc[pass];
  4200.             png_uint_32 i;
  4201.  
  4202.             for (i = 0; i < row_info->width; i++)
  4203.             {
  4204.                png_byte v[8];
  4205.                int j;
  4206.  
  4207.                __memcpy(v, sp, pixel_bytes);
  4208.                for (j = 0; j < jstop; j++)
  4209.                {
  4210.                   __memcpy(dp, v, pixel_bytes);
  4211.                   dp -= pixel_bytes;
  4212.                }
  4213.                sp -= pixel_bytes;
  4214.             }
  4215.             break;
  4216.          }
  4217.       }
  4218.       row_info->width = final_width;
  4219.       row_info->rowbytes = ((final_width *
  4220.          (png_uint_32)row_info->pixel_depth + 7) >> 3);
  4221.    }
  4222. #line 2566
  4223. }
  4224. #line 2569
  4225. void  
  4226. #line 2573
  4227. png_read_filter_row
  4228.  
  4229.    (png_structp png_ptr, png_row_infop row_info, png_bytep row,
  4230.    png_bytep prev_row, int filter)
  4231. {
  4232.    ;
  4233.    ;
  4234.    switch (filter)
  4235.    {
  4236.       case 0:
  4237.          break;
  4238.       case 1:
  4239.       {
  4240.          png_uint_32 i;
  4241.          png_uint_32 istop = row_info->rowbytes;
  4242.          png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
  4243.          png_bytep rp = row + bpp;
  4244.          png_bytep lp = row;
  4245.  
  4246.          for (i = bpp; i < istop; i++)
  4247.          {
  4248.             *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff);
  4249.             rp++;
  4250.          }
  4251.          break;
  4252.       }
  4253.       case 2:
  4254.       {
  4255.          png_uint_32 i;
  4256.          png_uint_32 istop = row_info->rowbytes;
  4257.          png_bytep rp = row;
  4258.          png_bytep pp = prev_row;
  4259.  
  4260.          for (i = 0; i < istop; i++)
  4261.          {
  4262.             *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
  4263.             rp++;
  4264.          }
  4265.          break;
  4266.       }
  4267.       case 3:
  4268.       {
  4269.          png_uint_32 i;
  4270.          png_bytep rp = row;
  4271.          png_bytep pp = prev_row;
  4272.          png_bytep lp = row;
  4273.          png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
  4274.          png_uint_32 istop = row_info->rowbytes - bpp;
  4275.  
  4276.          for (i = 0; i < bpp; i++)
  4277.          {
  4278.             *rp = (png_byte)(((int)(*rp) +
  4279.                ((int)(*pp++) / 2 )) & 0xff);
  4280.             rp++;
  4281.          }
  4282.  
  4283.          for (i = 0; i < istop; i++)
  4284.          {
  4285.             *rp = (png_byte)(((int)(*rp) +
  4286.                (int)(*pp++ + *lp++) / 2 ) & 0xff);
  4287.             rp++;
  4288.          }
  4289.          break;
  4290.       }
  4291.       case 4:
  4292.       {
  4293.          png_uint_32 i;
  4294.          png_bytep rp = row;
  4295.          png_bytep pp = prev_row;
  4296.          png_bytep lp = row;
  4297.          png_bytep cp = prev_row;
  4298.          png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
  4299.          png_uint_32 istop=row_info->rowbytes - bpp;
  4300.  
  4301.          for (i = 0; i < bpp; i++)
  4302.          {
  4303.             *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
  4304.             rp++;
  4305.          }
  4306.  
  4307.          for (i = 0; i < istop; i++)    
  4308.          {
  4309.             int a, b, c, pa, pb, pc, p;
  4310.  
  4311.             a = *lp++;
  4312.             b = *pp++;
  4313.             c = *cp++;
  4314.  
  4315.             p = b - c;
  4316.             pc = a - c;
  4317. #line 2669
  4318.             pa = p < 0 ? -p : p;
  4319.             pb = pc < 0 ? -pc : pc;
  4320.             pc = (p + pc) < 0 ? -(p + pc) : p + pc;
  4321. #line 2683
  4322.             p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
  4323.  
  4324.             *rp = (png_byte)(((int)(*rp) + p) & 0xff);
  4325.             rp++;
  4326.          }
  4327.          break;
  4328.       }
  4329.       default:
  4330.          png_warning(png_ptr, "Ignoring bad adaptive filter type");
  4331.          *row=0;
  4332.          break;
  4333.    }
  4334. }
  4335.  
  4336. void  
  4337. png_read_finish_row(png_structp png_ptr)
  4338. {
  4339. #line 2716
  4340.    ;
  4341.    png_ptr->row_number++;
  4342.    if (png_ptr->row_number < png_ptr->num_rows)
  4343.       return;
  4344.  
  4345.    if (png_ptr->interlaced)
  4346.    {
  4347.       png_ptr->row_number = 0;
  4348.       png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
  4349.       do
  4350.       {
  4351.          png_ptr->pass++;
  4352.          if (png_ptr->pass >= 7)
  4353.             break;
  4354.          png_ptr->iwidth = (png_ptr->width +
  4355.             png_pass_inc[png_ptr->pass] - 1 -
  4356.             png_pass_start[png_ptr->pass]) /
  4357.             png_pass_inc[png_ptr->pass];
  4358.             png_ptr->irowbytes = ((png_ptr->iwidth *
  4359.                (png_uint_32)png_ptr->pixel_depth + 7) >> 3) +1;
  4360.  
  4361.          if (!(png_ptr->transformations & 0x0002))
  4362.          {
  4363.             png_ptr->num_rows = (png_ptr->height +
  4364.                png_pass_yinc[png_ptr->pass] - 1 -
  4365.                png_pass_ystart[png_ptr->pass]) /
  4366.                png_pass_yinc[png_ptr->pass];
  4367.             if (!(png_ptr->num_rows))
  4368.                continue;
  4369.          }
  4370.          else   
  4371.             break;
  4372.       } while (png_ptr->iwidth == 0);
  4373.  
  4374.       if (png_ptr->pass < 7)
  4375.          return;
  4376.    }
  4377.  
  4378.    if (!(png_ptr->flags & 0x0020))
  4379.    {
  4380. #line 2759
  4381.       char extra;
  4382.       int ret;
  4383.  
  4384.       png_ptr->zstream.next_out = (Byte *)&extra;
  4385.       png_ptr->zstream.avail_out = (uInt)1;
  4386.       for(;;)
  4387.       {
  4388.          if (!(png_ptr->zstream.avail_in))
  4389.          {
  4390.             while (!png_ptr->idat_size)
  4391.             {
  4392.                png_byte chunk_length[4];
  4393.  
  4394.                png_crc_finish(png_ptr, 0);
  4395.  
  4396.                png_read_data(png_ptr, chunk_length, 4);
  4397.                png_ptr->idat_size = png_get_uint_32(chunk_length);
  4398.  
  4399.                png_reset_crc(png_ptr);
  4400.                png_crc_read(png_ptr, png_ptr->chunk_name, 4);
  4401.                if (__memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4))
  4402.                   png_error(png_ptr, "Not enough image data");
  4403.  
  4404.             }
  4405.             png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
  4406.             png_ptr->zstream.next_in = png_ptr->zbuf;
  4407.             if (png_ptr->zbuf_size > png_ptr->idat_size)
  4408.                png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size;
  4409.             png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream.avail_in);
  4410.             png_ptr->idat_size -= png_ptr->zstream.avail_in;
  4411.          }
  4412.          ret = inflate(&png_ptr->zstream, 1);
  4413.          if (ret == 1)
  4414.          {
  4415.             if (!(png_ptr->zstream.avail_out) || png_ptr->zstream.avail_in ||
  4416.                png_ptr->idat_size)
  4417.                png_error(png_ptr, "Extra compressed data");
  4418.             png_ptr->mode |= 0x08;
  4419.             png_ptr->flags |= 0x0020;
  4420.             break;
  4421.          }
  4422.          if (ret != 0)
  4423.             png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg :
  4424.                       "Decompression Error");
  4425.  
  4426.          if (!(png_ptr->zstream.avail_out))
  4427.             png_error(png_ptr, "Extra compressed data");
  4428.  
  4429.       }
  4430.       png_ptr->zstream.avail_out = 0;
  4431.    }
  4432.  
  4433.    if (png_ptr->idat_size || png_ptr->zstream.avail_in)
  4434.       png_error(png_ptr, "Extra compression data");
  4435.  
  4436.    inflateReset(&png_ptr->zstream);
  4437.  
  4438.    png_ptr->mode |= 0x08;
  4439. }
  4440.  
  4441. void  
  4442. png_read_start_row(png_structp png_ptr)
  4443. {
  4444. #line 2838
  4445.    int max_pixel_depth;
  4446.    png_uint_32 row_bytes;
  4447.  
  4448.    ;
  4449.    png_ptr->zstream.avail_in = 0;
  4450.    png_init_read_transformations(png_ptr);
  4451.    if (png_ptr->interlaced)
  4452.    {
  4453.       if (!(png_ptr->transformations & 0x0002))
  4454.          png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
  4455.             png_pass_ystart[0]) / png_pass_yinc[0];
  4456.       else
  4457.          png_ptr->num_rows = png_ptr->height;
  4458.  
  4459.       png_ptr->iwidth = (png_ptr->width +
  4460.          png_pass_inc[png_ptr->pass] - 1 -
  4461.          png_pass_start[png_ptr->pass]) /
  4462.          png_pass_inc[png_ptr->pass];
  4463.  
  4464.          row_bytes = ((png_ptr->iwidth *
  4465.             (png_uint_32)png_ptr->pixel_depth + 7) >> 3) +1;
  4466.          png_ptr->irowbytes = (png_size_t)row_bytes;
  4467.          if((png_uint_32)png_ptr->irowbytes != row_bytes)
  4468.             png_error(png_ptr, "Rowbytes overflow in png_read_start_row");
  4469.    }
  4470.    else
  4471.    {
  4472.       png_ptr->num_rows = png_ptr->height;
  4473.       png_ptr->iwidth = png_ptr->width;
  4474.       png_ptr->irowbytes = png_ptr->rowbytes + 1;
  4475.    }
  4476.    max_pixel_depth = png_ptr->pixel_depth;
  4477. #line 2872
  4478.    if ((png_ptr->transformations & 0x0004) && png_ptr->bit_depth < 8)
  4479.       max_pixel_depth = 8;
  4480. #line 2877
  4481.    if (png_ptr->transformations & 0x1000)
  4482.    {
  4483.       if (png_ptr->color_type == (2 | 1))
  4484.       {
  4485.          if (png_ptr->num_trans)
  4486.             max_pixel_depth = 32;
  4487.          else
  4488.             max_pixel_depth = 24;
  4489.       }
  4490.       else if (png_ptr->color_type == 0)
  4491.       {
  4492.          if (max_pixel_depth < 8)
  4493.             max_pixel_depth = 8;
  4494.          if (png_ptr->num_trans)
  4495.             max_pixel_depth *= 2;
  4496.       }
  4497.       else if (png_ptr->color_type == (2))
  4498.       {
  4499.          if (png_ptr->num_trans)
  4500.          {
  4501.             max_pixel_depth *= 4;
  4502.             max_pixel_depth /= 3;
  4503.          }
  4504.       }
  4505.    }
  4506. #line 2905
  4507.    if (png_ptr->transformations & (0x8000L))
  4508.    {
  4509.       if (png_ptr->color_type == (2 | 1))
  4510.          max_pixel_depth = 32;
  4511.       else if (png_ptr->color_type == 0)
  4512.       {
  4513.          if (max_pixel_depth <= 8)
  4514.             max_pixel_depth = 16;
  4515.          else
  4516.             max_pixel_depth = 32;
  4517.       }
  4518.       else if (png_ptr->color_type == (2))
  4519.       {
  4520.          if (max_pixel_depth <= 32)
  4521.             max_pixel_depth = 32;
  4522.          else
  4523.             max_pixel_depth = 64;
  4524.       }
  4525.    }
  4526. #line 2927
  4527.    if (png_ptr->transformations & 0x4000)
  4528.    {
  4529.       if (
  4530.  
  4531.         (png_ptr->num_trans && (png_ptr->transformations & 0x1000)) ||
  4532. #line 2934
  4533.         (png_ptr->transformations & (0x8000L)) ||
  4534.  
  4535.         png_ptr->color_type == (4))
  4536.       {
  4537.          if (max_pixel_depth <= 16)
  4538.             max_pixel_depth = 32;
  4539.          else
  4540.             max_pixel_depth = 64;
  4541.       }
  4542.       else
  4543.       {
  4544.          if (max_pixel_depth <= 8)
  4545.            {
  4546.              if (png_ptr->color_type == (2 | 4))
  4547.                max_pixel_depth = 32;
  4548.              else
  4549.                max_pixel_depth = 24;
  4550.            }
  4551.          else if (png_ptr->color_type == (2 | 4))
  4552.             max_pixel_depth = 64;
  4553.          else
  4554.             max_pixel_depth = 48;
  4555.       }
  4556.    }
  4557. #line 2962
  4558.    if(png_ptr->transformations & 0x100000L)
  4559.      {
  4560.        int user_pixel_depth=png_ptr->user_transform_depth*
  4561.          png_ptr->user_transform_channels;
  4562.        if(user_pixel_depth > max_pixel_depth)
  4563.          max_pixel_depth=user_pixel_depth;
  4564.      }
  4565. #line 2973
  4566.    row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7));
  4567. #line 2976
  4568.    row_bytes = ((row_bytes * (png_uint_32)max_pixel_depth + 7) >> 3) +
  4569.       1 + ((max_pixel_depth + 7) >> 3);
  4570. #line 2982
  4571.    png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, row_bytes);
  4572. #line 2988
  4573.    png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)(
  4574.       png_ptr->rowbytes + 1));
  4575.  
  4576.    png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
  4577.  
  4578.    ;
  4579.    ;
  4580.    ;
  4581.    ;
  4582.    ;
  4583.    ;
  4584.  
  4585.    png_ptr->flags |= 0x0040;
  4586. }
  4587.