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
   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
   incorporated Tim Wegner's medium model code (thanks, Tim)
version 0.85
   added more medium model code (almost everythings 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
   fixed bugs
   improved documentation
version 0.87
   fixed medium model bugs
   fixed other bugs introduced in 0.85 and 0.86
   added some minor documentation
version 0.88
   fixed progressive bugs
   replaced tabs with spaces
   cleaned up documentation
   added callbacks for read/write and warning/error functions
version 0.89 
   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)
   fixed bug with Borland 64K memory allocation (Alexander Lehmann)
   fixed bug in interlace handling (Smaraderagd, 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 dcumentation to reflect new API
