Blob Blame History Raw
diff -rud argyll_orig/cgats/cgats.c argyll/cgats/cgats.c
--- argyll_orig/cgats/cgats.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/cgats/cgats.c	2008-01-08 00:11:09.000000000 +0100
@@ -1285,33 +1285,33 @@
 		if (!t->sup_id)	/* If not suppressed */ {
 			switch(t->tt) {
 				case it8_7_1:
-					if (fp->printf(fp,"IT8.7/1\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/1\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_2:
-					if (fp->printf(fp,"IT8.7/2\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/2\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_3:
-					if (fp->printf(fp,"IT8.7/3\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/3\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_4:
-					if (fp->printf(fp,"IT8.7/4\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/4\n\n") < 0)
 						goto write_error;
 					break;
 				case cgats_5:
-					if (fp->printf(fp,"CGATS.5\n\n") < 0)
+					if ((fp->printf)(fp,"CGATS.5\n\n") < 0)
 						goto write_error;
 					break;
 				case cgats_X:				/* variable CGATS type */
 					if (p->cgats_type == NULL)
 						goto write_error;
-					if (fp->printf(fp,"%s\n\n", p->cgats_type) < 0)
+					if ((fp->printf)(fp,"%s\n\n", p->cgats_type) < 0)
 						goto write_error;
 					break;
 				case tt_other:	/* User defined file identifier */
-					if (fp->printf(fp,"%s\n\n",p->others[t->oi]) < 0)
+					if ((fp->printf)(fp,"%s\n\n",p->others[t->oi]) < 0)
 						goto write_error;
 					break;
 				case tt_none:
@@ -1326,7 +1326,7 @@
 				al->free(al, sfield);
 				return err(p,-1,"cgats_write(), ID should not be suppressed when table %d type is not the same as previous table",table);
 			}
-			if (fp->printf(fp,"\n\n") < 0)
+			if ((fp->printf)(fp,"\n\n") < 0)
 				goto write_error;
 		}
 
@@ -1343,7 +1343,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"KEYWORD %s\n",qs) < 0) {
+					if ((fp->printf)(fp,"KEYWORD %s\n",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1354,7 +1354,7 @@
 					al->free(al, sfield);
 					return err(p,-2,"quote_cs() malloc failed!");
 				}
-				if (fp->printf(fp,"%s %s%s",t->ksym[i],qs,
+				if ((fp->printf)(fp,"%s %s%s",t->ksym[i],qs,
 				    t->kcom[i] == NULL ? "\n":"\t") < 0) {
 					al->free(al, qs);
 					goto write_error;
@@ -1363,7 +1363,7 @@
 			}
 			/* Comment if its present */
 			if (t->kcom[i] != NULL) {
-				if (fp->printf(fp,"# %s\n",t->kcom[i]) < 0) {
+				if ((fp->printf)(fp,"# %s\n",t->kcom[i]) < 0) {
 					al->free(al, qs);
 					goto write_error;
 				}
@@ -1372,7 +1372,7 @@
 
 		/* Then the field specification */
 		if (!t->sup_fields) {	/* If not suppressed */
-			if (fp->printf(fp,"\n") < 0)
+			if ((fp->printf)(fp,"\n") < 0)
 				goto write_error;
 	
 			/* Declare any non-standard fields */
@@ -1383,7 +1383,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"KEYWORD %s\n",qs) < 0) {
+					if ((fp->printf)(fp,"KEYWORD %s\n",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1391,16 +1391,16 @@
 				}
 			}
 	
-			if (fp->printf(fp,"NUMBER_OF_FIELDS %d\n",t->nfields) < 0)
+			if ((fp->printf)(fp,"NUMBER_OF_FIELDS %d\n",t->nfields) < 0)
 				goto write_error;
-			if (fp->printf(fp,"BEGIN_DATA_FORMAT\n") < 0)
+			if ((fp->printf)(fp,"BEGIN_DATA_FORMAT\n") < 0)
 				goto write_error;
 			for (field = 0; field < t->nfields; field ++) {
 				DBG((dbgo,"CGATS writing field %d\n",field));
-				if (fp->printf(fp,"%s ",t->fsym[field]) < 0)
+				if ((fp->printf)(fp,"%s ",t->fsym[field]) < 0)
 					goto write_error;
 			}
-			if (fp->printf(fp,"\nEND_DATA_FORMAT\n") < 0)
+			if ((fp->printf)(fp,"\nEND_DATA_FORMAT\n") < 0)
 				goto write_error;
 		} else { /* Check that it is safe to suppress fields */
 			cgats_table *pt = &p->t[table-1];
@@ -1421,9 +1421,9 @@
 		}
 
 		/* Then the actual data */
-		if (fp->printf(fp,"\nNUMBER_OF_SETS %d\n",t->nsets) < 0)
+		if ((fp->printf)(fp,"\nNUMBER_OF_SETS %d\n",t->nsets) < 0)
 			goto write_error;
-		if (fp->printf(fp,"BEGIN_DATA\n") < 0)
+		if ((fp->printf)(fp,"BEGIN_DATA\n") < 0)
 			goto write_error;
 		for (set = 0; set < t->nsets; set++) {
 			DBG((dbgo,"CGATS writing set %d\n",set));
@@ -1434,10 +1434,10 @@
 					double val = *((double *)t->fdata[set][field]);
 					real_format(val, REAL_SIGDIG, fmt);
  					strcat(fmt," ");
-					if (fp->printf(fp,fmt,val) < 0)
+					if ((fp->printf)(fp,fmt,val) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == i_t) {
-					if (fp->printf(fp,"%d ",*((int *)t->fdata[set][field])) < 0)
+					if ((fp->printf)(fp,"%d ",*((int *)t->fdata[set][field])) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == nqcs_t
 				      && !cs_has_ws((char *)t->fdata[set][field])
@@ -1446,7 +1446,7 @@
 					/* We can only print a non-quote string if it doesn't contain white space, */
 					/* quote or comment characters, and if it is a standard field or */
 					/* can't be mistaken for a number. */
-					if (fp->printf(fp,"%s ",(char *)t->fdata[set][field]) < 0)
+					if ((fp->printf)(fp,"%s ",(char *)t->fdata[set][field]) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == nqcs_t
 				      || t->ftype[field] == cs_t) {
@@ -1455,7 +1455,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"%s ",qs) < 0) {
+					if ((fp->printf)(fp,"%s ",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1465,10 +1465,10 @@
 					return err(p,-1,"cgats_write(), illegal data type found");
 				}
 			}
-			if (fp->printf(fp,"\n") < 0)
+			if ((fp->printf)(fp,"\n") < 0)
 				goto write_error;
 		}
-		if (fp->printf(fp,"END_DATA\n") < 0)
+		if ((fp->printf)(fp,"END_DATA\n") < 0)
 			goto write_error;
 
 		if (sfield != NULL)
@@ -1849,60 +1849,60 @@
 cgats_dump(cgats *p, cgatsFile *fp) {
 	int tn;
 
-	fp->printf(fp,"Number of tables = %d\n",p->ntables);
+	(fp->printf)(fp,"Number of tables = %d\n",p->ntables);
 	for (tn = 0; tn < p->ntables; tn++) {
 		cgats_table *t;
 		int i,j;
 		t = &p->t[tn];
 
 	
-		fp->printf(fp,"\nTable %d:\n",tn);
+		(fp->printf)(fp,"\nTable %d:\n",tn);
 
 		switch(t->tt)	/* Table identifier */
 			{
 			case it8_7_1:
-				fp->printf(fp,"Identifier = 'IT8.7/1'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/1'\n");
 				break;
 			case it8_7_2:
-				fp->printf(fp,"Identifier = 'IT8.7/2'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/2'\n");
 				break;
 			case it8_7_3:
-				fp->printf(fp,"Identifier = 'IT8.7/3'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/3'\n");
 				break;
 			case it8_7_4:
-				fp->printf(fp,"Identifier = 'IT8.7/4'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/4'\n");
 				break;
 			case cgats_5:
-				fp->printf(fp,"Identifier = 'CGATS.5'\n");
+				(fp->printf)(fp,"Identifier = 'CGATS.5'\n");
 				break;
 			case cgats_X:
-				fp->printf(fp,"Identifier = '%s'\n",p->cgats_type);
+				(fp->printf)(fp,"Identifier = '%s'\n",p->cgats_type);
 				break;
 			case tt_other:	/* User defined file identifier */
-				fp->printf(fp,"Identifier = '%s'\n",p->others[t->oi]);
+				(fp->printf)(fp,"Identifier = '%s'\n",p->others[t->oi]);
 				break;
 			default:
-				fp->printf(fp,"**ILLEGAL**\n");
+				(fp->printf)(fp,"**ILLEGAL**\n");
 				break;
 			}
 
-		fp->printf(fp,"\nNumber of keywords = %d\n",t->nkwords);
+		(fp->printf)(fp,"\nNumber of keywords = %d\n",t->nkwords);
 		
 		/* Dump all the keyword symbols and values */
 		for (i = 0; i < t->nkwords; i++) {
 			if (t->ksym[i] != NULL && t->kdata[i] != NULL)
 				{
 				if (t->kcom[i] != NULL)
-					fp->printf(fp,"Keyword '%s' has value '%s' and comment '%s'\n",
+					(fp->printf)(fp,"Keyword '%s' has value '%s' and comment '%s'\n",
 					        t->ksym[i],t->kdata[i],t->kcom[i]);
 				else
-					fp->printf(fp,"Keyword '%s' has value '%s'\n",t->ksym[i],t->kdata[i]);
+					(fp->printf)(fp,"Keyword '%s' has value '%s'\n",t->ksym[i],t->kdata[i]);
 				}
 			if (t->kcom[i] != NULL)
-				fp->printf(fp,"Comment '%s'\n",t->kcom[i]);
+				(fp->printf)(fp,"Comment '%s'\n",t->kcom[i]);
 		}
 			
-		fp->printf(fp,"\nNumber of field defs = %d\n",t->nfields);
+		(fp->printf)(fp,"\nNumber of field defs = %d\n",t->nfields);
 
 		/* Dump all the field symbols */
 		for (i = 0; i < t->nfields; i++) {		
@@ -1924,10 +1924,10 @@
 					fname = "illegal";
 					break;
 			}
-			fp->printf(fp,"Field '%s' has type '%s'\n",t->fsym[i],fname);
+			(fp->printf)(fp,"Field '%s' has type '%s'\n",t->fsym[i],fname);
 		}
 
-		fp->printf(fp,"\nNumber of sets = %d\n",t->nsets);
+		(fp->printf)(fp,"\nNumber of sets = %d\n",t->nsets);
 
 		/* Dump all the set values */
 		for (j = 0; j < t->nsets; j++) {
@@ -1938,22 +1938,22 @@
 						double val = *((double *)t->fdata[j][i]);
 						fmt[0] = ' ';
 						real_format(val, REAL_SIGDIG, fmt+1);
-						fp->printf(fp,fmt,*((double *)t->fdata[j][i]));
+						(fp->printf)(fp,fmt,*((double *)t->fdata[j][i]));
 						break;
 					}
 					case i_t:
-						fp->printf(fp," %d",*((int *)t->fdata[j][i]));
+						(fp->printf)(fp," %d",*((int *)t->fdata[j][i]));
 						break;
 					case cs_t:
 					case nqcs_t:
-						fp->printf(fp," %s",((char *)t->fdata[j][i]));
+						(fp->printf)(fp," %s",((char *)t->fdata[j][i]));
 						break;
 					default:
-						fp->printf(fp," illegal");
+						(fp->printf)(fp," illegal");
 						break;
 				}
 			}
-			fp->printf(fp,"\n");
+			(fp->printf)(fp,"\n");
 		}
 	}
 }
diff -rud argyll_orig/icc/icc.c argyll/icc/icc.c
--- argyll_orig/icc/icc.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/icc/icc.c	2008-01-08 00:08:31.000000000 +0100
@@ -1741,8 +1741,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. */
@@ -1752,35 +1752,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 */
 		}
 
@@ -1971,12 +1971,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]);
 	}
 }
 
@@ -2158,12 +2158,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]);
 	}
 }
 
@@ -2345,12 +2345,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]);
 	}
 }
 
@@ -2532,12 +2532,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);
 	}
 }
 
@@ -2719,12 +2719,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]);
 	}
 }
 
@@ -2906,12 +2906,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]);
 	}
 }
 
@@ -3135,12 +3135,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]));
 			
 		}
 	}
@@ -3609,18 +3609,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]);
 		}
 	}
 }
@@ -3861,68 +3861,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
@@ -4112,35 +4112,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");
 	}
 }
 
@@ -4445,8 +4445,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 */
@@ -5951,34 +5951,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++)
@@ -5986,14 +5986,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]++;
@@ -6004,12 +6004,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");
 		}
 
 	}
@@ -6319,12 +6319,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 */
@@ -6802,45 +6802,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");
 			}
 		}
 	}
@@ -7140,28 +7140,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;
 				}
 			}
@@ -7559,98 +7559,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");
 	}
 }
 
@@ -7842,15 +7842,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");
 	}
 }
 
@@ -8031,8 +8031,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++)
@@ -8212,8 +8212,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 */
@@ -8420,16 +8420,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));
 		}
 	}
 }
@@ -8720,64 +8720,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");
 		}
 	}
 }
@@ -9134,37 +9134,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");
 	}
 }
 
@@ -9447,10 +9447,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 */
@@ -9697,69 +9697,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");
 		}
 	}
 }
@@ -10071,36 +10071,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(
@@ -11349,7 +11349,7 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"icc:\n");
+	(op->printf)(op,"icc:\n");
 
 	/* Dump the header */
 	if (p->header != NULL)
@@ -11359,21 +11359,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 */
@@ -11382,7 +11382,7 @@
 				p->data[i].objp = NULL;
 			}
 		}
-		op->printf(op,"\n");
+		(op->printf)(op,"\n");
 	}
 }
 
diff -rud argyll_orig/icc/iccdump.c argyll/icc/iccdump.c
--- argyll_orig/icc/iccdump.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/icc/iccdump.c	2008-01-08 00:11:55.000000000 +0100
@@ -215,13 +215,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]);