rpms/argyllcms/devel V1.0.1_patches.txt, NONE, 1.1 argyllcms-1.0.1-19-color.fdi, NONE, 1.1 argyllcms-1.0.1-legal.patch, NONE, 1.1 argyllcms-1.0.1-printf.patch, NONE, 1.1 argyllcms-1.0.1-remove-libusb-fork-check.patch, NONE, 1.1 import.log, NONE, 1.1 .cvsignore, 1.2, 1.3 argyllcms.spec, 1.3, 1.4 sources, 1.2, 1.3 argyllcms-0.70-19-color.fdi, 1.1, NONE argyllcms-0.70-build.patch, 1.1, NONE argyllcms-0.70-legal.patch, 1.1, NONE argyllcms-0.70-printf.patch, 1.1, NONE argyllcms-0.70-scanin-doublefree-fix.patch, 1.1, NONE

Nicolas Mailhot (nim) fedora-extras-commits at redhat.com
Sun Jul 27 13:34:48 UTC 2008


Author: nim

Update of /cvs/extras/rpms/argyllcms/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28993/devel

Modified Files:
	.cvsignore argyllcms.spec sources 
Added Files:
	V1.0.1_patches.txt argyllcms-1.0.1-19-color.fdi 
	argyllcms-1.0.1-legal.patch argyllcms-1.0.1-printf.patch 
	argyllcms-1.0.1-remove-libusb-fork-check.patch import.log 
Removed Files:
	argyllcms-0.70-19-color.fdi argyllcms-0.70-build.patch 
	argyllcms-0.70-legal.patch argyllcms-0.70-printf.patch 
	argyllcms-0.70-scanin-doublefree-fix.patch 
Log Message:
1.0.1 « It builds! » package


--- NEW FILE V1.0.1_patches.txt ---
diff --strip-trailing-cr -c -r Argyll_V1.0.1/doc/printtarg.html Argyll_V1.0.2/doc/printtarg.html
*** Argyll_V1.0.1/doc/printtarg.html	Mon Jul 14 14:11:45 2008
--- Argyll_V1.0.2/doc/printtarg.html	Sun Jul 20 02:25:32 2008
***************
*** 95,101 ****
   href="#C">-C</a>             
  Don't use TIFF compression</span></small><br>
  <small><span style="font-family: monospace;"> <a href="#N">-N</a>             
! Use TIFF alpha N channels more than 4<br style="font-family: monospace;">
  </span><span style="font-family: monospace;"> </span><a
   style="font-family: monospace;" href="#R">-R rsnum</a><span
   style="font-family: monospace;">       
--- 95,103 ----
   href="#C">-C</a>             
  Don't use TIFF compression</span></small><br>
  <small><span style="font-family: monospace;"> <a href="#N">-N</a>             
! Use TIFF alpha N channels more than 4<br>
!  <a href="#Q">-Q nbits</a>       
! Quantize test values to fit in nbits<br style="font-family: monospace;">
  </span><span style="font-family: monospace;"> </span><a
   style="font-family: monospace;" href="#R">-R rsnum</a><span
   style="font-family: monospace;">       
***************
*** 320,325 ****
--- 322,343 ----
  flag causes all the channels greater than 4 to be labelled as "Alpha"
  channels, which may be more palatable.<br>
  <br>
+ <a name="Q"></a><span style="font-weight: bold;">-Q:</span> Normally
+ the target device values are floating point numbers that may get
+ rounded and quantized in the process of printing them or reproducing
+ them on the printing or display device. If some of this quantization
+ can be accounted for, it may improve the accuracy of the resulting
+ profile, and the <span style="font-weight: bold;">Q</span> parameter
+ allows this quantization to be specified. The parameter is the number
+ of binary digits (bits) that the device values should be quantized to.
+ In many systems the right value would be 8 bits. Note that if 8 bit TIFF<span
+  style="font-weight: bold;"></span> output is selected (<span
+  style="font-weight: bold;">-t</span>) that the values will by default
+ be quanized to 8 bits, and that if 16 bit TIFF<span
+  style="font-weight: bold;"></span> output is selected (<span
+  style="font-weight: bold;">-T</span>) that the values will by default
+ be quanized to 16 bits.<br>
+ <br>
  <a name="R"></a> The <b>-R</b> parameter allows setting the random
  layout seed. Normally the seed is chosen at random, but sometimes it is
  useful to be able to generate a chart with the same layout, so a
diff --strip-trailing-cr -c -r Argyll_V1.0.1/h/config.h Argyll_V1.0.2/h/config.h
*** Argyll_V1.0.1/h/config.h	Mon Jul 14 14:11:41 2008
--- Argyll_V1.0.2/h/config.h	Sun Jul 20 02:25:28 2008
***************
*** 10,17 ****
  /* minor number = 8 bits */
  /* major number = 8 bits */
  
! #define ARGYLL_VERSION 0x01001
! #define ARGYLL_VERSION_STR "1.0.1"
  
  /* Maximum file path length */
  #define MAXNAMEL 512
--- 10,17 ----
  /* minor number = 8 bits */
  /* major number = 8 bits */
  
! #define ARGYLL_VERSION 0x01002
! #define ARGYLL_VERSION_STR "1.0.2"
  
  /* Maximum file path length */
  #define MAXNAMEL 512
diff --strip-trailing-cr -c -r Argyll_V1.0.1/imdi/Jamfile Argyll_V1.0.2/imdi/Jamfile
*** Argyll_V1.0.1/imdi/Jamfile	Mon Jul 14 14:11:32 2008
--- Argyll_V1.0.2/imdi/Jamfile	Sun Jul 20 02:25:18 2008
***************
*** 49,55 ****
  # TIFF file monochrome conversion utlity
  #Main greytiff : greytiff.c ;
  Main greytiff : greytiff.c : : : ../spectro ../xicc ../gamut ../rspl ../cgats $(TIFFINC)
!               : : ../xicc/libxicc ../gamut/libgamut ../rspl/librspl ../cgats/libcgats $(TIFFLIB) ;
  
  # ssort generation code
  #Main ssort : ssort.c ;
--- 49,56 ----
  # TIFF file monochrome conversion utlity
  #Main greytiff : greytiff.c ;
  Main greytiff : greytiff.c : : : ../spectro ../xicc ../gamut ../rspl ../cgats $(TIFFINC)
!               : : ../xicc/libxicc ../gamut/libgamut ../rspl/librspl ../cgats/libcgats
!                   ../plot/libplot $(TIFFLIB) ;
  
  # ssort generation code
  #Main ssort : ssort.c ;
diff --strip-trailing-cr -c -r Argyll_V1.0.1/log.txt Argyll_V1.0.2/log.txt
*** Argyll_V1.0.1/log.txt	Mon Jul 14 14:11:03 2008
--- Argyll_V1.0.2/log.txt	Sun Jul 20 02:24:46 2008
***************
*** 3,8 ****
--- 3,40 ----
  =====================
  
  
+ Version 1.0.2 bug fix release (open) 
+ -----------------------------
+ 
+ *	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) 
  -----------------------------
  
diff --strip-trailing-cr -c -r Argyll_V1.0.1/makepackagebin.sh Argyll_V1.0.2/makepackagebin.sh
*** Argyll_V1.0.1/makepackagebin.sh	Mon Jul 14 14:11:03 2008
--- Argyll_V1.0.2/makepackagebin.sh	Sun Jul 20 02:24:46 2008
***************
*** 25,30 ****
--- 25,32 ----
  # Set the environment string VERSION from the #define, ie 1.0.0
  VERSION=`grep ARGYLL_VERSION_STR h/config.h | sed 's/#define ARGYLL_VERSION_STR //' | sed 's/"//g'`
  
+ echo "About to make Argyll binary distribution $PACKAGE"
+ 
  TOPDIR=Argyll_V$VERSION
  
  if [ X$OS != "XWindows_NT" ] ; then
diff --strip-trailing-cr -c -r Argyll_V1.0.1/profile/Jamfile Argyll_V1.0.2/profile/Jamfile
*** Argyll_V1.0.1/profile/Jamfile	Mon Jul 14 14:11:35 2008
--- Argyll_V1.0.2/profile/Jamfile	Sun Jul 20 02:25:21 2008
***************
*** 26,32 ****
  Library libprof : profin.c profout.c ;
  
  
! LINKLIBS = ../rspl/librspl ../icc/libicc ../cgats/libcgats ../numlib/libnum ;
  
  # Simple profile generator
  Main simpprof : simpprof.c ;
--- 26,32 ----
  Library libprof : profin.c profout.c ;
  
  
! LINKLIBS = ../rspl/librspl ../icc/libicc ../cgats/libcgats ../numlib/libnum ../plot/libplot ;
  
  # Simple profile generator
  Main simpprof : simpprof.c ;
diff --strip-trailing-cr -c -r Argyll_V1.0.1/render/render.c Argyll_V1.0.2/render/render.c
*** Argyll_V1.0.1/render/render.c	Mon Jul 14 14:11:37 2008
--- Argyll_V1.0.2/render/render.c	Sun Jul 20 02:25:23 2008
***************
*** 162,172 ****
--- 162,176 ----
  	int noix;					/* Number in x list */
  	color2d *pixv0, *_pixv0;	/* Storage for pixel values around current */
  	color2d *pixv1, *_pixv1;
+ 	sobol *so;					/* Random sampler for anti-aliasing */
  	int i, j;
  
  	double rx0, rx1, ry0, ry1;	/* Box being processed, newest sample is rx1, ry1 */
  	int x, y;				/* Pixel x & y index */
  
+ 	if ((so = new_sobol(2)) == NULL)
+ 		return 1;
+ 
  	switch (s->csp) {
  		case w_2d:			/* Video style grey */
  			samplesperpixel = 1;
***************
*** 373,382 ****
  				 || pixv0[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv0[x-1], cc)
  				 || pixv1[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv1[x-1], cc)) {
  					double nn = 0;
- 					sobol *so;
  
! 					if ((so = new_sobol(2)) == NULL)
! 						return 1;
  
  					for (j = 0; j < s->ncc; j++)
  						cc[j] = 0.0;
--- 377,384 ----
  				 || pixv0[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv0[x-1], cc)
  				 || pixv1[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv1[x-1], cc)) {
  					double nn = 0;
  
! 					so->reset(so);
  
  					for (j = 0; j < s->ncc; j++)
  						cc[j] = 0.0;
***************
*** 418,424 ****
  					cc[1] = 0.0;
  					cc[2] = 1.0;
  #endif
- 
  				} else {
  
  					/* Compute output value as mean of surrounding samples */
--- 420,425 ----
***************
*** 451,457 ****
  							p[j] = (int)(cc[j] + 0.5);
  					} else {
  						for (j = 0; j < s->ncc; j++)
! 							p[j] = (int)(65525.0 * cc[j] + 0.5);
  					}
  				}
  			}
--- 452,458 ----
  							p[j] = (int)(cc[j] + 0.5);
  					} else {
  						for (j = 0; j < s->ncc; j++)
! 							p[j] = (int)(65535.0 * cc[j] + 0.5);
  					}
  				}
  			}
***************
*** 479,484 ****
--- 480,487 ----
  	_TIFFfree(outbuf);
  	TIFFClose(wh);		/* Close Output file */
  
+ 	so->del(so);
+ 
  	return 0;
  }
  
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/Jamfile Argyll_V1.0.2/spectro/Jamfile
*** Argyll_V1.0.1/spectro/Jamfile	Mon Jul 14 14:11:29 2008
--- Argyll_V1.0.2/spectro/Jamfile	Sun Jul 20 02:25:15 2008
***************
*** 1,7 ****
  
  
! PREF_CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
! #PREF_CCFLAGS    += $(CCDEBUGFLAG) ;		# Debugging flags
  PREF_LINKFLAGS	+= $(LINKDEBUGFLAG) ;
  
  # Setup the right hardware access libraries
--- 1,7 ----
  
  
! #PREF_CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
! PREF_CCFLAGS    += $(CCDEBUGFLAG) ;		# Debugging flags
  PREF_LINKFLAGS	+= $(LINKDEBUGFLAG) ;
  
  # Setup the right hardware access libraries
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispcal.c Argyll_V1.0.2/spectro/dispcal.c
*** Argyll_V1.0.1/spectro/dispcal.c	Mon Jul 14 14:11:29 2008
--- Argyll_V1.0.2/spectro/dispcal.c	Sun Jul 20 02:25:15 2008
***************
*** 766,771 ****
--- 766,774 ----
  #if defined(__APPLE__) && defined(__POWERPC__)
  
  /* Workaround for a ppc gcc 3.3 optimiser bug... */
+ /* It seems to cause a segmentation fault instead of */
+ /* converting an integer loop index into a float, */
+ /* when there are sufficient variables in play. */
  static int gcc_bug_fix(int i) {
  	static int nn;
  	nn += i;
***************
*** 1737,1743 ****
  		double vct, vct_de;
  		double vdt, vdt_de;
  		double cgamma, w[3], wp[2];
! 		int sigbits;	/* Number of significant bits in VideoLUT/display/instrument */
  
  		if ((rv = dr->read(dr, tcols, 3, 1, 3, 1, 0)) != 0) {
  			dr->del(dr);
--- 1740,1746 ----
  		double vct, vct_de;
  		double vdt, vdt_de;
  		double cgamma, w[3], wp[2];
! 		int sigbits = 0;	/* Number of significant bits in VideoLUT/display/instrument */
  
  		if ((rv = dr->read(dr, tcols, 3, 1, 3, 1, 0)) != 0) {
  			dr->del(dr);
***************
*** 1785,1790 ****
--- 1788,1796 ----
  				/* Do the test */
  				for (n = 0; n < res_samps; n++) {
  					double v;
+ #if defined(__APPLE__) && defined(__POWERPC__)
+ 					gcc_bug_fix(sigbits);
+ #endif
  					v = (5 << (sigbits-3))/((1 << sigbits) - 1.0);
  					if ((n % 3) == 2)
  						v += 1.0/((1 << sigbits) - 1.0);
***************
*** 1900,1909 ****
  		printf("White        Visual Color Temperature = %.0fK, DE to locus = %4.1f\n",vct,vct_de);
  		printf("White     Visual Daylight Temperature = %.0fK, DE to locus = %4.1f\n",vdt,vdt_de);
  #ifdef	MEAS_RES
! 		if (sigbits == 0) {
! 			warning("Unable to determine LUT entry bit depth - problems ?");
! 		} else if (verb) {
! 			printf("Effective LUT entry depth seems to be %d bits\n",sigbits);
  		}
  #endif	/* MEAS_RES */
  		dr->del(dr);
--- 1906,1917 ----
  		printf("White        Visual Color Temperature = %.0fK, DE to locus = %4.1f\n",vct,vct_de);
  		printf("White     Visual Daylight Temperature = %.0fK, DE to locus = %4.1f\n",vdt,vdt_de);
  #ifdef	MEAS_RES
! 		if (doreport == 1) {
! 			if (sigbits == 0) {
! 				warning("Unable to determine LUT entry bit depth - problems ?");
! 			} else if (verb) {
! 				printf("Effective LUT entry depth seems to be %d bits\n",sigbits);
! 			}
  		}
  #endif	/* MEAS_RES */
  		dr->del(dr);
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispwin.c Argyll_V1.0.2/spectro/dispwin.c
*** Argyll_V1.0.1/spectro/dispwin.c	Mon Jul 14 14:11:31 2008
--- Argyll_V1.0.2/spectro/dispwin.c	Sun Jul 20 02:25:17 2008
***************
*** 108,113 ****
--- 108,126 ----
  	
  	debugrr2((errout, "MonitorEnumProc() called with hMonitor = 0x%x\n",hMonitor));
  
+ 	/* Get some more information */
+ 	pmi.cbSize = sizeof(MONITORINFOEX);
+ 	if (GetMonitorInfo(hMonitor, (MONITORINFO *)&pmi) == 0) {
+ 		debugrr("get_displays failed GetMonitorInfo - ignoring display\n");
+ 		return TRUE;
+ 	}
+ 
+ 	/* See if it seems to be a pseudo-display */
+ 	if (strncmp(pmi.szDevice, "\\\\.\\DISPLAYV", 12) == 0) {
+ 		debugrr("Seems to be invisible pseudo-display - ignoring it\n");
+ 		return TRUE;
+ 	}
+ 
  	/* Add the display to the list */
  	if (disps == NULL) {
  		if ((disps = (disppath **)calloc(sizeof(disppath *), 1 + 1)) == NULL) {
***************
*** 131,142 ****
  		return FALSE;
  	}
  
- 	pmi.cbSize = sizeof(MONITORINFOEX);
- 	if (GetMonitorInfo(hMonitor, (MONITORINFO *)&pmi) == 0) {
- 		debugrr("get_displays failed GetMonitorInfo\n");
- 		return FALSE;
- 	}
- 
  	if ((disps[ndisps]->name = strdup(pmi.szDevice)) == NULL) {
  		debugrr("malloc failed\n");
  		return FALSE;
--- 144,149 ----
***************
*** 240,246 ****
  
  	/* Now locate detailed information about displays */
  	for (i = 0; ; i++) {
! 		if (disps[i] == NULL)
  			break;
  
  		dd.cb = sizeof(dd);
--- 247,253 ----
  
  	/* Now locate detailed information about displays */
  	for (i = 0; ; i++) {
! 		if (disps == NULL || disps[i] == NULL)
  			break;
  
  		dd.cb = sizeof(dd);
***************
*** 250,255 ****
--- 257,265 ----
  		for (j = 0; ;j++) {
  			if ((*pEnumDisplayDevices)(disps[i]->name, j, &dd, 0) == 0) {
  				debugrr2((errout,"EnumDisplayDevices failed on '%s' Mon = %d\n",disps[i]->name,j));
+ 				if (j == 0) {
+ 					strcpy(disps[i]->monid, "");		/* We won't be able to set a profile */
+ 				}
  				break;
  			}
  			if (callback_ddebug) {
***************
*** 260,274 ****
  				fprintf(errout,"Mon %d, key '%s'\n",j,dd.DeviceKey);
  			}
  			if (j == 0) {
- 				strcpy(disps[i]->monname, dd.DeviceName);
  				strcpy(disps[i]->monid, dd.DeviceID);
  			}
  		}
- 		if (j == 0) {		/* Hmm. Ignore this display */
- 			del_disppath(disps, i);
- 			i--;
- 			continue;
- 		}
  
  		sprintf(buf,"%s, at %d, %d, width %d, height %d%s",disps[i]->name+4,
  	        disps[i]->sx, disps[i]->sy, disps[i]->sw, disps[i]->sh,
--- 270,278 ----
***************
*** 626,632 ****
  				        disps[ndisps]->sx, disps[ndisps]->sy, disps[ndisps]->sw, disps[ndisps]->sh);
  
  					/* See if it is a clone */
! 					for (k = 0; 0 < ndisps; k++) {
  						if (disps[k]->crtc == disps[ndisps]->crtc) {
  							sprintf(desc1, "[ Clone of %d ]",k+1);
  							strcat(desc2, desc1);
--- 630,636 ----
  				        disps[ndisps]->sx, disps[ndisps]->sy, disps[ndisps]->sw, disps[ndisps]->sh);
  
  					/* See if it is a clone */
! 					for (k = 0; k < ndisps; k++) {
  						if (disps[k]->crtc == disps[ndisps]->crtc) {
  							sprintf(desc1, "[ Clone of %d ]",k+1);
  							strcat(desc2, desc1);
***************
*** 2832,2838 ****
  			dispwin_del(p);
  			return NULL;
  		}
- 		strcpy(p->monname, disp->monname);
  		strcpy(p->monid, disp->monid);
  
  		disp_hsz = GetDeviceCaps(p->hdc, HORZSIZE);	/* mm */
--- 2836,2841 ----
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispwin.h Argyll_V1.0.2/spectro/dispwin.h
*** Argyll_V1.0.1/spectro/dispwin.h	Mon Jul 14 14:11:31 2008
--- Argyll_V1.0.2/spectro/dispwin.h	Sun Jul 20 02:25:17 2008
***************
*** 78,84 ****
  	int sx,sy;			/* Displays offset in pixels */
  	int sw,sh;			/* Displays width and height in pixels*/
  #ifdef NT
- 	char monname[32];	/* Monitor Name */
  	char monid[128];	/* Monitor ID */
  	int prim;			/* NZ if primary display monitor */
  #endif /* NT */
--- 78,83 ----
***************
*** 163,169 ****
  	char *callout;		/* if not NULL - set color Shell callout routine */
  
  #ifdef NT
- 	char monname[32];	/* Monitor Name (ie. '\\.\DISPLAY1\Monitor0') */
  	char monid[128];	/* Monitor ID (ie. 'Monitor\MEA1773\{4D36E96E-E325-11CE-BFC1-08002BE10318}\0015'*/
  	HDC hdc;			/* Handle to display */
  	char *AppName;
--- 162,167 ----
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/huey.c Argyll_V1.0.2/spectro/huey.c
*** Argyll_V1.0.1/spectro/huey.c	Mon Jul 14 14:11:30 2008
--- Argyll_V1.0.2/spectro/huey.c	Sun Jul 20 02:25:16 2008
***************
*** 62,68 ****
  static inst_code huey_check_unlock(huey *p);
  
  #define CALFACTOR 3.428         /* Emissive magic calibration factor */
! #define AMB_SCALE_FACTOR 7.806e-3	/* Ambient mode scale factor */ 
  									/* This is only approximate, and were derived */
  									/* by matching readings from the i1pro. */
  
--- 62,69 ----
  static inst_code huey_check_unlock(huey *p);
  
  #define CALFACTOR 3.428         /* Emissive magic calibration factor */
! //#define AMB_SCALE_FACTOR 7.806e-3	/* Ambient mode scale factor */ 
! #define AMB_SCALE_FACTOR 5.772e-3	/* Ambient mode scale factor */ 
  									/* This is only approximate, and were derived */
  									/* by matching readings from the i1pro. */
  
diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/i1pro_imp.c Argyll_V1.0.2/spectro/i1pro_imp.c
*** Argyll_V1.0.1/spectro/i1pro_imp.c	Mon Jul 14 14:11:30 2008
--- Argyll_V1.0.2/spectro/i1pro_imp.c	Sun Jul 20 02:25:16 2008
***************
*** 232,238 ****
  	if ((m = (i1proimp *)calloc(1, sizeof(i1proimp))) == NULL) {
  		DBG((dbgo,"add_i1proimp malloc %d bytes failed (1)\n",sizeof(i1proimp)))
  		if (p->verb) printf("Malloc %d bytes failed (1)\n",sizeof(i1proimp));
! 		I1PRO_INT_MALLOC;
  	}
  	m->p = p;
  
--- 232,238 ----
  	if ((m = (i1proimp *)calloc(1, sizeof(i1proimp))) == NULL) {
  		DBG((dbgo,"add_i1proimp malloc %d bytes failed (1)\n",sizeof(i1proimp)))
  		if (p->verb) printf("Malloc %d bytes failed (1)\n",sizeof(i1proimp));
! 		return I1PRO_INT_MALLOC;
  	}
  	m->p = p;
  
***************
*** 553,559 ****
  				case i1p_refl_spot:
  					s->reflective = 1;
  					s->adaptive = 1;
! 					s->inttime = 0.02366;		/* Should get this from the log */ 
  
  					s->dadaptime = 0.10;
  					s->wadaptime = 0.10;
--- 553,559 ----
  				case i1p_refl_spot:
  					s->reflective = 1;
  					s->adaptive = 1;
! 					s->inttime = 0.02366;		/* Should get this from the log ?? */ 
  
  					s->dadaptime = 0.10;
  					s->wadaptime = 0.10;
***************
*** 962,975 ****
  	 || (s->emiss && !s->adaptive && *calc == inst_calc_man_em_dark)
  	 || (s->trans && !s->adaptive && *calc == inst_calc_man_trans_dark)) {
  
- 		DBG((dbgo,"Doing initial black calibration with current int_time %f, gainmode %d\n", s->inttime, s->gainmode))
- 
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
  		if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, s->gainmode))
  	                                                                         != I1PRO_OK)
  			return ev;
  		if (s->emiss && !s->scan && !s->adaptive) {
  			nummeas = i1pro_comp_nummeas(p, s->dcaltime2, s->dark_int_time2);
  			if ((ev = i1pro_dark_measure(p, s->dark_data2, nummeas, &s->dark_int_time2,
  			                                                   s->gainmode)) != I1PRO_OK)
  				return ev;
--- 962,976 ----
  	 || (s->emiss && !s->adaptive && *calc == inst_calc_man_em_dark)
  	 || (s->trans && !s->adaptive && *calc == inst_calc_man_trans_dark)) {
  
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
+ 
+ 		DBG((dbgo,"Doing initial black calibration with dcaltime %f, int_time %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, s->gainmode))
  	                                                                         != I1PRO_OK)
  			return ev;
  		if (s->emiss && !s->scan && !s->adaptive) {
  			nummeas = i1pro_comp_nummeas(p, s->dcaltime2, s->dark_int_time2);
+ 			DBG((dbgo,"Doing 2nd initial black calibration with dcaltime2 %f, dark_int_time2 %f, nummeas %d, gainmode %d\n", s->dcaltime2, s->dark_int_time2, nummeas, s->gainmode))
  			if ((ev = i1pro_dark_measure(p, s->dark_data2, nummeas, &s->dark_int_time2,
  			                                                   s->gainmode)) != I1PRO_OK)
  				return ev;
***************
*** 990,1016 ****
  		/* The black reference is probably temeprature dependent, but */
  		/* there's not much we can do about this. */
  	
- 		DBG((dbgo,"Doing adaptive interpolated black calibration\n"))
  
  		s->idark_int_time[0] = 0.01;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[1] = 1.0;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[1]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[1], nummeas, &s->idark_int_time[1], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[2] = 0.01;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[3] = 1.0;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[3]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[3], nummeas, &s->idark_int_time[3], 1))
  		                                                                          != I1PRO_OK)
--- 991,1020 ----
  		/* The black reference is probably temeprature dependent, but */
  		/* there's not much we can do about this. */
  	
  
  		s->idark_int_time[0] = 0.01;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]);
+ 		DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[0] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[0], nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[1] = 1.0;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[1]);
+ 		DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[1] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[1], nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->idark_data[1], nummeas, &s->idark_int_time[1], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[2] = 0.01;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]);
+ 		DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[2] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[2], nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[3] = 1.0;
+ 		DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[3] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[3], nummeas, s->gainmode))
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[3]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[3], nummeas, &s->idark_int_time[3], 1))
  		                                                                          != I1PRO_OK)
***************
*** 1062,1068 ****
  
  	}
  
! 	/* Deal with an emsisive/transmisive adaptive black reference */
  	/* when in scan mode. */
  	if ((s->emiss && s->adaptive && s->scan && *calc == inst_calc_man_em_dark)
  	 || (s->trans && s->adaptive && s->scan && *calc == inst_calc_man_trans_dark)) {
--- 1066,1072 ----
  
  	}
  
! 	/* Deal with an emissive/transmisive adaptive black reference */
  	/* when in scan mode. */
  	if ((s->emiss && s->adaptive && s->scan && *calc == inst_calc_man_em_dark)
  	 || (s->trans && s->adaptive && s->scan && *calc == inst_calc_man_trans_dark)) {
***************
*** 1072,1087 ****
  		/* but we don't know what gain mode will be used, so measure both, */
  		/* and choose the appropriate one on the fly. */
  	
- 		DBG((dbgo,"Doing adaptive scan black calibration\n"))
  
  		s->idark_int_time[0] = s->inttime;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[2] = s->inttime;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]);
  		if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1))
  		                                                                          != I1PRO_OK)
  			return ev;
--- 1076,1092 ----
  		/* but we don't know what gain mode will be used, so measure both, */
  		/* and choose the appropriate one on the fly. */
  	
  
  		s->idark_int_time[0] = s->inttime;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]);
+ 		DBG((dbgo,"Doing adaptive scan black calibration, dcaltime %f, idark_int_time[0] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[0], nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0))
  		                                                                          != I1PRO_OK)
  			return ev;
  	
  		s->idark_int_time[2] = s->inttime;
  		nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]);
+ 		DBG((dbgo,"Doing adaptive scan black calibration, dcaltime %f, idark_int_time[2] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[2], nummeas, s->gainmode))
  		if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1))
  		                                                                          != I1PRO_OK)
  			return ev;
***************
*** 1146,1154 ****
  						s->cal_valid = 0;
  
  					if (*calc == inst_calc_man_ref_white) {
- 						DBG((dbgo,"Doing another black calibration with min inttime %f, gainmode %d\n",
- 						                                                  s->inttime,s->gainmode))
  						nummeas = i1pro_comp_nummeas(p, s->dadaptime, s->inttime);
  						if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  						                                              s->gainmode)) != I1PRO_OK)
  							return ev;
--- 1151,1158 ----
  						s->cal_valid = 0;
  
  					if (*calc == inst_calc_man_ref_white) {
  						nummeas = i1pro_comp_nummeas(p, s->dadaptime, s->inttime);
+ 						DBG((dbgo,"Doing another black calibration with dadaptime %f, min inttime %f, nummeas %d, gainmode %d\n", s->dadaptime, s->inttime, nummeas, s->gainmode))
  						if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  						                                              s->gainmode)) != I1PRO_OK)
  							return ev;
***************
*** 1186,1194 ****
  				                                                      s->inttime,s->gainmode))
  			
  				if (*calc == inst_calc_man_ref_white) {
- 					DBG((dbgo,"Doing final black calibration with opt inttime %f, gainmode %d\n",
- 					                                                s->inttime,s->gainmode))
  					nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
  					if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  					                                              s->gainmode)) != I1PRO_OK)
  						return ev;
--- 1190,1197 ----
  				                                                      s->inttime,s->gainmode))
  			
  				if (*calc == inst_calc_man_ref_white) {
  					nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
+ 					DBG((dbgo,"Doing final black calibration with dcaltime %f, opt inttime %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode))
  					if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  					                                              s->gainmode)) != I1PRO_OK)
  						return ev;
***************
*** 1254,1262 ****
  			}
  
  			if (*calc == inst_calc_man_ref_white) {
- 				DBG((dbgo,"Doing final black calibration with opt inttime %f, gainmode %d\n",
- 				                                                s->inttime,s->gainmode))
  				nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
  				if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  				                                              s->gainmode)) != I1PRO_OK)
  					return ev;
--- 1257,1264 ----
  			}
  
  			if (*calc == inst_calc_man_ref_white) {
  				nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime);
+ 				DBG((dbgo,"Doing final black calibration with dcaltime %f, opt inttime %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode))
  				if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime,
  				                                              s->gainmode)) != I1PRO_OK)
  					return ev;
***************
*** 1616,1622 ****
  
  		DISDPLOT
  
! 		DBG((dbgo,"Doing on the fly black calibration with nummeas %d int_time %f, gainmode %d\n",
  		                                                   nummeas, s->inttime, s->gainmode))
  
  		if ((ev = i1pro_dark_measure_1(p, nummeas, &s->inttime, s->gainmode, buf, bsize))
--- 1618,1624 ----
  
  		DISDPLOT
  
! 		DBG((dbgo,"Doing on the fly black calibration_1 with nummeas %d int_time %f, gainmode %d\n",
  		                                                   nummeas, s->inttime, s->gainmode))
  
  		if ((ev = i1pro_dark_measure_1(p, nummeas, &s->inttime, s->gainmode, buf, bsize))
***************
*** 1658,1663 ****
--- 1660,1666 ----
  
  		/* Complete black reference measurement */
  		if (s->reflective) {
+ 			DBG((dbgo,"Doing black calibration_2 with nummeas %d, inttime %f, gainmode %d\n", nummeas, s->inttime,s->gainmode))
  			if ((ev = i1pro_dark_measure_2(p, s->dark_data, nummeas, s->inttime, s->gainmode,
  			                                                      buf, bsize)) != I1PRO_OK) {
  				free_dmatrix(specrd, 0, nvals-1, 0, m->nwav-1);
***************
*** 1743,1748 ****
--- 1746,1753 ----
  	i1key offst = 0;							/* Offset to copy to use */
  	i1pro_code ev = I1PRO_OK;
  
+ 	DBG((dbgo,"Doing Restoring reflective spot calibration information from the EEProm\n"))
+ 
  	chsum1 = m->data->checksum(m->data, 0);
  	if ((chsum2 = m->data->get_int(m->data, key_checksum, 0)) == NULL || chsum1 != *chsum2) {
  		offst = key_2logoff;
***************
*** 1770,1775 ****
--- 1775,1782 ----
  		return I1PRO_OK;
  	}
  	s->inttime = dp[0];
+ 	if (s->inttime < m->min_int_time)	/* Hmm. EEprom is occasionaly screwed up */
+ 		s->inttime = m->min_int_time;
  
  	/* Get the dark data */
  	if ((ip = m->data->get_ints(m->data, &count, key_darkreading + offst)) == NULL
***************
*** 1785,1790 ****
--- 1792,1798 ----
  	}
  
  	/* Convert to calibration data */
+ 	DBG((dbgo,"Doing black calibration_2 with nummeas %d, inttime %f, gainmode %d\n", 1, s->inttime,s->gainmode))
  	if ((ev = i1pro_dark_measure_2(p, s->dark_data, 1, s->inttime, s->gainmode,
  		                                                 buf, 256)) != I1PRO_OK) {
  		if (p->verb) printf("Failed to convert EEProm dark data to calibration\n");
***************
*** 2074,2079 ****
--- 2082,2088 ----
  	FILE *fp;
  	i1pnonv x;
  	int ss;
+ 	int argyllversion = ARGYLL_VERSION;
  
  	strcpy(nmode, "w");
  #if defined(O_BINARY) || defined(_O_BINARY)
***************
*** 2101,2106 ****
--- 2110,2116 ----
  	ss = sizeof(i1pro_state) + sizeof(i1proimp);
  
  	/* Some file identification */
+ 	write_ints(&x, fp, &argyllversion, 1);
  	write_ints(&x, fp, &ss, 1);
  	write_ints(&x, fp, &m->serno, 1);
  	write_ints(&x, fp, &m->nraw, 1);
***************
*** 2174,2179 ****
--- 2184,2190 ----
  	char *path;
  	FILE *fp;
  	i1pnonv x;
+ 	int argyllversion;
  	int ss, serno, nraw, nwav1, nwav2, chsum1, chsum2;
  
  	strcpy(nmode, "r");
***************
*** 2199,2210 ****
--- 2210,2223 ----
  	x.chsum = 0;
  
  	/* Check the file identification */
+ 	read_ints(&x, fp, &argyllversion, 1);
  	read_ints(&x, fp, &ss, 1);
  	read_ints(&x, fp, &serno, 1);
  	read_ints(&x, fp, &nraw, 1);
  	read_ints(&x, fp, &nwav1, 1);
  	read_ints(&x, fp, &nwav2, 1);
  	if (x.ef != 0
+ 	 || argyllversion != ARGYLL_VERSION
  	 || ss != (sizeof(i1pro_state) + sizeof(i1proimp))
  	 || serno != m->serno
  	 || nraw != m->nraw
***************
*** 2294,2299 ****
--- 2307,2313 ----
  	rewind(fp);
  
  	/* Read the identification */
+ 	read_ints(&x, fp, &argyllversion, 1);
  	read_ints(&x, fp, &ss, 1);
  	read_ints(&x, fp, &m->serno, 1);
  	read_ints(&x, fp, &m->nraw, 1);
diff --strip-trailing-cr -c -r Argyll_V1.0.1/target/printtarg.c Argyll_V1.0.2/target/printtarg.c
*** Argyll_V1.0.1/target/printtarg.c	Mon Jul 14 14:11:33 2008
--- Argyll_V1.0.2/target/printtarg.c	Sun Jul 20 02:25:19 2008
***************
*** 2497,2502 ****
--- 2497,2503 ----
  	fprintf(stderr," -T [res]        Output 16 bit TIFF raster file, optional res DPI (default 100)\n");
  	fprintf(stderr," -C              Don't use TIFF compression\n");
  	fprintf(stderr," -N              Use TIFF alpha N channels more than 4\n");
+ 	fprintf(stderr," -Q nbits        Quantize test values to fit in nbits\n");
  	fprintf(stderr," -R rsnum        Use given random start number\n");
  	fprintf(stderr," -x pattern      Use given strip indexing pattern (Default = \"%s\")\n",DEF_SIXPAT);
  	fprintf(stderr," -y pattern      Use given patch indexing pattern (Default = \"%s\")\n",DEF_PIXPAT);
***************
*** 2521,2526 ****
--- 2522,2528 ----
  	double pscale = 1.0;	/* Patch size scale */
  	double sscale = 1.0;	/* Spacer size scale */
  	int rand = 1;
+ 	int qbits = 0;			/* Quantization bits */
  	int oft = 0;			/* Ouput File type, 0 = PS, 1 = EPS , 2 = TIFF */
  	depth2d tiffdpth = bpc8_2d;	/* TIFF pixel depth */
  	double tiffres = 100.0;	/* TIFF resolution in DPI */
***************
*** 2662,2671 ****
  			/* Specify random seed */
  			else if (argv[fa][1] == 'R') {
  				fa = nfa;
! 				if (na == NULL) usage("Expected argument to -t");
  				rstart = atoi(na);
  				if (rstart < 0)
! 					usage("Argument to -t must be positive");
  			}
  
  			/* Enable DeviceN color fallback */
--- 2664,2673 ----
  			/* Specify random seed */
  			else if (argv[fa][1] == 'R') {
  				fa = nfa;
! 				if (na == NULL) usage("Expected argument to -R");
  				rstart = atoi(na);
  				if (rstart < 0)
! 					usage("Argument to -R must be positive");
  			}
  
  			/* Enable DeviceN color fallback */
***************
*** 2752,2757 ****
--- 2754,2768 ----
  				tiffcomp = 0;
  			}
  
+ 			/* Specify quantization bits */
+ 			else if (argv[fa][1] == 'Q') {
+ 				fa = nfa;
+ 				if (na == NULL) usage("Expected argument to -Q");
+ 				qbits = atoi(na);
+ 				if (qbits < 1 || qbits > 32)
+ 					usage("Argument to -Q must be between 1 and 32");
+ 			}
+ 
  			/* Specify strip index pattern */
  			else if (argv[fa][1] == 'x' || argv[fa][1] == 'X') {
  				fa = nfa;
***************
*** 2829,2834 ****
--- 2840,2853 ----
  	strcat(inname,".ti1");
  	strcat(outname,".ti2");
  
+ 	/* Set default qantization for known output */
+ 	if (qbits == 0 && oft == 2) { 
+ 		if (tiffdpth == bpc16_2d)
+ 			qbits = 16;
+ 		else if (tiffdpth == bpc8_2d)
+ 			qbits = 8;
+ 	}
+ 
  	if (hex && itype != instSpectroScan) {
  		if (verb)
  			printf("Can only select hexagonal patches for SpectrScan - ignored!\n");
***************
*** 2923,2928 ****
--- 2942,2948 ----
  		int xyzix[3];			/* XYZ chanel indexes */
  		char *ident;
  		char *xyzfname[3] = { "XYZ_X", "XYZ_Y", "XYZ_Z" };
+ 		double qscale = (1 << qbits) - 1.0;
  
  		if ((ii = icg->find_kword(icg, 0, "TOTAL_INK_LIMIT")) >= 0)
  			ocg->add_kword(ocg, 0, "TOTAL_INK_LIMIT",icg->t[0].kdata[ii], NULL);
***************
*** 2959,2965 ****
  
  		ocg->add_kword(ocg, 0, "COLOR_REP", ident, NULL);
  
! 		/* Read all the test patches in */
  		for (i = 0; i < npat; i++) {
  			cols[i].i = i;
  			cols[i].t = T_N | T_XYZ;
--- 2979,2985 ----
  
  		ocg->add_kword(ocg, 0, "COLOR_REP", ident, NULL);
  
! 		/* Read all the test patches in, and quantize them */
  		for (i = 0; i < npat; i++) {
  			cols[i].i = i;
  			cols[i].t = T_N | T_XYZ;
***************
*** 2970,2977 ****
  			cols[i].n  = nchan;
  			cols[i].id = ((char *)icg->t[0].fdata[i][si]);
  			sprintf(cols[i].loc, "???");
! 			for (j = 0; j < nchan; j++)
! 				cols[i].dev[j] = *((double *)icg->t[0].fdata[i][chix[j]]) / 100.0;
  			for (j = 0; j < 3; j++)
  				cols[i].XYZ[j] = *((double *)icg->t[0].fdata[i][xyzix[j]]) / 100.0;
  			col_convert(&cols[i], wp);	/* Ensure other representations */
--- 2990,3006 ----
  			cols[i].n  = nchan;
  			cols[i].id = ((char *)icg->t[0].fdata[i][si]);
  			sprintf(cols[i].loc, "???");
! 			for (j = 0; j < nchan; j++) {
! 				double vr, vv = *((double *)icg->t[0].fdata[i][chix[j]]) / 100.0;
! 				if (qbits > 0) {
! 					vv *= qscale;
! 					vr = floor(vv + 0.5);
! 					if ((vr - vv) == 0.5 && (((int)vr) & 1) != 0) /* Round to even */
! 						vr -= 1.0;
! 					vv = vr/qscale;
! 				}
! 				cols[i].dev[j] = vv;
! 			}
  			for (j = 0; j < 3; j++)
  				cols[i].XYZ[j] = *((double *)icg->t[0].fdata[i][xyzix[j]]) / 100.0;
  			col_convert(&cols[i], wp);	/* Ensure other representations */
diff --strip-trailing-cr -c -r Argyll_V1.0.1/target/targen.c Argyll_V1.0.2/target/targen.c
*** Argyll_V1.0.1/target/targen.c	Mon Jul 14 14:11:33 2008
--- Argyll_V1.0.2/target/targen.c	Sun Jul 20 02:25:19 2008
***************
*** 17,31 ****
  
  /* TTBD:
  
! 	Should add an option to quantize the device values -
! 	ie. to 8 bits, so that quantizing error isn't introduced
! 	through a reproduction path. Should this be a default ?
  
  	Using adaptive patch creation for grey colorspace is broken.
  	This should really be disabled for grey space, or fixed.
  
  	Adaptive only does a first go placement, itterative improvement
  	is turned off, because the algorithm doesn't work.
  	The useful level for the -A parameter (degree of adapatation)
  	hasn't been determined.
  
--- 17,31 ----
  
  /* TTBD:
  
! 	Should add an option to generate grey and near grey
! 	test points based on the previous profile.
  
  	Using adaptive patch creation for grey colorspace is broken.
  	This should really be disabled for grey space, or fixed.
  
  	Adaptive only does a first go placement, itterative improvement
  	is turned off, because the algorithm doesn't work.
+ 	It would be good to figure out a way of fixing this.
  	The useful level for the -A parameter (degree of adapatation)
  	hasn't been determined.
  
diff --strip-trailing-cr -c -r Argyll_V1.0.1/xicc/xfit.c Argyll_V1.0.2/xicc/xfit.c
*** Argyll_V1.0.1/xicc/xfit.c	Mon Jul 14 14:11:27 2008
--- Argyll_V1.0.2/xicc/xfit.c	Sun Jul 20 02:25:13 2008
***************
*** 87,93 ****
  
  /* - - - - - - - - - - - - - - - - - */
  
! #ifdef NEVER	/* Not currently used */
  
  /* Lookup a value though an input position curve */
  static double xfit_poscurve(xfit *p, double in, int chan) {
--- 87,93 ----
  
  /* - - - - - - - - - - - - - - - - - */
  
! #ifdef DEBUG_PLOT	/* Not currently used in runtime code*/
  
  /* Lookup a value though an input position curve */
  static double xfit_poscurve(xfit *p, double in, int chan) {
***************
*** 132,138 ****
  		out[e] = val;
  	}
  }
! #endif /* NEVER */
  
  /* - - - - - - - - - - - - - - - - - */
  /* Lookup a value though input shape curve */
--- 132,138 ----
  		out[e] = val;
  	}
  }
! #endif /* DEBUG_PLOT */
  
  /* - - - - - - - - - - - - - - - - - */
  /* Lookup a value though input shape curve */
***************
*** 482,487 ****
--- 482,491 ----
  		} else {
  			icmMulBy3x3(out, p->fromAbs, in);
  		}
+ 	} else {
+ 		out[0] = in[0];
+ 		out[1] = in[1];
+ 		out[2] = in[2];
  	}
  }
  
***************
*** 661,667 ****
  		} else {
  			del = p->to_de2(p->cntx2, out, p->rpoints[i].v);
  		}
- 
  		tw += p->rpoints[i].w;
  		ev += p->rpoints[i].w * del;
  	}
--- 665,670 ----
***************
*** 1384,1397 ****
  					break;			/* Don't bother looking further */
  			}
  		}
- 
  		xfit_abs_to_rel(p, ov, p->ipoints[bk].v);
  
  		for (f = 0; f < fdi; f++)
  			b[f * (1 << di) + e] = ov[f];
  	}
  
- 
  	/* Setup output curves to be linear initially */
  	b = p->v + p->out_off;
  	for (f = 0; f < fdi; b += p->oluord[f], f++) {
--- 1387,1398 ----
***************
*** 1446,1451 ****
--- 1447,1453 ----
  
  	if ((p->tcomb & oc_ipo) != 0
  	 && (p->tcomb & oc_m) == oc_m) {	/* Only bother with matrix if in and/or out */
+ 		double rerr;
  
  		if (p->verb)
  			printf("About to optimise temporary matrix\n");
***************
*** 1464,1474 ****
  		setup_xfit(p, p->wv, p->sa, 0.0, 0.5); 
  
  #ifdef NODDV
! 		if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Powell failed to converge");
  #else
! 		if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Conjgrad failed to converge");
  #endif
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
--- 1466,1476 ----
  		setup_xfit(p, p->wv, p->sa, 0.0, 0.5); 
  
  #ifdef NODDV
! 		if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Powell failed to converge, residual error = %f",rerr);
  #else
! 		if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Conjgrad failed to converge, residual error = %f", rerr);
  #endif
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
***************
*** 1481,1486 ****
--- 1483,1489 ----
  
  	/* Optimise input and matrix together */
  	if ((p->tcomb & oc_im) == oc_im) {
+ 		double rerr;
  
  		if (p->verb)
  			printf("\nAbout to optimise input curves and matrix\n");
***************
*** 1492,1504 ****
  		p->opt_ch = -1;
  		p->opt_msk = oc_im;
  		setup_xfit(p, p->wv, p->sa, 0.5, 0.3); 
  #ifdef NODDV
! 		if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Powell failed to converge");
  #else
! 		if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Conjgrad failed to converge");
  #endif
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
  #ifdef DEBUG
--- 1495,1516 ----
  		p->opt_ch = -1;
  		p->opt_msk = oc_im;
  		setup_xfit(p, p->wv, p->sa, 0.5, 0.3); 
+ 		/* Supress the warnings the first time through - it's better to cut off the */
+ 		/* itterations and move on to the output curve, and worry about it not */
+ 		/* converging the second time through. */
  #ifdef NODDV
! 		if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) {
! #ifdef DEBUG
! 			warning("xfit_fit: Powell failed to converge, residual error = %f",rerr);
! #endif
! 		}
  #else
! 		if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) {
! #ifdef DEBUG
! 			warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr);
  #endif
+ 		}
+ #endif	/* !NODDV */
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
  #ifdef DEBUG
***************
*** 1509,1514 ****
--- 1521,1527 ----
  
  	/* Optimise the matrix and output curves together */
  	if ((p->tcomb & oc_mo) == oc_mo) {
+ 		double rerr;
  
  		if (p->verb)
  			printf("\nAbout to optimise output curves and matrix\n");
***************
*** 1521,1531 ****
  		p->opt_msk = oc_mo;
  		setup_xfit(p, p->wv, p->sa, 0.3, 0.3); 
  #ifdef NODDV
! 		if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Powell failed to converge");
  #else
! 		if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Conjgrad failed to converge");
  #endif
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
--- 1534,1544 ----
  		p->opt_msk = oc_mo;
  		setup_xfit(p, p->wv, p->sa, 0.3, 0.3); 
  #ifdef NODDV
! 		if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Powell failed to converge, residual error = %f",rerr);
  #else
! 		if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 			warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr);
  #endif
  		for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  			p->v[p->opt_off + i] = p->wv[i];
***************
*** 1548,1558 ****
  			p->opt_msk = oc_im;
  			setup_xfit(p, p->wv, p->sa, 0.2, 0.2); 
  #ifdef NODDV
! 			if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Powell failed to converge");
  #else
! 			if (conjgrad(NULL, p->opt_cnt, p->v, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Conjgrad failed to converge");
  #endif
  			for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  				p->v[p->opt_off + i] = p->wv[i];
--- 1561,1571 ----
  			p->opt_msk = oc_im;
  			setup_xfit(p, p->wv, p->sa, 0.2, 0.2); 
  #ifdef NODDV
! 			if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Powell failed to converge, residual error = %f",rerr);
  #else
! 			if (conjgrad(&rerr, p->opt_cnt, p->v, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr);
  #endif
  			for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  				p->v[p->opt_off + i] = p->wv[i];
***************
*** 1576,1583 ****
  			p->opt_ch = -1;
  			p->opt_msk = oc_imo;
  			setup_xfit(p, p->wv, p->sa, 0.1, 0.1); 
! 			if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Conjgrad failed to converge");
  			for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  				p->v[p->opt_off + i] = p->wv[i];
  
--- 1589,1596 ----
  			p->opt_ch = -1;
  			p->opt_msk = oc_imo;
  			setup_xfit(p, p->wv, p->sa, 0.1, 0.1); 
! 			if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0)
! 				warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr);
  			for (i = 0; i < p->opt_cnt; i++)		/* Copy optimised values back */
  				p->v[p->opt_off + i] = p->wv[i];
  
***************
*** 1604,1611 ****
  				p->opt_ch = f;
  				p->wv[0] = p->v[p->out_offs[f]];	/* Current parameter value */
  				p->sa[0] = 0.1;					/* Search radius */
! 				if (powell(NULL, 1, p->wv, p->sa, 0.0000001, 1000, symoptfunc, (void *)p) != 0)
! 					error("xfit_fit: Powell failed to converge");
  				p->v[p->out_offs[f]] = p->wv[0];	/* Copy results back */
  			}
  		}
--- 1617,1624 ----
  				p->opt_ch = f;
  				p->wv[0] = p->v[p->out_offs[f]];	/* Current parameter value */
  				p->sa[0] = 0.1;					/* Search radius */
! 				if (powell(&rerr, 1, p->wv, p->sa, 0.0000001, 1000, symoptfunc, (void *)p) != 0)
! 					error("xfit_fit: Powell failed to converge, residual error = %f",rerr);
  				p->v[p->out_offs[f]] = p->wv[0];	/* Copy results back */
  			}
  		}
***************
*** 1867,1873 ****
  				p->rpoints[i].v[f] = p->ipoints[i].v[f];
  			xfit_abs_to_rel(p, p->rpoints[i].v, p->rpoints[i].v);
  			xfit_invoutcurves(p, p->rpoints[i].v, p->rpoints[i].v);
- // ~~999
  //printf("~1 point %d, w %f, %f %f %f %f -> %f %f %f\n",
  //i,p->rpoints[i].w,p->rpoints[i].p[0], p->rpoints[i].p[1], p->rpoints[i].p[2], p->rpoints[i].p[3],
  //p->rpoints[i].v[0], p->rpoints[i].v[1], p->rpoints[i].v[2]);
--- 1880,1885 ----
***************
*** 1923,1931 ****
  		if (p->verb)
  			printf("Create final clut from scattered data\n");
  
- // ~~~999
- //out_max[0] = 100.390625;
- 
  		p->clut->fit_rspl_w(p->clut, rsplflags, p->rpoints, p->nodp, in_min, in_max, gres,
  			out_min, out_max, smooth, oavgdev, iwidth);
  		if (p->verb) printf("\n");
--- 1935,1940 ----
***************
*** 2079,2085 ****
  				maxe = ev;
  			avee += ev;
  		}
! 		printf("Max err = %f, avg err = %f\n",maxe, avee/(double)p->nodp);
  
  		/* Evaluate each input axis in turn */
  		for (ee = 0; ee < p->di; ee++) {
--- 2088,2094 ----
  				maxe = ev;
  			avee += ev;
  		}
! 		printf("Max resid err = %f, avg err = %f\n",maxe, avee/(double)p->nodp);
  
  		/* Evaluate each input axis in turn */
  		for (ee = 0; ee < p->di; ee++) {


--- NEW FILE argyllcms-1.0.1-19-color.fdi ---
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <!-- This file normally lives at "/usr/share/hal/fdi/policy/10osvendor/19-color.fdi" -->
  <!-- Color meter devices known to Argyll CMS
       FDI creation: Nicolas Mailhot <nicolas.mailhot at laposte.net>
       with input from David Zeuthen and Frdric Crozat,
       maintained by Graeme Gill.
    -->
  <device>
    <!-- Serial Connected Color Instruments -->
    <match key="serial.device" exists="true">
      <append key="info.capabilities" type="strlist">access_control</append>
      <merge key="access_control.type" type="string">color</merge>
      <merge key="access_control.file" type="copy_property">linux.device_file</merge>
    </match>
    <!-- HCFR association -->
    <match key="usb_device.vendor_id" int="0x04DB">
      <!-- Display colorimeter -->
      <match key="usb_device.product_id" int="0x005B">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- MonacoOPTIX -->
    <match key="usb_device.vendor_id" int="0x0670">
      <!-- Eye-One Display 1 - display colorimeter -->
      <match key="usb_device.product_id" int="0x0001">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- X-Rite -->
    <match key="usb_device.vendor_id" int="0x0765">
      <!-- DTP20 "Pulse" - "swipe" type reflective spectrometer, that can be used un-tethered. -->
      <match key="usb_device.product_id" int="0xd020">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- DTP92Q - CRT display colorimeter. (Not tested) -->
      <match key="usb_device.product_id" int="0xd092">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- DTP94 "Optix XR" or "Optix XR2" - display colorimeter -->
      <match key="usb_device.product_id" int="0xd094">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- ColorVision -->
    <match key="usb_device.vendor_id" int="0x085C">
      <!-- Spyder 2 - display colorimeter -->
      <match key="usb_device.product_id" int="0x0200">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- Gretag-Macbeth -->
    <match key="usb_device.vendor_id" int="0x0971">
      <!-- Eye-One Pro - spot and "swipe" reflective/emissive spectrometer -->
      <match key="usb_device.product_id" int="0x2000">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- Eye-One Display - display colorimeter -->
      <match key="usb_device.product_id" int="0x2003">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- Huey - display colorimeter -->
      <match key="usb_device.product_id" int="0x2005">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
  </device>
</deviceinfo>

argyllcms-1.0.1-legal.patch:

--- NEW FILE argyllcms-1.0.1-legal.patch ---
diff -uNr Argyll_V1.0.1.orig/doc/ArgyllDoc.html Argyll_V1.0.1/doc/ArgyllDoc.html
--- Argyll_V1.0.1.orig/doc/ArgyllDoc.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/ArgyllDoc.html	2008-07-27 11:39:29.000000000 +0200
@@ -18,7 +18,7 @@
 Author: Graeme Gill
 <h2><u>Introduction</u></h2>
 Argyll is an open source, ICC compatible color management
-system. It supports accurate ICC profile creation for scanners, CMYK
+system. It supports accurate ICC profile creation for acquisition devices, CMYK
 printers,
 film recorders and calibration and profiling of displays.
 Spectral sample data is supported,
diff -uNr Argyll_V1.0.1.orig/doc/chartread.html Argyll_V1.0.1/doc/chartread.html
--- Argyll_V1.0.1.orig/doc/chartread.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/chartread.html	2008-07-27 11:40:27.000000000 +0200
@@ -206,7 +206,7 @@
 <br>
 <a name="a"></a> Normally the patch locations are not needed in the
 output, but if a chart is being read as an input reference (for use in
-profiling a scanner or a camera), then the patch locations will still
+profiling an acquisition device), then the patch locations will still
 be needed. The <span style="font-weight: bold;">-a</span> flag adds
 the locations to the output .ti3 file.<br>
 <br>
diff -uNr Argyll_V1.0.1.orig/doc/colprof.html Argyll_V1.0.1/doc/colprof.html
--- Argyll_V1.0.1.orig/doc/colprof.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/colprof.html	2008-07-27 11:41:01.000000000 +0200
@@ -617,8 +617,8 @@
 absolute value, and any values whiter than that, will not be clipped by
 the profile. The profile effectively operates in an absolute intent
 mode,  irrespective of what intent is selected when it is used.
-This flag can be useful when an input profile is needed for using a
-scanner as a "poor mans" colorimeter, or if the white point of the test
+This flag can be useful when an input profile is needed for using an
+acquisition device as a "poor mans" colorimeter, or if the white point of the test
 chart doesn't represent the white points of media
 that will be used in practice, and that white point adjustment will be
 done individually in some downstream application.<br>
diff -uNr Argyll_V1.0.1.orig/doc/Installing_Linux.html Argyll_V1.0.1/doc/Installing_Linux.html
--- Argyll_V1.0.1.orig/doc/Installing_Linux.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/Installing_Linux.html	2008-07-27 11:42:29.000000000 +0200
@@ -30,7 +30,7 @@
 variable to give access to the executables from your command line
 environment.
 The .tgz file also contains several useful reference files (such as
-scanner
+acquisition device
 chart recognition templates, sample illumination spectrum etc.) in the
 ref sub-directory, as
 well
diff -uNr Argyll_V1.0.1.orig/doc/Installing_MSWindows.html Argyll_V1.0.1/doc/Installing_MSWindows.html
--- Argyll_V1.0.1.orig/doc/Installing_MSWindows.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/Installing_MSWindows.html	2008-07-27 11:42:50.000000000 +0200
@@ -69,7 +69,7 @@
 <br>
 The .zip file also contains several useful reference files
 (such as
-scanner
+acquisition device
 chart recognition templates, sample illumination spectrum etc.) in the
 ref sub-directory, all the current documentation in a doc
 sub-directory, and instrument USB drivers in the libusbw directory.<br>
diff -uNr Argyll_V1.0.1.orig/doc/Installing_OSX.html Argyll_V1.0.1/doc/Installing_OSX.html
--- Argyll_V1.0.1.orig/doc/Installing_OSX.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/Installing_OSX.html	2008-07-27 11:39:58.000000000 +0200
@@ -30,7 +30,7 @@
 with how to do this, consult an appropriate tutorial, e.g. <<a
  href="http://heather.cs.ucdavis.edu/%7Ematloff/UnixAndC/Unix/ShellIntro.html#tth_sEc1">ShellIntro</a>>.
 The .tgz file also contains several useful reference files (such as
-scanner chart recognition templates, sample illumination spectrum
+acquisition device chart recognition templates, sample illumination spectrum
 etc.) in the ref sub-directory, as well as
 all the current documentation in a doc sub-directory.<br>
 <br>
diff -uNr Argyll_V1.0.1.orig/doc/Organisation.html Argyll_V1.0.1/doc/Organisation.html
--- Argyll_V1.0.1.orig/doc/Organisation.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/Organisation.html	2008-07-27 11:36:55.000000000 +0200
@@ -13,7 +13,7 @@
 This directory contains routines that generate calibration test charts,
 based
 on various distribution algorithms suitable for
-reading using an Xrite DTP51 or DTP41 colorimeter, or scanner for print
+reading using an Xrite DTP51 or DTP41 colorimeter, or acquisition device for print
 charts,
 the Gretag Spectrolino for film charts, or the Xrite DTP92 pr DTP94 for
 monitor
diff -uNr Argyll_V1.0.1.orig/doc/printtarg.html Argyll_V1.0.1/doc/printtarg.html
--- Argyll_V1.0.1.orig/doc/printtarg.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/printtarg.html	2008-07-27 11:36:27.000000000 +0200
@@ -167,7 +167,7 @@
 file, and a .ti2 file containing the device test values together with
 the layout information needed to identify the patch location. This
 module can also generate the image recognition templates needed to read
-the print targets in using a scanner.<br>
+the print targets in using an acquisition device.<br>
 <br>
 <a name="v"></a> The <b>-v</b> flag turns on verbose mode. Prints
 information about how many patches there are in a row, how many patches
diff -uNr Argyll_V1.0.1.orig/doc/scanin.html Argyll_V1.0.1/doc/scanin.html
--- Argyll_V1.0.1.orig/doc/scanin.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/scanin.html	2008-07-27 11:34:18.000000000 +0200
@@ -23,7 +23,7 @@
 recogin.cht
 valin.cie [diag.tif]</span><br style="font-family: monospace;">
 <span style="font-family: monospace;">   :- inputs
-'input.tif',  and outputs scanner
+'input.tif',  and outputs device
 'input.ti3', or</span><br style="font-family: monospace;">
 <br style="font-family: monospace;">
 <a style="font-family: monospace;" href="#g"> usage</a><span
@@ -85,7 +85,7 @@
  style="font-family: monospace;">                  
 Replace device values in .ti3</span><br style="font-family: monospace;">
 <span style="font-family: monospace;">                     
-Default is to create a scanner .ti3 file<br>
+Default is to create a device .ti3 file<br>
 </span></small><small><span style="font-family: monospace;"> </span><a
  style="font-family: monospace;" href="#F">-F x1,y1,x2,y2,x3,y3,x4,y4</a><span
  style="font-family: monospace;"> <br>
@@ -187,10 +187,10 @@
 of the chart are visible within the image, and if the image is cropped
 to exclude the chart edges, it may well not recognize the chart
 properly. It is designed to cope with a variety of resolutions, and
-will cope with some degree of noise in the scan (due to screening
+will cope with some degree of noise in the acquisition (due to screening
 artefacts on the original, or film grain), but it isn't really designed
 to accept very high resolution input. For anything over 600DPI, you
-should consider down sampling the scan using a filtering downsample,
+should consider down sampling the image using a filtering downsample,
 before submitting the file to scanin.<br>
 <br>
 There are 5 basic modes that <b>scanin</b> operates in.<br>
@@ -199,7 +199,7 @@
 assumed to be parsing an input device characterization chart (ie. an
 IT8.7/2 chart), for the purpose of creating a <a
  href="File_Formats.html#.ti3">.ti3</a> data file containing
-the CIE test values and the corresponding RGB scanner values. The <a
+the CIE test values and the corresponding RGB device values. The <a
  href="File_Formats.html#.ti3">.ti3</a> file can then be used for
 creating
 an input profile using <a href="colprof.html">colprof</a>. The file
@@ -221,7 +221,7 @@
 file in
 this situation, should be a good quality image, perhaps synthetically
 generated
-(rather than being scanned), and perfectly oriented, to make
+(rather than being parsed), and perfectly oriented, to make
 specification
 of the patch locations easier. The file arguments are: <a name="gp1"></a>The
 TIFF file that
@@ -245,7 +245,7 @@
 input devices to be used as a crude replacement for a color measuring
 instrument. The icc profile has
 (presumably) been
-created by scanning an IT8.7/2 chart (or similar) through the RGB input
+created with an image of a IT8.7/2 chart (or similar) through the RGB input
 device,
 and
 then using scanin to create the .ti3 file needed to feed to colprof to
@@ -267,7 +267,7 @@
 The resulting .ti3 file will have the same base name as the input TIFF
 file.
 If there is more than one page in the test chart, then scanin will need
-to be run multiple times, once for each scan file made from each test
+to be run multiple times, once for each image file made from each test
 chart. <a name="ca"></a>The <b>-ca</b> flag combination should be
 used
 for all pages after the first,
@@ -339,7 +339,7 @@
 <br>
 <a name="p"></a>By default the automatic chart recognition copes with
 rotation, scale and stretch in the chart image, making it suitable for
-charts that have been scanned, or shot squarely with a camera. If a
+charts that have been acquired, or shot squarely with a camera. If a
 chart has been shot not exactly facing the camera (perhaps to avoid
 reflection, or to get more even lighting), then it will suffer from
 perspective distortion as well. The <span style="font-weight: bold;"><span
@@ -349,7 +349,7 @@
 <a name="m"></a>Normally scanin computes an average of the pixel values
 within a sample square, using a "robust" mean, that discards pixel
 values that are too far from the average ("outlier" pixel values). This
-is done in an attempt to discard value that are due to scanning
+is done in an attempt to discard value that are due to acquisition
 artefacts such as dust, scratches etc. You can force scanin to return
 the true mean values for the sample squares that includes all the pixel
 values, by using the <span style="font-weight: bold;">-m</span> flag.<br>
@@ -357,9 +357,9 @@
 <a name="G"></a>Normally scanin has reasonably robust feature
 recognition, but the default assumption is that the input chart has an
 approximately even visual distribution of patch values, and has been
-scanned and converted to a typical gamma 2.2 corrected image, meaning
+acquired and converted to a typical gamma 2.2 corrected image, meaning
 that the average patch pixel value is expected to be about 50%. If this
-is not the case (for instance if the input chart has been scanned with
+is not the case (for instance if the input chart has been processed with
 linear light or "raw" encoding), then it may enhance the image
 recognition to provide the approximate gamma encoding of the image. For
 instance, if linear light encoding ("Raw") is used, a <span
diff -uNr Argyll_V1.0.1.orig/doc/Scenarios.html Argyll_V1.0.1/doc/Scenarios.html
--- Argyll_V1.0.1.orig/doc/Scenarios.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/Scenarios.html	2008-07-27 11:52:05.000000000 +0200
@@ -32,17 +32,17 @@
  href="#PM5">Installing a
 display profile</a></h4>
 <h4><br>
-<a href="#PS1">Profiling Scanners</a></h4>
+<a href="#PS1">Profiling Acquisition Devices</a></h4>
 <h4>    <a href="#PS2">Types of test charts</a></h4>
-<h4>    <a href="#PS3">Taking readings from a scanner</a></h4>
-<h4>    <a href="#PS4">Creating a scanner profile</a></h4>
+<h4>    <a href="#PS3">Taking readings from an acquisition device</a></h4>
+<h4>    <a href="#PS4">Creating an acquisition device profile</a></h4>
 <h4><br>
 <a href="#PP1">Profiling Printers</a></h4>
 <h4>     <a href="#PP2">Creating a print test chart</a></h4>
 <h4>     <a href="#PP3">Reading a print test chart
 using an instrument</a></h4>
 <h4>     <a href="#PP4">Reading a print test chart
-using a scanner</a></h4>
+using an acquisition device</a></h4>
 <h4> </h4>
 <h4>    <a href="#PP5">Creating a printer profile<br>
 </a></h4>
@@ -353,14 +353,14 @@
 the connected display.<br>
 <br>
 <hr size="2" width="100%">
-<h3><a name="PS1"></a>Profiling Scanners</h3>
-Because a scanner is an input device, it is necessary to go about
+<h3><a name="PS1"></a>Profiling Acquisition Devices</h3>
+Because a acquisition device is an input device, it is necessary to go about
 profiling it in quite a different way to an output device. To profile
-it, a test chart is needed to exercise the scanner response, to which
+it, a test chart is needed to exercise the device response, to which
 the CIE values for each test patch is known. Generally standard
 reflection or transparency test charts are used for this purpose.<br>
 <h4><a name="PS2"></a>Types of test charts</h4>
-The most common and popular test chart for scanner profiling is the
+The most common and popular test chart for acquisiton device profiling is the
 IT8.7/2 chart. This is a standard format chart generally reproduced on
 photographic film, containing about 264 test patches. The Kodak Q-60
 Color Input Target is a typical example:<br>
@@ -400,18 +400,18 @@
 <img alt="CMP_DT_003" src="CMP_DT_003.jpg"
  style="width: 186px; height: 141px;"><br>
 <br>
-<h4><a name="PS3"></a>Taking readings from a scanner</h4>
-The test chart you are using needs to be placed on the scanner, and the
-scanner needs to be configured to a suitable state, and restored to
+<h4><a name="PS3"></a>Taking readings from an acquisition device</h4>
+The test chart you are using needs to be exposed to the device, and the
+acquisition device needs to be configured to a suitable state, and restored to
 that
 same state when used subsequently with the resulting profile. The chart
 should
 be scanned, and saved to a TIFF format file. I will assume the
 resulting
-file is called scanner.tif. The raster file need only be roughly
+file is called device.tif. The raster file need only be roughly
 cropped so as to contain the test chart (including the charts edges).<br>
 <br>
-The second step is to extract the RGB values from the scanner.tif file,
+The second step is to extract the RGB values from the device.tif file,
 and match then to the reference CIE values.
 To locate the patch values in the scan, the <b>scanin</b> utility
 needs to
@@ -485,32 +485,32 @@
 chart recognition template file will need to be created (this is beyond
 the scope of the current documentation).<br>
 <br>
-To create the scanner .ti3 file, run the <b>scanin</b> utility as
+To create the device .ti3 file, run the <b>scanin</b> utility as
 follows
 (assuming an IT8 chart is being used):<br>
 <br>
-<a href="scanin.html"> scanin</a> -v scanner.tif It8.cht It8ref.txt<br>
+<a href="scanin.html"> scanin</a> -v device.tif It8.cht It8ref.txt<br>
 <br>
 "It8ref.txt" is assumed to be the name of the CIE reference file
-supplied by the chart manufacturer. The resulting file will be named "<b>scanner.ti3</b>".<br>
+supplied by the chart manufacturer. The resulting file will be named "<b>device.ti3</b>".<br>
 <br>
 <span style="font-weight: bold;">scanin</span> will process 16 bit per
-component .tiff files, which (if the scanner is capable of creating
+component .tiff files, which (if the device is capable of creating
 such files),  may improve the quality of the profile. <br>
 <br>
 If you have any doubts about the correctness of the chart recognition,
 or the subsequent profile's delta E report is unusual, then use the
 scanin diagnostic flags <a href="scanin.html#d">-dipn</a> and examine
 the <span style="font-weight: bold;">diag.tif</span> diagnostic file.<br>
-<h4><a name="PS4"></a>Creating a scanner profile</h4>
-Similar to a display profile, a scanner profile can be either a
-shaper/matrix or LUT based profile. Well behaved scanners will
+<h4><a name="PS4"></a>Creating an acquisition device profile</h4>
+Similar to a display profile, an acquisition device profile can be either a
+shaper/matrix or LUT based profile. Well behaved devices will
 probably give the best results
 with a shaper/matrix profile, but if the fit is poor, consider using a
 LUT
 type profile.<br>
 <br>
-If the purpose of the scanner profile is to use it as a substitute for
+If the purpose of the device profile is to use it as a substitute for
 a
 colorimeter, then the <b>-u</b> flag should be used to avoid clipping
 values above the white point. Unless the shaper/matrix type profile is
@@ -520,24 +520,24 @@
 To create a matrix/shaper profile, the following suffices:<br>
 <br>
 <a href="colprof.html">colprof</a> <a href="colprof.html#v">-v</a> <a
- href="colprof.html#E">-D"Scanner</a> <a href="colprof.html#E">A"</a> <a
+ href="colprof.html#E">-D"Device</a> <a href="colprof.html#E">A"</a> <a
  href="colprof.html#q">-qm</a> <a href="colprof.html#a">-as</a>
-<a href="colprof.html#p1">scanner</a><br>
+<a href="colprof.html#p1">device</a><br>
 <br>
 For a LUT based profile then the following would be used:<br>
 <br>
 <a href="colprof.html">colprof</a> <a href="colprof.html#v">-v</a> <a
- href="colprof.html#E">-D"Scanner A"</a>
+ href="colprof.html#E">-D"Device A"</a>
 <a href="colprof.html#q">-qm</a>
-<a href="colprof.html#p1">scanner</a><br>
+<a href="colprof.html#p1">device</a><br>
 <br>
 For the purposes of a poor mans colorimeter, the following would
 generally be used:<br>
 <br>
 <a href="colprof.html">colprof</a> <a href="colprof.html#v">-v</a> <a
- href="colprof.html#E">-D"Scanner A"</a>
+ href="colprof.html#E">-D"Device A"</a>
 <a href="colprof.html#q">-qm</a> <a href="colprof.html#u">-u</a>
-<a href="colprof.html#p1">scanner</a><br>
+<a href="colprof.html#p1">device</a><br>
 <br>
 Make sure you check the delta E report at the end of the profile
 creation, to see if the profile is behaving reasonably.<br>
@@ -703,7 +703,7 @@
 <a href="printtarg.html#i">-ii1</a> <a href="printtarg.html#p">-pA4</a>
 <a href="printtarg.html#p1">PrinterA</a><br>
 <br>
-For using with a scanner as a colorimeter, the Gretag Spectroscan
+For using with an acquisition device as a colorimeter, the Gretag Spectroscan
 layout is suitable, but the <a href="printtarg.html#s">-s</a> flag
 should be used so as to generate a layout suitable for scan
 recognition, as well as generating the scan recognition template
@@ -804,28 +804,27 @@
 for each type of instrument. Continue with <a href="Scenarios.html#PP5">Creating
 a printer profile</a>.<br>
 <br>
-<h4><a name="PP4"></a>Reading a print test chart using a scanner or
-camera<br>
+<h4><a name="PP4"></a>Reading a print test chart using an acquisition device<br>
 </h4>
 <br>
-Argyll supports using a scanner or even a camera as a substitute for a
+Argyll supports using any acquisition device as a substitute for a
 colorimeter.
-While a scanner or camera is no replacement for a color measurement
+While most are no replacement for a color measurement
 instrument, it may give acceptable results in some situations, and may
 give better results than a generic profile for a printing device.<br>
 <br>
-The main limitation of the scanner-as-colorimeter approach are:<br>
+The main limitation of the any-device-as-colorimeter approach are:<br>
 <br>
-* The scanner dynamic range and/or precision may not match the printers
+* The acquisition device dynamic range and/or precision may not match the printers
 or what is required for a good profile.<br>
-* The spectral interaction of the scanner test chart and printer test
-chart with the scanner
+* The spectral interaction of the device test chart and printer test
+chart with the device
 spectral response can cause color errors.<br>
 * Spectral differences caused by different black amounts in the print
 test chart can cause
 color errors. <br>
 * The IT8 chart gamut may be so much smaller than the printers that the
-scanner profile is too inaccurate. <br>
+acquisition device profile is too inaccurate. <br>
 <br>
 As well as some of the above, a camera may not be suitable if it
 automatically adjusts exposure or white point when taking a picture,
@@ -834,23 +833,23 @@
 The end result is often a profile that has a slight color cast to,
 compared to a profile created using a colorimeter or spectrometer..<br>
 <br>
-It is assumed that you have created a scanner or camera profile
+It is assumed that you have created an acquisition device profile
 following the <a href="http://www.argyllcms.com/doc/Scenarios.html#PS1">procedure</a>
 outline above. For best possible results it
-is advisable to both profile the scanner or camera, and use it in
+is advisable to both profile the acquisition device, and use it in
 scanning the
 printed test chart, in as "raw" mode as possible (i.e. using 16 bits
-per component images, if the scanner or camera is
+per component images, if the acquisition device is
 capable of doing so; not setting white or black points, using a fixed
 exposure etc.). It is
 generally advisable to create a LUT type input profile, and use the <a
  href="http://www.argyllcms.com/doc/colprof.html#u">-u</a> flag to
 avoid clipping scanned value whiter than the input calibration chart.<br>
 <br>
-Scan or photograph your printer chart (or charts) on the scanner or
-camera previously profiled.
+Scan or photograph your printer chart (or charts) on the acquisition device
+previously profiled.
 <big><span style="font-weight: bold;">The
-scanner or camera must be configured and used exactly the same as it
+acquisition device must be configured and used exactly the same as it
 was when it
 was profiled.</span></big><br>
 <br>
@@ -858,21 +857,21 @@
  style="font-weight: bold;">PrinterB.tif</span> (or <span
  style="font-weight: bold;">PrinterB1.tif</span>, <span
  style="font-weight: bold;">PrinterB2.tif</span> etc. in the case of
-multiple charts). As with profiling the scanner or camera, the raster
+multiple charts). As with profiling the acquisition device, the raster
 file need
 only be roughly cropped so as to contain the test chart.<br>
 <br>
-The scanner recognition files
+The acquisition device recognition files
 created when <span style="font-weight: bold;">printtarg</span> was run
 is assumed to be called <span style="font-weight: bold;">PrinterB.cht</span>.
-Using the scanner profile created previously (assumed to be called <span
- style="font-weight: bold;">scanner.icm</span>), the printer test chart
+Using the device profile created previously (assumed to be called <span
+ style="font-weight: bold;">device.icm</span>), the printer test chart
 scan patches are converted to CIE values using the <span
  style="font-weight: bold;">scanin</span> utility:<br>
 <br>
 <a href="scanin.html">scanin</a> <a href="scanin.html#v">-v</a> <a
  href="scanin.html#c">-c</a> <a href="scanin.html#cp1">PrinterB.tif</a>
-<a href="scanin.html#cp2">PrinterB.cht</a> <a href="scanin.html#cp3">scanner.icm</a>
+<a href="scanin.html#cp2">PrinterB.cht</a> <a href="scanin.html#cp3">device.icm</a>
 <a href="scanin.html#cp4">PrinterB</a><br>
 <br>
 If there were multiple test chart pages, the results would be
@@ -881,15 +880,15 @@
 <br>
 <a href="scanin.html">scanin</a> <a href="scanin.html#v">-v</a> <a
  href="scanin.html#c">-c</a> <a href="scanin.html#cp1">PrinterB1.tif</a>
-<a href="scanin.html#cp2">PrinterB1.cht</a> <a href="scanin.html#cp3">scanner.icm</a>
+<a href="scanin.html#cp2">PrinterB1.cht</a> <a href="scanin.html#cp3">device.icm</a>
 <a href="scanin.html#cp4">PrinterB</a><br>
 <a href="scanin.html">scanin</a> <a href="scanin.html#v">-v</a> <a
  href="scanin.html#ca">-ca</a> <a href="scanin.html#cp1">PrinterB2.tif</a>
-<a href="scanin.html#cp2">PrinterB2.cht</a> <a href="scanin.html#cp3">scanner.icm</a>
+<a href="scanin.html#cp2">PrinterB2.cht</a> <a href="scanin.html#cp3">device.icm</a>
 <a href="scanin.html#cp4">PrinterB</a><br>
 <a href="scanin.html">scanin</a> <a href="scanin.html#v">-v</a> <a
  href="scanin.html#ca">-ca</a> <a href="scanin.html#cp1">PrinterB3.tif</a>
-<a href="scanin.html#cp2">PrinterB3.cht</a> <a href="scanin.html#cp3">scanner.icm</a>
+<a href="scanin.html#cp2">PrinterB3.cht</a> <a href="scanin.html#cp3">device.icm</a>
 <a href="scanin.html#cp4">PrinterB</a><br>
 <br>
 Now that the <span style="font-weight: bold;">PrinterB.ti3</span> data
diff -uNr Argyll_V1.0.1.orig/doc/targen.html Argyll_V1.0.1/doc/targen.html
--- Argyll_V1.0.1.orig/doc/targen.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/targen.html	2008-07-27 11:53:34.000000000 +0200
@@ -615,7 +615,7 @@
       3 x Letter   1386<br>
       4 x Letter   1848<br>
 <br>
-  Scanner (printtarg with -iSS -s options):<br>
+  Acquisition device (printtarg with -iSS -s options):<br>
 <br>
        1 x A4R      1014<br>
        2 x A4R      2028<br>
diff -uNr Argyll_V1.0.1.orig/doc/ti3_format.html Argyll_V1.0.1/doc/ti3_format.html
--- Argyll_V1.0.1.orig/doc/ti3_format.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/ti3_format.html	2008-07-27 11:42:04.000000000 +0200
@@ -173,7 +173,7 @@
 or "<span style="font-weight: bold;">RGB_LAB</span>" for an RGB printer
 or display, "<span style="font-weight: bold;">CMYK_XYZ</span>" for a
 printer, "<span style="font-weight: bold;">XYZ_RGB"</span> for an RGB
-scanner.<br>
+acquisition device.<br>
 <br>
 If spectral values are going to be included in the file, the following
 keywords and values shall be used:<br>
diff -uNr Argyll_V1.0.1.orig/doc/ucmm.html Argyll_V1.0.1/doc/ucmm.html
--- Argyll_V1.0.1.orig/doc/ucmm.html	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/doc/ucmm.html	2008-07-27 11:41:27.000000000 +0200
@@ -13,7 +13,7 @@
 designed just to handle the necessary configuration needed to track the
 installation and association of ICC profiles with Unix/Linux X11
 displays. It could be expanded at some point to also hold the
-associations for other devices such as scanner and printers.<br>
+associations for other devices such as acquisition devices and printers.<br>
 <br>
 It consists primarily of a small configuration database that associates
 a display monitor (identified by its EDID or the X11 display name if an
diff -uNr Argyll_V1.0.1.orig/log.txt Argyll_V1.0.1/log.txt
--- Argyll_V1.0.1.orig/log.txt	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/log.txt	2008-07-27 11:35:38.000000000 +0200
@@ -1648,7 +1648,7 @@
 	
 *   Added shaper/matrix input profile support.
 	(profile/profin.c, xicc/xmatrix.c)
-    This may be more accurate for scanner profiles,
+    This may be more accurate for device profiles,
     given the poor coverage of test points provided
     by an IT8 chart (but doesn't appear to be in practice).
 
@@ -1659,7 +1659,7 @@
 
 *   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
+    profile for the device, to be able to measure
     color for printer calibration. This
 	new mode handles multi-page test charts.
 
@@ -1689,13 +1689,13 @@
 	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.
+	devices, as well as device 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.
+	as well as preview colors and device recognition templates.
 
 *   Create a new test point creation module,
     target/simplat.c, to create higher dimentional,
@@ -1793,7 +1793,7 @@
 
 *   Added preliminary support in printtarg for the SpectroScan
     spectrodensitometer. Also added preliminary support for
-    scanner recognisable test charts.
+    device recognisable test charts.
 
 *   Added option to icclink to turn off the use of linearisation
     curves in the output link, since this sometimes seems to
@@ -1960,7 +1960,7 @@
   Cleaned up build automation somewhat.
 
   Added RGB output device profile generation support.
-  Added RGB scanner device profile generation support.
+  Added RGB device profile generation support.
 
   Added a couple of spectrometer conversion utilities for
   raw data files from other CMSs.
diff -uNr Argyll_V1.0.1.orig/profile/profcheck.c Argyll_V1.0.1/profile/profcheck.c
--- Argyll_V1.0.1.orig/profile/profcheck.c	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/profile/profcheck.c	2008-07-27 11:54:01.000000000 +0200
@@ -360,7 +360,7 @@
 			devchan = 3;
 			isLab = 1;
 			isAdditive = 1;
-		/* Scanner .ti3 files: */
+		/* Acquisition Device .ti3 files: */
 		} else if (strcmp(icg->t[0].kdata[ti],"XYZ_RGB") == 0) {
 			devspace = icSigRgbData;
 			devchan = 3;
diff -uNr Argyll_V1.0.1.orig/profile/profin.c Argyll_V1.0.1/profile/profin.c
--- Argyll_V1.0.1.orig/profile/profin.c	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/profile/profin.c	2008-07-27 11:53:08.000000000 +0200
@@ -49,7 +49,7 @@
 /*
    Basic algorithm outline:
 
- Scanner:
+ Acquisition Device:
 
    Figure out the input curves to give
    the flattest grid.
diff -uNr Argyll_V1.0.1.orig/Readme.txt Argyll_V1.0.1/Readme.txt
--- Argyll_V1.0.1.orig/Readme.txt	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/Readme.txt	2008-07-27 11:38:54.000000000 +0200
@@ -1,36 +1,36 @@
 
-Argyll CMS README file - Version 1.0.0
+Argyll CMS README file - Version 1.0.1
 --------------------------------------
 
 Date:   27th June 2008
 Author: Graeme Gill
 
-Argyll is an open source, ICC compatible color management system. It supports
-accurate ICC profile creation for scanners, CMYK printers, film recorders and
-calibration and profiling of displays. Spectral sample data is supported,
-allowing a selection of illuminants observer types, and paper fluorescent
-whitener additive compensation. Profiles can also incorporate source specific
-gamut mappings for perceptual and saturation intents. Gamut mapping and profile
-linking uses the CIECAM02 appearance model, a unique gamut mapping algorithm,
-and a wide selection of rendering intents. It also includes code for the
-fastest portable 8 bit raster color conversion engine available anywhere,
-as well as support for fast, fully accurate 16 bit conversion. Device color
-gamuts can also be viewed and compared using a VRML viewer. Comprehensive
-documentation is provided for each utility, and a general guide to using
-the tools for typical color management tasks is also available. A mailing
-list provides support for more advanced usage.
-
-This is Version 1.00. The last full release was in December 2005,
-with V0.7 Beta releases in between. The first public release of
-icclib was in November 1998, and of Argyll was in July 2000.
-Code development commenced in 1995. See Changes Summary for an
-overview of changes since the last release. Changes between
-revisions is detailed in the log.txt file that accompanies
-the source code. 
+Argyll is an open source, ICC compatible color management system. It supports 
+accurate ICC profile creation for acquisition devices, CMYK printers, film 
+recorders and calibration and profiling of displays. Spectral sample data is 
+supported, allowing a selection of illuminants observer types, and paper 
+fluorescent whitener additive compensation. Profiles can also incorporate 
+source specific gamut mappings for perceptual and saturation intents. Gamut 
+mapping and profile linking uses the CIECAM02 appearance model, a unique gamut 
+mapping algorithm, and a wide selection of rendering intents. It also includes 
+code for the fastest portable 8 bit raster color conversion engine available 
+anywhere, as well as support for fast, fully accurate 16 bit conversion. Device 
+color gamuts can also be viewed and compared using a VRML viewer. Comprehensive 
+documentation is provided for each utility, and a general guide to using the 
+tools for typical color management tasks is also available. A mailing list 
+provides support for more advanced usage.
+
+This is Version 1.0.1. The last full release was in December 2005, with V0.7 
+Beta releases in between. The first public release of icclib was in November 
+1998, and of Argyll was in July 2000. Code development commenced in 1995. See 
+Changes Summary for an overview of changes since the last release. Changes 
+between revisions is detailed in the log.txt file that accompanies the source 
+code. 
 
 It is licensed under the GNU Version 3 license.
 
-For more information, please consult the HTML documentation in <doc/ArgyllDoc.html>,
+For more information, please consult the HTML documentation in 
+<doc/ArgyllDoc.html>,
 or <http://www.argyllcms.com/doc/ArgyllDoc.html>.
 
 For the most recent source code start at <http://www.argyllcms.com/index.html>.
diff -uNr Argyll_V1.0.1.orig/scanin/scanin.c Argyll_V1.0.1/scanin/scanin.c
--- Argyll_V1.0.1.orig/scanin/scanin.c	2008-07-27 11:18:53.000000000 +0200
+++ Argyll_V1.0.1/scanin/scanin.c	2008-07-27 11:26:37.000000000 +0200
@@ -2,7 +2,7 @@
 /* 
  * Argyll Color Correction System
  *
- * Scanin: Input the scan of a test chart, and output cgats data
+ * Scanin: Input the image of a test chart, and output cgats data
  *         Uses scanrd to do the hard work.
  *
  * Author: Graeme W. Gill
@@ -72,7 +72,7 @@
 	fprintf(stderr,"Author: Graeme W. Gill, licensed under the GPL Version 3\n");
 	fprintf(stderr,"\n");
 	fprintf(stderr,"usage: scanin [options] input.tif recogin.cht valin.cie [diag.tif]\n");
-	fprintf(stderr,"   :- inputs 'input.tif' and outputs scanner 'input.ti3', or\n");
+	fprintf(stderr,"   :- inputs 'input.tif' and outputs device 'input.ti3', or\n");
 	fprintf(stderr,"\n");
 	fprintf(stderr,"usage: scanin -g [options] input.tif recogout.cht [diag.tif]\n");
 	fprintf(stderr,"   :- outputs file 'recogout.cht', or\n");
@@ -92,7 +92,7 @@
 	fprintf(stderr," -ca                  Same as -c, but accumulates more values to .ti3\n");
 	fprintf(stderr,"                       from subsequent pages\n");
 	fprintf(stderr," -r                   Replace device values in .ti2/.ti3\n");
-	fprintf(stderr,"                      Default is to create a scanner .ti3 file\n");
+	fprintf(stderr,"                      Default is to create a device .ti3 file\n");
 	fprintf(stderr," -F x1,y1,x2,y2,x3,y3,x4,y4\n");
 	fprintf(stderr,"                      Don't auto recognize, locate using four fiducual marks\n");
 	fprintf(stderr," -p                   Compensate for perspective distortion\n");
@@ -127,12 +127,12 @@
 	static char datin_name[200] = { 0 };	/* Data input name (.cie/.q60) */
 	static char datout_name[200] = { 0 };	/* Data output name (.ti3/.val) */
 	static char recog_name[200] = { 0 };	/* Reference chart name (.cht) */
-	static char prof_name[200] = { 0 };		/* scanner profile name (.cht) */
+	static char prof_name[200] = { 0 };		/* device profile name (.cht) */
 	static char diag_name[200] = { 0 };		/* Diagnostic Output (.tif) name, if used */
 	int verb = 1;
 	int tmean = 0;		/* Return true mean, rather than robust mean */
 	int repl = 0;		/* Replace .ti3 device values from raster file */
-	int outo = 0;		/* Output the values read, rather than creating scanner .ti3 */
+	int outo = 0;		/* Output the values read, rather than creating device .ti3 */
 	int colm = 0;		/* Use inage values to measure color for print profile. > 1 == append */
 	int flags = SI_GENERAL_ROT;	/* Default allow all rotations */
 
@@ -153,7 +153,7 @@
 	scanrd *sr;				/* Scanrd object */
 	int err;	
 	char *errm;
-	int pnotscan = 0;		/* Number of patches that wern't scanned */
+	int pnotscan = 0;		/* Number of patches that weren't processed */
 
 	if (argc <= 1)
 		usage();
diff -uNr Argyll_V1.0.1.orig/target/printtarg.c Argyll_V1.0.1/target/printtarg.c
--- Argyll_V1.0.1.orig/target/printtarg.c	2008-07-27 11:18:52.000000000 +0200
+++ Argyll_V1.0.1/target/printtarg.c	2008-07-27 11:37:20.000000000 +0200
@@ -3252,7 +3252,7 @@
 }
 
 /******************************************************************/
-/* Edge tracking support, for generating the scanner image        */
+/* Edge tracking support, for generating the device image        */
 /* recognition reference chart file. */
 
 /* Establish width and height to convert between topleft and */
diff -uNr Argyll_V1.0.1.orig/ttbd.txt Argyll_V1.0.1/ttbd.txt
--- Argyll_V1.0.1.orig/ttbd.txt	2008-07-27 11:18:54.000000000 +0200
+++ Argyll_V1.0.1/ttbd.txt	2008-07-27 11:54:46.000000000 +0200
@@ -123,7 +123,7 @@
 
 * Should create a .ti2 template file for some standard charts,
   such as an IT8.7/3, ECI2002 random and non-random etc.
-  Scanner recognition files too ??
+  Device recognition files too ??
 
 * Add an option to targen, that allows generation of
   test points down the neutral axis (how does this work
@@ -293,7 +293,7 @@
   patch variance is too high (probable faulty read).
 
 * Add spectral fix options to scanin code to allow compensation
-  for scanner and media errors when using a scanned image to
+  for device and media errors when using an acquired image to
   measure color.
   This means figuring out how it will work, as well as creating
   to tools to create the spectral fix data (or just add general

argyllcms-1.0.1-printf.patch:

--- NEW FILE argyllcms-1.0.1-printf.patch ---
diff -uNr Argyll_V1.0.1.orig/icc/icc.c Argyll_V1.0.1/icc/icc.c
--- Argyll_V1.0.1.orig/icc/icc.c	2008-07-14 06:11:23.000000000 +0200
+++ Argyll_V1.0.1/icc/icc.c	2008-07-27 13:38:24.000000000 +0200
@@ -1772,8 +1772,8 @@
 	if (verb <= 1)
 		return;
 
-	op->printf(op,"Unknown:\n");
-	op->printf(op,"  Payload size in bytes = %u\n",p->size);
+	(op->printf)(op,"Unknown:\n");
+	(op->printf)(op,"  Payload size in bytes = %u\n",p->size);
 
 	/* Print one row of binary and ASCII interpretation if verb == 2, All if == 3 */
 	/* else print all of it. */
@@ -1783,35 +1783,35 @@
 
 		c = 1;
 		if (ph != 0) {	/* Print ASCII under binary */
-			op->printf(op,"           ");
+			(op->printf)(op,"           ");
 			i = ii;				/* Swap */
 			c += 11;
 		} else {
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			ii = i;				/* Swap */
 			c += 10;
 		}
 		while (i < p->size && c < 75) {
 			if (ph == 0) 
-				op->printf(op,"%02x ",p->data[i]);
+				(op->printf)(op,"%02x ",p->data[i]);
 			else {
 				if (isprint(p->data[i]))
-					op->printf(op," %c ",p->data[i]);
+					(op->printf)(op," %c ",p->data[i]);
 				else
-					op->printf(op,"   ",p->data[i]);
+					(op->printf)(op,"   ",p->data[i]);
 			}
 			c += 3;
 			i++;
 		}
 		if (ph == 0 || i < p->size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 
 		if (ph == 1 && i >= p->size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (ph == 1 && r > 1 && verb < 3) {
-			op->printf(op,"    ...\n");
+			(op->printf)(op,"    ...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 
@@ -2002,12 +2002,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt8Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt8Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2189,12 +2189,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2376,12 +2376,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt32Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt32Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2563,12 +2563,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt64Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt64Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l);
+			(op->printf)(op,"    %lu:  h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l);
 	}
 }
 
@@ -2750,12 +2750,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"U16Fixed16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"U16Fixed16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %f\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %f\n",i,p->data[i]);
 	}
 }
 
@@ -2937,12 +2937,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"S15Fixed16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"S15Fixed16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %f\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %f\n",i,p->data[i]);
 	}
 }
 
@@ -3166,12 +3166,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"XYZArray:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"XYZArray:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++) {
-			op->printf(op,"    %lu:  %s\n",i,string_XYZNumber_and_Lab(&p->data[i]));
+			(op->printf)(op,"    %lu:  %s\n",i,string_XYZNumber_and_Lab(&p->data[i]));
 			
 		}
 	}
@@ -3640,18 +3640,18 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Curve:\n");
+	(op->printf)(op,"Curve:\n");
 
 	if (p->flag == icmCurveLin) {
-		op->printf(op,"  Curve is linear\n");
+		(op->printf)(op,"  Curve is linear\n");
 	} else if (p->flag == icmCurveGamma) {
-		op->printf(op,"  Curve is gamma of %f\n",p->data[0]);
+		(op->printf)(op,"  Curve is gamma of %f\n",p->data[0]);
 	} else {
-		op->printf(op,"  No. elements = %lu\n",p->size);
+		(op->printf)(op,"  No. elements = %lu\n",p->size);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->size; i++)
-				op->printf(op,"    %3lu:  %f\n",i,p->data[i]);
+				(op->printf)(op,"    %3lu:  %f\n",i,p->data[i]);
 		}
 	}
 }
@@ -3892,68 +3892,68 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Data:\n");
+	(op->printf)(op,"Data:\n");
 	switch(p->flag) {
 		case icmDataASCII:
-			op->printf(op,"  ASCII data\n");
+			(op->printf)(op,"  ASCII data\n");
 			size = p->size > 0 ? p->size-1 : 0;
 			break;
 		case icmDataBin:
-			op->printf(op,"  Binary data\n");
+			(op->printf)(op,"  Binary data\n");
 			size = p->size;
 			break;
 		case icmDataUndef:
-			op->printf(op,"  Undefined data\n");
+			(op->printf)(op,"  Undefined data\n");
 			size = p->size;
 			break;
 	}
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 
 	ii = i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 
 		c = 1;
 		if (ph != 0) {	/* Print ASCII under binary */
-			op->printf(op,"           ");
+			(op->printf)(op,"           ");
 			i = ii;
 			c += 11;
 		} else {
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			ii = i;
 			c += 10;
 		}
 		while (i < size && c < 75) {
 			if (p->flag == icmDataASCII) {
 				if (isprint(p->data[i])) {
-					op->printf(op,"%c",p->data[i]);
+					(op->printf)(op,"%c",p->data[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->data[i]);
+					(op->printf)(op,"\\%03o",p->data[i]);
 					c += 4;
 				}
 			} else {
 				if (ph == 0) 
-					op->printf(op,"%02x ",p->data[i]);
+					(op->printf)(op,"%02x ",p->data[i]);
 				else {
 					if (isprint(p->data[i]))
-						op->printf(op," %c ",p->data[i]);
+						(op->printf)(op," %c ",p->data[i]);
 					else
-						op->printf(op,"   ",p->data[i]);
+						(op->printf)(op,"   ",p->data[i]);
 				}
 				c += 3;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 		if (verb > 2 && p->flag != icmDataASCII && ph == 0)
 			ph = 1;
 		else
@@ -4143,35 +4143,35 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Text:\n");
-	op->printf(op,"  No. chars = %lu\n",p->size);
+	(op->printf)(op,"Text:\n");
+	(op->printf)(op,"  No. chars = %lu\n",p->size);
 
 	size = p->size > 0 ? p->size-1 : 0;
 	i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 		c = 1;
-		op->printf(op,"    0x%04lx: ",i);
+		(op->printf)(op,"    0x%04lx: ",i);
 		c += 10;
 		while (i < size && c < 75) {
 			if (isprint(p->data[i])) {
-				op->printf(op,"%c",p->data[i]);
+				(op->printf)(op,"%c",p->data[i]);
 				c++;
 			} else {
-				op->printf(op,"\\%03o",p->data[i]);
+				(op->printf)(op,"\\%03o",p->data[i]);
 				c += 4;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 	}
 }
 
@@ -4476,8 +4476,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"DateTimeNumber:\n");
-	op->printf(op,"  Date = %s\n", string_DateTimeNumber(p));
+	(op->printf)(op,"DateTimeNumber:\n");
+	(op->printf)(op,"  Date = %s\n", string_DateTimeNumber(p));
 }
 
 /* Allocate variable sized data elements */
@@ -5988,34 +5988,34 @@
 		return;
 
 	if (p->ttype == icSigLut8Type) {
-		op->printf(op,"Lut8:\n");
+		(op->printf)(op,"Lut8:\n");
 	} else {
-		op->printf(op,"Lut16:\n");
+		(op->printf)(op,"Lut16:\n");
 	}
-	op->printf(op,"  Input Channels = %u\n",p->inputChan);
-	op->printf(op,"  Output Channels = %u\n",p->outputChan);
-	op->printf(op,"  CLUT resolution = %u\n",p->clutPoints);
-	op->printf(op,"  Input Table entries = %u\n",p->inputEnt);
-	op->printf(op,"  Output Table entries = %u\n",p->outputEnt);
-	op->printf(op,"  XYZ matrix =  %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]);
-	op->printf(op,"                %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]);
-	op->printf(op,"                %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]);
+	(op->printf)(op,"  Input Channels = %u\n",p->inputChan);
+	(op->printf)(op,"  Output Channels = %u\n",p->outputChan);
+	(op->printf)(op,"  CLUT resolution = %u\n",p->clutPoints);
+	(op->printf)(op,"  Input Table entries = %u\n",p->inputEnt);
+	(op->printf)(op,"  Output Table entries = %u\n",p->outputEnt);
+	(op->printf)(op,"  XYZ matrix =  %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]);
+	(op->printf)(op,"                %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]);
+	(op->printf)(op,"                %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]);
 
 	if (verb >= 2) {
 		unsigned int i, j, size;
 		unsigned int ii[MAX_CHAN];	/* maximum no of input channels */
 
-		op->printf(op,"  Input table:\n");
+		(op->printf)(op,"  Input table:\n");
 		for (i = 0; i < p->inputEnt; i++) {
-			op->printf(op,"    %3u: ",i);
+			(op->printf)(op,"    %3u: ",i);
 			for (j = 0; j < p->inputChan; j++)
-				op->printf(op," %1.10f",p->inputTable[j * p->inputEnt + i]);
-			op->printf(op,"\n");
+				(op->printf)(op," %1.10f",p->inputTable[j * p->inputEnt + i]);
+			(op->printf)(op,"\n");
 		}
 
-		op->printf(op,"\n  CLUT table:\n");
+		(op->printf)(op,"\n  CLUT table:\n");
 		if (p->inputChan > MAX_CHAN) {
-			op->printf(op,"  !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN);
+			(op->printf)(op,"  !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN);
 		} else {
 			size = (p->outputChan * uipow(p->clutPoints,p->inputChan));
 			for (j = 0; j < p->inputChan; j++)
@@ -6023,14 +6023,14 @@
 			for (i = 0; i < size;) {
 				unsigned int k;
 				/* Print table entry index */
-				op->printf(op,"   ");
+				(op->printf)(op,"   ");
 				for (j = p->inputChan-1; j < p->inputChan; j--)
-					op->printf(op," %2u",ii[j]);
-				op->printf(op,":");
+					(op->printf)(op," %2u",ii[j]);
+				(op->printf)(op,":");
 				/* Print table entry contents */
 				for (k = 0; k < p->outputChan; k++, i++)
-					op->printf(op," %1.10f",p->clutTable[i]);
-				op->printf(op,"\n");
+					(op->printf)(op," %1.10f",p->clutTable[i]);
+				(op->printf)(op,"\n");
 			
 				for (j = 0; j < p->inputChan; j++) { /* Increment index */
 					ii[j]++;
@@ -6041,12 +6041,12 @@
 			}
 		}
 
-		op->printf(op,"\n  Output table:\n");
+		(op->printf)(op,"\n  Output table:\n");
 		for (i = 0; i < p->outputEnt; i++) {
-			op->printf(op,"    %3u: ",i);
+			(op->printf)(op,"    %3u: ",i);
 			for (j = 0; j < p->outputChan; j++)
-				op->printf(op," %1.10f",p->outputTable[j * p->outputEnt + i]);
-			op->printf(op,"\n");
+				(op->printf)(op," %1.10f",p->outputTable[j * p->outputEnt + i]);
+			(op->printf)(op,"\n");
 		}
 
 	}
@@ -6356,12 +6356,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Measurement:\n");
-	op->printf(op,"  Standard Observer = %s\n", string_StandardObserver(p->observer));
-	op->printf(op,"  XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing));
-	op->printf(op,"  Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry));
-	op->printf(op,"  Measurement Flare = %5.1f%%\n", p->flare * 100.0);
-	op->printf(op,"  Standard Illuminant = %s\n", string_Illuminant(p->illuminant));
+	(op->printf)(op,"Measurement:\n");
+	(op->printf)(op,"  Standard Observer = %s\n", string_StandardObserver(p->observer));
+	(op->printf)(op,"  XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing));
+	(op->printf)(op,"  Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry));
+	(op->printf)(op,"  Measurement Flare = %5.1f%%\n", p->flare * 100.0);
+	(op->printf)(op,"  Standard Illuminant = %s\n", string_Illuminant(p->illuminant));
 }
 
 /* Allocate variable sized data elements */
@@ -6839,45 +6839,45 @@
 		return;
 
 	if (p->ttype == icSigNamedColorType)
-		op->printf(op,"NamedColor:\n");
+		(op->printf)(op,"NamedColor:\n");
 	else
-		op->printf(op,"NamedColor2:\n");
-	op->printf(op,"  Vendor Flag = 0x%x\n",p->vendorFlag);
-	op->printf(op,"  No. colors  = %u\n",p->count);
-	op->printf(op,"  No. dev. coords = %u\n",p->nDeviceCoords);
-	op->printf(op,"  Name prefix = '%s'\n",p->prefix);
-	op->printf(op,"  Name suffix = '%s'\n",p->suffix);
+		(op->printf)(op,"NamedColor2:\n");
+	(op->printf)(op,"  Vendor Flag = 0x%x\n",p->vendorFlag);
+	(op->printf)(op,"  No. colors  = %u\n",p->count);
+	(op->printf)(op,"  No. dev. coords = %u\n",p->nDeviceCoords);
+	(op->printf)(op,"  Name prefix = '%s'\n",p->prefix);
+	(op->printf)(op,"  Name suffix = '%s'\n",p->suffix);
 	if (verb >= 2) {
 		unsigned long i, n;
 		icmNamedColorVal *vp;
 		for (i = 0; i < p->count; i++) {
 			vp = p->data + i;
-			op->printf(op,"    Color %lu:\n",i);
-			op->printf(op,"      Name root = '%s'\n",vp->root);
+			(op->printf)(op,"    Color %lu:\n",i);
+			(op->printf)(op,"      Name root = '%s'\n",vp->root);
 
 			if (p->ttype == icSigNamedColor2Type) {
 				switch(icp->header->pcs) {
 					case icSigXYZData:
-							op->printf(op,"      XYZ = %f, %f, %f\n",
+							(op->printf)(op,"      XYZ = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 			    	case icSigLabData:
-							op->printf(op,"      Lab = %f, %f, %f\n",
+							(op->printf)(op,"      Lab = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 					default:
-							op->printf(op,"      Unexpected PCS\n");
+							(op->printf)(op,"      Unexpected PCS\n");
 						break;
 				}
 			}
 			if (p->nDeviceCoords > 0) {
-				op->printf(op,"      Device Coords = ");
+				(op->printf)(op,"      Device Coords = ");
 				for (n = 0; n < p->nDeviceCoords; n++) {
 					if (n > 0)
-						op->printf(op,", ");
-					op->printf(op,"%f",vp->deviceCoords[n]);
+						(op->printf)(op,", ");
+					(op->printf)(op,"%f",vp->deviceCoords[n]);
 				}
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 			}
 		}
 	}
@@ -7177,28 +7177,28 @@
 		return;
 
 	if (p->ttype == icSigColorantTableType)
-		op->printf(op,"ColorantTable:\n");
-	op->printf(op,"  No. colorants  = %u\n",p->count);
+		(op->printf)(op,"ColorantTable:\n");
+	(op->printf)(op,"  No. colorants  = %u\n",p->count);
 	if (verb >= 2) {
 		unsigned long i;
 		icmColorantTableVal *vp;
 		for (i = 0; i < p->count; i++) {
 			vp = p->data + i;
-			op->printf(op,"    Colorant %lu:\n",i);
-			op->printf(op,"      Name = '%s'\n",vp->name);
+			(op->printf)(op,"    Colorant %lu:\n",i);
+			(op->printf)(op,"      Name = '%s'\n",vp->name);
 
 			if (p->ttype == icSigColorantTableType) {
 				switch(pcs) {
 					case icSigXYZData:
-							op->printf(op,"      XYZ = %f, %f, %f\n",
+							(op->printf)(op,"      XYZ = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 			    	case icSigLabData:
-							op->printf(op,"      Lab = %f, %f, %f\n",
+							(op->printf)(op,"      Lab = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 					default:
-							op->printf(op,"      Unexpected PCS\n");
+							(op->printf)(op,"      Unexpected PCS\n");
 						break;
 				}
 			}
@@ -7596,98 +7596,98 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"TextDescription:\n");
+	(op->printf)(op,"TextDescription:\n");
 
 	if (p->size > 0) {
 		unsigned long size = p->size > 0 ? p->size-1 : 0;
-		op->printf(op,"  ASCII data, length %lu chars:\n",p->size);
+		(op->printf)(op,"  ASCII data, length %lu chars:\n",p->size);
 
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
 				if (isprint(p->desc[i])) {
-					op->printf(op,"%c",p->desc[i]);
+					(op->printf)(op,"%c",p->desc[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->desc[i]);
+					(op->printf)(op,"\\%03o",p->desc[i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No ASCII data\n");
+		(op->printf)(op,"  No ASCII data\n");
 	}
 
 	/* Can't dump Unicode or ScriptCode as text with portable code */
 	if (p->ucSize > 0) {
 		unsigned long size = p->ucSize;
-		op->printf(op,"  Unicode Data, Language code 0x%x, length %lu chars\n",
+		(op->printf)(op,"  Unicode Data, Language code 0x%x, length %lu chars\n",
 		        p->ucLangCode, p->ucSize);
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
-				op->printf(op,"%04x ",p->ucDesc[i]);
+				(op->printf)(op,"%04x ",p->ucDesc[i]);
 				c += 5;
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No Unicode data\n");
+		(op->printf)(op,"  No Unicode data\n");
 	}
 	if (p->scSize > 0) {
 		unsigned long size = p->scSize;
-		op->printf(op,"  ScriptCode Data, Code 0x%x, length %lu chars\n",
+		(op->printf)(op,"  ScriptCode Data, Code 0x%x, length %lu chars\n",
 		        p->scCode, p->scSize);
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
-				op->printf(op,"%02x ",p->scDesc[i]);
+				(op->printf)(op,"%02x ",p->scDesc[i]);
 				c += 3;
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No ScriptCode data\n");
+		(op->printf)(op,"  No ScriptCode data\n");
 	}
 }
 
@@ -7879,15 +7879,15 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"DescStruct %u:\n",index);
+	(op->printf)(op,"DescStruct %u:\n",index);
 	if (verb >= 1) {
-		op->printf(op,"  Dev. Mnfctr.    = %s\n",tag2str(p->deviceMfg));	/* ~~~ */
-		op->printf(op,"  Dev. Model      = %s\n",tag2str(p->deviceModel));	/* ~~~ */
-		op->printf(op,"  Dev. Attrbts    = %s\n", string_DeviceAttributes(p->attributes.l));
-		op->printf(op,"  Dev. Technology = %s\n", string_TechnologySignature(p->technology));
+		(op->printf)(op,"  Dev. Mnfctr.    = %s\n",tag2str(p->deviceMfg));	/* ~~~ */
+		(op->printf)(op,"  Dev. Model      = %s\n",tag2str(p->deviceModel));	/* ~~~ */
+		(op->printf)(op,"  Dev. Attrbts    = %s\n", string_DeviceAttributes(p->attributes.l));
+		(op->printf)(op,"  Dev. Technology = %s\n", string_TechnologySignature(p->technology));
 		p->device.dump((icmBase *)&p->device, op,verb);
 		p->model.dump((icmBase *)&p->model, op,verb);
-		op->printf(op,"\n");
+		(op->printf)(op,"\n");
 	}
 }
 
@@ -8068,8 +8068,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"ProfileSequenceDesc:\n");
-	op->printf(op,"  No. elements = %u\n",p->count);
+	(op->printf)(op,"ProfileSequenceDesc:\n");
+	(op->printf)(op,"  No. elements = %u\n",p->count);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->count; i++)
@@ -8249,8 +8249,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Signature\n");
-	op->printf(op,"  Technology = %s\n", string_TechnologySignature(p->sig));
+	(op->printf)(op,"Signature\n");
+	(op->printf)(op,"  Technology = %s\n", string_TechnologySignature(p->sig));
 }
 
 /* Allocate variable sized data elements */
@@ -8457,16 +8457,16 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Screening:\n");
-	op->printf(op,"  Flags = %s\n", string_ScreenEncodings(p->screeningFlag));
-	op->printf(op,"  No. channels = %u\n",p->channels);
+	(op->printf)(op,"Screening:\n");
+	(op->printf)(op,"  Flags = %s\n", string_ScreenEncodings(p->screeningFlag));
+	(op->printf)(op,"  No. channels = %u\n",p->channels);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->channels; i++) {
-			op->printf(op,"    %lu:\n",i);
-			op->printf(op,"      Frequency:  %f\n",p->data[i].frequency);
-			op->printf(op,"      Angle:      %f\n",p->data[i].angle);
-			op->printf(op,"      Spot shape: %s\n", string_SpotShape(p->data[i].spotShape));
+			(op->printf)(op,"    %lu:\n",i);
+			(op->printf)(op,"      Frequency:  %f\n",p->data[i].frequency);
+			(op->printf)(op,"      Angle:      %f\n",p->data[i].angle);
+			(op->printf)(op,"      Spot shape: %s\n", string_SpotShape(p->data[i].spotShape));
 		}
 	}
 }
@@ -8757,64 +8757,64 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Undercolor Removal Curve & Black Generation:\n");
+	(op->printf)(op,"Undercolor Removal Curve & Black Generation:\n");
 
 	if (p->UCRcount == 0) {
-		op->printf(op,"  UCR: Not specified\n");
+		(op->printf)(op,"  UCR: Not specified\n");
 	} else if (p->UCRcount == 1) {
-		op->printf(op,"  UCR: %f%%\n",p->UCRcurve[0]);
+		(op->printf)(op,"  UCR: %f%%\n",p->UCRcurve[0]);
 	} else {
-		op->printf(op,"  UCR curve no. elements = %u\n",p->UCRcount);
+		(op->printf)(op,"  UCR curve no. elements = %u\n",p->UCRcount);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->UCRcount; i++)
-				op->printf(op,"  %3lu:  %f\n",i,p->UCRcurve[i]);
+				(op->printf)(op,"  %3lu:  %f\n",i,p->UCRcurve[i]);
 		}
 	}
 	if (p->BGcount == 0) {
-		op->printf(op,"  BG: Not specified\n");
+		(op->printf)(op,"  BG: Not specified\n");
 	} else if (p->BGcount == 1) {
-		op->printf(op,"  BG: %f%%\n",p->BGcurve[0]);
+		(op->printf)(op,"  BG: %f%%\n",p->BGcurve[0]);
 	} else {
-		op->printf(op,"  BG curve no. elements = %u\n",p->BGcount);
+		(op->printf)(op,"  BG curve no. elements = %u\n",p->BGcount);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->BGcount; i++)
-				op->printf(op,"  %3lu:  %f\n",i,p->BGcurve[i]);
+				(op->printf)(op,"  %3lu:  %f\n",i,p->BGcurve[i]);
 		}
 	}
 
 	{
 		unsigned long i, r, c, size;
-		op->printf(op,"  Description:\n");
-		op->printf(op,"    No. chars = %lu\n",p->size);
+		(op->printf)(op,"  Description:\n");
+		(op->printf)(op,"    No. chars = %lu\n",p->size);
 	
 		size = p->size > 0 ? p->size-1 : 0;
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"      0x%04lx: ",i);
+			(op->printf)(op,"      0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 73) {
 				if (isprint(p->string[i])) {
-					op->printf(op,"%c",p->string[i]);
+					(op->printf)(op,"%c",p->string[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->string[i]);
+					(op->printf)(op,"\\%03o",p->string[i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	}
 }
@@ -9171,37 +9171,37 @@
 		return;
 
 	if (p->tagType == icmVideoCardGammaTableType) {
-		op->printf(op,"VideoCardGammaTable:\n");
-		op->printf(op,"  channels  = %d\n", p->u.table.channels);
-		op->printf(op,"  entries   = %d\n", p->u.table.entryCount);
-		op->printf(op,"  entrysize = %d\n", p->u.table.entrySize);
+		(op->printf)(op,"VideoCardGammaTable:\n");
+		(op->printf)(op,"  channels  = %d\n", p->u.table.channels);
+		(op->printf)(op,"  entries   = %d\n", p->u.table.entryCount);
+		(op->printf)(op,"  entrysize = %d\n", p->u.table.entrySize);
 		if (verb >= 2) {
 			/* dump array contents also */
 			for (c=0; c<p->u.table.channels; c++) {
-				op->printf(op,"  channel #%d\n",c);
+				(op->printf)(op,"  channel #%d\n",c);
 				for (i=0; i<p->u.table.entryCount; i++) {
 					if (p->u.table.entrySize == 1) {
-						op->printf(op,"    %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]);
+						(op->printf)(op,"    %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]);
 					}
 					else if (p->u.table.entrySize == 2) {
-						op->printf(op,"    %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]);
+						(op->printf)(op,"    %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]);
 					}
 				}
 			}
 		}
 	} else if (p->tagType == icmVideoCardGammaFormulaType) {
-		op->printf(op,"VideoCardGammaFormula:\n");
-		op->printf(op,"  red gamma   = %f\n", p->u.formula.redGamma);
-		op->printf(op,"  red min     = %f\n", p->u.formula.redMin);
-		op->printf(op,"  red max     = %f\n", p->u.formula.redMax);
-		op->printf(op,"  green gamma = %f\n", p->u.formula.greenGamma);
-		op->printf(op,"  green min   = %f\n", p->u.formula.greenMin);
-		op->printf(op,"  green max   = %f\n", p->u.formula.greenMax);
-		op->printf(op,"  blue gamma  = %f\n", p->u.formula.blueGamma);
-		op->printf(op,"  blue min    = %f\n", p->u.formula.blueMin);
-		op->printf(op,"  blue max    = %f\n", p->u.formula.blueMax);
+		(op->printf)(op,"VideoCardGammaFormula:\n");
+		(op->printf)(op,"  red gamma   = %f\n", p->u.formula.redGamma);
+		(op->printf)(op,"  red min     = %f\n", p->u.formula.redMin);
+		(op->printf)(op,"  red max     = %f\n", p->u.formula.redMax);
+		(op->printf)(op,"  green gamma = %f\n", p->u.formula.greenGamma);
+		(op->printf)(op,"  green min   = %f\n", p->u.formula.greenMin);
+		(op->printf)(op,"  green max   = %f\n", p->u.formula.greenMax);
+		(op->printf)(op,"  blue gamma  = %f\n", p->u.formula.blueGamma);
+		(op->printf)(op,"  blue min    = %f\n", p->u.formula.blueMin);
+		(op->printf)(op,"  blue max    = %f\n", p->u.formula.blueMax);
 	} else {
-		op->printf(op,"  Unknown tag format\n");
+		(op->printf)(op,"  Unknown tag format\n");
 	}
 }
 
@@ -9484,10 +9484,10 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Viewing Conditions:\n");
-	op->printf(op,"  XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant));
-	op->printf(op,"  XYZ value of surround in cd/m^2   = %s\n", string_XYZNumber(&p->surround));
-	op->printf(op,"  Illuminant type = %s\n", string_Illuminant(p->stdIlluminant));
+	(op->printf)(op,"Viewing Conditions:\n");
+	(op->printf)(op,"  XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant));
+	(op->printf)(op,"  XYZ value of surround in cd/m^2   = %s\n", string_XYZNumber(&p->surround));
+	(op->printf)(op,"  Illuminant type = %s\n", string_Illuminant(p->stdIlluminant));
 }
 
 /* Allocate variable sized data elements */
@@ -9734,69 +9734,69 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"PostScript Product name and CRD names:\n");
+	(op->printf)(op,"PostScript Product name and CRD names:\n");
 
-	op->printf(op,"  Product name:\n");
-	op->printf(op,"    No. chars = %lu\n",p->ppsize);
+	(op->printf)(op,"  Product name:\n");
+	(op->printf)(op,"    No. chars = %lu\n",p->ppsize);
 	
 	size = p->ppsize > 0 ? p->ppsize-1 : 0;
 	i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 		c = 1;
-		op->printf(op,"      0x%04lx: ",i);
+		(op->printf)(op,"      0x%04lx: ",i);
 		c += 10;
 		while (i < size && c < 73) {
 			if (isprint(p->ppname[i])) {
-				op->printf(op,"%c",p->ppname[i]);
+				(op->printf)(op,"%c",p->ppname[i]);
 				c++;
 			} else {
-				op->printf(op,"\\%03o",p->ppname[i]);
+				(op->printf)(op,"\\%03o",p->ppname[i]);
 				c += 4;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 	}
 
 	for (t = 0; t < 4; t++) {	/* For all 4 intents */
-		op->printf(op,"  CRD%ld name:\n",t);
-		op->printf(op,"    No. chars = %lu\n",p->crdsize[t]);
+		(op->printf)(op,"  CRD%ld name:\n",t);
+		(op->printf)(op,"    No. chars = %lu\n",p->crdsize[t]);
 		
 		size = p->crdsize[t] > 0 ? p->crdsize[t]-1 : 0;
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"      0x%04lx: ",i);
+			(op->printf)(op,"      0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 73) {
 				if (isprint(p->crdname[t][i])) {
-					op->printf(op,"%c",p->crdname[t][i]);
+					(op->printf)(op,"%c",p->crdname[t][i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->crdname[t][i]);
+					(op->printf)(op,"\\%03o",p->crdname[t][i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	}
 }
@@ -10108,36 +10108,36 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Header:\n");
-	op->printf(op,"  size         = %d bytes\n",p->size);
-	op->printf(op,"  CMM          = %s\n",tag2str(p->cmmId));
-	op->printf(op,"  Version      = %d.%d.%d\n",p->majv, p->minv, p->bfv);
-	op->printf(op,"  Device Class = %s\n", string_ProfileClassSignature(p->deviceClass));
-	op->printf(op,"  Color Space  = %s\n", string_ColorSpaceSignature(p->colorSpace));
-	op->printf(op,"  Conn. Space  = %s\n", string_ColorSpaceSignature(p->pcs));
-	op->printf(op,"  Date, Time   = %s\n", string_DateTimeNumber(&p->date));
-	op->printf(op,"  Platform     = %s\n", string_PlatformSignature(p->platform));
-	op->printf(op,"  Flags        = %s\n", string_ProfileHeaderFlags(p->flags));
-	op->printf(op,"  Dev. Mnfctr. = %s\n", tag2str(p->manufacturer));	/* ~~~ */
-	op->printf(op,"  Dev. Model   = %s\n", tag2str(p->model));	/* ~~~ */
-	op->printf(op,"  Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l));
-	op->printf(op,"  Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent));
-	op->printf(op,"  Illuminant   = %s\n", string_XYZNumber_and_Lab(&p->illuminant));
-	op->printf(op,"  Creator      = %s\n", tag2str(p->creator));	/* ~~~ */
+	(op->printf)(op,"Header:\n");
+	(op->printf)(op,"  size         = %d bytes\n",p->size);
+	(op->printf)(op,"  CMM          = %s\n",tag2str(p->cmmId));
+	(op->printf)(op,"  Version      = %d.%d.%d\n",p->majv, p->minv, p->bfv);
+	(op->printf)(op,"  Device Class = %s\n", string_ProfileClassSignature(p->deviceClass));
+	(op->printf)(op,"  Color Space  = %s\n", string_ColorSpaceSignature(p->colorSpace));
+	(op->printf)(op,"  Conn. Space  = %s\n", string_ColorSpaceSignature(p->pcs));
+	(op->printf)(op,"  Date, Time   = %s\n", string_DateTimeNumber(&p->date));
+	(op->printf)(op,"  Platform     = %s\n", string_PlatformSignature(p->platform));
+	(op->printf)(op,"  Flags        = %s\n", string_ProfileHeaderFlags(p->flags));
+	(op->printf)(op,"  Dev. Mnfctr. = %s\n", tag2str(p->manufacturer));	/* ~~~ */
+	(op->printf)(op,"  Dev. Model   = %s\n", tag2str(p->model));	/* ~~~ */
+	(op->printf)(op,"  Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l));
+	(op->printf)(op,"  Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent));
+	(op->printf)(op,"  Illuminant   = %s\n", string_XYZNumber_and_Lab(&p->illuminant));
+	(op->printf)(op,"  Creator      = %s\n", tag2str(p->creator));	/* ~~~ */
 	if (p->icp->ver) {	/* V4.0+ feature */
 		for (i = 0; i < 16; i++) {		/* Check if ID has been set */
 			if (p->id[i] != 0)
 				break;
 		}
 		if (i < 16)
-			op->printf(op,"  ID           = %02X%02X%02X%02X%02X%02X%02X%02X"
+			(op->printf)(op,"  ID           = %02X%02X%02X%02X%02X%02X%02X%02X"
 			                               "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 				p->id[0], p->id[1], p->id[2], p->id[3], p->id[4], p->id[5], p->id[6], p->id[7],
 				p->id[8], p->id[9], p->id[10], p->id[11], p->id[12], p->id[13], p->id[14], p->id[15]);
 		else
-			op->printf(op,"  ID           = <Not set>\n");
+			(op->printf)(op,"  ID           = <Not set>\n");
 	}
-	op->printf(op,"\n");
+	(op->printf)(op,"\n");
 }
 
 static void icmHeader_delete(
@@ -11420,7 +11420,7 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"icc:\n");
+	(op->printf)(op,"icc:\n");
 
 	/* Dump the header */
 	if (p->header != NULL)
@@ -11430,21 +11430,21 @@
 	for (i = 0; i < p->count; i++) {	/* For all the tag element data */
 		icmBase *ob;
 		int tr;
-		op->printf(op,"tag %d:\n",i);
-		op->printf(op,"  sig      %s\n",tag2str(p->data[i].sig)); 
-		op->printf(op,"  type     %s\n",tag2str(p->data[i].ttype)); 
-		op->printf(op,"  offset   %d\n", p->data[i].offset);
-		op->printf(op,"  size     %d\n", p->data[i].size);
+		(op->printf)(op,"tag %d:\n",i);
+		(op->printf)(op,"  sig      %s\n",tag2str(p->data[i].sig)); 
+		(op->printf)(op,"  type     %s\n",tag2str(p->data[i].ttype)); 
+		(op->printf)(op,"  offset   %d\n", p->data[i].offset);
+		(op->printf)(op,"  size     %d\n", p->data[i].size);
 		tr = 0;
 		if ((ob = p->data[i].objp) == NULL) {
 			/* The object is not loaded, so load it then free it */
 			if ((ob = p->read_tag(p, p->data[i].sig)) == NULL) {
-				op->printf(op,"Unable to read: %d, %s\n",p->errc,p->err);
+				(op->printf)(op,"Unable to read: %d, %s\n",p->errc,p->err);
 			}
 			tr = 1;
 		}
 		if (ob != NULL) {
-			/* op->printf(op,"  refcount %d\n", ob->refcount); */
+			/* (op->printf)(op,"  refcount %d\n", ob->refcount); */
 			ob->dump(ob,op,verb-1);
 
 			if (tr != 0) {		/* Cleanup if temporary */
@@ -11453,7 +11453,7 @@
 				p->data[i].objp = NULL;
 			}
 		}
-		op->printf(op,"\n");
+		(op->printf)(op,"\n");
 	}
 }
 
diff -uNr Argyll_V1.0.1.orig/icc/iccdump.c Argyll_V1.0.1/icc/iccdump.c
--- Argyll_V1.0.1.orig/icc/iccdump.c	2008-07-14 06:11:23.000000000 +0200
+++ Argyll_V1.0.1/icc/iccdump.c	2008-07-27 13:38:24.000000000 +0200
@@ -216,13 +216,13 @@
 					else if (rv == 2) {
 						icmHeader *p = icco->header;
 						printf("Id check fails:\n");
-						op->printf(op," ID is        = %02X%02X%02X%02X%02X%02X%02X%02X"
+						(op->printf)(op," ID is        = %02X%02X%02X%02X%02X%02X%02X%02X"
 						                              "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 							p->id[0], p->id[1], p->id[2], p->id[3],
 							p->id[4], p->id[5], p->id[6], p->id[7],
 							p->id[8], p->id[9], p->id[10], p->id[11],
 							p->id[12], p->id[13], p->id[14], p->id[15]);
-						op->printf(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X"
+						(op->printf)(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X"
 						                              "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 							id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7],
 							id[8], id[9], id[10], id[11], id[12], id[13], id[14], id[15]);

argyllcms-1.0.1-remove-libusb-fork-check.patch:

--- NEW FILE argyllcms-1.0.1-remove-libusb-fork-check.patch ---
diff -uNr Argyll_V1.0.1.orig/spectro/usbio.c Argyll_V1.0.1/spectro/usbio.c
--- Argyll_V1.0.1.orig/spectro/usbio.c	2008-07-27 13:21:03.000000000 +0200
+++ Argyll_V1.0.1/spectro/usbio.c	2008-07-27 13:22:13.000000000 +0200
@@ -101,9 +101,6 @@
 	/* Scan the USB busses for instruments we recognise */
 	/* We're not expecting any of our unstruments to be an interface on a device. */
 
-	if (usb_argyll_patched() < 1)
-		error("usblib hasn't been patched to work with Argyll");
-
    	usb_init();
    	usb_find_busses();
    	usb_find_devices();


--- NEW FILE import.log ---
argyllcms-1_0_1-1_fc10_nim:HEAD:argyllcms-1.0.1-1.fc10.nim.src.rpm:1217165503


Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/argyllcms/devel/.cvsignore,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- .cvsignore	8 Feb 2008 18:51:41 -0000	1.2
+++ .cvsignore	27 Jul 2008 13:34:18 -0000	1.3
@@ -1 +1,2 @@
-argyllV0.70Beta8_src.zip
+Argyll_V1.0.1_autotools.patch.gz
+Argyll_V1.0.1_src.zip


Index: argyllcms.spec
===================================================================
RCS file: /cvs/extras/rpms/argyllcms/devel/argyllcms.spec,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- argyllcms.spec	26 Mar 2008 20:26:04 -0000	1.3
+++ argyllcms.spec	27 Jul 2008 13:34:18 -0000	1.4
@@ -1,10 +1,11 @@
-%define alphaversion Beta8
-%define alphatag    .%{alphaversion}
-%define archivename argyllV%{version}%{?alphaversion}_src.zip
+#define alphaversion Beta8
+#define alphatag    .%{alphaversion}
+
+%define archivename Argyll_V%{version}%{?alphaversion}_src.zip
 
 Name:    argyllcms
-Version: 0.70
-Release: 0.10%{?alphatag}%{?dist}
+Version: 1.0.1
+Release: 1%{?alphatag}%{?dist}
 Summary: ICC compatible color management system
 
 Group:   User Interface/X
@@ -12,20 +13,21 @@
 URL:     http://www.%{name}.com/
 
 Source0: %{url}%{archivename}
-Source1: %{name}-0.70-19-color.fdi
+Source1: %{name}-1.0.1-19-color.fdi
 Source2: %{name}-0.70-color-device-file.policy
-Patch0:  %{name}-0.70-build.patch
+Patch0:  %{url}V%{version}_patches.txt
+# Many thanks to Alastair M. Robinson!
+Patch1:  http://www.blackfiveservices.co.uk/Argyll_V1.0.1_autotools.patch.gz
+Patch2:  %{name}-1.0.1-remove-libusb-fork-check.patch
 # Patch by Stefan Brüns, bz421921#c18
-Patch1:  %{name}-0.70-printf.patch
-# Patch by Stefan Brüns, bz421921#c24
-Patch2:  %{name}-0.70-scanin-doublefree-fix.patch
+Patch3:  %{name}-1.0.1-printf.patch
 # Patch applied for legal reasons
-Patch3: %{name}-0.70-legal.patch
+Patch4:  %{name}-1.0.1-legal.patch
 
 BuildRoot:     %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-BuildRequires: jam, libtiff-devel, libusb-devel
+BuildRequires: libtiff-devel, libusb-devel
 BuildRequires: libX11-devel, libXext-devel, libXxf86vm-devel, libXinerama-devel
-BuildRequires: libXScrnSaver-devel
+BuildRequires: libXScrnSaver-devel, libXrandr-devel
 
 Requires: udev, PolicyKit
 
@@ -60,99 +62,32 @@
 
 
 %prep
-%setup -q -c
+%setup -q -n Argyll_V%{version}
+# Post-release fixes
+%patch0 -p1 -b .fix
+# Autotools support
+%patch1 -p1 -b .auto
+# Use the system libusb. If there is a ***REPORTED*** problem the distro will fix it
+%patch2 -p1 -b .sysusb
+# Printf fixes
+%patch3 -p1 -b .printf
+# Legal patch required
+%patch4 -p1 -b .legal
+
 # Remove useless bundled libs to make sure we don't accidentally include them
 rm -fr tiff libusb libusbw
-# Make argyllcms actually build on a modern Linux system
-%patch0 -p1 -b .build
-
-# Code fixes
-%patch1 -p1 -b .printf
-%patch2 -p1 -b .scanin
 
-# Legal patch required
-%patch3 -p1 -b .legal
+chmod u+x configure
 
 %build
-CCOPTFLAG="%{optflags}"
-PATH=$PATH:.
-export CCOPTFLAG PATH
-
-%define jam jam -d x -f../Jambase %{?_smp_mflags}
-
-# Patching and running makeall.ksh would be easier, but that would hide build
-# errors from rpm. If the build process was a real DAG a single for loop would
-# be sufficient
-
-for dir in numlib plot icc cgats ; do
-   pushd $dir
-      %{jam}
-   popd
-done
-
-pushd rspl
-   %{jam} librspl.a
-popd
-
-pushd xicc
-   %{jam} libxicc.a libxcolorants.a
-popd
-
-pushd gamut
-   %{jam}
-popd
-
-pushd spectro
-   %{jam} libinsttypes.a
-popd
-
-for dir in xicc imdi target scanin profile link tweak render spectro rspl ; do
-   pushd $dir
-      %{jam}
-   popd
-done
+%configure
+make
 
 
 %install
 rm -rf %{buildroot}
 
-# Use upstream's install logic targetting a temp dir so files can be re-sorted
-# sanely later
-
-PATH=$PATH:.
-DOTDOT=$PWD/tmp
-
-export DOTDOT PATH
-
-for dir in gamut icc imdi link profile render scanin spectro target tweak xicc
-do
-   pushd $dir
-      %{jam} install
-   popd
-done
-
-# No business in bin
-rm $DOTDOT/bin/*.txt
-mv $DOTDOT/bin/*.gam .
-
-# Licensing madness
-install -p -m 0644 icc/License.txt License-icc.txt
-install -p -m 0644 cgats/License.txt License-cgats.txt
-
-ln -s ArgyllDoc.html doc/index.html
-
-# Little CMS conflict
-mv $DOTDOT/bin/icclink $DOTDOT/bin/icclink-%{name}
-
-# Actual install phase
-
-install -d -m 0755 %{buildroot}%{_bindir}
-install -p -m 0755 tmp/bin/* %{buildroot}%{_bindir}
-
-install -d -m 0755 %{buildroot}%{_datadir}/%{name}
-install -p -m 0644 ref/* scanin/QPcard_201.c* *.gam \
-        %{buildroot}%{_datadir}/%{name}
-rm %{buildroot}%{_datadir}/%{name}/afiles
+make install DESTDIR=%{buildroot}
 
 # Do some device permission magic
 install -d -m 0755 %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
@@ -173,11 +108,11 @@
 %doc *.txt
 
 %attr(0755,root,root) %{_bindir}/*
-%dir %{_datadir}/%{name}
-%{_datadir}/%{name}/*
+%{_datadir}/color/argyll
 %{_datadir}/hal/fdi/policy/10osvendor/19-color.fdi
 %{_datadir}/PolicyKit/policy/color-device-file.policy
 
+%exclude %{_datadir}/doc
 
 %files doc
 %defattr(0644,root,root,0755)
@@ -185,6 +120,17 @@
 
 
 %changelog
+* Sun Jul 27 2008 Nicolas Mailhot <nicolas.mailhot at laposte.net>
+- 1.0.1-1
+☻ Lots of workarounds dropped — Argyll continues progressing towards “normal
+  package” state
+☺ No more jam hell ☡, autotooling patch by Alastair M. Robinson ♥♥♥
+♿ New workaround added for private libusb check ⚔ We build againt system
+  libusb, and will fix âš• any problem people care to report
+⁜ Re-applied some patches still not merged upstream, including the legal ⚖ one
+⚙ It builds, what can go wrong⁉
+⁂ Changed Huey policy file. Huey users, please test
+
 * Wed Mar 26 2008 Tom "spot" Callaway <tcallawa at redhat.com>
 - patch applied for legal reasons
 


Index: sources
===================================================================
RCS file: /cvs/extras/rpms/argyllcms/devel/sources,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- sources	8 Feb 2008 18:51:41 -0000	1.2
+++ sources	27 Jul 2008 13:34:18 -0000	1.3
@@ -1 +1,2 @@
-5cdc5e6cbb794a06c97f484fd8f9053f  argyllV0.70Beta8_src.zip
+cdb94385421c2fae1cf6fb068069cd9e  Argyll_V1.0.1_autotools.patch.gz
+e9f32b852b49ffcf28b854cecab00e67  Argyll_V1.0.1_src.zip


--- argyllcms-0.70-19-color.fdi DELETED ---


--- argyllcms-0.70-build.patch DELETED ---


--- argyllcms-0.70-legal.patch DELETED ---


--- argyllcms-0.70-printf.patch DELETED ---


--- argyllcms-0.70-scanin-doublefree-fix.patch DELETED ---




More information about the fedora-extras-commits mailing list