pngconf.h 12.6 KB
Newer Older
G
Guy Schalnat 已提交
1 2 3

/* pngconf.c - machine configurable file for libpng

A
Andreas Dilger 已提交
4
   libpng 1.0 beta 4 - version 0.90
G
Guy Schalnat 已提交
5
   For conditions of distribution and use, see copyright notice in png.h
G
Guy Schalnat 已提交
6
   Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
A
Andreas Dilger 已提交
7
   December 3, 1996
G
Guy Schalnat 已提交
8 9 10 11 12 13 14 15 16 17
   */

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

#ifndef PNGCONF_H
#define PNGCONF_H

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

G
Guy Schalnat 已提交
30
#define PNG_ZBUF_SIZE 8192
G
Guy Schalnat 已提交
31

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

A
Andreas Dilger 已提交
44
/* This protects us against compilers which run on a windowing system
G
Guy Schalnat 已提交
45 46 47 48
   and thus don't have or would rather us not use the stdio types:
   stdin, stdout, and stderr.  The only one currently used is stderr
   in png_error() and png_warning().  #defining PNG_NO_STDIO will
   prevent these from being compiled and used. */
G
Guy Schalnat 已提交
49 50 51

/* #define PNG_NO_STDIO */

A
Andreas Dilger 已提交
52 53 54 55 56 57 58 59 60 61
/* for FILE.  If you are not using standard io, you don't need this */
#ifndef PNG_NO_STDIO
#include <stdio.h>
#endif

/* This macro protects us against machines that don't have function
   prototypes (ie K&R style headers).  If your compiler does not handle
   function prototypes, define this macro.  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 已提交
62 63
#ifndef PNGARG

A
Andreas Dilger 已提交
64
#ifdef OF /* Zlib prototype munger */
G
Guy Schalnat 已提交
65 66 67 68
#define PNGARG(arglist) OF(arglist)
#else

#ifdef _NO_PROTO
G
Guy Schalnat 已提交
69
#define PNGARG(arglist) ()
G
Guy Schalnat 已提交
70 71 72 73 74 75 76 77
#else
#define PNGARG(arglist) arglist
#endif /* _NO_PROTO */

#endif /* OF */

#endif /* PNGARG */

A
Andreas Dilger 已提交
78 79 80 81 82
/* Try to determine if we are compiling on a Mac */
#if defined(__MWERKS__) ||defined(applec) ||defined(THINK_C) ||defined(__SC__)
#define MACOS
#endif

G
Guy Schalnat 已提交
83
/* enough people need this for various reasons to include it here */
G
Guy Schalnat 已提交
84
#if !defined(MACOS) && !defined(RISCOS)
G
Guy Schalnat 已提交
85 86
#include <sys/types.h>
#endif
A
Andreas Dilger 已提交
87

G
Guy Schalnat 已提交
88 89 90
/* need the time information for reading tIME chunks */
#include <time.h>

A
Andreas Dilger 已提交
91 92 93 94 95 96 97 98 99 100
/* This is an attempt to force a single setjmp behaviour on Linux */
#ifdef linux
#ifdef _BSD_SOURCE
#define _PNG_SAVE_BSD_SOURCE
#undef _BSD_SOURCE
#endif
#ifdef _SETJMP_H
error: png.h already includes setjmp.h
#endif
#endif /* linux */
G
Guy Schalnat 已提交
101 102 103 104

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

A
Andreas Dilger 已提交
105 106 107 108 109 110 111
#ifdef linux
#ifdef _PNG_SAVE_BSD_SOURCE
#define _BSD_SOURCE
#undef _PNG_SAVE_BSD_SOURCE
#endif
#endif /* linux */

G
Guy Schalnat 已提交
112 113 114 115 116 117
#ifdef BSD
#include <strings.h>
#else
#include <string.h>
#endif

A
Andreas Dilger 已提交
118
/* Other defines for things like memory and the like can go here.  These
G
Guy Schalnat 已提交
119 120 121 122 123 124
   are the only files included in libpng, so if you need to change them,
   change them here.  They are only included if PNG_INTERNAL is defined. */
#ifdef PNG_INTERNAL
#include <stdlib.h>
#include <ctype.h>

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

A
Andreas Dilger 已提交
128 129 130 131 132 133 134
#ifdef MACOS
#include <fp.h>
#else
#include <math.h>
#endif

/* For some reason, Borland C++ defines memcmp, etc. in mem.h, not
G
Guy Schalnat 已提交
135
   stdlib.h like it should (I think).  Or perhaps this is a C++
A
Andreas Dilger 已提交
136
   feature? */
G
Guy Schalnat 已提交
137 138 139 140 141 142 143 144 145
#ifdef __TURBOC__
#include <mem.h>
#include "alloc.h"
#endif

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

A
Andreas Dilger 已提交
146
/* This controls how fine the dithering gets.  As this allocates
G
Guy Schalnat 已提交
147
   a largish chunk of memory (32K), those who are not as concerned
A
Andreas Dilger 已提交
148
   with dithering quality can decrease some or all of these. */
G
Guy Schalnat 已提交
149 150 151 152
#define PNG_DITHER_RED_BITS 5
#define PNG_DITHER_GREEN_BITS 5
#define PNG_DITHER_BLUE_BITS 5

A
Andreas Dilger 已提交
153
/* This controls how fine the gamma correction becomes when you
G
Guy Schalnat 已提交
154 155
   are only interested in 8 bits anyway.  Increasing this value
   results in more memory being used, and more pow() functions
A
Andreas Dilger 已提交
156
   being called to fill in the gamma tables.  Don't set this
G
Guy Schalnat 已提交
157 158 159 160 161 162 163
   value less then 8, and even that may not work (I haven't tested
   it). */

#define PNG_MAX_GAMMA_8 11

#endif /* PNG_INTERNAL */

A
Andreas Dilger 已提交
164
/* The following uses const char * instead of char * for error
G
Guy Schalnat 已提交
165 166 167
   and warning message functions, so some compilers won't complain.
   If you want to use const, define PNG_USE_CONST here.  It is not
   normally defined to make configuration easier, as it is not a
G
Guy Schalnat 已提交
168
   critical part of the code.
G
Guy Schalnat 已提交
169
   */
G
Guy Schalnat 已提交
170

A
Andreas Dilger 已提交
171 172
#define PNG_USE_CONST

G
Guy Schalnat 已提交
173 174 175 176 177 178
#ifdef PNG_USE_CONST
#  define PNG_CONST const
#else
#  define PNG_CONST
#endif

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

/* Any transformations you will not be using can be undef'ed here */
G
Guy Schalnat 已提交
193
#define PNG_PROGRESSIVE_READ_SUPPORTED
G
Guy Schalnat 已提交
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
#define PNG_READ_INTERLACING_SUPPORTED
#define PNG_READ_EXPAND_SUPPORTED
#define PNG_READ_SHIFT_SUPPORTED
#define PNG_READ_PACK_SUPPORTED
#define PNG_READ_BGR_SUPPORTED
#define PNG_READ_SWAP_SUPPORTED
#define PNG_READ_INVERT_SUPPORTED
#define PNG_READ_DITHER_SUPPORTED
#define PNG_READ_BACKGROUND_SUPPORTED
#define PNG_READ_16_TO_8_SUPPORTED
#define PNG_READ_FILLER_SUPPORTED
#define PNG_READ_GAMMA_SUPPORTED
#define PNG_READ_GRAY_TO_RGB_SUPPORTED

#define PNG_WRITE_INTERLACING_SUPPORTED
#define PNG_WRITE_SHIFT_SUPPORTED
#define PNG_WRITE_PACK_SUPPORTED
#define PNG_WRITE_BGR_SUPPORTED
#define PNG_WRITE_SWAP_SUPPORTED
#define PNG_WRITE_INVERT_SUPPORTED
#define PNG_WRITE_FILLER_SUPPORTED
G
Guy Schalnat 已提交
215
#define PNG_WRITE_FLUSH_SUPPORTED
G
Guy Schalnat 已提交
216

A
Andreas Dilger 已提交
217 218 219 220
/* These functions are turned off by default, as they will be phased out. */
#undef  PNG_USE_OWN_CRC
#undef  PNG_CORRECT_PALETTE_SUPPORTED

G
Guy Schalnat 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
/* any chunks you are not interested in, you can undef here.  The
   ones that allocate memory may be expecially important (hIST,
   tEXt, zTXt, tRNS) Others will just save time and make png_info
   smaller.  OPT_PLTE only disables the optional palette in RGB
   and RGB Alpha images. */

#define PNG_READ_gAMA_SUPPORTED
#define PNG_READ_sBIT_SUPPORTED
#define PNG_READ_cHRM_SUPPORTED
#define PNG_READ_tRNS_SUPPORTED
#define PNG_READ_bKGD_SUPPORTED
#define PNG_READ_hIST_SUPPORTED
#define PNG_READ_pHYs_SUPPORTED
#define PNG_READ_oFFs_SUPPORTED
#define PNG_READ_tIME_SUPPORTED
#define PNG_READ_tEXt_SUPPORTED
#define PNG_READ_zTXt_SUPPORTED
#define PNG_READ_OPT_PLTE_SUPPORTED

#define PNG_WRITE_gAMA_SUPPORTED
#define PNG_WRITE_sBIT_SUPPORTED
#define PNG_WRITE_cHRM_SUPPORTED
#define PNG_WRITE_tRNS_SUPPORTED
#define PNG_WRITE_bKGD_SUPPORTED
#define PNG_WRITE_hIST_SUPPORTED
#define PNG_WRITE_pHYs_SUPPORTED
#define PNG_WRITE_oFFs_SUPPORTED
#define PNG_WRITE_tIME_SUPPORTED
#define PNG_WRITE_tEXt_SUPPORTED
#define PNG_WRITE_zTXt_SUPPORTED

A
Andreas Dilger 已提交
252 253 254 255
/* Some typedefs to get us started.  These should be safe on most of the
   common platforms.  The typedefs should be at least as large as the
   numbers suggest (a png_uint_32 must be at least 32 bits long), but they
   don't have to be exactly that size. */
G
Guy Schalnat 已提交
256 257 258 259 260 261 262

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 已提交
263
/* This is usually size_t.  It is typedef'ed just in case you need it to
G
Guy Schalnat 已提交
264 265 266
   change (I'm not sure if you will or not, so I thought I'd be safe) */
typedef size_t png_size_t;

G
Guy Schalnat 已提交
267 268
/* The following is needed for medium model support. It cannot be in the
   PNG_INTERNAL section. Needs modification for other compilers besides
G
Guy Schalnat 已提交
269 270
   MSC. Model independent support declares all arrays that might be very
   large using the far keyword. The Zlib version used must also support
G
Guy Schalnat 已提交
271
   model independent data. As of version Zlib .95, the necessary changes
G
Guy Schalnat 已提交
272 273
   have been made in Zlib. The USE_FAR_KEYWORD define triggers other
   changes that are needed. Most of the far keyword changes are hidden
A
Andreas Dilger 已提交
274
   inside typedefs with suffix "f". (Tim Wegner) */
G
Guy Schalnat 已提交
275

A
Andreas Dilger 已提交
276 277
/* Separate compiler dependencies (problem here is that zlib.h always
   defines FAR. (SJT) */
G
Guy Schalnat 已提交
278 279 280
#ifdef __BORLANDC__
#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
#define LDATA 1
G
Guy Schalnat 已提交
281
#else
G
Guy Schalnat 已提交
282 283 284 285 286 287 288 289 290 291
#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 已提交
292
#endif   /* LDATA != 1 */
G
Guy Schalnat 已提交
293

A
Andreas Dilger 已提交
294 295 296
/* Possibly useful for moving data out of default segment.
   Uncomment it if you want. Could also define FARDATA as
   const if your compiler supports it. (SJT)
G
Guy Schalnat 已提交
297 298 299 300
#  define FARDATA FAR
*/
#endif  /* __WIN32__, __FLAT__ */

G
Guy Schalnat 已提交
301
#endif   /* __BORLANDC__ */
G
Guy Schalnat 已提交
302 303


A
Andreas Dilger 已提交
304 305 306
/* Suggest testing for specific compiler first before testing for
   FAR.  The Watcom compiler defines both __MEDIUM__ and M_I86MM,
   making reliance oncertain keywords suspect. (SJT) */
G
Guy Schalnat 已提交
307 308 309 310 311

/* MSC Medium model */
#if defined(FAR)
#  if defined(M_I86MM)
#     define USE_FAR_KEYWORD
A
Andreas Dilger 已提交
312 313
#     define FARDATA FAR
#     include <dos.h>
G
Guy Schalnat 已提交
314 315 316 317 318
#  endif
#endif

/* SJT: default case */
#ifndef FAR
G
Guy Schalnat 已提交
319 320 321
#   define FAR
#endif

G
Guy Schalnat 已提交
322 323 324 325 326 327 328
/* SJT: At this point FAR is always defined */

/* SJT: */
#ifndef FARDATA
#define FARDATA
#endif

A
Andreas Dilger 已提交
329 330
/* Not used anymore (as of 0.88), but kept for compatability (for now). */
typedef unsigned char FAR png_bytef;
G
Guy Schalnat 已提交
331 332

/* SJT: Add typedefs for pointers */
A
Andreas Dilger 已提交
333
typedef void            FAR * png_voidp;
G
Guy Schalnat 已提交
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
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;

/*  SJT: Pointers to pointers; i.e. arrays */
typedef png_byte        FAR * FAR * png_bytepp;
typedef png_uint_32     FAR * FAR * png_uint_32pp;
typedef png_int_32      FAR * FAR * png_int_32pp;
typedef png_uint_16     FAR * FAR * png_uint_16pp;
typedef png_int_16      FAR * FAR * png_int_16pp;
typedef PNG_CONST char  FAR * FAR * png_const_charpp;
typedef char            FAR * FAR * png_charpp;


/* SJT: 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.
*/
typedef charf *         png_zcharp;
typedef charf * FAR *   png_zcharpp;
A
Andreas Dilger 已提交
358
typedef z_stream FAR *  png_zstreamp; 
G
Guy Schalnat 已提交
359

G
Guy Schalnat 已提交
360 361
/* User may want to use these so not in PNG_INTERNAL. Any library functions
   that are passed far data must be model independent. */
A
Andreas Dilger 已提交
362

G
Guy Schalnat 已提交
363
#if defined(USE_FAR_KEYWORD)  /* memory model independent fns */
A
Andreas Dilger 已提交
364 365 366 367 368
/* use this to make far-to-near assignments */
#   define CHECK   1
#   define NOCHECK 0
#   define CVT_PTR(ptr) (far_to_near(png_ptr,ptr,CHECK))
#   define CVT_PTR_NOCHECK(ptr) (far_to_near(png_ptr,ptr,NOCHECK))
G
Guy Schalnat 已提交
369 370 371 372
#   define png_strcpy _fstrcpy
#   define png_strcat _fstrcat
#   define png_strlen _fstrlen
#   define png_strcmp _fstrcmp
G
Guy Schalnat 已提交
373
#   define png_memcmp _fmemcmp      /* SJT: added */
G
Guy Schalnat 已提交
374 375 376
#   define png_memcpy _fmemcpy
#   define png_memset _fmemset
#else /* use the usual functions */
A
Andreas Dilger 已提交
377 378
#   define CVT_PTR(ptr)         (ptr)
#   define CVT_PTR_NOCHECK(ptr) (ptr)
G
Guy Schalnat 已提交
379 380 381 382
#   define png_strcpy strcpy
#   define png_strcat strcat
#   define png_strlen strlen
#   define png_strcmp strcmp
G
Guy Schalnat 已提交
383
#   define png_memcmp memcmp     /* SJT: added */
G
Guy Schalnat 已提交
384 385 386 387 388 389 390
#   define png_memcpy memcpy
#   define png_memset memset
#endif
/* End of memory model independent support */

#endif /* PNGCONF_H */