
 Change History: (See ArgyllCMS log.txt too)

 3.0.0 

	Added new combined icmLu object with API that differs from earlier versions.
	Changed lu->spaces() arguments to compact each colorspace information,
	and to eliminate get_ranges() and get_lutranges() methods.
    Other lu->spaces() arguments also change.
	Renamed lutspaces() -> native_spaces()
	
	Changed lu transform method names:

      1 step:
    	lookup -> lookup_fwd
      3 step:
    	lookup_in   -> input_fwd
    	lookup_core -> core3_fwd
    	lookup_out  -> output_fwd
    	lookup_inv_in -> input_bwd
    lu2mono:
      1 step:
    	fwd_lookup -> lookup_fwd
    	bwd_lookup -> lookup_bwd
      5 step:
    	fwd_curve -> (input_fmt_fwd) + input_pch_fwd
    	fwd_map   -> core5_fwd
    	fwd_abs   -> (output_pch_fwd) + output_fmt_fwd
    	bwd_abs   -> output_fmt_bwd + (output_pch_bwd)
    	bwd_map   -> core5_bwd
    	bwd_curve -> input_pch_bwd + (input_fmt_bwd);
    lu2matrix:
      1 step:
    	fwd_lookup -> lookup_fwd
    	bwd_lookup -> lookup_bwd
      5 step:
    	fwd_curve  -> (input_fmt_fwd) + input_pch_fwd
    	fwd_matrix -> core5_fwd
    	fwd_abs    -> (output_pch_fwd) + output_fmt_fwd
    	bwd_abs    -> output_fmt_bwd = (output_pch_bwd)
    	bwd_matrix -> core5_bwd
    	bwd_curve  -> input_pch_bwd + (input_fmt_bwd);
    lu2lut:
      5 step:
    	in_abs  -> input_fmt_fwd
    	matrix  -> XXXXXXXXXXXXX		none. Combined with input & clut
    	input   -> input_pch_fwd
    	clut    -> core5_fwd
    	output  -> output_pch_fwd
    	out_abs -> output_fmt_fwd
    	inv_out_abs -> output_fmt_bwd
    	inv_output -> output_pch_bwd
    	(clut)							 (clut not invertable)
    	inv_input -> input_pch_bwd
    	inv_matrix -> XXXXXXXXXXXXX        none. Combined with clut & input 
    	inv_in_abs -> input_fmt_bwd

	Split out less icc specific source code into icc_util.[ch] 

	Add new TagType parsing code (icmSn*)
	Old parsing code is labeled LEGACY
	Switch header and main profile code to use new parsing code.

	Changed implementation ICC version numbers to use icmTV

	Added controls to format compatibility checking and warning (icmCompatFlags).
	Added warning callback function to handle warnings.

	Changed icclib API to use UTF-8 to communicate Unicode text.
	icmTextDescription now uses *uc8Desc for string and uc8Count for its length.

	Remove need to cast of tagtype object to icmBase
	when invoking icmBase methods:
		i.e. get_size(), read(), write(), del(), dump(), allocate()
	
	Most tagtype members called "size" have been renamed "count".

	icmProfileSequenceDesc struct now has pointer to TextDescriptions rather than
	being embeded, and these have been renamed: device -> mfgDesc, model -> modelDesc.

	icmData now uses icBinaryData and icAsciiData as type value.

	icmText elment data renamed to desc.

	icmColorantTable now uses allocated name strings.

	icmMeasurement flare is now icMeasurementFlare enum.

	icmScreening flags is now icScreening screeningFlags

	NamedColor prefix/suffix/root strings need to have count set and allocate().

	icmVideoCardGamma now uses double array to store data, rather than
	being tag details dependent. tagType is now icVideoCardGammaFormat.
	Converted red/green/blue gamma/min/max to arrays.

	icmCurve icmCurveStyel flag -> icmCurveType ctype

	Changed to use icmErr error to hold error code & message.
		icm.err[] -> icc.e.m[]
  		icm.errc  -> icc.e.c

	Some functions now have a new first argument of *icmErr.
	Note that it is treated as "sticky" so that several
	functions can be called before checking for errors.
		new_icmAllocStd()
		new_icmFileStd_name()
		new_icmFileStd_fp()
		new_icmFileStd_name_a()
		new_icmFileStd_fp_a()
		new_icmFileMem_a()
		new_icmFileMem_ad()
		new_icmFileMem()
		new_icmFileMem_d()
		new_icmMD5_a()
		new_icmMD5()
		new_icc_a()
		new_icc()
	

	Renamed str2tag() -> icmstr2tag()

	Renamed icmLuAlg -> icmTransformLookupAlgorithm

 2.21
	Automatically repair icmTextDescription strings have an allocation that is longer
	than their size.

 2.20
   Add better cross compatibility with non-Argyll ICC profiles:
   + Use "wrong Von Kries" media white point adapation for non-Argyll non-display profile
   + Optionally create "wrong Von Kries" media white point adapation profiles
     using the "ARGYLL_CREATE_WRONG_VON_KRIES_OUTPUT_CLASS_REL_WP" env. variable,
     while maintaining ArgyllCMS compatibility using the 'arts' tag.
   + Implement proper absolute colorimetric intent for ICCV2 Display profiles
     that use the ICCV4 style of have a media white of D50 and storing the
     media chromatic trasnform in the 'chad' tag.
   + Optionally create such ICCV4 style V2 Display profiles by using the
     "ARGYLL_CREATE_DISPLAY_PROFILE_WITH_CHAD" env. variable.
	
 2.16
	Clean up cLUT read code to make sanity checking
	more explicit and remove redundant code.

	Added special mode that interprets cLUT res of 0 as 256
	for MadVR testing.

	Change icc->read_tag() to only succeed if the tag type is
	known, since the standard expectation of a non NULL
	return type is that it is of a known type. Added new
	method icc->read_tag_any() which will return a
	icmSigUnknownType if the tag type is unknown.

 2.14
	Fix potential array bounds violation in icc/icc.c for malformed
	cLUT profiles with zero input channels.

 2.10
	
	Added protection against crafted file integer overflows.

	Many minor additions to support ArgyllCMS.

	Further add V4 compatibility, with changes to PCS encoding. 
 
 2.06

	Added MD5 checksum code for profile ID support.

 2.05
      Version in Argyll V0.51 release.

      Started adding support for ICC V4. Not enabled yet.

      Expanded internal/effective colorspace/ranges support
      to be uniform between all the lookup types.

 2.04

      Fixed minor casting nits picked up by some compilers
      (thanks to Keith Trummel).

      Make intent selection for Matrix profiles and Gamut tables
      more forgiving if not ICM_STRICT.

 2.03
      Added simple extention when dumping binary data tag to
      dump ASCII as well if verb >= 4.

      Added Makefile support for compiling under MAC OSX.

      Added access to primitive read and write functions, so custom tag
      data can be marshalled using standard encodings.

      Expanded ICM_STRICT to encompass bad DateTime information in the header,
      and also disable required tag checking on reading or lookups.
      Changed default intent for Output profiles to perceptual from
      colorimetric, since this would usually be expected.

      Added workaround for faulty Kodak RGB matrix profiles, that
      have their primary XYZ coordinates scaled to 100.0 rather than
      1.0. This is enabled if ICM_STRICT is not defined.

      Replaced Lab<->XYZ functions with simpler versions.

      Expand icmFile implimentation to handle icmAlloc

		Do check for header Magic number first.

      Add convenience function that creates an RGB to XYZ transform
      matrix from the device primaries and the white point.

      Separated stdio versions of file and alloc to allow
      compile without these.

      Non-standard (ie. Apple) 5,6,7 & 8 channel color signatures
      weren't being handled properly thruout the library.

 2.02
      Merged rename of [u]int64 to icm[Ui][I]nt64 (to work around
      AIX 5.1L portability bug) from Raph Levien.

      Fixed stray , in icmLookupOrder structure definition (from Dan Coby)

 2.01
		Change TextDescription code to not barf if #undef ICM_STRICT and
      Apple scriptcode not padded to 67 bytes.

      Add get_ranges() method to all Lu types, not just LuLut.
      Fix bug in PCS override logic that was causing
		reverse conversions to apply the wrong conversion.

      Added Delta E convenience functions icmLabDE() and
      icmCIE94() etc.

		Merged Raph Levien's cleanups, to quiet gcc warnings.

      Merged another couple of warning cleanups from Jouk Jansen.

 2.00
      Change absolute conversion to be white point only, and use
      Bradford transform by default. (ie. we are now ignoring the
      comment in section 6.4.22 of the 1998 spec. about the
      media black point being used for absolute colorimetry,
      ignoring the recommendation on page 118 in section E.5,
      and are taking up the recommendation on page 124 in section
      E.16 that a more sophisticated chromatic adaptation model be used.)

      This is for better compatibility with other CMM's, and to
      improve the results when using simple links between
      profiles with non-D50 white points. Standard profiles
      like sRGB will also be more accurate when interpreted
      with absolute colorimetric intent.
      This will cause some slight incompatibilty with previous
      versions of icclib.

      Added ColorSync 2.5 specific VideoCardGamma tag support
      (from Neil Okamoto)

 1.31
      Added file I/O class to allow substitution of alternative ICC profile
      file access. Provide standard file class instance, and memory image
      instance of file I/O class as default and example. 
      Added an optional new_icc_a() object creator, that takes a memory
      allocator class instance. This allows an alternate memory heap to
      be used with the icc class. 
      Renamed object free() methods to del() for more consistency with new().

 1.30	
      Added workaround for reading some Adobe profiles with confused header DateTime.
      Enhanced tag allocate() methods so that they can resize allocations.
      Enhanced icmLut_set_tables() to access grid points in a cache friendly order.
      Fixed bug in check_icc_legal() that caused bogus errors, removed
      uneccessary static declarations in icc.h, and fixed a bug in
      icmTable_lookup_bwd() that effected both accuracy and speed. (Thanks to Andrei Frolov)
      Removed icmAbsoluteColorimetricXYZ intent, and replaced it with
      a PCS override capability. This adds a new parameter to get_luobj() 
      Added Lab translations of some XYZ "dump" strings.
      Fix memory leak after failed tag read + rename_tag function
      + shared library support changes. (Thanks to Carles Llopis).
		Changed all the public 2str utility routines to a single function
      that can be used to interpret an enumeration or tag in a human
      readable form. 

 1.23	
      Fixed important bug in Lut read/write. The matrix values had their
      rows and columns switched. Not many profiles exercise this code.
      Thanks to David Gillman for discovering this problem.
      Fixup compiler complains about illegal enum values for icmCurveStyle,
      and icmDataStyle. Malloc memory icmLut_lookup_clut_nl for gw[], so that
      it is more friendly to systems with a limited stack. (Thanks to Dave White)

 1.22	99/11/11 Snapshot of current code.
      Added more hooks to support inherited implementation of
      color conversion, used in Argyll to support reversing
      multi-dimentional table lookups.
      Cleaned up color conversion code to make it easier to follow.
      Adding simplex interpolation for non-Lab style input space interpolation.
      Fix Sun misalignment and realloc problems (Thanks to Allan N. Hessenflow)
      Fixed endian problem with Unicode on read and write.
      Expanded icmTextDescription_dump() to do hex dump of Unicode and ScriptCode.
      Changed over to ICC.1:1998-09 .h file.
      Started implementing ICC.1:1998-09, but not complete yet!

 1.21	99/2/14
     	After re-reading Michael Bourgoin's 1998 SIGGRAPH notes,
      I have consolidated the Lut input index, and table value encodings.
      The default set_tables() scaling has been adjusted appropriately
      for this correction of Lab encoding.
      Trying to create an 8 bit XYZ Lut will now fail if icclib helper
      functions are used to create it.
 
 1.20	99/2/7
      Added profile color lookup functon.
      Added set_tables() support.
      Various bug fixes and enhancements.
