pngconf.h
上传用户:shtaya11
上传日期:2021-10-17
资源大小:941k
文件大小:12k
源码类别:

2D图形编程

开发平台:

Visual C++

  1. /* pngconf.c - machine configurable file for libpng
  2.    libpng 1.0 beta 3 - version 0.89
  3.    For conditions of distribution and use, see copyright notice in png.h
  4.    Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  5.    May 25, 1996
  6.    */
  7. /* Any machine specific code is near the front of this file, so if you
  8.    are configuring libpng for a machine, you may want to read the section
  9.    starting here down to where it starts to typedef png_color, png_text,
  10.    and png_info */
  11. #ifndef PNGCONF_H
  12. #define PNGCONF_H
  13. /* this is the size of the compression buffer, and thus the size of
  14.    an IDAT chunk.  Make this whatever size you feel is best for your
  15.    machine.  One of these will be allocated per png_struct.  When this
  16.    is full, it writes the data to the disk, and does some other
  17.    calculations.  Making this an extreamly small size will slow
  18.    the library down, but you may want to experiment to determine
  19.    where it becomes significant, if you are concerned with memory
  20.    usage.  Note that zlib allocates at least 32Kb also.  For readers,
  21.    this describes the size of the buffer available to read the data in.
  22.    Unless this gets smaller then the size of a row (compressed),
  23.    it should not make much difference how big this is.  */
  24. #define PNG_ZBUF_SIZE 8192
  25. /* While libpng currently uses zlib for it's compression, it has been designed
  26.    to stand on it's own.  Towards this end, there are two defines that are
  27.    used to help portability between machines.  To make it simpler to
  28.    setup libpng on a machine, this currently uses zlib's definitions, so
  29.    any changes should be made in zlib.  Libpng will check zlib's settings
  30.    and adjust it's own accordingly. */
  31. /* if you are running on a machine where you cannot allocate more then
  32.    64K of memory, uncomment this.  While libpng will not normally need
  33.    that much memory in a chunk (unless you load up a very large file),
  34.    zlib needs to know how big of a chunk it can use, and libpng thus
  35.    makes sure to check any memory allocation to verify it will fit
  36.    into memory.
  37. #define PNG_MAX_ALLOC_64K
  38. */
  39. #ifdef MAXSEG_64K
  40. #define PNG_MAX_ALLOC_64K
  41. #endif
  42. /* this protects us against compilers which run on a windowing system
  43.    and thus don't have or would rather us not use the stdio types:
  44.    stdin, stdout, and stderr.  The only one currently used is stderr
  45.    in png_error() and png_warning().  #defining PNG_NO_STDIO will
  46.    prevent these from being compiled and used. */
  47. /* #define PNG_NO_STDIO */
  48. /* this macro protects us against machines that don't have function
  49.    prototypes.  If your compiler does not handle function prototypes,
  50.    define this macro.  I've always been able to use _NO_PROTO as the
  51.    indicator, but you may need to drag the empty declaration out in
  52.    front of here, or change the ifdef to suit your own needs. */
  53. #ifndef PNGARG
  54. #ifdef OF
  55. #define PNGARG(arglist) OF(arglist)
  56. #else
  57. #ifdef _NO_PROTO
  58. #define PNGARG(arglist) ()
  59. #else
  60. #define PNGARG(arglist) arglist
  61. #endif /* _NO_PROTO */
  62. #endif /* OF */
  63. #endif /* PNGARG */
  64. //#define MACOS
  65. /* enough people need this for various reasons to include it here */
  66. #if !defined(MACOS) && !defined(RISCOS)
  67. #include <sys/types.h>
  68. #endif
  69. /* need the time information for reading tIME chunks */
  70. #include <time.h>
  71. /* for FILE.  If you are not using standard io, you don't need this */
  72. #include <stdio.h>
  73. /* include setjmp.h for error handling */
  74. #include <setjmp.h>
  75. #ifdef BSD
  76. #include <strings.h>
  77. #else
  78. #include <string.h>
  79. #endif
  80. /* other defines for things like memory and the like can go here.  These
  81.    are the only files included in libpng, so if you need to change them,
  82.    change them here.  They are only included if PNG_INTERNAL is defined. */
  83. #ifdef PNG_INTERNAL
  84. #include <stdlib.h>
  85. #include <ctype.h>
  86. #include <math.h>
  87. /* other defines specific to compilers can go here.  Try to keep
  88.    them inside an appropriate ifdef/endif pair for portability */
  89. /* for some reason, Borland C++ defines memcmp, etc. in mem.h, not
  90.    stdlib.h like it should (I think).  Or perhaps this is a C++
  91.    feature */
  92. #ifdef __TURBOC__
  93. #include <mem.h>
  94. #include "alloc.h"
  95. #endif
  96. #ifdef _MSC_VER
  97. #include <malloc.h>
  98. #endif
  99. /* this controls how fine the dithering gets.  As this allocates
  100.    a largish chunk of memory (32K), those who are not as concerned
  101.    with dithering quality can decrease some or all of these */
  102. #define PNG_DITHER_RED_BITS 5
  103. #define PNG_DITHER_GREEN_BITS 5
  104. #define PNG_DITHER_BLUE_BITS 5
  105. /* this controls how fine the gamma correction becomes when you
  106.    are only interested in 8 bits anyway.  Increasing this value
  107.    results in more memory being used, and more pow() functions
  108.    being called to fill in the gamma tables.  Don't get this
  109.    value less then 8, and even that may not work (I haven't tested
  110.    it). */
  111. #define PNG_MAX_GAMMA_8 11
  112. #endif /* PNG_INTERNAL */
  113. /* the following uses const char * instead of char * for error
  114.    and warning message functions, so some compilers won't complain.
  115.    If you want to use const, define PNG_USE_CONST here.  It is not
  116.    normally defined to make configuration easier, as it is not a
  117.    critical part of the code.
  118.    */
  119. #ifdef PNG_USE_CONST
  120. #  define PNG_CONST const
  121. #else
  122. #  define PNG_CONST
  123. #endif
  124. /* The following defines give you the ability to remove code
  125.    from the library that you will not be using.  I wish I
  126.    could figure out how to automate this, but I can't do
  127.    that without making it seriously hard on the users.  So
  128.    if you are not using an ability, change the #define to
  129.    and #undef, and that part of the library will not be
  130.    compiled.  If your linker can't find a function, you
  131.    may want to make sure the ability is defined here.
  132.    Some of these depend upon some others being defined.
  133.    I haven't figured out all the interactions here, so
  134.    you may have to experiment awhile to get everything
  135.    to compile.
  136.    */
  137. /* Any transformations you will not be using can be undef'ed here */
  138. #define PNG_PROGRESSIVE_READ_SUPPORTED
  139. #define PNG_READ_INTERLACING_SUPPORTED
  140. #define PNG_READ_EXPAND_SUPPORTED
  141. #define PNG_READ_SHIFT_SUPPORTED
  142. #define PNG_READ_PACK_SUPPORTED
  143. #define PNG_READ_BGR_SUPPORTED
  144. #define PNG_READ_SWAP_SUPPORTED
  145. #define PNG_READ_INVERT_SUPPORTED
  146. #define PNG_READ_DITHER_SUPPORTED
  147. #define PNG_READ_BACKGROUND_SUPPORTED
  148. #define PNG_READ_16_TO_8_SUPPORTED
  149. #define PNG_READ_FILLER_SUPPORTED
  150. #define PNG_READ_GAMMA_SUPPORTED
  151. #define PNG_READ_GRAY_TO_RGB_SUPPORTED
  152. #undef  PNG_CORRECT_PALETTE_SUPPORTED
  153. #define PNG_WRITE_INTERLACING_SUPPORTED
  154. #define PNG_WRITE_SHIFT_SUPPORTED
  155. #define PNG_WRITE_PACK_SUPPORTED
  156. #define PNG_WRITE_BGR_SUPPORTED
  157. #define PNG_WRITE_SWAP_SUPPORTED
  158. #define PNG_WRITE_INVERT_SUPPORTED
  159. #define PNG_WRITE_FILLER_SUPPORTED
  160. #define PNG_WRITE_FLUSH_SUPPORTED
  161. /* any chunks you are not interested in, you can undef here.  The
  162.    ones that allocate memory may be expecially important (hIST,
  163.    tEXt, zTXt, tRNS) Others will just save time and make png_info
  164.    smaller.  OPT_PLTE only disables the optional palette in RGB
  165.    and RGB Alpha images. */
  166. #define PNG_READ_gAMA_SUPPORTED
  167. #define PNG_READ_sBIT_SUPPORTED
  168. #define PNG_READ_cHRM_SUPPORTED
  169. #define PNG_READ_tRNS_SUPPORTED
  170. #define PNG_READ_bKGD_SUPPORTED
  171. #define PNG_READ_hIST_SUPPORTED
  172. #define PNG_READ_pHYs_SUPPORTED
  173. #define PNG_READ_oFFs_SUPPORTED
  174. #define PNG_READ_tIME_SUPPORTED
  175. #define PNG_READ_tEXt_SUPPORTED
  176. #define PNG_READ_zTXt_SUPPORTED
  177. #define PNG_READ_OPT_PLTE_SUPPORTED
  178. #define PNG_WRITE_gAMA_SUPPORTED
  179. #define PNG_WRITE_sBIT_SUPPORTED
  180. #define PNG_WRITE_cHRM_SUPPORTED
  181. #define PNG_WRITE_tRNS_SUPPORTED
  182. #define PNG_WRITE_bKGD_SUPPORTED
  183. #define PNG_WRITE_hIST_SUPPORTED
  184. #define PNG_WRITE_pHYs_SUPPORTED
  185. #define PNG_WRITE_oFFs_SUPPORTED
  186. #define PNG_WRITE_tIME_SUPPORTED
  187. #define PNG_WRITE_tEXt_SUPPORTED
  188. #define PNG_WRITE_zTXt_SUPPORTED
  189. /* some typedefs to get us started.  These should be safe on most of the
  190.    common platforms.  The typedefs should be at least as large
  191.    as the numbers suggest (a png_uint_32 must be at least 32 bits long),
  192.    but they don't have to be exactly that size. */
  193. typedef unsigned long png_uint_32;
  194. typedef long png_int_32;
  195. typedef unsigned short png_uint_16;
  196. typedef short png_int_16;
  197. typedef unsigned char png_byte;
  198. /* this is usually size_t. it is typedef'ed just in case you need it to
  199.    change (I'm not sure if you will or not, so I thought I'd be safe) */
  200. typedef size_t png_size_t;
  201. /* The following is needed for medium model support. It cannot be in the
  202.    PNG_INTERNAL section. Needs modification for other compilers besides
  203.    MSC. Model independent support declares all arrays that might be very
  204.    large using the far keyword. The Zlib version used must also support
  205.    model independent data. As of version Zlib .95, the necessary changes
  206.    have been made in Zlib. The USE_FAR_KEYWORD define triggers other
  207.    changes that are needed. Most of the far keyword changes are hidden
  208.    inside typedefs with suffix "f". Tim Wegner */
  209. /* SJT: Separate compiler dependencies */
  210. /* SJT: problem here is that zlib.h always defines FAR */
  211. #ifdef __BORLANDC__
  212. #if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
  213. #define LDATA 1
  214. #else
  215. #define LDATA 0
  216. #endif
  217. #if !defined(__WIN32__) && !defined(__FLAT__)
  218. #define PNG_MAX_MALLOC_64K
  219. #if (LDATA != 1)
  220. #ifndef FAR
  221. #define FAR __far
  222. #endif
  223. #define USE_FAR_KEYWORD
  224. #endif   /* LDATA != 1 */
  225. /* SJT:  Possibly useful for moving data out of default segment.
  226.    Uncomment it if you want. Could also define FARDATA as const
  227.    if your compiler supports it.
  228. #  define FARDATA FAR
  229. */
  230. #endif  /* __WIN32__, __FLAT__ */
  231. #endif   /* __BORLANDC__ */
  232. /* SJT:  Suggest testing for specific compiler first before
  233.    testing for FAR.  The Watcom compiler defines both __MEDIUM__
  234.    and M_I86MM, making reliance oncertain keywords suspect
  235. */
  236. /* MSC Medium model */
  237. #if defined(FAR)
  238. #  if defined(M_I86MM)
  239. #     define USE_FAR_KEYWORD
  240. #     define FARDATA FAR /* SJT: added */
  241. #  endif
  242. #endif
  243. /* SJT: default case */
  244. #ifndef FAR
  245. #   define FAR
  246. #endif
  247. /* SJT: At this point FAR is always defined */
  248. /* not used anymore, but kept for compatability */
  249. typedef unsigned char FAR png_bytef;
  250. /* SJT: */
  251. #ifndef FARDATA
  252. #define FARDATA
  253. #endif
  254. /* End medium model changes to be in zconf.h */
  255. /* SJT: More typedefs */
  256. typedef void FAR *   png_voidp;
  257. /* SJT: Add typedefs for pointers */
  258. typedef png_byte        FAR * png_bytep;
  259. typedef png_uint_32     FAR * png_uint_32p;
  260. typedef png_int_32      FAR * png_int_32p;
  261. typedef png_uint_16     FAR * png_uint_16p;
  262. typedef png_int_16      FAR * png_int_16p;
  263. typedef PNG_CONST char  FAR * png_const_charp;
  264. typedef char            FAR * png_charp;
  265. /*  SJT: Pointers to pointers; i.e. arrays */
  266. typedef png_byte        FAR * FAR * png_bytepp;
  267. typedef png_uint_32     FAR * FAR * png_uint_32pp;
  268. typedef png_int_32      FAR * FAR * png_int_32pp;
  269. typedef png_uint_16     FAR * FAR * png_uint_16pp;
  270. typedef png_int_16      FAR * FAR * png_int_16pp;
  271. typedef PNG_CONST char  FAR * FAR * png_const_charpp;
  272. typedef char            FAR * FAR * png_charpp;
  273. /* SJT: libpng typedefs for types in zlib. If Zlib changes
  274.    or another compression library is used, then change these.
  275.    Eliminates need to change all the source files.
  276. */
  277. typedef charf *         png_zcharp;
  278. typedef charf * FAR *   png_zcharpp;
  279. typedef z_stream *      png_zstreamp; /* zlib won't accept far z_stream */
  280. /* User may want to use these so not in PNG_INTERNAL. Any library functions
  281.    that are passed far data must be model independent. */
  282. #if defined(USE_FAR_KEYWORD)  /* memory model independent fns */
  283. #   define png_strcpy _fstrcpy
  284. #   define png_strcat _fstrcat
  285. #   define png_strlen _fstrlen
  286. #   define png_strcmp _fstrcmp
  287. #   define png_memcmp _fmemcmp      /* SJT: added */
  288. #   define png_memcpy _fmemcpy
  289. #   define png_memset _fmemset
  290. #else /* use the usual functions */
  291. #   define png_strcpy strcpy
  292. #   define png_strcat strcat
  293. #   define png_strlen strlen
  294. #   define png_strcmp strcmp
  295. #   define png_memcmp memcmp     /* SJT: added */
  296. #   define png_memcpy memcpy
  297. #   define png_memset memset
  298. #endif
  299. /* End of memory model independent support */
  300. #endif /* PNGCONF_H */