pngconf.h 30.7 KB
Newer Older
1
/* pngconf.h - machine configurable file for libpng
2
 *
3
 * libpng 1.0.7beta11 - May 6, 2000
4 5 6
 * For conditions of distribution and use, see copyright notice in png.h
 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 * Copyright (c) 1996, 1997 Andreas Dilger
7
 * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
8
 */
G
Guy Schalnat 已提交
9 10

/* Any machine specific code is near the front of this file, so if you
11 12 13 14
 * are configuring libpng for a machine, you may want to read the section
 * starting here down to where it starts to typedef png_color, png_text,
 * and png_info.
 */
G
Guy Schalnat 已提交
15 16 17 18

#ifndef PNGCONF_H
#define PNGCONF_H

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

32
#ifndef PNG_ZBUF_SIZE
G
Guy Schalnat 已提交
33
#define PNG_ZBUF_SIZE 8192
34
#endif
G
Guy Schalnat 已提交
35

A
Andreas Dilger 已提交
36
/* If you are running on a machine where you cannot allocate more
37 38 39 40 41
 * than 64K of memory at once, uncomment this.  While libpng will not
 * normally need that much memory in a chunk (unless you load up a very
 * large file), zlib needs to know how big of a chunk it can use, and
 * libpng thus makes sure to check any memory allocation to verify it
 * will fit into memory.
A
Andreas Dilger 已提交
42
#define PNG_MAX_MALLOC_64K
43
 */
A
Andreas Dilger 已提交
44 45
#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
#define PNG_MAX_MALLOC_64K
G
Guy Schalnat 已提交
46 47
#endif

48
/* This protects us against compilers that run on a windowing system
49 50
 * and thus don't have or would rather us not use the stdio types:
 * stdin, stdout, and stderr.  The only one currently used is stderr
51 52 53 54
 * in png_error() and png_warning().  #defining PNG_NO_CONSOLE_IO will
 * prevent these from being compiled and used. #defining PNG_NO_STDIO
 * will also prevent these, plus will prevent the entire set of stdio
 * macros and functions (FILE *, printf, etc.) from being compiled and used,
55
 * unless (PNG_DEBUG > 0) has been #defined.
56 57
 *
 * #define PNG_NO_CONSOLE_IO
58 59
 * #define PNG_NO_STDIO
 */
G
Guy Schalnat 已提交
60

61 62 63 64
#  ifdef PNG_NO_STDIO
#    ifndef PNG_NO_CONSOLE_IO
#      define PNG_NO_CONSOLE_IO
#    endif
65 66 67 68 69
#    ifdef PNG_DEBUG
#      if (PNG_DEBUG > 0)
#        include <stdio.h>
#      endif
#    endif
70 71 72
#  else
#    include <stdio.h>
#  endif
A
Andreas Dilger 已提交
73 74

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

A
Andreas Dilger 已提交
83
#ifdef OF /* zlib prototype munger */
G
Guy Schalnat 已提交
84 85 86 87
#define PNGARG(arglist) OF(arglist)
#else

#ifdef _NO_PROTO
G
Guy Schalnat 已提交
88
#define PNGARG(arglist) ()
G
Guy Schalnat 已提交
89 90 91 92 93 94 95 96
#else
#define PNGARG(arglist) arglist
#endif /* _NO_PROTO */

#endif /* OF */

#endif /* PNGARG */

97 98 99 100
/* Try to determine if we are compiling on a Mac.  Note that testing for
 * just __MWERKS__ is not good enough, because the Codewarrior is now used
 * on non-Mac platforms.
 */
101
#ifndef MACOS
102
#if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
103
    defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
A
Andreas Dilger 已提交
104 105
#define MACOS
#endif
106
#endif
A
Andreas Dilger 已提交
107

G
Guy Schalnat 已提交
108
/* enough people need this for various reasons to include it here */
G
Guy Schalnat 已提交
109
#if !defined(MACOS) && !defined(RISCOS)
G
Guy Schalnat 已提交
110 111
#include <sys/types.h>
#endif
A
Andreas Dilger 已提交
112

113 114 115 116 117
#ifndef PNG_SETJMP_NOT_SUPPORTED
#  define PNG_SETJMP_SUPPORTED
#endif

#ifdef PNG_SETJMP_SUPPORTED
A
Andreas Dilger 已提交
118
/* This is an attempt to force a single setjmp behaviour on Linux.  If
119 120
 * the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
 */
121 122 123 124 125 126 127 128 129
#  ifdef __linux__
#    ifdef _BSD_SOURCE
#      define _PNG_SAVE_BSD_SOURCE
#      undef _BSD_SOURCE
#    endif
#    ifdef _SETJMP_H
      __png.h__ already includes setjmp.h
      __dont__ include it again
#    endif
130
#endif /* __linux__ */
G
Guy Schalnat 已提交
131 132 133 134

/* include setjmp.h for error handling */
#include <setjmp.h>

135 136 137 138 139 140 141
#  ifdef __linux__
#    ifdef _PNG_SAVE_BSD_SOURCE
#      define _BSD_SOURCE
#      undef _PNG_SAVE_BSD_SOURCE
#    endif
#  endif /* __linux__ */
#endif /* PNG_SETJMP_SUPPORTED */
A
Andreas Dilger 已提交
142

G
Guy Schalnat 已提交
143 144 145 146 147 148
#ifdef BSD
#include <strings.h>
#else
#include <string.h>
#endif

A
Andreas Dilger 已提交
149
/* Other defines for things like memory and the like can go here.  */
G
Guy Schalnat 已提交
150 151
#ifdef PNG_INTERNAL
#include <stdlib.h>
A
Andreas Dilger 已提交
152 153 154 155 156 157 158 159 160

/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which
 * aren't usually used outside the library (as far as I know), so it is
 * debatable if they should be exported at all.  In the future, when it is
 * possible to have run-time registry of chunk-handling functions, some of
 * these will be made available again.
#define PNG_EXTERN extern
 */
#define PNG_EXTERN
G
Guy Schalnat 已提交
161

A
Andreas Dilger 已提交
162
/* Other defines specific to compilers can go here.  Try to keep
163 164
 * them inside an appropriate ifdef/endif pair for portability.
 */
G
Guy Schalnat 已提交
165

166
#if !defined(PNG_NO_FLOATING_POINT_SUPPORTED)
A
Andreas Dilger 已提交
167 168
#if defined(MACOS)
/* We need to check that <math.h> hasn't already been included earlier
169 170 171
 * as it seems it doesn't agree with <fp.h>, yet we should really use
 * <fp.h> if possible.
 */
A
Andreas Dilger 已提交
172
#if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
A
Andreas Dilger 已提交
173
#include <fp.h>
A
Andreas Dilger 已提交
174
#endif
A
Andreas Dilger 已提交
175 176 177
#else
#include <math.h>
#endif
178
#endif
A
Andreas Dilger 已提交
179

180
/* Codewarrior on NT has linking problems without this. */
181
#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__)
182 183 184
#define PNG_ALWAYS_EXTERN
#endif

A
Andreas Dilger 已提交
185
/* For some reason, Borland C++ defines memcmp, etc. in mem.h, not
186 187 188
 * stdlib.h like it should (I think).  Or perhaps this is a C++
 * "feature"?
 */
G
Guy Schalnat 已提交
189 190 191 192 193 194 195 196 197
#ifdef __TURBOC__
#include <mem.h>
#include "alloc.h"
#endif

#ifdef _MSC_VER
#include <malloc.h>
#endif

A
Andreas Dilger 已提交
198
/* This controls how fine the dithering gets.  As this allocates
199 200 201
 * a largish chunk of memory (32K), those who are not as concerned
 * with dithering quality can decrease some or all of these.
 */
202
#ifndef PNG_DITHER_RED_BITS
G
Guy Schalnat 已提交
203
#define PNG_DITHER_RED_BITS 5
204 205
#endif
#ifndef PNG_DITHER_GREEN_BITS
G
Guy Schalnat 已提交
206
#define PNG_DITHER_GREEN_BITS 5
207 208
#endif
#ifndef PNG_DITHER_BLUE_BITS
G
Guy Schalnat 已提交
209
#define PNG_DITHER_BLUE_BITS 5
210
#endif
G
Guy Schalnat 已提交
211

A
Andreas Dilger 已提交
212
/* This controls how fine the gamma correction becomes when you
213 214 215 216 217
 * are only interested in 8 bits anyway.  Increasing this value
 * results in more memory being used, and more pow() functions
 * being called to fill in the gamma tables.  Don't set this value
 * less then 8, and even that may not work (I haven't tested it).
 */
G
Guy Schalnat 已提交
218

219
#ifndef PNG_MAX_GAMMA_8
G
Guy Schalnat 已提交
220
#define PNG_MAX_GAMMA_8 11
221
#endif
G
Guy Schalnat 已提交
222

A
Andreas Dilger 已提交
223
/* This controls how much a difference in gamma we can tolerate before
224 225
 * we actually start doing gamma conversion.
 */
226
#ifndef PNG_GAMMA_THRESHOLD
A
Andreas Dilger 已提交
227
#define PNG_GAMMA_THRESHOLD 0.05
228
#endif
A
Andreas Dilger 已提交
229

G
Guy Schalnat 已提交
230 231
#endif /* PNG_INTERNAL */

A
Andreas Dilger 已提交
232
/* The following uses const char * instead of char * for error
233
 * and warning message functions, so some compilers won't complain.
234
 * If you do not want to use const, define PNG_NO_CONST here.
235
 */
A
Andreas Dilger 已提交
236

237
#ifndef PNG_NO_CONST
G
Guy Schalnat 已提交
238 239 240 241 242
#  define PNG_CONST const
#else
#  define PNG_CONST
#endif

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

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

259
/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
260 261 262 263 264 265 266 267 268 269 270 271 272 273
 * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS
 * on the compile line, then pick and choose which ones to define without
 * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED
 * if you only want to have a png-compliant reader/writer but don't need
 * any of the extra transformations.  This saves about 80 kbytes in a
 * typical installation of the library. (PNG_NO_* form added in version
 * 1.0.1c, for consistency)
 */

/* The size of the png_text structure changed in libpng-1.0.6 when
 * iTXt is supported.  It is turned off by default, to support old apps
 * that malloc the png_text structure instead of calling png_set_text()
 * and letting libpng malloc it.  It will be turned on by default in
 * libpng-2.0.0.
274
 */
275

276 277 278 279 280 281 282 283 284
#ifndef PNG_iTXt_SUPPORTED
#  ifndef PNG_READ_iTXt_SUPPORTED
#    define PNG_NO_READ_iTXt
#  endif
#  ifndef PNG_WRITE_iTXt_SUPPORTED
#    define PNG_NO_WRITE_iTXt
#  endif
#endif

285 286 287 288 289 290 291 292 293 294 295 296 297
/* The following support, added after version 1.0.0, can be turned off here en
 * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility
 * with old applications that require the length of png_struct and png_info
 * to remain unchanged.
 */

#ifdef PNG_LEGACY_SUPPORTED
#define PNG_NO_FREE_ME
#define PNG_NO_READ_UNKNOWN_CHUNKS
#define PNG_NO_WRITE_UNKNOWN_CHUNKS
#define PNG_NO_READ_USER_CHUNKS
#define PNG_NO_READ_iCCP
#define PNG_NO_WRITE_iCCP
298 299
#define PNG_NO_READ_iTXt
#define PNG_NO_WRITE_iTXt
300 301 302 303 304 305 306 307 308 309
#define PNG_NO_READ_sCAL
#define PNG_NO_WRITE_sCAL
#define PNG_NO_READ_sPLT
#define PNG_NO_WRITE_sPLT
#define PNG_NO_INFO_IMAGE
#define PNG_NO_READ_RGB_TO_GRAY
#define PNG_NO_READ_USER_TRANSFORM
#define PNG_NO_WRITE_USER_TRANSFORM
#define PNG_NO_USER_MEM
#define PNG_NO_READ_EMPTY_PLTE
310
#define PNG_NO_FIXED_POINT_SUPPORTED
311 312
#endif

313
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED 
314 315
#define PNG_FLOATING_POINT_SUPPORTED
#endif
316

317 318
/* Ignore attempt to turn off both floating and fixed point support */

319 320
#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \
 !defined(PNG_NO_FIXED_POINT_SUPPORTED)
321 322
#define PNG_FIXED_POINT_SUPPORTED
#endif
323

324 325 326 327
#ifndef PNG_NO_FREE_ME
#define PNG_FREE_ME_SUPPORTED
#endif

328 329
#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
    !defined(PNG_NO_READ_TRANSFORMS)
330
#define PNG_READ_TRANSFORMS_SUPPORTED
331
#endif
332 333
#if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
    !defined(PNG_NO_WRITE_TRANSFORMS)
334
#define PNG_WRITE_TRANSFORMS_SUPPORTED
335 336
#endif

337
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
338
#ifndef PNG_NO_READ_EXPAND
G
Guy Schalnat 已提交
339
#define PNG_READ_EXPAND_SUPPORTED
340 341
#endif
#ifndef PNG_NO_READ_SHIFT
G
Guy Schalnat 已提交
342
#define PNG_READ_SHIFT_SUPPORTED
343 344
#endif
#ifndef PNG_NO_READ_PACK
G
Guy Schalnat 已提交
345
#define PNG_READ_PACK_SUPPORTED
346 347
#endif
#ifndef PNG_NO_READ_BGR
G
Guy Schalnat 已提交
348
#define PNG_READ_BGR_SUPPORTED
349 350
#endif
#ifndef PNG_NO_READ_SWAP
G
Guy Schalnat 已提交
351
#define PNG_READ_SWAP_SUPPORTED
352 353
#endif
#ifndef PNG_NO_READ_PACKSWAP
A
Andreas Dilger 已提交
354
#define PNG_READ_PACKSWAP_SUPPORTED
355 356
#endif
#ifndef PNG_NO_READ_INVERT
G
Guy Schalnat 已提交
357
#define PNG_READ_INVERT_SUPPORTED
358 359
#endif
#ifndef PNG_NO_READ_DITHER
G
Guy Schalnat 已提交
360
#define PNG_READ_DITHER_SUPPORTED
361 362
#endif
#ifndef PNG_NO_READ_BACKGROUND
G
Guy Schalnat 已提交
363
#define PNG_READ_BACKGROUND_SUPPORTED
364 365
#endif
#ifndef PNG_NO_READ_16_TO_8
G
Guy Schalnat 已提交
366
#define PNG_READ_16_TO_8_SUPPORTED
367 368
#endif
#ifndef PNG_NO_READ_FILLER
G
Guy Schalnat 已提交
369
#define PNG_READ_FILLER_SUPPORTED
370 371
#endif
#ifndef PNG_NO_READ_GAMMA
G
Guy Schalnat 已提交
372
#define PNG_READ_GAMMA_SUPPORTED
373 374
#endif
#ifndef PNG_NO_READ_GRAY_TO_RGB
G
Guy Schalnat 已提交
375
#define PNG_READ_GRAY_TO_RGB_SUPPORTED
376 377
#endif
#ifndef PNG_NO_READ_SWAP_ALPHA
A
Andreas Dilger 已提交
378
#define PNG_READ_SWAP_ALPHA_SUPPORTED
379 380
#endif
#ifndef PNG_NO_READ_INVERT_ALPHA
381
#define PNG_READ_INVERT_ALPHA_SUPPORTED
382 383
#endif
#ifndef PNG_NO_READ_STRIP_ALPHA
A
Andreas Dilger 已提交
384
#define PNG_READ_STRIP_ALPHA_SUPPORTED
385 386
#endif
#ifndef PNG_NO_READ_USER_TRANSFORM
387
#define PNG_READ_USER_TRANSFORM_SUPPORTED
388
#endif
389
#ifndef PNG_NO_READ_RGB_TO_GRAY
390
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
391
#endif
392
#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
393

394 395
#if !defined(PNG_NO_PROGRESSIVE_READ) && \
 !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive   */
396 397 398 399
#define PNG_PROGRESSIVE_READ_SUPPORTED       /* reading.  This is not talking */
#endif                               /* about interlacing capability!  You'll */
              /* still have interlacing unless you change the following line: */
#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */
400

401 402
#ifndef PNG_NO_READ_COMPOSITE_NODIV
#ifndef PNG_NO_READ_COMPOSITED_NODIV  /* libpng-1.0.x misspelling */
403
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED    /* well tested on Intel and SGI */
404
#endif
405
#endif
G
Guy Schalnat 已提交
406

407 408 409 410
#ifndef PNG_NO_READ_EMPTY_PLTE
#define PNG_READ_EMPTY_PLTE_SUPPORTED  /* useful for MNG applications */
#endif

411
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
412
#ifndef PNG_NO_WRITE_SHIFT
G
Guy Schalnat 已提交
413
#define PNG_WRITE_SHIFT_SUPPORTED
414 415
#endif
#ifndef PNG_NO_WRITE_PACK
G
Guy Schalnat 已提交
416
#define PNG_WRITE_PACK_SUPPORTED
417 418
#endif
#ifndef PNG_NO_WRITE_BGR
G
Guy Schalnat 已提交
419
#define PNG_WRITE_BGR_SUPPORTED
420 421
#endif
#ifndef PNG_NO_WRITE_SWAP
G
Guy Schalnat 已提交
422
#define PNG_WRITE_SWAP_SUPPORTED
423 424
#endif
#ifndef PNG_NO_WRITE_PACKSWAP
A
Andreas Dilger 已提交
425
#define PNG_WRITE_PACKSWAP_SUPPORTED
426 427
#endif
#ifndef PNG_NO_WRITE_INVERT
G
Guy Schalnat 已提交
428
#define PNG_WRITE_INVERT_SUPPORTED
429 430
#endif
#ifndef PNG_NO_WRITE_FILLER
A
Andreas Dilger 已提交
431
#define PNG_WRITE_FILLER_SUPPORTED  /* This is the same as WRITE_STRIP_ALPHA */
432 433
#endif
#ifndef PNG_NO_WRITE_SWAP_ALPHA
A
Andreas Dilger 已提交
434
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
435 436
#endif
#ifndef PNG_NO_WRITE_INVERT_ALPHA
437
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
438 439
#endif
#ifndef PNG_NO_WRITE_USER_TRANSFORM
440
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
441
#endif
442
#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
443

444 445 446 447 448 449 450
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
#ifndef PNG_NO_USER_TRANSFORM_PTR
#define PNG_USER_TRANSFORM_PTR_SUPPORTED
#endif
#endif

451 452
#define PNG_WRITE_INTERLACING_SUPPORTED  /* not required for PNG-compliant
                                            encoders, but can cause trouble
453 454
                                            if left undefined */

455 456
#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \
     defined(PNG_FLOATING_POINT_SUPPORTED)
457 458 459 460 461 462 463
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
#endif

#ifndef PNG_NO_WRITE_FLUSH
#define PNG_WRITE_FLUSH_SUPPORTED
#endif

464 465 466 467
#ifndef PNG_NO_WRITE_EMPTY_PLTE
#define PNG_WRITE_EMPTY_PLTE_SUPPORTED  /* useful for MNG applications */
#endif

468
#ifndef PNG_NO_STDIO
469
#define PNG_TIME_RFC1123_SUPPORTED
470
#endif
A
Andreas Dilger 已提交
471

472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487
/* This adds extra functions in pngget.c for accessing data from the
 * info pointer (added in version 0.99)
 * png_get_image_width()
 * png_get_image_height()
 * png_get_bit_depth()
 * png_get_color_type()
 * png_get_compression_type()
 * png_get_filter_type()
 * png_get_interlace_type()
 * png_get_pixel_aspect_ratio()
 * png_get_pixels_per_meter()
 * png_get_x_offset_pixels()
 * png_get_y_offset_pixels()
 * png_get_x_offset_microns()
 * png_get_y_offset_microns()
 */
488
#ifndef PNG_NO_EASY_ACCESS
489 490 491
#define PNG_EASY_ACCESS_SUPPORTED
#endif

492 493
#if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD) && \
  !defined(PNG_NO_ASSEMBLER_CODE)
494 495 496
#define PNG_ASSEMBLER_CODE_SUPPORTED
#endif

497 498 499 500
/* Do not use global arrays (helps with building DLL's)
 * They are no longer used in libpng itself, since version 1.0.5c,
 * but might be required for some pre-1.0.5c applications.
 */
501
#ifdef PNG_NO_GLOBAL_ARRAYS
502
#  define PNG_USE_LOCAL_ARRAYS
503
#else
504 505 506 507 508 509
#  if defined(__GNUC__) && defined(WIN32)
#    define PNG_NO_GLOBAL_ARRAYS
#    define PNG_USE_LOCAL_ARRAYS
#  else
#    define PNG_USE_GLOBAL_ARRAYS
#  endif
510 511
#endif

512 513 514 515
/* These are currently experimental features, define them if you want */

/* very little testing */
/*
516
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
517
#ifndef PNG_NO_USER_MEM
518
#define PNG_USER_MEM_SUPPORTED
519
#endif
520
*/
A
Andreas Dilger 已提交
521 522

/* This is only for PowerPC big-endian and 680x0 systems */
523 524 525 526
/* some testing */
/*
#define PNG_READ_BIG_ENDIAN_SUPPORTED
*/
G
Guy Schalnat 已提交
527

A
Andreas Dilger 已提交
528
/* These functions are turned off by default, as they will be phased out. */
529 530 531 532
/*
#define  PNG_USELESS_TESTS_SUPPORTED
#define  PNG_CORRECT_PALETTE_SUPPORTED
*/
A
Andreas Dilger 已提交
533

A
Andreas Dilger 已提交
534 535 536
/* Any chunks you are not interested in, you can undef here.  The
 * ones that allocate memory may be expecially important (hIST,
 * tEXt, zTXt, tRNS, pCAL).  Others will just save time and make png_info
537
 * a bit smaller.
A
Andreas Dilger 已提交
538
 */
G
Guy Schalnat 已提交
539

540 541
#if !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
    !defined(PNG_NO_READ_ANCILLARY_CHUNKS)
542 543
#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
#endif
544 545
#if !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
    !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
546 547 548 549
#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
#endif

#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
550 551 552 553 554 555

#ifdef PNG_NO_READ_TEXT
#  define PNG_NO_READ_iTXt
#  define PNG_NO_READ_tEXt
#  define PNG_NO_READ_zTXt
#endif
556
#ifndef PNG_NO_READ_bKGD
557 558
#  define PNG_READ_bKGD_SUPPORTED
#  define PNG_bKGD_SUPPORTED
559
#endif
560
#ifndef PNG_NO_READ_cHRM
561 562
#  define PNG_READ_cHRM_SUPPORTED
#  define PNG_cHRM_SUPPORTED
563
#endif
564
#ifndef PNG_NO_READ_gAMA
565 566
#  define PNG_READ_gAMA_SUPPORTED
#  define PNG_gAMA_SUPPORTED
567
#endif
568
#ifndef PNG_NO_READ_hIST
569 570
#  define PNG_READ_hIST_SUPPORTED
#  define PNG_hIST_SUPPORTED
571 572
#endif
#ifndef PNG_NO_READ_iCCP
573 574
#  define PNG_READ_iCCP_SUPPORTED
#  define PNG_iCCP_SUPPORTED
575 576
#endif
#ifndef PNG_NO_READ_iTXt
577 578
#  define PNG_READ_iTXt_SUPPORTED
#  define PNG_iTXt_SUPPORTED
579
#endif
580
#ifndef PNG_NO_READ_oFFs
581 582
#  define PNG_READ_oFFs_SUPPORTED
#  define PNG_oFFs_SUPPORTED
583
#endif
584
#ifndef PNG_NO_READ_pCAL
585 586
#  define PNG_READ_pCAL_SUPPORTED
#  define PNG_pCAL_SUPPORTED
587 588
#endif
#ifndef PNG_NO_READ_sCAL
589 590
#  define PNG_READ_sCAL_SUPPORTED
#  define PNG_sCAL_SUPPORTED
591
#endif
592
#ifndef PNG_NO_READ_pHYs
593 594
#  define PNG_READ_pHYs_SUPPORTED
#  define PNG_pHYs_SUPPORTED
595 596
#endif
#ifndef PNG_NO_READ_sBIT
597 598
#  define PNG_READ_sBIT_SUPPORTED
#  define PNG_sBIT_SUPPORTED
599 600
#endif
#ifndef PNG_NO_READ_sPLT
601 602
#  define PNG_READ_sPLT_SUPPORTED
#  define PNG_sPLT_SUPPORTED
603
#endif
604
#ifndef PNG_NO_READ_sRGB
605 606
#  define PNG_READ_sRGB_SUPPORTED
#  define PNG_sRGB_SUPPORTED
607
#endif
608
#ifndef PNG_NO_READ_tEXt
609 610
#  define PNG_READ_tEXt_SUPPORTED
#  define PNG_tEXt_SUPPORTED
611
#endif
612
#ifndef PNG_NO_READ_tIME
613 614
#  define PNG_READ_tIME_SUPPORTED
#  define PNG_tIME_SUPPORTED
615
#endif
616
#ifndef PNG_NO_READ_tRNS
617 618
#  define PNG_READ_tRNS_SUPPORTED
#  define PNG_tRNS_SUPPORTED
619
#endif
620
#ifndef PNG_NO_READ_zTXt
621 622 623
#  define PNG_READ_zTXt_SUPPORTED
#  define PNG_zTXt_SUPPORTED
#endif
624 625
#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
#  define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
626 627 628
#  ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
#    define PNG_UNKNOWN_CHUNKS_SUPPORTED
#  endif
629 630 631 632 633
#  ifndef PNG_NO_HANDLE_AS_UNKNOWN
#    define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#  endif
#endif
#if !defined (PNG_NO_READ_USER_CHUNKS) && \
634
     defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
635 636 637 638 639 640 641 642
#  define PNG_READ_USER_CHUNKS_SUPPORTED
#  define PNG_USER_CHUNKS_SUPPORTED
#  ifdef PNG_NO_READ_UNKNOWN_CHUNKS
#    undef PNG_NO_READ_UNKNOWN_CHUNKS
#  endif
#  ifdef PNG_NO_HANDLE_AS_UNKNOWN
#    undef PNG_NO_HANDLE_AS_UNKNOWN
#  endif
643
#endif
644
#ifndef PNG_NO_READ_OPT_PLTE
645 646
#  define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */
#endif                      /* optional PLTE chunk in RGB and RGBA images */
647 648
#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
  defined(PNG_READ_zTXt_SUPPORTED)
649 650
#  define PNG_READ_TEXT_SUPPORTED
#  define PNG_TEXT_SUPPORTED
651
#endif
652
#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
G
Guy Schalnat 已提交
653

654
#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
655 656 657 658
#ifdef PNG_NO_WRITE_TEXT
#  define PNG_NO_WRITE_iTXt
#  define PNG_NO_WRITE_tEXt
#  define PNG_NO_WRITE_zTXt
659
#endif
660 661 662 663 664
#ifndef PNG_NO_WRITE_bKGD
#  define PNG_WRITE_bKGD_SUPPORTED
#  ifndef PNG_bKGD_SUPPORTED
#    define PNG_bKGD_SUPPORTED
#  endif
665
#endif
666
#ifndef PNG_NO_WRITE_cHRM
667 668 669 670
#  define PNG_WRITE_cHRM_SUPPORTED
#  ifndef PNG_cHRM_SUPPORTED
#    define PNG_cHRM_SUPPORTED
#  endif
671
#endif
672
#ifndef PNG_NO_WRITE_gAMA
673 674 675 676
#  define PNG_WRITE_gAMA_SUPPORTED
#  ifndef PNG_gAMA_SUPPORTED
#    define PNG_gAMA_SUPPORTED
#  endif
677
#endif
678
#ifndef PNG_NO_WRITE_hIST
679 680 681 682
#  define PNG_WRITE_hIST_SUPPORTED
#  ifndef PNG_hIST_SUPPORTED
#    define PNG_hIST_SUPPORTED
#  endif
683 684
#endif
#ifndef PNG_NO_WRITE_iCCP
685 686 687 688
#  define PNG_WRITE_iCCP_SUPPORTED
#  ifndef PNG_iCCP_SUPPORTED
#    define PNG_iCCP_SUPPORTED
#  endif
689 690
#endif
#ifndef PNG_NO_WRITE_iTXt
691 692 693 694
#  define PNG_WRITE_iTXt_SUPPORTED
#  ifndef PNG_iTXt_SUPPORTED
#    define PNG_iTXt_SUPPORTED
#  endif
695
#endif
696
#ifndef PNG_NO_WRITE_oFFs
697 698 699 700
#  define PNG_WRITE_oFFs_SUPPORTED
#  ifndef PNG_oFFs_SUPPORTED
#    define PNG_oFFs_SUPPORTED
#  endif
701
#endif
702
#ifndef PNG_NO_WRITE_pCAL
703 704 705 706
#  define PNG_WRITE_pCAL_SUPPORTED
#  ifndef PNG_pCAL_SUPPORTED
#    define PNG_pCAL_SUPPORTED
#  endif
707 708
#endif
#ifndef PNG_NO_WRITE_sCAL
709 710 711 712
#  define PNG_WRITE_sCAL_SUPPORTED
#  ifndef PNG_sCAL_SUPPORTED
#    define PNG_sCAL_SUPPORTED
#  endif
713
#endif
714
#ifndef PNG_NO_WRITE_pHYs
715 716 717 718
#  define PNG_WRITE_pHYs_SUPPORTED
#  ifndef PNG_pHYs_SUPPORTED
#    define PNG_pHYs_SUPPORTED
#  endif
719
#endif
720
#ifndef PNG_NO_WRITE_sBIT
721 722 723 724
#  define PNG_WRITE_sBIT_SUPPORTED
#  ifndef PNG_sBIT_SUPPORTED
#    define PNG_sBIT_SUPPORTED
#  endif
725 726
#endif
#ifndef PNG_NO_WRITE_sPLT
727 728 729 730
#  define PNG_WRITE_sPLT_SUPPORTED
#  ifndef PNG_sPLT_SUPPORTED
#    define PNG_sPLT_SUPPORTED
#  endif
731
#endif
732
#ifndef PNG_NO_WRITE_sRGB
733 734 735 736
#  define PNG_WRITE_sRGB_SUPPORTED
#  ifndef PNG_sRGB_SUPPORTED
#    define PNG_sRGB_SUPPORTED
#  endif
737
#endif
738
#ifndef PNG_NO_WRITE_tEXt
739 740 741 742
#  define PNG_WRITE_tEXt_SUPPORTED
#  ifndef PNG_tEXt_SUPPORTED
#    define PNG_tEXt_SUPPORTED
#  endif
743
#endif
744
#ifndef PNG_NO_WRITE_tIME
745 746 747 748
#  define PNG_WRITE_tIME_SUPPORTED
#  ifndef PNG_tIME_SUPPORTED
#    define PNG_tIME_SUPPORTED
#  endif
749
#endif
750
#ifndef PNG_NO_WRITE_tRNS
751 752 753 754
#  define PNG_WRITE_tRNS_SUPPORTED
#  ifndef PNG_tRNS_SUPPORTED
#    define PNG_tRNS_SUPPORTED
#  endif
755
#endif
756
#ifndef PNG_NO_WRITE_zTXt
757 758 759 760
#  define PNG_WRITE_zTXt_SUPPORTED
#  ifndef PNG_zTXt_SUPPORTED
#    define PNG_zTXt_SUPPORTED
#  endif
761 762
#endif
#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
763 764 765 766 767 768 769 770 771
#  define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
#  ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
#    define PNG_UNKNOWN_CHUNKS_SUPPORTED
#  endif
#  ifndef PNG_NO_HANDLE_AS_UNKNOWN
#     ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#       define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#     endif
#  endif
772 773 774
#endif
#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \
  defined(PNG_WRITE_zTXt_SUPPORTED)
775 776 777 778
#  define PNG_WRITE_TEXT_SUPPORTED
#  ifndef PNG_TEXT_SUPPORTED
#    define PNG_TEXT_SUPPORTED
#  endif
779
#endif
780
#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
G
Guy Schalnat 已提交
781

782
/* Turn this off to disable png_read_png() and
783
 * png_write_png() and leave the row_pointers member
784 785 786 787 788 789
 * out of the info structure.
 */
#ifndef PNG_NO_INFO_IMAGE
#  define PNG_INFO_IMAGE_SUPPORTED
#endif

A
Andreas Dilger 已提交
790
/* need the time information for reading tIME chunks */
791 792
#if defined(PNG_tIME_SUPPORTED)
#  include <time.h>
A
Andreas Dilger 已提交
793 794
#endif

A
Andreas Dilger 已提交
795
/* Some typedefs to get us started.  These should be safe on most of the
A
Andreas Dilger 已提交
796 797 798 799 800 801 802
 * common platforms.  The typedefs should be at least as large as the
 * numbers suggest (a png_uint_32 must be at least 32 bits long), but they
 * don't have to be exactly that size.  Some compilers dislike passing
 * unsigned shorts as function parameters, so you may be better off using
 * unsigned int for png_uint_16.  Likewise, for 64-bit systems, you may
 * want to have unsigned int for png_uint_32 instead of unsigned long.
 */
G
Guy Schalnat 已提交
803 804 805 806 807 808 809

typedef unsigned long png_uint_32;
typedef long png_int_32;
typedef unsigned short png_uint_16;
typedef short png_int_16;
typedef unsigned char png_byte;

A
Andreas Dilger 已提交
810
/* This is usually size_t.  It is typedef'ed just in case you need it to
G
Guy Schalnat 已提交
811 812 813
   change (I'm not sure if you will or not, so I thought I'd be safe) */
typedef size_t png_size_t;

A
Andreas Dilger 已提交
814 815 816 817 818 819 820 821
/* The following is needed for medium model support.  It cannot be in the
 * PNG_INTERNAL section.  Needs modification for other compilers besides
 * MSC.  Model independent support declares all arrays and pointers to be
 * large using the far keyword.  The zlib version used must also support
 * model independent data.  As of version zlib 1.0.4, the necessary changes
 * have been made in zlib.  The USE_FAR_KEYWORD define triggers other
 * changes that are needed. (Tim Wegner)
 */
G
Guy Schalnat 已提交
822

A
Andreas Dilger 已提交
823 824
/* Separate compiler dependencies (problem here is that zlib.h always
   defines FAR. (SJT) */
G
Guy Schalnat 已提交
825 826 827
#ifdef __BORLANDC__
#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
#define LDATA 1
G
Guy Schalnat 已提交
828
#else
G
Guy Schalnat 已提交
829 830 831 832 833 834 835 836 837 838
#define LDATA 0
#endif

#if !defined(__WIN32__) && !defined(__FLAT__)
#define PNG_MAX_MALLOC_64K
#if (LDATA != 1)
#ifndef FAR
#define FAR __far
#endif
#define USE_FAR_KEYWORD
G
Guy Schalnat 已提交
839
#endif   /* LDATA != 1 */
G
Guy Schalnat 已提交
840

A
Andreas Dilger 已提交
841
/* Possibly useful for moving data out of default segment.
842 843
 * Uncomment it if you want. Could also define FARDATA as
 * const if your compiler supports it. (SJT)
G
Guy Schalnat 已提交
844
#  define FARDATA FAR
845
 */
G
Guy Schalnat 已提交
846 847
#endif  /* __WIN32__, __FLAT__ */

G
Guy Schalnat 已提交
848
#endif   /* __BORLANDC__ */
G
Guy Schalnat 已提交
849 850


A
Andreas Dilger 已提交
851
/* Suggest testing for specific compiler first before testing for
852 853 854
 * FAR.  The Watcom compiler defines both __MEDIUM__ and M_I86MM,
 * making reliance oncertain keywords suspect. (SJT)
 */
G
Guy Schalnat 已提交
855 856 857 858 859

/* MSC Medium model */
#if defined(FAR)
#  if defined(M_I86MM)
#     define USE_FAR_KEYWORD
A
Andreas Dilger 已提交
860 861
#     define FARDATA FAR
#     include <dos.h>
G
Guy Schalnat 已提交
862 863 864 865 866
#  endif
#endif

/* SJT: default case */
#ifndef FAR
G
Guy Schalnat 已提交
867 868 869
#   define FAR
#endif

A
Andreas Dilger 已提交
870
/* At this point FAR is always defined */
G
Guy Schalnat 已提交
871 872 873 874
#ifndef FARDATA
#define FARDATA
#endif

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

A
Andreas Dilger 已提交
879
/* Add typedefs for pointers */
A
Andreas Dilger 已提交
880
typedef void            FAR * png_voidp;
G
Guy Schalnat 已提交
881 882 883 884 885 886 887
typedef png_byte        FAR * png_bytep;
typedef png_uint_32     FAR * png_uint_32p;
typedef png_int_32      FAR * png_int_32p;
typedef png_uint_16     FAR * png_uint_16p;
typedef png_int_16      FAR * png_int_16p;
typedef PNG_CONST char  FAR * png_const_charp;
typedef char            FAR * png_charp;
888
typedef png_fixed_point FAR * png_fixed_point_p;
889
#ifdef PNG_FLOATING_POINT_SUPPORTED
A
Andreas Dilger 已提交
890
typedef double          FAR * png_doublep;
891
#endif
G
Guy Schalnat 已提交
892

A
Andreas Dilger 已提交
893
/* Pointers to pointers; i.e. arrays */
G
Guy Schalnat 已提交
894 895 896 897 898 899 900
typedef png_byte        FAR * FAR * png_bytepp;
typedef png_uint_32     FAR * FAR * png_uint_32pp;
typedef png_int_32      FAR * FAR * png_int_32pp;
typedef png_uint_16     FAR * FAR * png_uint_16pp;
typedef png_int_16      FAR * FAR * png_int_16pp;
typedef PNG_CONST char  FAR * FAR * png_const_charpp;
typedef char            FAR * FAR * png_charpp;
901
typedef png_fixed_point FAR * FAR * png_fixed_point_pp;
902
#ifdef PNG_FLOATING_POINT_SUPPORTED
A
Andreas Dilger 已提交
903
typedef double          FAR * FAR * png_doublepp;
904
#endif
G
Guy Schalnat 已提交
905

A
Andreas Dilger 已提交
906 907
/* Pointers to pointers to pointers; i.e. pointer to array */
typedef char            FAR * FAR * FAR * png_charppp;
G
Guy Schalnat 已提交
908

A
Andreas Dilger 已提交
909 910 911 912
/* libpng typedefs for types in zlib. If zlib changes
 * or another compression library is used, then change these.
 * Eliminates need to change all the source files.
 */
G
Guy Schalnat 已提交
913 914
typedef charf *         png_zcharp;
typedef charf * FAR *   png_zcharpp;
915
typedef z_stream FAR *  png_zstreamp;
G
Guy Schalnat 已提交
916

917 918 919 920 921 922 923 924 925
/*
 * Define PNG_BUILD_DLL if the module being built is a Windows
 * LIBPNG DLL.
 *
 * Define PNG_DLL if you want to *link* to the Windows LIBPNG DLL.
 * It is equivalent to Microsoft predefined macro _DLL which is
 * automatically defined when you compile using the share
 * version of the CRT (C Run-Time library)
 */
A
Andreas Dilger 已提交
926

927 928 929
#if !defined(PNG_DLL) && defined(PNG_BUILD_DLL)
#  define PNG_DLL
#endif
930

931 932 933
#if defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF)
#  define PNG_IMPEXP
#endif
934

935 936 937
#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \
    defined(_Windows) || defined(_WINDOWS) || \
    defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
938

939 940 941 942 943
#  define PNGAPI _cdecl

#  if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \
       0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */)
#     define PNG_IMPEXP
944 945
#  endif

946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978
#  if !defined(PNG_IMPEXP)

#     define PNG_EXPORT_TYPE1(type,symbol)  PNG_IMPEXP type PNGAPI symbol
#     define PNG_EXPORT_TYPE2(type,symbol)  type PNG_IMPEXP PNGAPI symbol

      /* Borland/Microsoft */
#     if defined(_MSC_VER) || defined(__BORLANDC__)
#        if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500)
#           define PNG_EXPORT PNG_EXPORT_TYPE1
#        else
#           define PNG_EXPORT PNG_EXPORT_TYPE2
#           if defined(PNG_BUILD_DLL)
#              define PNG_IMPEXP __export
#           else
#              define PNG_IMPEXP /*__import*/ /* doesn't exist AFAIK in
                                                 VC++*/
#           endif                             /* Exists in Borland C++ for
                                                 C++ classes (== huge) */
#        endif
#     endif

#     if !defined(PNG_IMPEXP)
#        if defined(PNG_BUILD_DLL)
#           define PNG_IMPEXP __declspec(dllexport)
#        else
#           define PNG_IMPEXP __declspec(dllimport)
#        endif
#     endif
#  endif  /* PNG_IMPEXP */
#else
#  if 0 /* ... other platforms, with other meanings */
#  else
#     define PNGAPI
979
#  endif
980 981
#endif

982 983 984 985 986 987 988 989
#ifndef PNG_EXPORT
#  define PNG_EXPORT(type,symbol) type PNGAPI symbol
#endif

#if defined(__MINGW32__) || defined(__CYGWIN32__)
#  define PNG_ATTR_DLLIMP
#endif

A
Andreas Dilger 已提交
990
#ifndef PNG_EXPORT
991
#  define PNG_EXPORT(type,symbol) type symbol
A
Andreas Dilger 已提交
992 993
#endif

994 995 996 997
#if defined(__MINGW32__) || defined(__CYGWIN32__)
#  define PNG_ATTR_DLLIMP
#endif

998
#ifdef PNG_USE_GLOBAL_ARRAYS
999
#ifndef PNG_EXPORT_VAR
1000
#  if defined(_MSC_VER) && defined(_DLL)   /* GRR 20000206 */
1001 1002
#    define PNG_EXPORT_VAR(type) extern type __declspec(dllexport)
#  endif
1003 1004 1005 1006
#  ifdef PNG_DECL_DLLEXP
#    define PNG_EXPORT_VAR(type) extern __declspec(dllexport) type
#  endif
#  ifdef PNG_ATTR_DLLEXP
1007
#    define PNG_EXPORT_VAR(type) extern type __attribute__((dllexport))
1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018
#  endif
#  ifdef PNG_DECL_DLLIMP
#    define PNG_EXPORT_VAR(type) extern __declspec(dllimport) type
#  endif
#  ifdef PNG_ATTR_DLLIMP
#    define PNG_EXPORT_VAR(type) extern type __attribute__((dllimport))
#  endif
#endif
#ifndef PNG_EXPORT_VAR
#    define PNG_EXPORT_VAR(type) extern type
#endif
1019
#endif
A
Andreas Dilger 已提交
1020

1021 1022
/* User may want to use these so they are not in PNG_INTERNAL. Any library
 * functions that are passed far data must be model independent.
1023
 */
A
Andreas Dilger 已提交
1024

1025 1026 1027 1028
#ifndef PNG_ABORT
#   define PNG_ABORT() abort()
#endif

1029
#ifdef PNG_SETJMP_SUPPORTED
1030 1031 1032 1033
#   define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
#else
#   define png_jmpbuf(png_ptr) \
    (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED)
1034 1035
#endif

G
Guy Schalnat 已提交
1036
#if defined(USE_FAR_KEYWORD)  /* memory model independent fns */
A
Andreas Dilger 已提交
1037 1038 1039
/* use this to make far-to-near assignments */
#   define CHECK   1
#   define NOCHECK 0
1040 1041
#   define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK))
#   define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK))
1042
#   define png_strcpy _fstrcpy
G
Guy Schalnat 已提交
1043
#   define png_strlen _fstrlen
G
Guy Schalnat 已提交
1044
#   define png_memcmp _fmemcmp      /* SJT: added */
G
Guy Schalnat 已提交
1045 1046 1047
#   define png_memcpy _fmemcpy
#   define png_memset _fmemset
#else /* use the usual functions */
A
Andreas Dilger 已提交
1048 1049
#   define CVT_PTR(ptr)         (ptr)
#   define CVT_PTR_NOCHECK(ptr) (ptr)
1050
#   define png_strcpy strcpy
G
Guy Schalnat 已提交
1051
#   define png_strlen strlen
G
Guy Schalnat 已提交
1052
#   define png_memcmp memcmp     /* SJT: added */
G
Guy Schalnat 已提交
1053 1054 1055 1056 1057
#   define png_memcpy memcpy
#   define png_memset memset
#endif
/* End of memory model independent support */

1058
/* Just a little check that someone hasn't tried to define something
1059
 * contradictory.
A
Andreas Dilger 已提交
1060 1061 1062 1063 1064 1065
 */
#if (PNG_ZBUF_SIZE > 65536) && defined(PNG_MAX_MALLOC_64K)
#undef PNG_ZBUF_SIZE
#define PNG_ZBUF_SIZE 65536
#endif

G
Guy Schalnat 已提交
1066 1067
#endif /* PNGCONF_H */