Imported from libpng-0.82.tar
diff --git a/png.h b/png.h
index 62c9d2d..f359e34 100644
--- a/png.h
+++ b/png.h
@@ -267,7 +267,19 @@
The only people who need to care about what is inside of this are the
people who will be modifying the library for their own special needs.
*/
-typedef struct png_struct_def
+typedef struct png_struct_def png_struct;
+typedef png_struct FAR png_structf;
+
+/* These are the function types for the I/O functions, and the functions which
+ * modify the default I/O functions to user I/O functions. The png_msg_ptr
+ * type should match that of user supplied warning and error functions, while
+ * the png_rw_ptr type should match that of the user read/write data functions.
+ */
+typedef void (*png_msg_ptr) PNGARG((png_struct *, char *));
+typedef void (*png_rw_ptr) PNGARG((png_struct *, png_bytef *, png_uint_32));
+typedef void (*png_flush_ptr) PNGARG((png_struct *));
+
+struct png_struct_def
{
jmp_buf jmpbuf; /* used in png_error */
png_byte mode; /* used to determine where we are in the png file */
@@ -314,6 +326,10 @@
png_uint_32 width; /* width of file */
png_uint_32 height; /* height of file */
png_uint_32 num_rows; /* number of rows in current pass */
+#if defined(PNG_WRITE_FLUSH_SUPPORTED)
+ png_uint_32 flush_dist; /* how many rows apart to flush, 0 for no flush */
+ png_uint_32 flush_rows; /* number of rows written since last flush */
+#endif /* PNG_WRITE_FLUSH_SUPPORTED */
png_uint_32 rowbytes; /* size of row in bytes */
png_uint_32 usr_width; /* width of row at start of write */
png_uint_32 iwidth; /* interlaced width */
@@ -322,13 +338,14 @@
png_uint_32 idat_size; /* current idat size for read */
png_uint_32 zbuf_size; /* size of zbuf */
png_color *palette; /* files palette */
+ png_uint_32 do_free; /* flags indicating if libpng should free memory */
#if defined(PNG_READ_DITHER_SUPPORTED)
png_bytef *palette_lookup; /* lookup table for dithering */
#endif
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
png_byte *gamma_table; /* gamma table for 8 bit depth files */
#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
+#if defined(PNG_READ_GAMMA_SUPPORTED)
png_byte *gamma_from_1; /* converts from 1.0 to screen */
png_byte *gamma_to_1; /* converts from file to 1.0 */
#endif
@@ -363,7 +380,7 @@
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
png_color_8 shift; /* shift for significant bit tranformation */
#endif
-#if defined(PNG_READ_GAMMA_SUPPORTED)
+#if defined(PNG_READ_GAMMA_SUPPORTED) || defined (PNG_READ_sBIT_SUPPORTED)
png_color_8 sig_bit; /* significant bits in file */
#endif
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
@@ -375,10 +392,17 @@
#endif
png_row_info row_info; /* used for transformation routines */
z_stream zstream_struct; /* decompression structure */
- FILE *fp; /* used for png_read and png_write */
-} png_struct;
-
-typedef png_struct FAR png_structf;
+ FILE *fp; /* used for default png_read and png_write */
+ png_msg_ptr error_fn; /* Function for printing errors and aborting */
+ png_msg_ptr warning_fn; /* Function for printing warnings */
+ png_rw_ptr write_data_fn; /* Function for writing output data */
+ png_rw_ptr read_data_fn; /* Function for reading input data */
+#if defined(PNG_WRITE_FLUSH_SUPPORTED)
+ png_flush_ptr output_flush_fn;/* Function for flushing output */
+#endif /* PNG_WRITE_FLUSH_SUPPORTED */
+ void *io_ptr; /* Pointer to user supplied struct for I/O functions */
+ void *msg_ptr; /* Pointer to user supplied struct for message functions */
+};
/* Here are the function definitions most commonly used. This is not
the place to find out how to use libpng. See libpng.txt for the
@@ -403,7 +427,7 @@
/* read the information before the actual image data. */
extern void png_read_info PNGARG((png_struct *png_ptr, png_info *info));
-#if defined(PNG_READ_tIME_SUPPORTED)
+#if defined(PNG_WRITE_tIME_SUPPORTED)
/* convert from a struct tm to png_time */
extern void png_convert_from_struct_tm PNGARG((png_time *ptime,
struct tm *ttime));
@@ -500,6 +524,14 @@
double default_file_gamma));
#endif
+#if defined(PNG_WRITE_FLUSH_SUPPORTED)
+/* Set how many lines between output flushes - 0 for no flushing */
+extern void png_set_flush PNGARG((png_struct *png_ptr, int nrows));
+
+/* Flush the current PNG output buffer */
+extern void png_write_flush PNGARG((png_struct *png_ptr));
+#endif /* PNG_WRITE_FLUSH_SUPPORTED */
+
/* optional update palette with requested transformations */
extern void png_start_read_image PNGARG((png_struct *png_ptr));
@@ -570,21 +602,8 @@
extern void png_set_compression_method PNGARG((png_struct *png_ptr,
int method));
-/* These next functions are stubs of typical c functions for input/output,
- memory, and error handling. They are in the file pngstub.c, and are
- set up to be easily modified for users that need to. See the file
- pngstub.c for more information */
-
-/* Write the data to whatever output you are using. */
-extern void png_write_data PNGARG((png_struct *png_ptr, png_bytef *data,
- png_uint_32 length));
-
-/* Read data from whatever input you are using */
-extern void png_read_data PNGARG((png_struct *png_ptr, png_bytef *data,
- png_uint_32 length));
-
-/* Initialize the input/output for the png file. */
-extern void png_init_io PNGARG((png_struct *png_ptr, FILE *fp));
+/* These next functions are prototypes of the functions libpng uses for
+ memory allocation. */
/* Allocate memory in larger chunks. */
extern voidpf png_large_malloc PNGARG((png_structf *png_ptr, png_uint_32 size));
@@ -602,12 +621,32 @@
/* free's a pointer allocated by png_malloc() */
extern void png_free PNGARG((png_struct *png_ptr, void *ptr));
-/* Fatal error in libpng - can't continue */
-extern void png_error PNGARG((png_structf *png_ptr, char *error));
+/* Initialize the I/O and message handling for the png file to the defaults. */
+extern void png_init_io PNGARG((png_struct *png_ptr, FILE *fp));
-/* Non-fatal error in libpng. Can continue, but may have a problem. */
-extern void png_warning PNGARG((png_struct *png_ptr, char *message));
+/* Replace the error message and abort, and warning functions with user
+ supplied functions. If no messages are to be printed, NULL can be
+ supplied for error_fn and warning_fn, although error_fn will still do
+ a longjmp to the last setjmp location. */
+extern void png_set_msg_fn PNGARG((png_struct *png_ptr, void *msg_ptr,
+ png_msg_ptr error_fn, png_msg_ptr warning_fn));
+/* Return the user pointer associated with the message functions */
+extern void *png_get_msg_ptr PNGARG((png_struct *png_ptr));
+
+/* Replace the default data output functions with a user supplied one(s).
+ If buffered output is not used, then output_flush_fn can be set to NULL.
+ if PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
+ output_flush_fn will be ignored (but must be supplied for compatability). */
+extern void png_set_write_fn PNGARG((png_struct *png_ptr, void *io_ptr,
+ png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
+
+/* Replace the default data input function with a user supplied one. */
+extern void png_set_read_fn PNGARG((png_struct *png_ptr, void *io_ptr,
+ png_rw_ptr read_data_fn));
+
+/* Return the user pointer associated with the I/O functions */
+extern void *png_get_io_ptr PNGARG((png_struct *png_ptr));
/* These next functions are used internally in the code. If you use
them, make sure you read and understand the png spec. More information
@@ -646,6 +685,11 @@
#define PNG_GRAY_TO_RGB 0x2000
#define PNG_FILLER 0x4000
+/* defines for memory alloced by libpng which should be freed */
+#define PNG_FREE_TRANS 0x0001
+#define PNG_FREE_HIST 0x0002
+#define PNG_FREE_PALETTE 0x0004
+
/* save typing and make code easier to understand */
#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
abs((int)((c1).green) - (int)((c2).green)) + \