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