
Argyll CMS change log
=====================

Version 1.1.1 21 February 2010
-------------

*	Altered xpsect FWA code to reduce overshoot artefacts due to filetering.

*	Updated ref/CMP_Digital_Target-3.cht as it seems that the reference
	chart has columns labeled "2A - 2D" rather than the "AA - AD" that
	is actually printed on the chart...

*	Changed dispcal and dispread so that a request for projector
	mode falls back to display mode if the instrument doesn't 
	support a projector mode.

*	Changed printcal so that it will create .AMP file with more
	than 4 channels.
	Also fixed up plotting to plot up to 10 channels.

*   Renamed the following tools:

	cb2cgats    -> cb2ti3
	kodak2cgats -> kodak2ti3
	logo2cgats  -> txt2ti3
	splitcgats  -> splitti3
	mpprof      -> mppprof

*	Modified scanin so that it ignores any alpha channels
	in the input .tiff file.

*	Change spotread so that it takes spectral readings by
	default so that FWA comensation readings can be used.

*	Changed link/collink to apply Y to L* curve if the input or output
	space is XYZ. Fixed the Y to L* scaling to make sure it only
	apples to XYZ space, and that the L* non-linearisation still
	applies to Y like device spaces.

*	Fixed colprof so that the per channel input curves for
	XYZ PCS B2A tables are actually scaled correctly.

*	Re-organized imdi/cctiff to allow for the possibility of
	the Y to L* linearization being applied to actual XYZ input
	spaces, not just Y like device spaces.

*	Modifed target/targen to cope better with case where adding
	nodes fails to determine vertex positions a lot of the time, causing
	extreme slowdown. Re-shuffle node order and retry now.
	Also change appoach of adding fixed nodes to temporarily
	skip fixed nodes that fail to add due to vertex positioning 
	failures. Also removed special node as this doesn't seem to
	be required for reasonable positioning, and caused problems
	in at least one case (media fixed node could never be added).

*	Modified libusb/55-Argyll.rules for better compatibility
	with systems that have ACL installed but no ConsoleKit.
	Also set ID_VENDOR and ID_MODEL using usb-db

*	Added matrix only/linear algorithm option to
	profile/colprof, for raw camera profiling.

*	Fixed bug in input matrix profiles introduced by the XYZ cLUT
	display matrix profile change, where the correct white and
	black point wern't being written.

*	Changed tiffgamut to use one pass gamut hull finding,
	since this seems to be more reliable on the odd shaped
	image gamuts, as well as use a convex hull surface that
	more closely wraps the raster colors.

*	Added standards references to the viewing condition pre-set
	descriptions, and also added a preset for the ISO Critical
	print viewing lighting level.

*	Fixed bug in profile/colprof -u, this wasn't being
	applied properly to matrix profiles.

*	Fixed several build bugs in imdi code related to 64 bits.
	The 64 bit code was sometimes being compiled on non-native 64
	bit architectures, and not being compiled on native 64 bit
	architectures. The table setup code was not handling 64 bit
	setup correctly on 32 bit architectures. 

*	Tried to improve dispcal -E (verify) behavior
	by switching to native response for base measurement used	
	to establish black aim point. Probably would be better to
	store all aim info in .cal file, and verify against that
	rather than altering verification target by the current response...

*	Added documentation for specplot.

*	Added -M option to printtarg, for the case where the TIFF
	file is to include the margin.

*	Fixed bug in ucmm/ucmm.c where wrong malloc length
	causes crash when installing/unintstalling profiles
	with long filenames.

*	Modified black curve to make sure that smoothed
	curve meets target level at boundaries, and to
	reduce smoothing filter width.

Version 1.1.0 (17th January 2010)
-------------

*	Added some warnings to colprof for strange combinations
	of -s -S and -t -T and -g.

*	Fixed problem in perceptual gamut mapping that resulting in
	less deep blacks than desirable. Also tweaked gamut mapping
	to try and maintain luminance gradation near black
	for chromatic colors.

*	Simplified the Linux instalation instructions, particularly
	with regard to USB and serial permissions. Permissions use groups now,
	or ACL if it is available.

*	Added working MSWindows 64 bit libusb drivers, which will work
	on Vista 64 and MSWindows 7 64 bit. Because of
	Microsofts driver signing requirements though, they won't be
	usable unless a driver code signing workaround is used.

*	Fixed viewgam so that the number of gamuts that can be
	viewed is unlimited. Also added error when computing intersecting
	volume if the two gamuts are incompatible.

*	Added -O option to scanin and colprof, to allow overriding the
	default output filename/location.

*	There was a regression in the black inking fixes, the K target
    was corresponding to the pre-1D Lut values, this is now fixed.

*	Fixed another glitch in rspl/rev.c when computing black solution -
	the auxiliary target was not always the closest one possible.
	This fix may also help smoothness near black.

Version 1.1.0 RC4 (6th January 2010) 
-----------------

*	Fixed bug in xicclu -pz that caused maximum rather than minimum ink. Also
    fixed tolerance glitch in rspl/rev.c that was causing non-exact black
    values to be returned.

*	Changed printtarg so that the TIFF output has the paper margin subtracted
	from it. This is so that the resulting TIFF can be placed on that sized paper
	without clipping or scaling. Set the margin to zero to get a TIFF that
	exactly fits into the specified paper size.

*	Fixed bug in colprof -aX which caused crash when there are calibration
	curves.

*	Fixed bug in printcal, changed first -n option to -d to distinguish it
	from second -n parameter.

Version 1.1.0 RC3 (4th January 2010) 
-----------------

*	Fixed bug in Linux profile uninstall (dispwin -U)
	(Typo in path causes uninstall to fail).

*	Changed MSWindows athread implementation to kill a thread
	that hasn't terminated on thread object deletion. This
	isn't nice, but avoids the problem of the i1pro switch handler
	thread exiting after 600 seconds and then accessing
	a free'd structure when dispread -K is used.

*	Change colprof XYZ B2A table scaling to make better
	use of the cLUT table grid resolution.

*	Fixed bugs in black generation rule to do with white->black point
	calculations, scale and input/output curve handling. Changed
	xicclu -g to better correspond with -k p parameters.
	Changed xlut CMYK black locus handling to pick largest K value
	when there are multiple K locus segments and the desired K 
	doesn't fall on any segment, to give better K continuity.
	Added "skew" adjustment to K generation rule to make
	the curve it better fit typical device behaviour.
	Updated tutorial to reflect these changes.
	Note that the -kp parameter values will have to
	be re-established for a particular device using V1.1.0 RC3.
	(This may improve the "bumpy black" problem ?)

*	Changed profile/colprof to generate matrix tags for Display XYZ PCS cLUT profiles,
	to improve compatibility with other CMMs.
	By default (-ax) the matrix tags will be a dummy transform that swaps red and green
	so that it is obvious if the matrix is being used instead of the cLUT, and so it does
	not increase profiling time.  Using -aX will create real matrix tags.

*	Removed deprecated imdi/cctiff -o option, and added per profile -o option to set the
	tag search order so as to be able to test profiles that have both matrix and
	cLUT tags.

*	Removed general cLUT clip warnings, and added a specific RGB display/output
	device warning if a primary can't be encoded in L*a*b* PCS.

*	Fixed bug in i1pro driver - the linearization factors were being swapped
	between low and high gain.  This improves the absolute luminance calibration,
	and may have subtle effects on the accuracy of other readings.

*	Added -V option to dispcal and dispread to allow using the
	adaptive mode of the i1pro for display measurement.
	This may give better low level readings ?

*	Improved targen so that it doesn't slow down as badly
	when a very large number of fixed points are used together
	with full spread points.

*	Improved profile/logo2cgats so that it errors
	on a wrong spectral field type.

*	Change spectro/dispcal to default to -f 1.0 (assume
	black is all output offset) to make it work in more
	sympathy to a typical display response. This may give
	better fit and lessen the chance of color tints 
	due to a poor fit.

*	Increased profile/printcal curve smoothing to reduce
	the effect of noise.

*	Changed chartread strip reading mode to allow navigating about the
	strips, saving a partially read chart, and resuming a partially
	read chart (chartread -r).
	Also added a "next unread patch" key to the patch by patch mode.
	Chartread won't exeit automaticcaly now, once all the patches have
	been read (in case any patches need to be re-read), so the 'd'
	key must be hit to finish.
	Removed chartread -a option (it always saves the patch locations now).
	Added a -I option to allow re-using .ti2 files on a chart printed
	with different calibration curves.

*	Modified xicc/cam02 to clip the blue to avoid
	crazy behaviour outside the spectrum locus.
	Removed previous attempt at spectrum locus clipping.

*	Fixed bug in Spyder 3 driver that can cause readings
	to be scaled by a factor of 16. (This depends on
	when the Spyder was manufactured.)

*	Fixed bug in adding CIE illuminant C to spectral support.

*	Change printtarg last row padding to be media color
	for both random and non-random layout.

Version 1.1.0 RC2 (7th December 2009)
-----------------

*	Re-worked gamut mapping to improve saturation levels
	within the bulk of the gamut, as well as improve
	hue preservation. 

*	Changed "la" intent (luminance matched appearance) to have
	zero luminance matching enhancement "knee", to make
	it more appropriate for assessing transformations
	in light of their estimated appearance.
 
*	Added CIE C type illuminant spectrum support.

*	Modified DTP20 driver to double check for an offline
	read chart in case it is running old firmware.

*	Added device power value for targen to allow
	calibrating devices that have extreme non linearity.

*	Fixed bug in targen when full spread patches were
	mixed with other test patch types.

*	Updated yajl library to latest version.

*	Improved X11 XRandR CRTC detection 

*   Added verbosity level to profcheck to match invprofcheck.

*   Clarified licensing of various files (GPLv2+ files, reference
	files and documentation).

Version 1.1.0 RC1 (6 November 2009)
-----------------

*	Added flash measurement support to i1pro and Munki, + corresponding
	option in spotread.

*	Added new link/collink flags -fcmy that force pure 100% C, M and/or Y
	colorant input values to be pure output values. Gamut mapping
	is adjusted sympathetically with these options too.

*	Fixed link/collink so that the -f, fk and -F options used
	to force K only output also trigger gammut mapping
	to the K only destination range. Also made these
	options set black generation and intent in a sympathetic
	way by default. The result is that there now should be
	no discontinuity between the K only mapped colors and
	others in the gamut, and the source gamut should be
	mapped to be within the range of the K only black device.

* 	Modified and improved gamut mapping to fix perceptual uniformity,
	and also greatly improves smoothness and preservation of
	source detail.. Re-tuned gamut mapping parameters.
	Added support for K only black gamut mapping from source
	and/or destination.

*	Fixed most CIECAM02 usages so as to clip values against
	the spectrum locus before converting to Jab. This
	may help avoid poor CIECAM behaviour for imaginary color values.

*	Fixed bug in rspl/inv.c that was causing innacurate
	inverse lookups in some corner cases. This may have been
	afecting black generation accuracy and general B2A table
	and device link accuracy.

*	Added support for Spyder3Express (ie. disable ambient capability
	if it's an Express).

*	Added workalike sRGB and Adobe1998 ICC profiles to /ref
	Note that the sRGB profile has slightly higher accuracy
	(better matching of matrix to white point) than the
	original H.P./Microsoft profile.
	Also provided lab2lab profile to use with collink.

*	Add support for the ColorMunki Create colorimeter.

*	Fixed xicc/xicc.x and xicc/xlut.c to be more robust in
	computing a CMYK black point. Fixed bug in K limit handling.

*	Changed xicc/xfit to use higher order delta E metric, so that
	maximum errors do not blow out. This seems to make the
	output curves a much better fit, and reduces the error
	when higher rspl smoothing factors are used. Curve stiffness
	has been increased to improve smoothness ant match higher order error
	values.

*	Added support for the Christophe Mtairie's Digital Target-3 chart with 570
	patches. (Thanks to Nikolay Pokhilchenko & Ben Goren).

*	Changed the rspl/rev "> colprof: Error - rev: bwd vertex 0 is not prime or secondary"
	error to a warning. This seems to be triggered by odd data sets (ie. monochrome).

*	Created a new tool extractttag to extract text tags from an ICC
	profile. This can be used to extract the original target data
	(ie. .ti3 file) and/or CAL curves from an ICC profile.

*	Fixed all the ink limit calculations to work in post-calibrated
	final device values when per-channel calibration is being used,
	and the calibration curves are embedded in the .ti3 file or ICC profile.

*	Added printer calibration capability:
	Added printcal utility to create and verify printer calibrations.
	Added calibration file support to printtarg.
	Added calibration file support to cctiff.
	New utility "applycal" to apply calibration to ICC profiles.
	Modified targen etc. to distiguish between real RGB and fake
	printer RGB.

*	Changed targen ofps point distribution to maintain
	any initial gamut surface points during itterative
	refinement, and to distribute them independently in
	the sub-dimension they lie in. Changed adaptive operation
	to be the default, and to use a much more sophisticated error
	estimation model in determining the points locations.

*	Fixed problem with reliably detecting backward read strips
	using the i1pro & Munki, by making target/printtarg optimize the
	random patch layout to maximize the difference between
	patches read from each direction. (This problem was more
	prevalent with large charts with lots of strips.)

*	Added support for the LaserSoft DCPro scanner/camera
	target chart.

*	Changed profile/logo2cats.c spectral scaling heuristic threshold
	from 2 to 10 to allow more margin.

*	Fixed bug in spectro/dispwin.c for 256 byte EDID's (thanks to Omari Stephens).

*	Fixed bug in scanin/scanrd.c that caused crash due to diagnositic
	output when a gross chart recognition mismatch occures.

*	Added warnings to colprof, collink and tweak if any values
	get clipped when setting the cLUTs.

*   Fix bug in xicc/xfit.c where too little memory was being allocated.

*	Fix dispwin/dispcal problem on X11 with compositing WMs displaying
	transparent test window.

*	Fix spectro/dispcal to fall back if Jacobian inversion fails.

*	Reduce default reverse cache memory limits to avoid thrashing.

*	Changed all code with my copyright to the
    GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
	This may be of significance to anyone using
	this code to provide a service over the Internet.

*	Modified spyder 2 & 3 driver to change how adaptive works.
	Now increases the integration time to try and get
	a minimum transition count. This speeds Spyder 2
	readings (at some cost to accuracy), while helping
	make the Spyder 3 a bit more useful on dark displays
	(at the cost of a long read time). Also added workaround
	to the Spyder 3 not having a reset command - drain
	any pending read data on startup, so that it doesn't
	corrupt calibration or initial readings.

*	Fix USB instruments so that a comms failure doesn't try
	and re-establish communications. Fix i1pro & Munki so
	that they don't return a comms error on a short measurement.

*	For the ColorMunki on OS X, kill the manufacturers daemon process that 
	has it open, when Argyll wants to open it. (daemon will automatically
	restart).

*	Changed spectro/dispsup.c to show test window without
	black background to position instrument, and
	then re-create the test window with black backgroud.

*	Fixed memory allocation bug in i1pro & Munki drivers
	when sensor gets saturated during display measurement.

*	Tweaked Jambase to work with Microsoft VC++8 and 9
	when the Platform SDK February 2003 is used.

*	Removed need for DDK to access HID devices on MSWindows.
	This simplifies compiling with Microsoft VC++ and
	means that a MingW compile can use HID.

*	Enhanced plot library to aid debugging target/ofps.

*	Added a -M "command" option to dispcal and dispread, that
	allows an external command to supply display readings.
	This could be used to interface to an instrument not directly
	supported by Argyll.

*	Fix spectrum -> XYZ conversion scale factor for absolute readings.
	It was in error by 100/(10.685 * 6.83) = 1.37. This affected display
	and emission readings for the i1pro.

*   Modified printtarg to allow creating of a ColorMunki chart.
	By default the rows are as wide as the instrument, but -h will
	double the row density. 

*	Added -p for projector mode to spotread, dispcal and dispread.

*	Change dispread, dispcal & dispwin to use -P to position test window,
	so that -p can be used for projector mode.

*	Added ColorMunki spectrometer driver.

*	Changed most code that reports progress on optimization
	to aproximate percentage rather than ".....".

*	Added interactive option to spotread to allow saving specrums
	to a CGATS ".sp" spectral file, suitable for use as an illuminant.

*	Added Spyder3 colorimeter driver.

*	Modified libusb/linux.c to make sure that a single large
	request is broken down into overlapping 16K reads, so that
	the i1pro rev A/B doesn't time out on SuSE Linux.

*	Fix bug in spectro/ntio.c involving error() and warning()
	declarations. This causes crashes on machines with no serial ports.

*	Added another challenge/response key for DTP22.

*	Fix bug in gamut creation that caused internal error if
	.gam points matches fake initial gamut tetrahedron.

*   Fix two problems in spectro/i1pro_imp.c:
	The way that calibration files were detected as invalid
	was insufficiently sesitive to the parameters being
 	changed in the driver. This meant reading and partially
	re-using some parameters when the previous calibratin
	should really have been ignored.

	The second issue was in not being sufficiently sensitive
	to sensor saturation for display measurement. Fix by
	now having a zero tollerance, and allowing for 3 different
	display measurement exposures.

*	Fix bug in link/collink -ke where the K value was being
	distorted by not taking into account the B2A per channel output curves. 

*	Fix bug in spectro/hidio.c that can cause a crash (bus error) on OS X
	for any program that accesses the instruments.

*	Make cgats lib easier to use from C++ (Thanks to Alastair M. Robinson).

*	Fix ICC spec. compliance issue with minimum
	description tag length in Profile Sequence Description
	tag type.

*	Fix bug in spectro/dispwin that prevented DPMS being
	re-enabled if the process is killed.

*	Fix bug in xicc/tiffgamut.c that prevented it working for
	Lab TIFF input. Fixed issues with doing image specific gamut mapping
    in collink.

*	Make sure CGATS file identifiers are always a minimum of 7 characters.

*	Add 'targ' tag to hold chart data in profiles.

*	Fix problem where rev would fail on systems with lots
	of RAM, due to running out of Virtual Memory space.
	This happens mostly on OS X, because its malloc
	routine use a lot more VM for small allocations
	than the actual memory consumed.

*	Fixed problem with Spyder 2 driver, where errors or user
	terminating/aborting measurements leaves the instrument
	in a hung or corrupted state. Fix by making sure that
	a measurement is always completed before returning.

*	Added Color Rendering Ra Index to measurements returned
	from spotread for ambient or with the -T flag.

*	Add an option to tweak/refine to improve matching for
	white point relative test chart data (Relative Colorimetric
	intent matching).

*	Fix a memory leak in gamut.c, plus a few other 1-off minor leaks
	elsewhere. (Thanks to Jordi Nodal for pointing these out.)

*	Add -U scale option to colprof so that input profiles can be created
	that have a media white that is whiter than PCS white.

*	Fixed bug introduced in V1.0.0 in matrix input profiles where white point
	was being normalized rather than being left absolute.
	Also changed Lut based display profiles so that the white
	point is forced to have a Y value of 1.0, to bring it into
	line with matrix profiles. (This may worsen the verification
	match to the original data though.) 

*	Change rev cache RAM allocation to make sure
	ARGYLL_REV_CACHE_MULT scaled value can't exceed VM size.

*	Added -A option to displcal, so that the neutral axis to
	black point blend rate can be altered, and changed default to 4.0
	to improve the off axis visual appearance with some LCD displays.

*	Made verify and refine a bit more robust in the face
	of different format .ti3 files, partucularly those created
	by logo2cgats.

*	Added a -O parameter to tiffgamut, to allow the resulting gamut
	file to be located somewhere other that the directory the last .tiff
	file is in.

Version 1.0.4 bug fix release  (30th June 2009)
-----------------------------

*   Modify icc/icclib to protect against integer overflow exploits,
	and fixes to minor bugs.
    Bump icclib version to 2.11 to reflect this.

*   Fix bug in spectro/hidio.c that can cause a crash (bus error) on OS X
    for any program that accesses the instruments.

*	Fix bug in xicc/xfit.c where too little memory was being allocated.


Version 1.0.3 bug fix release  (3rd September 2008)
-----------------------------

*	Modified tiffgamut so that it processes an arbitrary number
	of raster files. Also added a filter option, that filters out
	little used colors from the raster gamut.

*	Changed gamut mapping to fix problem in which the gamut
	mapping for profiles didn't match that in collink by
	fixeing out of gamut mapping to make extended source
	gamut of B2A table more sensible without afecting
	primary gamut hull fidelity. Tweaked the gamut mapping
	to de-emphasise luminence matching slightly, resulting
	in more saturated but darker primaries for the typical
	RGB->CMYK gamut mapping.

*	Fixed problem with i1display in which it would
	time out for some particular inputs (low level dynamic
	input ?) 

*	Fixed MSWindows screensaver reset to work on
	Vista by adding fake mouse move event.

*	Changes rspl/rev to have a "fast setup" mode
	that trades a faster setup time for slower
	reverse lookups. This is to improve the
	responsiveness of xicclu.

*	Fixed bug in dispcal when using -a with -t

*	Added -L option to printtarg to suppress the i1pro target holder
	clip margin.

* 	Fix yet another PPC GCC optimizer bug in spectro/dispread.c

*	Modifed rspl/rev cache allocation to make sure
	that it is somewhat less than the maximum virtual
	memory that a process can allocate. On some systems
	with lots of RAM, it is possible to have malloc() fail
	due to this.

* 	Added support for i1 Monitor instrument,
	which is an i1pro without reflective capability.

Version 1.0.2 bug fix release
-----------------------------

*	Fixed two typo bugs in colprof (xicc/xfit.c) to do with output
	per curve optimization - the symptoms were gcc based compiles
	taking a long time to create the A2B tables.

*	Added workaround to strange i1pro Rev A upgrade/Rev B quirk,
	that causes extra time to be taken for reads.

*	Added some extra verbose output when creating profiles (rspl/rev)
	to show the system RAM detected and the limit imposed on
	each rev cache. Also changed code to prevent failure when
	there is not enough memory to allocate a single cell
	to search, and to fix memory limit setting for systems that
	may have 4 Gbytes or more of memory.

*	Added new option to collink -fk, that forces 000K input
	to K only output.

*	Fix dispwin.c so that -K option (calibrate instrument)
	doesn't fail when it thinks two dispwin's are being requested.

*	Change spectro/hidio.c so that HidD_GetAttributes() fail is ignored.

*	Fixed bug in dispcal which causes a numerical fault if a Yxy white point
	is specified and ambient correction is used.

*	Changed colprof -bn to be the same effect as -B (ie. a minimal resolution
	B2A table).

*	Fixed dispwin -R "Effective LUT entry depth" report to work without -v.

*	Modified MSWindows display enumeration to not ignore displays
	that have EnumDisplayDevices() fail, but ignore displays
	with a name \\.\\DISPLAYV*. This us to get it working under VMWARE. 

*	Added device target value quantization option to
	target/printtarg, as well as making it default for TIFF output files.

*	Fixed a bad memory leak in render/render.c, that was
	affecting target/printtarg. Probably improved the
	anti-aliased rendering speed too.

*	Fix typo in spectro/dispwin.c that sometimes causes a crash
	when the system has XRandR 1.2.

*	Fix latent bug in xicc/xfit.c that could affect
	profiles that are not white point corrected (ie. colorof -u inputdevice). 

*	Fixed problem with an i1pro that has had it's
	EEProm reset after a firmware upgrade - a previous
	calibration EEPRom integration time of 0.0 is increased
	to the minimum integration time to prevent divide by zero etc.

*	Added Argyll version number to the i1pro calibration file,	
	to try and make sure that old files are invalidated with
	each potentialy incompatible update.

*	Fix LUT entry depth reporting bug, and add yet another
	workaround for the GCC/PPC optimizer bug.

Version 1.0.1 bug fix release (14th July 2008) 
-----------------------------

*	Changed XRandR code to index the _ICC_PROFILE property
    such than inactive displays are ignored.

*	Fixed problem in rspl/rev.c where the memory consuption
	was sometimes exceeding the maximum RAM limit.

*	Changed XRandR code to fall back to other extensions
	if it fails simple VideoLUT access tests.
*	Add environment variable "ARGYLL_IGNORE_XRANDR1_2" to
	cause XRandR 1.2 to be ignored on X11 systems
	that have buggy XRandR 1.2 implementation.

*	Fixed problem with locating displays on MSWindows with
	some particular configurations.

*	Fixed bug introduced into cam02.c that ignored
	enumerated viewing condition.

*	Changed udev USB matches to lower case, since
	apparently udev does a text match rather than matching
	the integers...

*	Fixed malloc size bug in profile/logo2cgats.c
	(thanks to Steven Greaves).

*   Fix dispwin so that the lack of an EDID_DATA atome is
	not a fatal error.

*	Fixed jcnf so that the temporary file is in the same directory
	as the file it will be renamed to.

*	Added debug option to dispwin/ucmm to help with diagnosis of
	locating displays.

Version 1.0.0 changes	(1st July 2008)
---------------------

*	Changed input device profile creation to create B2A table
	by default. This can be disabled with the -b option.

*	Changed scanin to pass spectral information from reference file
	to .ti3 file, and also changed coloprof to honour observer and
	illuminant options for input profile creation.

* 	Added check to using libusb to check that it has
	been patched to work properly with Argyll supported instruments. 

*	Remove termination character setting from ntio.c and unixio.c
	to work around problem with Prolific 2302 USB<->Serial converted.

*	Fixed bug in MingW build that caused a run time
	"(null) DLL cannot be found" error, for any
	program that linked to the libusb library.

*	Modified profile/logo2cgats to output the sample name,
	to make it more useful. Added -n flag to spectro/spec2cie
	to optionaly suppress spectral output. Documented spec2cie-p
	(plot spectrum) flag.

*	Modified gamut/nearsmth.c to change optimization search
	from 3D to 2D to improve speed.

*	Added experimental "Daemon" mode to dispwin, so that it
	monitors an X11 server and keeps each screen up to date
	with the corresponding profile and calibration using XRandR 1.2.

*	Tweaked dispcal to try and improve behaviour and resulting
	smoothness of curves. Added black brightness option -B.
	Added extra report to -R to show VideoLUT entry bits of significance.

*	The i1pro fixed integration time of 2.0 seconds for display 
	calibration turns out to be too long for some very bright
	displays. To cope, an alternat 1.0 second integration
	time is calibrated, and switched to if the display
	is bright enough.

*	Changed distribution archives so that they have a top
	level directory. Changed OS X and Linux to gzip'd tar
	archives rather than .zip, so as to preserve the
	UNIX style permissions better.

*	Modified rspl/rev.c to add improved nearest acceleration
	lookup grid structure, to tackle performance issues.
	Changed aceleration grids to only hold fwd cells that
	are within the ink limit. Changes sub-simplex handling
	to make common face sub-simplexes shared between cells.
	Fixed bug in ink limit bug that was causing many sub-simplexes
	to be treated as if they straddled the ink boundary, slowing
	down inversions with ink limits applied. Changed reverse
	memory size accounting from cells to bytes, for more
	accurate containtment of memory usage below the swap
	threshold. Made default memory limit automatically adapt
	to available system RAM. Increased default reverse
	acceleration grid resolution to be twice the forward grid
	resolution, for much improved speed. Added another performance
	tuning environment variable ARGYLL_REV_ACC_GRID_RES_MULT to
	allow altering the reverse acceleration grid resolution.

*	Fixed cctiff so that it will copy a tiff file
	with no color transformation. This allows embedding
	an ICC profile in the output. Note that the TIFF file
	will have been modified, the format may have changed,
	and tags may be lost (ie., this is not the same as
	an "in place" embedding).

*	Added a simple utility "extracticc" to extract
	embedded ICC profiles from TIF files.

*	Modify tiffgamut, cctiff colprof and collink so that a TIFF file
	with an embeded profile may be used to supply ICC profiles.
	Also added an option to cctiff of embedding a profile in the
	destination raster file.

*	Added a micro cmm to Linux port, to supord recording
	the installed display profile to monitor association
	in the file system. dispwin uses this for installing
	display profiles, as well as setting a display
	to the currently installed profile.

*	Changed dispwin operation on OS X to be able 
	to set the display calibration in a semi-persistent
	way that is similar to the behaviour on other systems.

*	Fixed imdi/cctiff and link/collink so that they
    no longer rely on a Matrix profile device space
	being roughtly perceptualy linear - instead
	use the per channel curves and convert them
	to an L* type space for indexing the CLUT grid,
	and also make a Matrix output space L* like
	for interpolation.

*	Changed colprof to extract the source gamuts
	for the perceptual and saturation gamut
	mapping from the perceptual and saturation
	A2B tables of the source profile (if they exist).
	This makes for a better match of the gamut
	mapping to that particular source profile
	when subsequently linked with a CMM that
	chooses the same intent table for source
	and destination profiles. Changed iccgamut, tiffgamut
	and xicclu to correspond - make Jab appearance space
	selection orthogonal to intent table used.

*	Checked and adjsted ambient calibration (Lux etc.).
	The Eye-One pro, Huey etc. now give reasonable readings.

*	Changed dispcal to make handling of input and/or
	output black offset consistent across all calibration
	curve selections, as well as make it selectable/blendable.
	Added some other standard video calibration curves.
	Added a viewing conditions transform based on CIECAM02
	to adjust for the effect of ambient light on display
	visual contrast, plus option of measuring the ambient
	light with the instrument.

*	Made cam02 set_view() argument order consistent.

*	Added battery status report to spotread and chartread
	for DTP20.

*	Enhanced dispwin to take care of installing
	and uninstalling profiles for a chosen display.
	Also allow setting the display calibration to the
	appropriate installed profile.

*	Changed colprof so that the .ti3 data is
	included in a 'DevD' and 'CIED' text tag in the profile.

*	Added X11 RandR 1.2 support, and use this in
	preference to Xinerama and XF86VidMode extensions.
	Support the _ICC_PROFILE atom in the Xrandr output
	object, as well as the usual RootWindow properties.

*	Added TIFF file output support to target/printtarg,
	as well as an identification string on each page.

*	Enhance argyll/render to support text (using Hershey fonts),
	solid and dotted lines, improve speed, plus add
	anti-aliased output. This is in order to make
	it usable with printtarg.

*	Completely re-wrote the Jambase & Jamfiles to make
	a build system thaht works from the top and within
	sub-directories, as well as cleaning up the Jamfiles
	and improving the build system capabilities.
	This solves the circular dependency issues,
	makes a full build faster and cleaner,
	and makes it easier to ensure that a full
	build has consistent build flags and completes
	sucessfuly. The system TIFF library will
	now be used if available. Argyll project setup
	is now in "Jamtop" in the project root directory.

*	Added ability to dispwin to display test patches
	from a CGATS file, so that it can be used for manual
	patch measurement.

*	Improved ability of cctiff to cope with input
	files that have extra planes.

*	Changed tiffgamut to accept Lab encoded TIFF files without
	using an ICC profile, as well as accepting a colorspace
	ICC profile.

*	Removed limititation that VideoLUTs have exactly 256 entries.

*	Fixed problem with accuracy of dispcal -o profiles.
	[There were two issues, one being that the fitting was
	 weighting smoothness to the detrement of accuracy,
	 and the other being that there are unconstrained
 	 parameters that allow the model curves not to
	 go through 1,1]

*	Fixed problem with Linux PolicyKit/Hal permission
	files not enabling serial ports and Huey.

*	Fixed and verified that the major Linux/X11 screensavers
	(X11 saver, xscreensaver, gnome & kde screensavers) and DPMS
	are disabled properly, and now we avoid doing an exec()
	every 60 seconds!

*	Modified libusb to address Linux intr/bulk polling
	and reliability issues.

*	Improved install documentation in the light of current
	Linux distributions, and MSWindows versions.

*	Renamed "profile" to "colprof", and "icclink" to "collink"
	to avoid clashes that have arisen with other executable names.

*	Fixed bug in scanin/scanrd.c that sometimes caused
	a double free crash on Linux. (Thanks to Guy K. Kloss)

*	Modified dispwin to open a device context to a particular
	MSWindows display differently, for better compatibility with
	MS Vista.

*	Changed dispwin to allow several of the commands
	to operate in one call. Clearing the LUT,
	setting the X11 ICC_PROFILE, loading the profile or
	X11 ICC_PROFILE can now be done with one
	invokation of dispwin.

*	Fixed bug in dispcal that affected black level
	adjustment and calibration. Symptom was a black
	level not quite as low as it should be.
	[Thanks to Hal V. Engel for noticing this]

*   Made sure that display profiles have the luminance tag
    value set, so that it's possible to recover the
    actual instrument reading.

*	Fixed dispcal and dispread -dfake so that
	they will take notice of a -kcal file.

[Beta 8 Snapshot 2008/1/15]

*	Added -S and -L options to spectro/dispwin for Unix/X11
	systems, to allow setting and using the _ICC_PROFILE
	root window property to store the displays profile
	and calibration.

*	Changed MSWindows and OS X dispwin/dispcal/dispread test
	window to be title and borderless, and also have
	an option (-B) to mask the whole screen behind the
	test window with black.

*	Added a "create intersection gamut" method
	to the gamut class, and also added a companion
	-i/-I flag to viewgam to print out the intersecting
	volume of the first two gamuts, and oprionaly
	save the intersecting gamut. Improved robustness of
	the gamut "radial" point test methods slightly.

*	Fixed spotread so that it doesn't display any
	color information when reading the Huey ambient
	sensor, and added an option (-T) to show
	color temperature for each reading.

*	Added gamut volume report (with -v) to tiffgamut.

*	Changed spectro/spyd2setup.h to only set the
	loaded flag after sucessfuly loaded a firmware file.

*	Changed numlib/numsup.c error, warning and verbose
	functions into function pointers so that they
	can be overridden by callers of library functions
	that make use of them (lprof).

*	Switched icc and cgats library from
	the "BSD like" license to the "MIT" license.

*	Added better DTP22 support to driver and
	printtarg.c (thanks to Nigel Rowe)

*	Fixed spectro/ntio.c to cope gracefully with systems
	that don't have any serial ports.

*	Renamed spectro/printread to spectro/chartread.

*	Fixed problem in spectro/usbio.c where on
	some systems usb_detach_kernel_driver_np() needs
	to be called before usb_set_configuration().

*	Added option to dispread to allow a shell callout
	with each color being tested, to allow relaying the
	test patch value to a remote display via a script.

*	Removed spectro/filmread.c and target/filmtarg.c
	until their licensing compatibility with GPLv3 is
	figured out.

*	Added -W parameter to instrument using programs,
	that allows overriding the default serial flow
	control protocol. This may allow working around
	problems caused by flow control not working
	on certain systems.

*	Added quick ICC profile creation to dispcal,
	so that single operation calibration & profile
	is now possible.

*	Fixed some bugs in cctiff handling of Lab PCS and/or
	-p operation.

*	Added a new test chart type to render/timage, for
	testing profile B2A tables.

*	Added -V option to spectro/dispwin, that verifies
	the currently loaded calibration.

*	Added (yet another!) variation of the spectral
	field names to support colorport output,
	to profile/logo2cgats.

*	Fixed problem with dispcal -u (and possibly
	other cases, ie. profile) where an out of range
	VideoLUT calibration value can wrap around
	rather than saturating.

*	Improved black point setting in dispcal,
	so that it doesn't get lighter if the white point
	is reset during the run. Also changed the white
	point cliping to use the device model, rather than
	relying in the cube clipping code, which was not
	so accurate.

*	Modified profout per channel curve algorithm
	to be encapsulated in an independent module (xicc/xfit.c),
	and to create input curves that adjust the curve shape and
	clut grid locations independently of each other.
	This has similar performance to the old code in many
	cases, but reduces fit errors for certain types
	of device characteristics.

[Beta 7 Snapshot 2007/10/15]

*	Fixed minor bug in icc.c - was double freeing while
    a V4 profile was being rejected.
	Also changed SYMETRICAL_DEFAULT_LAB_RANGE
	B2A input curve tweak for 16 bit -
	the range can be almost -128 to 128 and still
	remain symetrical.

*	Improved robustness of dispcal in zeroing in
	on the neutral patches. Got Jacobian matrix
	refinement going, added device value clipping,
	and made it revert back to the best ever
	value as a worst case result. Tested all the colorimeters
	on every platform, fixed bugs with spyder on
	different platforms (USB bugs ?).

*   Tweaked spyder driver to improve repeatability
	for low light conditions - made integration
	time adaptive.

*	Added Huey colorimeter support, including driving
	it through the HID drivers on MSWindows and OS X.

*	Added Spyder 2 Colorimeter support, including the
	firware transfer utility spyd2en, to allow the
	end user to get their instrument workings.

*	Fixed a problem in dispwin/dispcal/dispread not keeping
	the Gnome screensaver at bay.

*	Fixed very minor error in profile that caused a crash
	if -taw was used without a -s.

*	Hopefully fixed the last lingering issues with the
	gamut function "split plane" problem. Improved
	the split plane choice criteria too, reducing
	the structure size and (presumably)
	improving interogation speed slightly.
	(Visualizing things always helps a lot!)

[Beta 6 Snapshot 2007/9/15]

*	Fixed bugs in dispcal target curve - the curves
	didn't seem to be as neutral as they should be.

*	Changed HCFR setup to assume no special 2mm apatures
	on its sensors, since this is the default hardware configuration.

*	Added support for more scan targets. The list is now:
	IT8.7/2, ColorCheckerDC, ColorCheckerSG, 
	Eye-One Pro Scan Target 1.4 and HutchColor HCT.
	
*	Fixed bug in printread -xl :- XYZ wasn't being scaled to 100
	(thanks to Duane Ruck for pointing this out).

*	Fixed bug that affected printread handling a chart with
	the patch location identifier that has patch location
	before strip location. This was affecting reading the
	Eye-One Pro Scan Target 1.4 chart.

*	Added a -a flag to printread, to cause the patch locations
	to be saved to the output, so that a chart read can be used
	to create a scan/input CIE reference file.

*	Added good/bad beeps to printread for the Eye-One Pro,
	to speed up chart reading.

*	Added a -B flag to print read, to disable bi-directional
	strip recognition if the reference patch values are not to 
	be relied upon.

*	Modified i1pro patch recognition to make it more
	sensitive to differences in just some wavelength bands
	- this fixes Eye-One Scan Target 1.4 patch recognition,
	and generally helps robustness for all charts.

*	Supressed "There is at least one patch with an very unexpected response!"
	warning in printread unless the expected values were created using
	a specific device model such as an ICC or MPP profile in targen.

[Beta5a Snapshot 2007/9/10]

*	Fixed bug that had crept into profile/profout.c
	that wreckes the contents of the gamut lut.

*	Added a manual chart recognition fiducial marks to
	print charts that are intended to be scanned in (printtar -s),
	so that manual chart recognition can be used on these too.

[Beta5 Snapshot 2007/8/28]

*	Fixed serious bug in dispcal & dispread on Linux -
	screensaver suppression using fork() was causing
	programs to execute twice at the same time.

*	Changed spectro/dispcal.c calibration algorithm
	to be faster, more precise, and more robust.
	Improved handling of "native white" mode
	to better hit the target 1.0 RGB values.
	This should contain the worst case errors better.

*	Changed printtarg to pad i1 test chart last row,
	since the printread logic can't cope otherwise.

*	Added a manual chart recognition option (-F) to scanin,
	that makes use of fiducial marks defined in the .cht file.

*	Added a -G gamma option to scanin/scanin to allow
	some flexibility in the face of extreme device behaviour.

*	(Hopefully) fixed DTP02Q thanks to feedback from Udo Lembke.

*	Changed all of my code and other GPL code that allows upgrading,
	to the GPL Version 3 license.	Corrected "licence" to "license"
	in many (but probably not all) places.

*	Modified DTP51 driver to ignore a "bad command"
	error to the GI command (allow for old firmware ?)

*	Modifed dtp20 on-line reading to be more forgiving
	of unexpected status after a strip read.

*   Added some fudge scale factors for i1pro emission
	and ambient modes. I'm not sure at the moment where the
	real scale factors come from, so I've roughly matched
	the scale to what the GM driver returns.
	Also add fudge factor for i1display2 ambient mode.

*	Fixed some bugs that had crept into DTP20
	offline chart reading (not reading, heap corruption on free).

*	Added diagnostic for DTP20 offline chart reading
	to hint at what strip hasn't been read.

*	Changed printtarg to optimise contrast between
	test patches and spacers.

*	Added "aproximate least squares" setting mode
	to icc set_lut and rspl set_rspl to improve average
	accuract when setting interpolation arrays from
	a function (ie. when inverting A2B).

*	Added a "display with normalized brightness" to spot
	read to make it easier to verify spot readings
	for a display profile.

*	Fixed "r" and "rl" intents so that the white points
	are linearly mapped, as is the normal expectation with
	relative colorimetric intents.

[Beta4 Snapshot 2007/5/16]

*	Fixed icclib to handle unknown tag types now,
	as well as cope more gracefully with ProfileMaker4
	profiles that have an illegal flag value in their
	data tagtype flag field.

*	Modified gamut mapping to improve coherence of mapping
	outside the source gamut when used to create B2A table.

* 	Created first cut of VRML debug plot library in plot/vrml.c,
    and switched gamut/gammap.c to use it. Other diagnostics
	could be switched to use it too (ie gamut/gamut.c).

*	Modified ciecam02 to improve handling of imaginary colors,
	and coherence in those regions.

*	Added a delay between setting a screen color (spectro/dispwin.c)
	and starting to read the patch with a display instrument.

*	Fixed issue on OS X with locating displays - IO dictionary
	string handling.

*	Made the dispcal/dispread calibration a bit friendlier if the
	instrument doesn't actually support calibration.

*	Added profile comment options to link/icclink.

*	Fixed bugs in xicc/xicc.c and xicc/xlut.c that were affecting
	how black generation was controlled by the input luminence
	value for a -kp option. This affected profile/profile the
	most, but could also have changed how link/icclink -G
	generates black as well. The black generation should now
	match quite closelgy between the B2A tables generated
	by profile/profile, and the black generation generated
	by link/icclink -G.

*	Added "patch by patch" mode to print read, that allows
	reading media where strip recognition is unreliable.

*	Added patch consistency tolerance modifier to
	printread and the i1pro driver.

[Beta3 Snapshot 2007/4/10]

*	Modified i1pro driver to do scan measurements with
	single USB read, to avoid read latency issues.

*	Added display/emission distinction for i1pro,
	to speed up display measurement, while still allowing general
	ambient measurements to be adaptive. Added display mode
	to spotread.
	
*	Added workaround to the i1pro rev D crashing on
	close under Linux. It's reset rather than closed.

*	Modified libusb-win32 to fix problem with i1pro rev D
	crashing on a get_configuration.

*	Reworked scan patch recognition to work for reflective
	or emissive scans, and to be more tolerant of noisy media.

*	Added support for emission scans to i1pro and printreaf.

*	Fixed ref/*.sp files, as well as adding back in D50*.sp
	variations that seem to have gone missing.

*	Change i1pro trigger/read logic to ensure that
	process scheduling latency doesn't cause the read to
	be late, causing read failure. Add trigger/read timing diagnostics.

*	Fix i1pro switch thread cleanup to avoid memory access fault.

*	Tweak xicc/xspect.c FWA to have better estimation accuracy
	with a range of paper stocks, as verified by xicc/spectest2.c
	and xicc/spectest.c

*	Fixed spotread to display FWA corrected spectra correctly,
	as well as fix some bugs with the reference spectra.

[Beta2 Snapshot 2007/3/29]

*	Fixed gcc 3.3 optimiser problems on OS X which were
	causing crashes in spotread -S and i1pro high res.

* 	Modified spec2cie to look for specific device values to
	identify white, since some devices fool looking for maximum Y.

*	Fix triggering to make FWA spotreads work.

*	Fix bug in Spectrolino calibration with filter messages
	work properly.

*	Fix bugs with DTP41 and DTP51 triggering.

*	Change how rows per strip are stored in .ti2 file,
	to remove base 62 limit.

*   Increase scope of target/printtarg scale options,
	and add extra scale for spacers.

*   Changed Linux serial port location to look
	for /dev/ttyUSB* as well as /dev/ttyS*,
	and only offer them if they can be opened.

*   Fix i1pro driver so that it does not return
    spectral data unless asked.

[Beta1 Snapshot 2007/3/22]

*	Finished i1pro driver by adding highres spectral mode
	(+ matching changes in dispcal, dispread, printread, spotread),
	and making the calibrations non-volatile so that
	they can be retained between utility starts.

*	Changed the default observer backto the 1931 2 degree
	observer in various programs (profile etc.), so there
	is less surprise at the discrepancy between the
	default instrument values and the values when
	spectral data is used.

*	Changed profile/logo2cgats so that it uses a heuristic to
	determine if the spectral data needs scaling by 1.0 or
	100.0, since it seems the type of file cannot be relied upon
	as an indicator.

*	Fixed link/icclink to record a more accurate summary of
	overall intent in the header.

*   Re-worked tweak/refine.c slightly, to try and improve how
    it copes with out of gamut points. Added automatic
	extra weight (5) for lightest patch.

*   Added new black generation feature to link/icclink. It can
    now take the output inking from that of the output profile
	B2A table, just like revfix.

*   Fix bug in link/icclink - the changeover to using K target rather than
	locus had a bug in it. It was still partially defaulting to locus rather
	than K value target (some C library has a global called locus ?)

*   Made it so Eye-One pro can recognise strips when read in either direction.

*   Re-worked instrument calibration and measurement triggering
    to support instrument operated buttons.

*   Added support for DTP20 spectrometer.

*   Added support for Eye-One Pro spectrometer.

*   Fixed bug in profile where RGB space profiles didn't handle FWA correctly.

*	Fixed some bugs in cctiff that were causing inacurate results.

*	Added support for the DTP22/Digital Swatchbook.

*	Changed serial port driven instruments type to be automatically
	recognized, eliminating the need for the -i option on
	all the instrument using utilities (dispcal, dispread, printread, spotread).
	
*   Reworked gamut hull triangulation, hopefully making it more
	robust against any numerical issues.

*   Fix bug in printtarg that caused green spacers instead of white ones.

*   Added -c flag to spectro/dispwin. This clears a display
	calibration.

*   Added support for Eye-One Display 1 and 2 colorimeters.

*	Added extra configuration for DTP92 to cope with
	a firmware bug for certain early DTP92Q instruments.

*	Fixed bug in logo2cgats - X-Rite ColorPort spectral data
	is already scaled to 100, so only do this for Gretag files.

*	Added the -m flag to scanin/scanin, to allow it to
	return true mean values, rather than robust mean values
	(but see latter bugfix).

*	Fixed a bug in profile/profout.c that caused some matrix shaper
	profile to generate colorant XYZ values slightly less than
	0.0, due to numerical inacuracy, triggering an assert.

*   Added a new option to spectro/spot read to allow use of
    the Spectrolino with filters fitted.

*	Added error handler to spectro/dispwin.c, so that there
	is not a fatal error triggered in just listing the
	screens on an X11 system running TwinView or MergedFB.

*   Fixed problem with USB/DTP94 that caused instrument
	coms to fail after doing calibration. 

*   Fix bug in render/timage.c that caused central wedge to be
	corrupted.


Version 0.60 changes (July 17 2006)
--------------------

*	Changed both gamut mapping intents, and enumerated
	viewing conditions to be symbolic mnemonics, so that
	the options don't change as intents and viewing conditions
	are added, deleted or re-ordered. Selection of
	intents or viewinging conditions using a numerical
	enumerator is no longer supported, to help
	catch problems caused by changes to the list
	with this releas.

*	Fixed bug in profile/profile.c when creation XYZ PCS
	LUT profiles - the gamut tag was being created with the
	wrong color space, and often this would cause an
	internal fault in gamut surface creation.

*	Changed profile/profile so that if a source
	gamut/profile is supplied for display LUT type
	profile creation, an ICC V2.4.0 profile is created
	with all 3 intent tables, rather than the single
	colorimetric intent that is default for ICC V2.2.0 and
	earlier. Fixed icc/icc.c to properly support the
	possibility of a full set of intent Luts in
	display and input profiles. (Profile does
	not yet support intents for input profiles.)

*	Added new intent to link/icclink and profile/profile.c,
	that does an absolute colorimetric link, but
	will scale the brightness down if needed to
	avoid clipping the source white point. This
	is useful in soft-proofing situatations.

*   Went through with both gcc -Wall, and Vc++ -w3
	and reduced the number of waring messages.
	Fixed some very minor bugs along the way.

* 	Made additional changes to spectro/dispcal.c, to
	improve behaviour when adjusting controls with and
	without targets. When adjusting without a white target,
	the control hints now help you adjust to be on
	the chosen black body or daylight locus.

*	Changed profile smoothing factors that are different
	for the L* a* and b* channels.

*	Made profile/profile.c label the profile with the platform
	it was created on.

*	Improved the device model used by dispcal, including
	optimising the model, so that it zero's in on
	calibration faster, and handles the black point
	more accurately. Added a variable -k option to
	dispcal.

*   Added display controls addjustment mode to dispcal,
	and altered the target gamma curve to better take the
	black point into account. 

* 	Added report option to dispcal, to measure and report on
	the current display behaviour.

*	Added verification mode to dispcal (-E), to
    allow checking how well a display meets its calibration
	targets.

*   Added -N option to dispcal, dispread and spotread to
    allow instrument calibration to be bypassed. This makes
    repeatedly operating some instruments (ie. Spectrolino)
	more convenient in emission mode.

*	Added a "load video LUT" mode to dispwin, so it can now
	be used to initialse the displays from either ICC profiles,
	or Argyll .cal files. Can be used on all platforms (but
	particularly MSWindows and X11) in startup scripts.

*	Fixed bug in X11 disable screensaver, and disabled
    the cursor over the test window.  

*	Added proper multiscreen support on all platforms
    (Even X11 Xinerama!).

*	Fixed bug in dispcal that was causing the achievable
	brightness calculation to misbehave.

*	Added -u "update" option to dispcal, to speed up
	maintenance of display calibration.

*	Added separate options in dispcal for a daylight or
	black body color temperature target.

*   Added "plot spectra" option to spotread.

*   Added support for the X-Rite DTP94 (AKA OPTIX) to spotread, dispcal,
	dispread. Added -y option to allow specifying whether a CRT or LCD
	is being read.

*   Streamlined instalation (particularly on Unix and OSX),
    so that tifflib and libusb don't need special handling.
	Changes to Jambase to accomodate this.

*   Added support for USB connected instruments using libusb.

*   Added support in profile/logo2cgats for converting from
	X-Rite ColorPort format.

*	Added extra facilities to imdi to suppport arbitrary
	colorant order, arbitrary pixel padding, reduced
	runtime code size and improved cross platform
	compatibility. 

*   Added warnings in all the instrument driver
	code, that instrument companies are not to be
	expected to support anything involving these drivers.

*	Completed new version of cctiff, that deals with an
	arbitrary sequence of profiles, as well as supporting
	L*a*B* encoded TIFF I/O.

*	Added alternate sort algorithm to imdi/cgen.c, for
	16 bit input support, speeding up higher dimensional
	input conversions.

*   Changed icc/iccdump so that the -t parameter can
	be specified multiple times.

*   Added extra PCS curve for BtoA table of XYZ LUT
	profiles :- this greatly improves the accuracy
	of the BtoA lookup of XYZ LUT profiles.

*	Added greytiff utlity to binary distribution,
	and also added option to convert using CIECAM02
	space, for lighter chromatic colors.

*	Added ColorantTable tag to profiles created by
	profile/profile.

*   Added a new option to dispcal and dispread, to allow
    the test window to be positioned and sized. This
	allows some people to cope with multiple displays
	better, and may give some flexibility in applying
	these utilities to projectors etc.

*   Added three stage overal conversions to icc/icclib.c,
	for monochrome, matrix and lut conversion classes.
	This is to make it convenient to split up every conversion
	into input per component, core intercomponent conversion,
	and per component output, to match the capabilities
	of imdi.

*   Modifed xicc/xicclu, xicc/revfix.c, profile/profile.c
	and link/icclink.c, to default the -k black generation
	to setting black level targets, instead of locus targets.
	In pratcice it seems easier to create smooth black curves
	this way, especially when meshing with the black behaviour
	forced by ink limits and L target levels.
	Backward compatibility with the previous controls is provided
	via the -K flag. Default black generation has generally
	been switched to -kr. xicc/xicclu has had the -kq option
	added, so that the behaviour of icclink -kq can be
	explored. Some bugs in -kq may have been fixed.

*   Added full verbosity levels to icc/icclu and xicc/icclu,
	so that -v0 can be used to capture batch output that
	is ready for further batch processing.

*   Enabled proper gamut tag creation in profiles.

*   Fixed numerical issue in xicc/xicc.c:icxdCIE94sq(),
    that was causing profile to fail when optimising
	matrix and curves.

*   Bumped up the default profile smoothing factors,	
	as the resulting gamut boundaries were noticably
	bumpy. Default profile -r is 0.5%, and internal
	factors within rspl/scat.c have also been increased.
	This seems to be favouring smoothness over accuracy
	somewhat, but is still on the shallow part of the
	"knee", where further increasing smoothness would 
	start to strongly decrease fit.

*   Fixed problem in profile (xicc/xlut.c) in locating
	the black point. Doing one search is not robust
	given the behaviour of many profiles, so
	several searches are now used to avoid local
	minima. The same fix is applied to xicc/mpp.c
	(Thanks to Gerhard Fuernkranz for discovering
	the problem.)

*   Fixed target/targen, link/icclink, xicc/iccgamut,
	xicc/fakeCMY, xicc/revfx, xicc/xfbview and xicc/xicclu
	to have estimated default ink limit values. Added input
	profile ink limit options to link/icclink.

*   Added a function to icc/icc.c to estimate the
	total link limit and per channel limits of
	an ICC profile. This is to workaround the lack
	of a standard tag in the ICC profiles.
	A function built on top of this in xicc/xicc.c
	(icxDefaultLimits()) established default total
	and black ink limits for a profile.

*   Modified gammap.c & nearsmth.c to increase
    the control over gamut mapping, and add new features.
	The controll weightings within gammap.c are now
	tables rather than #defines, and can be segmented
	by color, to fine tune particular areas. Only
	yellow uses this feature, to keep the gamut mapping
	universal. Two aditional features have been added,
	cusp mapping, that applies a degree of rotation to
	areas surounding source primary/secondary colorant
	cusps to partially align them with the destination
	cusps. The radius of influence of this mapping is
	settable. Another factor called "elevation" has been
	added, that simulates the effect of inflating the
	source gamut, allowing more complience in the
	mapping of the control vectors.
	Just perceptual and saturation tables are present.
	In nearsmth, expansion of the gamut is finessed a little
	by termporarily reversing the direction of the mapping
	when expansion is present. There are lots of
	other changes in nearsmth.c aimed at improving the robustness
	and behaviour of the nearsmooth function.
	The gammap tuning factors are aimed at providing good saturation
	while maintaining smoothness at the gamut surface.
	
*   Added code to the gamut hull finding, to locate and
    store the primary and secondary colorant "cusps" in
	the gamut file, as well as adding options to
	the various vrml utilities to mark the cusps.
    The cusps can be used within the new gamut mapping
    to align or partially align the colorants
	of the source to the destination.

*	Modified gamut boundary code to improve detail and acuracy
	of the gamut hulls. The smoothness of the destination
	hull affects the smoothness of the resulting gamut
	mapping to some degree.

*	Changed gamut mapping so that "full" neutral axis alignment
	no longer aligns the black point a*b* to the destination.
	The L/J range is mapped as if the black points are
	fully aligned, so the contrast ratio is not compromised.
	This approach seems to give a better subjective neutral result.
	(There appears to be no such thing as black point hue adaptation.)

*   Modified enumerated viewing conditions list to tweak
    ambient values slihtly, and introduce "monitor in bright
    work environment".
 
*	Added new option to spectro/fakeread to allow manipulation
	of the black point of the fake readings, to allow creation
	of test profiles with different black points.

*	Added another numerical problem workaround to
	xicc/cam02.c, to deal with Jab->XYZ issues when J == 0

*	Created utility render/itest to generate RGB test images
	for checking gamut mapping behaviour.

*	Created new sub project "render", for a simple 2d raster rendering
	system. This is intended for use in generating test images, as
	well as rendering measurment test charts directly to rasters,
	rather than just postscript.

*   Added a -m option to target/printtarg, so that the paper margins
	can be increased from the default.

*   Added documentation for the .ti3 and .cal file formats.

*	Fixed bug in spectro/unixio.c, which caused long strips read
	on the DTP41 on OSX or Linux to fail when spectral readings
	were enabled. The canonical input buffer size was being exceeded.
	Switched to non-canonical input mode. (Also seemed to fix
	problem with Xon/Xoff flow control on OSX.) 

*   Added flow control to serio I/O, to make instrument
	communications more robust. Hardware handshaking
	seems to be the most reliable (but see above).

*	Converted icc/fbtest into profile/invprofcheck,
	and added some more features to make it comparible to
	profile/profcheck.

*	Added VRML L*a*b* axis labels to gamut/viewgam, profile/*profcheck.

*   Increased gamut mapping RSPL smoothness, to compensate for
	RSPL changes in V0.53. Smooths out bumps in saturation mapping
	somewhat better, and should eliminate the "non-monotonic" warning
	message.

Version 0.53 changes (December 2005)
--------------------

*   Fixed serious bug in target/ofps.c, that made
	the default distribution of points very non-optimal. 

*	Added CIEDE2000 Delta E function to icc/icc.c, and
	also added this as an option to profile/profcheck,
	profile/mppcheck and profile/verify. 

*   Added new utilities rspl/smtmpp.c and profile/splitcgats.c
	to allow testing and verification of profile optimised smoothness
	factors with more realistic device data. Use splitcgats in
	combination with profcheck and the hidden "-rs" flag in
	profile to cross validate the optimised smoothness factors.

*	Added new "-r" parameter to profile/profile to allow
	the profile smoothness factor to be adjusted to suite
	the uncertaintly of the device and instrument readings.

*   Created more in depth simulation of device behaviour to 
	verify profiling operation (rspl/smtnd.c). Running this
	indicated that no single smoothness factor will suite
	all combinations of dimension, number of sample points
	and sample point uncertainty. Create a interpolation table 
	lookup to provide an "optimised" smoothness factor,
	determined from the simulations. Used new profile/splitcgats
	to cross validate 

*   Fixed serious bug in rspl/scat.c - new smoothness tracking
	factors were seriously wrong. Figured out correct approach
	and fixed it. Will affect various components including
	profile, icclink and refine.

*   Added support for hexagonal layout of charts on XY instruments.
	Supports aprox 14% more patches on the same sized chart.
	Changed default patch size for Spectrolino to 7mm, since
	this fits more patches on a page while remaining more
	reliable than the 6mm patches used in charts such as the
	ECI2002. (Changes to target/printtarg and spectro/printread) 

*   Added extra check code for argument handling in link/icclink.c
	- we now switch to appropriate linking mode if options that
	require it are selected.

*   Added better algorithm for weakly tending rspl's to 
	a particular mapping. Added weak default function
	API to scattered fit, and now make use of this
	in tweak/refine. This should eliminate an "overshoot"
	issue that was present with the simple grid of weak
	mapping points previously used (Thanks to Gerhard Fuernkranz
	for pointing out the problem.) Affects tweak/refine.
	tweak/refine has also been afected by problems with RSPL
	scattered data fit functionality - see above.

*   Modified spectro/dispcal.c to more acurately compute clip
	of target white with device gamut, and also use matrix to
	compute aprox. inverse more quickly and acurately, to
	give faster and more accurate convergence. Needs some
	more testing, may not work well on real monitors ?

*   Started adding support for ICC V4 Lab encoding into icc.c

Version 0.52 changes
--------------------

*   Added a display calibration utility, dispcal,
    to create appropriate display lookup curves.
	Modified dispread and profile to carry the display
	curves through to the vcgt tag in the profile.
	Not extensively tested yet.

*   Added spectro/spec2cie.c from  Gerhard Fuernkranz.

*   Changed clut profile input and output curve optimisation
	code to use conjgrad() instead of powell(). Aim was to
	speed up profiling, but speed seems to be about even.
	Added "optimise all" step since conjgrad() makes this
	feasible, getting slightly better fit.

*   Modified the rspl code to support non-equal grid resolutions.
    This was to support display calibration, but may come in handy
	for support of V4 profiles. Noticed that the smoothness tracking
	with different resolutions and dimensions wasn't working very well.
	Improved the test code (c1, t2d, t3d) to help reveal this, and
	fixed the problem. Now operates faster, more accurately, more
	smooth output with a better fit to the input points. Should
	improve the quality of forward profiles somewhat.
	The fitting error is more noticably improved from -ql through -qu. 
	Gamut mapping seems to be a little smoother.

*   Completed the tweak/refine tool, useful for improving the accuracy
	of proofing systems. Changes were made to profile, icclink and
	revfix to support simple use of abstract correction profiles created
	using refine.

*   Added option to printread, to allow CIE data to be saved
	as D50 L*a*b*, for more flexibility for other purposes.

*   Fixed minor bug in DTP51 reading, where the guide setting
	was wrong for strips with less than the 6 passes.
	Also added fix code for DTP51 "off by one" patch
	problem - the error should be corrected automatically.

*   Fixed problem in reverse lookup of per channel curves,
    that affected performance of profile and icclink -G.
	This problem became evident when CAM was switched to CIECAM02.
	Note this problem seems only significant when CIECAM02 is used,
	ie. when the -c and -d flags are used to specify viewing conditions.

*   Added support for alternate test patch indexing, to
    better support non Argyll test charts (ie. ECI2002)

*   Renamed printspot to spotread, and expanded the range
    of instrument modes supported.

*   Added emmisive measurement mode support to printspot.

*   Added independent Gretag Spectrlino/SpectroScan
    interface library to cleanup some minor problems,
    and add some more features (such as a fake transmission
    measurement mode using a light table, etc.)

*   Added extra option to targen that allows creating test
    points targetted at a specified portion of the devices
    colorspace.

*   Fixed problem with imid & cctiff, where a profile that returns
    device values > 1.0 causes pixel value wraparound.

*   Added an extra option to printtarg to scale the size of the test
    patches. This can be used to allow for coarse screening, poor
    registration, and packing more test patches onto a page. 

*   Added extra support in fakeread to allow monochrome test charts to
    be faked using RGB/CMYK profiles.

*   Added extra options to printtarg, to allow greyscale test charts to
    be represented in a number of different postscript color representations.

*   Fixed bug in targen when > 4 colorants are used, and -v is turned on.
	Diagnostic fails for > 4 colorants. (Thanks to Andrej Javorsek).

*   Fixed bugs in matrix/shaper profiling :- -ve offsets in shaper don't
    make any sense, so removed them; weighting of parameter values was
    faulty, so suppression of unsconstrained bumps in curves wasn't always
    effective. This change may improve matrix/shaper profile quality slightly.

Version 0.51 changes
--------------------

*   Added new option to xicc/xicclu to allow plotting of the neutral
    axis to examine black generation behaviour.

*   scanin has problems with new correlation code. Revert to
    old code until problems are figured out.

*   Added support for a black channel ink limit
    in nearly all utilities that currently support
    a total ink limit.

*   Created cam02plot to explore discontinuities in
    CIECAM02 conversions. To support this, the usage
    of Helmholtz-Kohlraush effect is now a runtime flag.

*   A few changes in icc/ moving towards V4 support

*   Modify Jamfiles to support a more restricted "install" of
    executables and other files to bin/

Version 0.5 changes
-------------------

*   Got the GUI and serial coms dependent parts running
    under Mac OSX. Changes to Jambase and Jamfiles to make this work.

*   Modified Jambase to allow for Mac OSX Carbon GUI applications
    needing a minimal resource fork to run properly.

*   Added incremental rspl scattered point suport, to allow
    for us in an error driven targen point generation routine.

*   Added "EXTRAFIT" option to rspl, that allows for better fitting
    to scattered data points that have a high error after normal
    fitting. May improve profile accuracy when large test charts are used.

*	Add a special purpose "-f" and "-F" option to icclink, that causes
	K only or all output for RGB/CMY in to CMYK out devices for neutral
	(R=G=B) input.

*   Switched around gamut mapping high level controls into
    a simple "Perceptual" and "Saturation" set of pre-canned
    surface point weighting values. This allows more detail
    in setting the two different styles. A saturation enhancement
    control has also been made available, although this may need
    a little more work to be fully effective.

*   Switched over to CIECAM02 for better blue gamut mappings.
    Fix CIECAM02 so that it is robust given arbitrary Jab input values.

*   Fixed bug in gretag spectroscan print chart reader - it wasn't
    recalibrating every 50 readings.

*   Added support in spectro/fakeread.c for a "separation" device
    link profile to preceed the real device profile. This allows
    simulating the response of a device that used an explicit
    separation in its rendering pipeline.

*   Creating a hack CMY to CMYK separation creation support tool
    called xicc/fakeCMY.c This creates a dummy CMY->PCS .ti3 file
    from a CMYK device profile, that can then be turned into a CMY
    device profile that can then be linked with the CMYK device profile
    to create a CMY->CMYK device link separation profile. This program
    will be redundant when profile/sepgen is completed.

*   Add support for the Spectrocam illuminant spectrum (Xenon Lamp),
    even though this instrument is not supported directly. This
    allows the FWA to be used on spectral readings from this instrument.
    (Thanks to Gerhard Fuernkranz for providing this information).

*   Add method to gamut object to compute a gamuts volume,
    and report the total volume in xicc/iccgamut if verbose
	is set.

*   Modified scanin to work with scan of Gretag ColorCheckerDC.
    Needed to modify edge detection filter to reduce noise,
    modify edge matching code to support a wider range of
    scales, change matching logic to ignore target edges
    with no matching reference edge, stop using crossings
	as part of edge matching. 

*   Added new entries to test chart recognition template, to
	allow scanin to determine correct rotation, even when the
    chart has no asymetric elements. This works similarly
	to the strip reading code, in checking correlation
	between expected and measured color values.
	Printtarg has also been modified to support
	this new scan recognition template entries.

*	Fixed up Gretag Spectroscan operation so that
	emission readings (for displays) etc. modes are
	correctly set and calibrated.

*   Added new facility to cgats library, to allow for a
    wildcard table keyword, as well as a variable "CGATS.XX"
	table keyword.

*   Switched to CIE94 delta E for shaper/matrix profile
    model fitting.

*   Introduce new flag ICX_CAM_CLIP to xicc, to allow full
    accuracy lookups within gamut, and clipping in CAM Jab space
    for out of gamut values. Turned this flag on in profile/profile,
	to improve clipping behaviour of colorimetric B2A table, and
	in link/icclink, to do the same for absolute and appearance
	indents.

*   fix argument '-t' processing error in profile/profile.c

*   gamut/gammap.c: Change over to better vector alignment code.

*   Improved some of the black point handling precision in icclink
	to reduce some innacuracies noticed by Gerhard Fuernkranz.

*   Modified Absolute Appearance intent to use
    a common white point between the input and
	output profiles, as well as scaling it to
    Y = 1.0, to try and prevent Jab values
	exceeding J = 100.0

*   Improved profile/logo2cgats to cope with the latest
    formats of data files from Gretag. They seems to
    have moved over to including the device values in
    the readings file, just like Argyll :-).

*   Changed rspl/rev.c so that instead of failing
	when it runs out of room to cache all the cells
    being searched in a query, it proceeds with the
	search in chunks. This allows the memory usage to
    be curtailed, without risking the reverse lookup
    being aborted. There will be a slight performance
	loss if this happens though.

*   Fixed imdi/cctiff when linking profiles,
    to not use explicit per channel curves when
    the PCS is XYZ. This was causing excessive
    quantization, because XYZ is a non-perceptual
    space. (Same problem noticed in link/icclink some
    time ago!)

*   Fixed old bug in target/ppoint.c,
	that caused a crash under Linux in targen.
	(Thanks to Greg Sullivan for bringing this to my attention.)

*   Improved robustness of cam97s3 some more,
	some cases encountered in b2a table creation
    triggered problems with out of range values.

*   Added grid range override for gamut creation,
	to assist uniform handling of gamut compression
    in b2a table creation.

*   Added perceptual and saturation gamut mapping
	support to the profile creator (profile.c,
	profout.c). This takes an input profile as a parameter,
	to determine the necessary gamut mapping.

*   Added new function to icclib to allow setting
    of up to 3 Lut tags simultaniously.
	This is to allow the multiple intent B2A table
    values to be set while getting the best possible speed
    of inverse A2B lookup.

*   Added two new functions (fwd_relpcs_outpcs,
	bwd_outpcs_relpcs) to xicclu, to allow
    converting between native relative PCS and the
	appearance space configured in the space conversion.
	This is to allow converting to/from source/destination
	CAM Jab space for gamut mapping during profile creation.

*   2003/12/9	Unstable release

*   Started HTML documentation in the doc directory.
    This is work in progress, and is not yet complete.
	See doc/Index.html

*   Changed per channel curve algorithm in xicc/profout.c,
    xicc/mpp.c and xicc/xmatrix.c, to improve accuracy
    of profile, and markedly reduce "wiggles" in certain
    cases, as well as improving the accuracy of the
    profile compared to the "true" underlying device
    characteristic. Changed how the white point is preserved
    once again, this time by simply adjusting the order 0
    a*b* curve harmonic to map 0.0 to 0.0. Tuned curve
    weighting. Checked that the rspl scatterd data smoothing
    default is still an approproate compromise.

*   Added support for a TI3 file as reference for
    profile/fakeread, to improve reference set generation.

*   Fixed a bug that was causing the A2B output curve
	ranges to be excessive (160%, rather than the intended
	110%).  Altered profile/profile.c to remove the code that disables
	the use of A2B output curves when a high quality B2A is needed,
    now that there is a way of ensuring that the a*b* curves go
    through 0.0.

*	Tweaked xicc/mpp.c to improve accuracy with
	a very small number of points, by improving the
	sophistication of its estimation of ink 100% overlap
	values in the "anchor points" (which become defaults
	if measured values are missing), as well as strengthening
	the weight given to minimising the transfer curve and
	ink interaction "shape" values.

*   Added comment support in icclink, similar
	to that in profile.

*   Added support for MPP profile in profile/fakeread,
    to permit a simple way of creating an ICC profile
    from an MPP profile for <= 4 colorants. Spectral
	values can be generated using an MPP profile.
	This provides a path to creating a useful
	profile when very few measurements are available.

*   Changed -n flag in profile/profile.c to allow
    disabling input (-ni) and/or output (-no) clut lut
	curves. This allows testing of the effects of
    per channel curves.

*   Added -r flag to link/icclink.c to allow
	overriding the device link clut resolution.

*   Add some filtering to the K locus curve
    generation in profile, icclink etc., to smooth
    out mixing behaviour. Transition to ink limiting
    isn't smoothed at the moment.
	This may improve problems with banded colorization,
    but only if high resolution, reverse AtoB linking
    is being performed.

*   Correct Gamut boundary table support has been added
    to profile/profout.c, but isn't enabled or debugged yet.

*   Add spectral lookup support to mpplu.c utility.

*   Fix bug in spectro/dispread.c - we hadn't
    updated it for the latest .ti1 format.

*   Added a special "simple" mpp model mode
    to profile/mpprof.c and xicc/mpp.c,
    to support a more simple Neugenbauer 
	like model for possible proofing standards use.

*   Added support in diagnostic plot for up to 6 curves,
    with do_plot6() function.

*   Disable USE_MERGE_CLUT_OPT from icclink, since
    it compromises accuracy, without a noticable
    improvement in speed. 

*   Added simple link support into cctiff
    for convenience, and to serve as an
	example of how to link and convert pixel data
	in one step.

*   2003/4/23	Unstable release

*   Modify gamut/gamut.c to #undefine ADD_EXTRA. This
    code doesn't seem to add much, and seems to go
    crazy with some profiles, using endless amounts
    of memory.

*   Changed rev.c allocation code to make sure
    doubles get allocated on their natural boundaries.
	This may fix problems with some processors (MIPS).
	(Thanks to Daniel Borenstein for pointing out the issue.).

*   Changed Absolute intent to clip in CIECAM97 space,
    for improved out of gamut color handling.
	(link/icclink.c, xicc/xicc.h, xicc/xicc.c, xicc/xlut.x xicc/xicclu.x).
	CIECAM97 is tricked into an absolute mode
	by forcing a D50 adapted white point for both source
	and destination profiles. The other appearance
	parameters still have an effect.

*   Hopefully removed the last problems involving
    the confusion about whether RGB device values ranges
    are 0-100 or 0-255. Argyll should now be consistent
    in using 0-100 for all its CGATS data files.
    [Changes mainly to scanin/scanin.c, plus warning
     code in profile/profout.c and profile/profin.c]

*   Added support in targen for using an mpp model
    to set test point distribution.

*   MPP profile format and creation now complete.
    Using much more complicated derivative minimisation
    equations to get adequate speed out of it.
    Overall accuracy of the profiles hasn't yet been
    established.

*   2003/2/8	Unstable release

*   Added a slight refinement to the CIECAM97 model -
    rather than using linear interpolation for computing
    the eccentricity factor, use a spline blend
    to smooth out the slight "kink" at the
    knot points.

*   Updates mpp.c - work in progress.

*   2002/12/25	Unstable release

*   Completed Gretag Macbeth Spectroscan support
    for print profiling. Most changess in spectro/printread.c,
	spectro/gretag.[ch] and spectro/spm.[ch].

*   Tuned gamut mapping to improve perceptual. Fixed
    gamut/gammap.c so that separate luminance, chrominance 
    and hue weighting works properly. Added variable chrominance
    weighting so that blues will be mapped with high L weight,
    while yellows will map to closest. This exploits the
    extra blue lightness added by allowing for the
    Helmholtz-Kohlraush effect in conversion to CIECAM97 Jab
    colorspace.  Tweaked xicc/xicc.c gamut mapping control
    parameters to improve perceptual and saturation
    gamut mapping. Made extra gamut mapping surface point code
    in gamut/gamut.c more robust so that it can be turned
    on by default (since disabled again).

*   Added Helmholtz-Kohlraush effect modeling
    in xicc/cam97s3, using the equation from
	Bradford-Hunt 96C, as detailed in Mark Fairchilds
    "Color Appearance Models". CIECAM97 was derived
    from Bradford-Hunt 96S Simple model.
    It turns out that this effect is crucuial in
    gamut mapping CRT blues onto printing blues,
    and making sure that they take into account
	the subjective lightness of the highly saturated
    CRT blue.

*   Added more elaborate "thru Black" controll to
    link/icclink.c, allowing a CMYK to CMYK with a partial
    through black. This is implemented using two
    "upper" and "lower" limit black generation curves.

*   Added hack program profile/logo3 to
    allow for a smaller number of test
    sheets read on the Spectrolino.

*   Added new test point generation module
    target/ifarp.c, an "Incremental Far Point"
    generation algorithm, intended for N dimention
    test chart generation. This is none too quick, but
    seems to generate reasonably well distributed
    test points at a steady rate. Any reasonable
    algorithm in N dimensions needs to create test
    points starting with some in gamut "seed" point,
    as the valid gamut space becomes smaller and smaller
    as N increases.

*   2002/12/2	Unstable release

*   Increased imdi code to handle at least
    8 channels in and out.
    Added tables to generate all
    possible dimension combinations
    in and out from 3 to 8.
    Added -q and -s flags to itest to
    increase testing speed.

*   Added full 16 bit processing support
    to the imdi code. This also allows
    the handling of > 4 channel input conversions.
	Configured generation of 8 bit to 16 bit
    conversion kernels. The per channel output
    table value is 16 bits, useful for final device 
    linearisation without the penalty of 16 bit
    precision thruout.
    Cleaned up the cgen code to more gracefully
    handle the differences between sort and simplex
    table code, as well as better handle 64 bit
    capability properly.

*   Changes imdi_gen to, by default generate
    all the imdi kernel code in a single
    file, reducing clutter. The -i flag
    invokes the previous behaviour.

*   Added -w flag to icclink, which enables
    a white point matching hack during linking.
    If set, the white points are forced to match
    regardless of the intent or gamut mapping.

*   Modified rspl to separate out the functions
    that are limited in the maximum input
    dimensions, and those that aren't,
    so that some rspl functionality can
    be used with larger numbers of colors.
    This translates through to increased number
    of colors support in some of xicc.

*   Fixed memory leak in imdi/imdi_tab.c
    (thanks to Krzysztof Spera)

*   Merged back basic changes to support compiling
    under Mac OSX. GUI and serial port dependent
    code isn't finished though.

*   Made allowance in CGATS and icc
    library for compiling without support
    of the usual system file and memory
    allocation calls, to increase flexibility
    when using these libraries in non
    standard environments.

*   Changed CGATS library to support
    alternate allocator and/or file I/O,
    for broader system compatibiliy.
    Added error return codes for all methods,
    to eliminate any calls to error().
	Added new method error() to avoid having to
    check every method for a return code.

*   Finished first cut at the model printer profile
    object (xicc/mpp.[ch], profile/mpprof.c),
    that supports profiling N color printing devices.
    Note that ink modeling is not supported at the moment,
    but there is enough support for optimised seprations.

*   Added -u flag to profile/profile,
    that forces input Lut based profiles
    to be stored as an absolute profile.
    This is non-standard, but very useful for
    avoiding Lab range clipping when using
	a image as a colorimiter.

*   Added hack program profile/logo4 to
    convert four separate spectral files read
    using the logo software, to a single
    argyll .ti3 file. This won't be needed
    once Argyll can run the SpectroScan
    directly.

*   Added numerical library support for
    a Sobol sub-random multi-dimentional
    sequence generator, to support an
    alternate means of creating greater than
    4 dimentional test chart values, plus
    first cut point support using it in
    target/qrand.c (This doesn't seem useful in
    practice though.)

*   Added -s option to iccdump to enable
    searching and dumping embedded profiles.

*   Fix bug in profile white point adjustment
    (xlut.c). The actual white point didn't
    match the specified white point to the degree
    of accuracy desired. There may also have been
    issues with clipping values in Lab PCS.
    
*   Added option to spectral to CIE module to
    compensate for the presense of FWA (Fluorescent
    Whitener Additive) in paper. This improves the
    accuracy of the CIE color values when a media
    measured under one illuminant is going to be
    viewer under a different illuminant. This works
    if you are using a spectral measurment instrument.
	(See poster in proceedings of the IS&T/SID
    11th Color Imaging Conference, November 2003 page 248).
	
*   Added shaper/matrix input profile support.
	(profile/profin.c, xicc/xmatrix.c)
    This may be more accurate for scanner profiles,
    given the poor coverage of test points provided
    by an IT8 chart (but doesn't appear to be in practice).

*   Added support in scanin.c and scanrd.c for
    processing 16 bit TIFFs, allowing for higher
    precision scans (useful when using the image to
    measure color).

*   Added support in scanin.c and scanrd.c for
    using a scan of a print test chart, plus a
    profile for the scanner, to be able to measure
    color for printer calibration. This
	new mode handles multi-page test charts.

*   Added support in printtarg, for producing a scan
    recognition template (.cht) for each page.

*	Added patch optimisation module to target/printtarg,
	to arrange patches to maximise their contrast for
	strip reading instruments.

*   Removed the color directory, since it's functionality
    has been taken over by the xcolorants library,
	and the (yet to be completed) MPP profile library.

*   Added DTP41T (tranmission) support in target/printtarg.c
	and spectro/printread.c etc.

*   Made changes to target/targen.c, target/printtarg.c
	and spectro/printread.c to be able to generate
	and then read >4 color test charts, to be able to
	characterise 6 to 8 color devices.

*   Added support in xicc/xspect.c for measuring
	StatusT and Visual density from a spectral
	reading, as well as an aproximate XYZ to
	density conversion, to support spectrometer
	patch spacer contrast determination.
	Also added an XYZ to sRGB conversion
	function to support RGB previews of N color
	devices, as well as scanner recognition template files.

*	Expanded xicc/xcolorants.c to incorporate
	an approximate device model for arbitrary
	colorant combinations. This is used to
	be able to approximate expected density readings,
	as well as preview colors and scanner recognition templates.

*   Create a new test point creation module,
    target/simplat.c, to create higher dimentional,
	regular simplex latice test pointsi (this seems
    rather slow and has difficulty arriving at the
    desired number of test points.)


Fourth snapshot changes:
------------------------

*   Removed gamut/iccgamut, and renamed
    xicc/xiccgamut to xicc/iccgamut.

*   Modified tiffgamut to be able to emit CIECAM97 style
    colorspace gamuts, so that it can be used to
    generate appropriate gamut files as input to
    icclink. Moved it to the xicc subdirectory,
	as it depends on xicc, just like xiccgamut.

*   Fixed up icclink.c, gammap.c and nearsmth.c to
    more correctly handle gammut mapping for a particular
    image gamut, rather than a source colorspace.

*	Added text description option to profile utility.

*   Made significant modifications to the perceptual
    gamut mapping. Turned gammap into an object, rather
    than merely returning a rspl to allow for a separate
	L mapping step. Added #define to control this.
    Made the source to destination surface point a weighted
	optimisation algorithm for more control over the absolute
	vs. relative error introduced, and setup some initial
	weighting values. This is intended to combat the
	tendency of the "smallest absolute error" mapping
	to map many to one in the most saturated regions,
	leading to a loss of detail. The weighting scheme
	could probably use some more fine tuning, or even
	some alteration to make it vary with respect to (say)
	the absolute L value, or the absolute C value.

*   Added first cut at a model based forward profile
    creation (profile/mpprof.c). This is intended for
    profiling 6 or more color devices, and using as
    the profile driving optimised separations.

*   Added xcolorants resource to allow specifying and defining
    device colorant combinations. This is needed as a foundation
    to profiling 6 or more color printing devices.
   
*   Tweaked targen to concentrate test patch points
    at regions of higher curvature. This should improve profiling
    efficiency slightly.

*   Fix bug in xlut.c where creating a gamut cleared
    any ink limit set on a rspl. This caused the ink limit
	to be ignored in any icclink that used gamut mapping.

*   Modified printtarg.c to try and get more reliable
	DTP41 operation. Switch to black and white patch
    spacers by default. It's difficult to know what the
	instrument really requires to reliably pick up
	the test spacers.

*   Fixed bug in gamut where it was still hanging on to
    vertex points that disapear below the log convex hull.
	This has no consequences.

*   Added option in icclink to allow specifying an explicit source
    gamut for the gamut mapping. This allows tailoring the gamut
	compression to be optimised for a particular image.

*	Added profile checking utility, that checks measured device points
	against an icc profile.

*	Fixed probem with linking when any of the profiles native PCS is XYX.
	The device linearisation curve should not be preserved if the
	native device profile PCS is XYZ.

*   Fixed bug in xmatrix.c & xmono.c when finding the gamuts of
	matrix and mono transforms when a Bwd transform is used.
	Showed up in icclink when the output profile was a matrix
	of monochrome transform.

*   Fixed bug in icclib when PCS overide is used with a
    Bwd transform. Similar problem to above for matrix & mono
	profiles, but at the icclib level.

*	Added function in icclink.c to allow the generation of
	a device linearisation curve for XYZ profiles. This was
	expected to improve the result when linking to XYZ profiles,
	but currently seems to make things worse. This feature is
	therefore off by default. :-( (This should be changed
    to work the same as the current xlut.c profile code!)

*   Added preliminary support in printtarg for the SpectroScan
    spectrodensitometer. Also added preliminary support for
    scanner recognisable test charts.

*   Added option to icclink to turn off the use of linearisation
    curves in the output link, since this sometimes seems to
    make the accuracy worse given profiles with odd device
	linearisation curves.

*   Added custom page size support to printtarg.

*   Modified icc library defines to use INR32 rather than INT32
    definition, to avoid clashes with system typdefs etc.

*   Added CIE94 delta E support to profchek utility, changed
    peak reading to be peak delta E rather than peak individual
	L, a or b, and made the same change in the check code
	in profout.c

*   Added utility to do reflective spot readings using appropriate
    instrument (printspot). DTP41 supported.

*   Fixed bug in profile.c that meant that the spectral mode
    was ignored unless an observer was specified (ie. it wasn't
    defaulting to 1978_2).

*	Modified targen.c so that when a previous profile is used
	to pre-condition test points, the neutral axis has a higher
	density of points, in line with the higher sensitivity the
	CIE94 delta E formula has in this region. This should improve
	the tolerance of the resulting profile in the important
	neutral gray area.

*   Fixed bug in printread.c that is triggered when more than
	26 strips are being read.

*	Modified targen.c so that the 4 dimentional auxiliary chanel
	weighting (ie. K chanel in CMYK) is 150% of the Lab spacing,
	rather than being 50% of it, when ICC profile pre-conditioning
	is being used. This seems to improve both the worst case, and
	average error of the resulting profile for at least some devices. 

*	Switched to (now working) xlut2.c code, for creating clut
	based profiles. This version creates both input and output
	1D luts by optimising the accuracy of the profile for a linear clut.
	The result seems to be more accurate profiles, since the underlying
	device characteristic is better modeled. It also seems to aleviate
	some of the issues when linking and preserving the device 1D luts
	in the linked profile.

*	Added verification function to icclink.c, to check the
	accuracy of a link profile.

*	Fixed numsup.c 2d array malloc/free to be more efficient
	by allocating the main array as a single block.

*	Fixed bugs in handling XYZ lut based profiles.

*	Fixed bug in setting white and black points for input
	profiles.

*	Added support for selecting algorithm type for all
	types of profiles - input, display and output.
	(XYZ lut doesn't seem to work properly yet though!)

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

*   Improved new xlut2.c to handle pathalogical input data
	from gridded charts. The order of the curves is now
	adjusted so that it is not greater than what can
	be supported by the data. Also changed shaper curve
	parameter action to be more progressive, and tied
	the parameters into the optimisation goal so that
	parameters that have no effect are minimised, resulting
	in less "ringing". Fixed bug in shaper curve transform
	that was clipping parameters, resulting in gross errors
	before the white point was exactly fixed on.
	
*   Added new features to profcheck: Sorting feature to
    indicate support for a particular device->pcs value,
    + VRML output of errors between profile and datapoints.

*	Modified scanin/scanrd to allow for Grey and CMYK .tiff
	files, as well as just outputing a CGATS data file,
	rather than only performing the data collection needed
    for and RGB scan calibration. This is useful for capturing
	the patch values from a test chart only available as a
	TIFF file. Removed automatic extention stuff. 

*   Added black wedge generation to targen, and extra checking
    to elminate redundant test patches.

*   Added EPS output support to printtarg.

*   Added a couple of options to cctiff to aid diagnostics.


Third snapshot changes:
----------------------

*	Changed targen to allow full spread test points to take account
	of the others sorts of test points.

*	Changed icclib to use the Bradford chromatic adaption for
	white point shifting in profile creation and absolute profiles
	lookup. This creates some minor incompatiblity with profiles
	produced with earlier versions, but is likely to be more
	compatible with other CMMs.

*	Added support in icclib for abstract file accesor type (icmFile), and included
	implementations for standard file and memory image.

*	Added support in icclib for abstract memory allocator, and included
	implementation for standard alloc/free.

*	25/2/2001	Changed targen to use ICC profile for perceptual even
	point generation. Includes support for Gray and RGB as well as CMYK
	perceptual support.

*   Film profiling using the Spectroscan-T care of Niel Okamoto.

*   Print charts suitable for the Xrite DTP41 are
    now supported, and print chart reading using the DTP41
    is now supported.

*   Added DTP92 support and Lut and matrix profile support for
	display profiles.

*	Added spectral reading support to the DTP41 readings.

*   Added support in profile for using spectral data with choice
    of observers and builtin or loadable illuminant spectra.

*   Modified the gammap code to precicely match the white and black
    points. Solves "background color" problems in linking RGB and CMYK etc.

*   Changed K generation curve parameters to be easier to control.
    Have two breakpoints and curve shape along the luminance axis.

*   Added more sophisticated auxiliary chanel locus finder in rspl/rev.c,
    to be able to detect profile anomolies (not made use of in current code).

*   Added underlying support for optimised separations into
    4 to 8 separations in rspl/opt.[ch] . This is intended to be
    used internally as an option for driving a CMYK device, and
    also explicitly to support 6 or more color devices. Not tested
    or made use of just yet.

*   Added development area for Java GUI development. The intention
    is to use Java as a sophisticated scripting front end, to
	make the command line commands more palatable.

Second snapshot changes:
----------------------

  Neil Okamoto has contributed support for generating
  RGB TIFF targets suitable for film recorder output,
  as well as Gretag Spectrolino support for reading them
  in again.

  The target patch generation now uses ICC profile to
  pre-condition the test points. This now works for
  RGB and Grey targets.

  Finished port to Linux.
  Cleaned up build automation somewhat.

  Added RGB output device profile generation support.
  Added RGB scanner device profile generation support.

  Added a couple of spectrometer conversion utilities for
  raw data files from other CMSs.

  Added gamut boundary mapping and visualization tools (VRML)

  Added CIECAM97s Color Appearance Model (CAM) colorspace support.

  Added experimental gamut mapping code.

  Enhanced linker to use CAM and gamut mapping.

  Numerous bug fixes and enhancement.

