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