pngchange.txt - changes for libpng

version 0.2
   added reader into png.h
   fixed small problems in stub file
version 0.3
   added pull reader
   split up pngwrite.c to several files
   added pnglib.txt
   added example.c
   cleaned up writer, adding a few new tranformations
   fixed some bugs in writer
   interfaced with zlib 0.5
   added K&R support
   added check for 64 KB blocks for 16 bit machines
version 0.4
   cleaned up code and commented code
   simplified time handling into png_time
   created png_color_16 and png_color_8 to handle color needs
   cleaned up color type defines
   fixed various bugs
   made various names more consistant
   interfaced with zlib 0.71
   cleaned up zTXt reader and writer (using zlib's Reset functions)
   split transformations into pngrtran.c and pngwtran.c
version 0.5
   interfaced with zlib 0.8
   fixed many reading and writing bugs
   saved using 3 spaces instead of tabs
version 0.6
   added png_large_malloc() and png_large_free()
   added png_size_t
   cleaned up some compiler warnings
   added png_start_read_image()
version 0.7
   cleaned up lots of bugs
   finished dithering and other stuff
   added test program
   changed name from pnglib to libpng
version 0.71 [June, 1995]
   changed pngtest.png for zlib 0.93
   fixed error in libpng.txt and example.c
version 0.8
   cleaned up some bugs
   added png_set_filler()
   split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
   added #define's to remove unwanted code
   moved png_info_init() to png.c
   added old_size into png_realloc()
   added functions to manually set filtering and compression info
   changed compression parameters based on image type
   optimized filter selection code
   added version info
   changed external functions passing floats to doubles (k&r problems?)
   put all the configurable stuff in pngconf.h
   enabled png_set_shift to work with paletted images on read
   added png_read_update_info() - updates info structure with
      transformations
version 0.81 [August, 1995]
   incorporated Tim Wegner's medium model code (thanks, Tim)
version 0.82 [September, 1995]
   [unspecified changes]
version 0.85 [December, 1995]
   added more medium model code (almost everything's a far)
   added i/o, error, and memory callback functions
   fixed some bugs (16 bit, 4 bit interlaced, etc.)
   added first run progressive reader (barely tested)
version 0.86 [January, 1996]
   fixed bugs
   improved documentation
version 0.87 [January, 1996]
   fixed medium model bugs
   fixed other bugs introduced in 0.85 and 0.86
   added some minor documentation
version 0.88 [January, 1996]
   fixed progressive bugs
   replaced tabs with spaces
   cleaned up documentation
   added callbacks for read/write and warning/error functions
version 0.89 [July, 1996]
   added new initialization API to make libpng work better with shared libs
      we now have png_create_read_struct(), png_create_write_struct(),
      png_create_info_struct(), png_destroy_read_struct(), and
      png_destroy_write_struct() instead of the separate calls to
      malloc and png_read_init(), png_info_init(), and png_write_init()
   changed warning/error callback functions to fix bug - this means you
      should use the new initialization API if you were using the old
      png_set_message_fn() calls, and that the old API no longer exists
      so that people are aware that they need to change their code
   changed filter selection API to allow selection of multiple filters
      since it didn't work in previous versions of libpng anyways
   optimized filter selection code    
   fixed png_set_background() to allow using an arbitrary RGB color for
      paletted images
   fixed gamma and background correction for paletted images, so
      png_correct_palette is not needed unless you are correcting an
      external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
      in pngconf.h) - if nobody uses this, it may disappear in the future.
   fixed bug with Borland 64K memory allocation (Alexander Lehmann)
   fixed bug in interlace handling (Smarasderagd, I think)
   added more error checking for writing and image to reduce invalid files
   separated read and write functions so that they won't both be linked
      into a binary when only reading or writing functionality is used
   new pngtest image also has interlacing and zTXt
   updated documentation to reflect new API
version 0.90 [January, 1997]
   made CRC errors/warnings on critical and ancillary chunks configurable
   libpng will use the zlib CRC routines by (compile-time) default
   changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
   added external C++ wrapper statements to png.h (Gilles Dauphin)
   allow PNG file to be read when some or all of file signature has already
      been read from the beginning of the stream.  ****This affects the size
      of info_struct and invalidates all programs that use a shared libpng****
   fixed png_filler() declarations
   fixed? background color conversions
   fixed order of error function pointers to match documentation
   current chunk name is now available in png_struct to reduce the number
      of nearly identical error messages (will simplify multi-lingual
      support when available)
   try to get ready for unknown-chunk callback functions:
      - previously read critical chunks are flagged, so the chunk handling
        routines can determine if the chunk is in the right place
      - all chunk handling routines have the same prototypes, so we will
        be able to handle all chunks via a callback mechanism
   try to fix Linux "setjmp" buffer size problems
version 0.95 [March, 1997]
   fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
   fixed bug in PNG file signature compares when start != 0
   changed parameter type of png_set_filler(...filler...) from png_byte
      to png_uint_32
   added test for MACOS to ensure that both math.h and fp.h are not #included
   added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
   added "packswap" transformation, which changes the endianness of
      packed-pixel bytes (Kevin Bracey)
   added "strip_alpha" transformation, which removes the alpha channel of
      input images without using it (not neccesarily a good idea)
   added "swap_alpha" transformation, which puts the alpha channel in front
      of the color bytes instead of after
   removed all implicit variable tests which assume NULL == 0 (I think)
   changed several variables to "png_size_t" to show 16/32-bit limitations
   added new pCAL chunk read/write support
   added experimental filter selection weighting (Greg Roelofs)
   removed old png_set_rgbx() and png_set_xrgb() functions that have been
      obsolete for about 2 years now (use png_set_filler() instead)
   added macros to read 16- and 32-bit ints directly from buffer, to be
      used only on those systems that support it (namely PowerPC and 680x0)
      With some testing, this may become the default for MACOS/PPC systems.
   only calculate CRC on data if we are going to use it
   added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
   added macros for simple libpng debugging output selectable at compile time
   removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
   more description of info_struct in libpng.txt and png.h
   more instructions in example.c
   more chunk types tested in pngtest.c
   renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
      png_set_<chunk>.  We now have corresponding png_get_<chunk>
      functions in pngget.c to get infomation in info_ptr.  This isolates
      the application from the internal organization of png_info_struct
      (good for shared library implementations).
version 0.96 [May, 1997]
   fixed serious bug with < 8bpp images introduced in 0.95
   fixed 256-color transparency bug (Greg Roelofs)
   fixed up documentation (Greg Roelofs, Laszlo Nyul)
   fixed "error" in pngconf.h for Linux setjmp() behaviour
   fixed DOS medium model support (Tim Wegner)
   fixed png_check_keyword() for case with error in static string text
   added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
   added typecasts to quiet compiler errors
   added more debugging info
version 1.00 [not distributed, but Andreas handed off to G&G]
   skipped version 1.00 to avoid potential problems with shared libraries
   created with version 0.89
   removed PNG_USE_OWN_CRC capability
   relocated png_set_crc_action from pngrutil.c to pngrtran.c
   fixed typecasts of "new_key" etc.
   added RFC 1152 date support
version 1.00.97 [Dec 1997]
   fixed bug in gamma handling of 4-bit grayscale
   added more typecasts. 65536L becomes (png_uint_32)65536L, etc.
   minor corrections in libpng.txt
   added simple sRGB support
   make it simpler to do conditional compiling
   fixed memory leak in pngwrite.c (free info_ptr->text)
   added more conditions for png_do_background, to avoid changing
      black pixels to background when a background is supplied and
      no pixels are transparent
   include stdio.h in pngconf.h even when PNG_NO_STDIO is defined.
