diff --git a/.cvsignore b/.cvsignore
index e69de29..53f6626 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -0,0 +1 @@
+argyllV0.70Beta8_src.zip
diff --git a/argyllcms-0.70-19-color.fdi b/argyllcms-0.70-19-color.fdi
new file mode 100644
index 0000000..09ef067
--- /dev/null
+++ b/argyllcms-0.70-19-color.fdi
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
+
+ access_control
+ color
+ linux.device_file
+
+
+
+
+
diff --git a/argyllcms-0.70-build.patch b/argyllcms-0.70-build.patch
new file mode 100644
index 0000000..95b06e0
--- /dev/null
+++ b/argyllcms-0.70-build.patch
@@ -0,0 +1,676 @@
+diff -uNr argyllcms-0.70.orig/cgats/Jamfile argyllcms-0.70/cgats/Jamfile
+--- argyllcms-0.70.orig/cgats/Jamfile 2008-01-16 02:47:37.000000000 +0100
++++ argyllcms-0.70/cgats/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -3,7 +3,7 @@
+
+ CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
+ #CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
+-LINKFLAGS += $(LINKDEBUGFLAG) ;
++LINKFLAGS += -lm $(LINKDEBUGFLAG) ;
+
+ #if stdio is not wanted in icclib:
+ #CCFLAGS += $(DEFFLAG)SEPARATE_STD ;
+diff -uNr argyllcms-0.70.orig/gamut/Jamfile argyllcms-0.70/gamut/Jamfile
+--- argyllcms-0.70.orig/gamut/Jamfile 2008-01-16 02:47:39.000000000 +0100
++++ argyllcms-0.70/gamut/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -6,7 +6,7 @@
+ CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
+ #CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
+ #CCFLAGS += $(CCHEAPDEBUG) ; # Heap Debugging flags
+-LINKFLAGS += $(LINKDEBUGFLAG) ; # Link with debug info
++LINKFLAGS += -lm $(LINKDEBUGFLAG) ; # Link with debug info
+ #CCFLAGS += $(CCPROFFLAG) ; # Profile flags
+ #LINKFLAGS += $(LINKPROFFLAG) ; # Profile flags
+
+diff -uNr argyllcms-0.70.orig/imdi/Jamfile argyllcms-0.70/imdi/Jamfile
+--- argyllcms-0.70.orig/imdi/Jamfile 2008-01-16 02:47:45.000000000 +0100
++++ argyllcms-0.70/imdi/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -5,14 +5,16 @@
+ CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
+ #CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
+ #CCFLAGS += $(CCPROFFLAG) ; # Profile flags
+-LINKFLAGS += $(LINKDEBUGFLAG) ; # Link debugging flags
++LINKFLAGS += -lm $(LINKDEBUGFLAG) ; # Link debugging flags
+ #LINKFLAGS += $(LINKPROFFLAG) ; # Profile flags
+ #CCFLAGS += $(CCHEAPDEBUG) ; # Heap Debugging flags
+
+ if $(HAVE_TIFF) { # Alternate TIFF library
+ TIFFLIB = ;
+ TIFFINC = ;
+- LINKLIBS on cctiff$(SUFEXE) = -ltiff $(LINKLIBS) ;
++ LINKLIBS on cctiff$(SUFEXE)
++ cctiffo$(SUFEXE)
++ greytiff$(SUFEXE) = -ltiff $(LINKLIBS) ;
+ } else {
+ TIFFLIB = ../tiff/libtiff.lib ;
+ TIFFINC = ../tiff ;
+diff -uNr argyllcms-0.70.orig/Jambase argyllcms-0.70/Jambase
+--- argyllcms-0.70.orig/Jambase 2008-01-16 02:47:16.000000000 +0100
++++ argyllcms-0.70/Jambase 2008-02-07 20:51:37.000000000 +0100
+@@ -259,7 +259,7 @@
+ FILEMODE default = 644 ;
+ FORTRAN default = f77 ;
+ FORTRANFLAGS default = ;
+-# HAVE_TIFF default = 1 ;
++ HAVE_TIFF default = 1 ;
+ HDRS default = ;
+ INSTALL default = install -c ;
+ LEX default = lex ;
+diff -uNr argyllcms-0.70.orig/link/Jamfile argyllcms-0.70/link/Jamfile
+--- argyllcms-0.70.orig/link/Jamfile 2008-01-16 02:47:49.000000000 +0100
++++ argyllcms-0.70/link/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -10,9 +10,9 @@
+ LINKFLAGS += $(LINKDEBUGFLAG) ; # Link debugging flags
+
+ if $(UNIX) && $(OS) != MACOSX {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include/X11 ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+ }
+diff -uNr argyllcms-0.70.orig/numlib/Jamfile argyllcms-0.70/numlib/Jamfile
+--- argyllcms-0.70.orig/numlib/Jamfile 2008-01-16 02:47:17.000000000 +0100
++++ argyllcms-0.70/numlib/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -3,7 +3,7 @@
+
+ CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
+ #CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
+-LINKFLAGS += $(LINKDEBUGFLAG) ;
++LINKFLAGS += -lm $(LINKDEBUGFLAG) ;
+ #CCFLAGS += $(CCPROFFLAG) ; # Profile flags
+ #LINKFLAGS += $(LINKPROFFLAG) ; # Profile flags
+
+diff -uNr argyllcms-0.70.orig/numlib/numsup.c argyllcms-0.70/numlib/numsup.c
+--- argyllcms-0.70.orig/numlib/numsup.c 2008-01-16 02:47:17.000000000 +0100
++++ argyllcms-0.70/numlib/numsup.c 2008-02-07 20:51:37.000000000 +0100
+@@ -5,6 +5,7 @@
+ #include
+ #include
+ #include
++#include
+ #if defined (NT)
+ #define WIN32_LEAN_AND_MEAN
+ #include
+diff -uNr argyllcms-0.70.orig/plot/Jamfile argyllcms-0.70/plot/Jamfile
+--- argyllcms-0.70.orig/plot/Jamfile 2008-01-16 02:47:35.000000000 +0100
++++ argyllcms-0.70/plot/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -6,11 +6,11 @@
+ LINKFLAGS += $(LINKDEBUGFLAG) ;
+
+ if $(UNIX) && $(OS) != MACOSX {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+- LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
++ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp -lm ;
+ }
+
+ # PLOT library
+diff -uNr argyllcms-0.70.orig/profile/Jamfile argyllcms-0.70/profile/Jamfile
+--- argyllcms-0.70.orig/profile/Jamfile 2008-01-16 02:47:48.000000000 +0100
++++ argyllcms-0.70/profile/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -11,9 +11,9 @@
+ LINKFLAGS += -framework IOKit ;
+ LINKFLAGS += -framework CoreFoundation ;
+ } else {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include/X11 ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+ }
+diff -uNr argyllcms-0.70.orig/render/Jamfile argyllcms-0.70/render/Jamfile
+--- argyllcms-0.70.orig/render/Jamfile 2008-01-16 02:47:50.000000000 +0100
++++ argyllcms-0.70/render/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -10,6 +10,16 @@
+ #CCFLAGS += $(CCPROFFLAG) ; # Profile flags
+ #LINKFLAGS += $(LINKPROFFLAG) ; # Profile flags
+
++if $(HAVE_TIFF) { # Alternate TIFF library
++ TIFFLIB = ;
++ TIFFINC = ;
++ LINKLIBS on timage$(SUFEXE) = $(LINKLIBS) -ltiff ;
++
++} else {
++ TIFFLIB = ../tiff/libtiff.lib ;
++ TIFFINC = ../tiff ;
++}
++
+ #Products
+ Libraries = librender ;
+ Executables = timage ;
+@@ -22,11 +32,11 @@
+
+ # 2D Rendering library
+ Library librender.lib : render.c ;
+-ObjectHdrs render$(SUFOBJ) : ../h ../numlib ../tiff ;
++ObjectHdrs render$(SUFOBJ) : ../h ../numlib $(TIFFINC) ;
+
+ Main timage : timage.c ;
+-ObjectHdrs timage$(SUFOBJ) : ../h ../numlib ../tiff ;
+-LinkLibraries timage : librender.lib ../numlib/libnum.lib ../tiff/libtiff.lib ;
++ObjectHdrs timage$(SUFOBJ) : ../h ../numlib $(TIFFINC) ;
++LinkLibraries timage : librender.lib ../numlib/libnum.lib $(TIFFLIB) ;
+
+ if $(BUILD_JUNK) {
+
+diff -uNr argyllcms-0.70.orig/rspl/Jamfile argyllcms-0.70/rspl/Jamfile
+--- argyllcms-0.70.orig/rspl/Jamfile 2008-01-16 02:47:38.000000000 +0100
++++ argyllcms-0.70/rspl/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -16,9 +16,9 @@
+ LINKFLAGS += -framework IOKit ;
+ LINKFLAGS += -framework CoreFoundation ;
+ } else {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include/X11 ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+ }
+@@ -28,12 +28,13 @@
+
+ if $(HAVE_TIFF) { # Alternate TIFF library
+ TIFFLIB = ;
+- TIFFINC = ;
++ TIFFINC = /usr/include ;
+ LINKLIBS on c1$(SUFEXE)
+ c1df$(SUFEXE)
+ c1i$(SUFEXE)
+ t2d$(SUFEXE)
+ t2dfw$(SUFEXE)
++ t2ddf$(SUFEXE)
+ t3d$(SUFEXE)
+ t3ddf$(SUFEXE)
+ tnd$(SUFEXE)
+diff -uNr argyllcms-0.70.orig/spectro/Jamfile argyllcms-0.70/spectro/Jamfile
+--- argyllcms-0.70.orig/spectro/Jamfile 2008-01-16 02:47:42.000000000 +0100
++++ argyllcms-0.70/spectro/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -17,7 +17,7 @@
+
+ if $(UNIX) {
+ IOFILE = unixio.c pollem.c ;
+- LIBUSB = ../libusb ;
++# LIBUSB = ../libusb ;
+ }
+
+ if $(UNIX) {
+@@ -25,11 +25,11 @@
+ LINKFLAGS += -framework IOKit ;
+ LINKFLAGS += -framework CoreFoundation ;
+ } else {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+- LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl ;
++ LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl -lm -lusb ;
+ }
+ }
+
+diff -uNr argyllcms-0.70.orig/spectro/Jamfile.orig argyllcms-0.70/spectro/Jamfile.orig
+--- argyllcms-0.70.orig/spectro/Jamfile.orig 1970-01-01 01:00:00.000000000 +0100
++++ argyllcms-0.70/spectro/Jamfile.orig 2008-01-16 02:47:42.000000000 +0100
+@@ -0,0 +1,222 @@
++
++#SubDir TOP spectro ;
++
++CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
++#CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
++LINKFLAGS += $(LINKDEBUGFLAG) ;
++
++if $(NT) {
++ if $(DDK_INC_PATH) && $(DDK_LIB_PATH) { # We can use HID access
++ CCFLAGS += $(DEFFLAG) ENABLE_NT_HID ;
++ HIDLIBS = $(DDK_LIB_PATH)\\hid.lib $(DDK_LIB_PATH)\\setupapi.lib ;
++ HDRS += $(STDHDRS) ; # hack to force search of STDHDRS before DDK
++ }
++ IOFILE = ntio.c ;
++ LIBUSB = ../libusbw ;
++}
++
++if $(UNIX) {
++ IOFILE = unixio.c pollem.c ;
++ LIBUSB = ../libusb ;
++}
++
++if $(UNIX) {
++ if $(OS) = MACOSX {
++ LINKFLAGS += -framework IOKit ;
++ LINKFLAGS += -framework CoreFoundation ;
++ } else {
++ WinDir = /usr/X11R6 ;
++ LibWinH = $(WinDir)/include ;
++ LibWinD = $(WinDir)/lib ;
++ LibWin = ;
++ LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl ;
++ }
++}
++
++KEEPOBJS = true ; # Jam has trouble with multiple users of .obj
++
++#Products
++Libraries = libinsttypes libinst ;
++Executables = dispwin displin dispread dispcal fakeread synthread chartread spotread spec2cie spyd2en ;
++Headers = inst.h ;
++Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
++
++#Install
++InstallBin $(DOTDOT)$(SLASH)bin : $(Executables)$(SUFEXE) ;
++InstallFile $(DOTDOT)$(SLASH)ref : $(Samples) ;
++#InstallFile $(DOTDOT)$(SLASH)h : $(Headers) ;
++#InstallLib $(DOTDOT)$(SLASH)lib : $(Libraries)$(SUFLIB) ;
++
++# Instrument access library library
++Library libinst.lib : inst.c insttypes.c dtp20.c dtp22.c dtp41.c dtp51.c dtp92.c i1disp.c i1pro.c i1pro_imp.c ss.c ss_imp.c hcfr.c spyd2.c huey.c $(IOFILE) usbio.c hidio.c ;
++ObjectHdrs inst insttypes dtp20 dtp22 dtp41 dtp51 dtp92 i1disp i1pro i1pro_imp ss ss_imp hcfr spyd2 huey $(IOFILE) usbio.c hidio.c : . ../h ../numlib ../icc ../rspl ../xicc ../plot $(DDK_INC_PATH) $(LIBUSB) ;
++
++# Instrument types utility functions library. Use this instead of libinst */
++# (hack to re-use insttypes.c in this library)
++Object insttypes_$(SUFOBJ) : insttypes.c ;
++ObjectHdrs insttypes_ : . ../h ../icc ../xicc ;
++LibraryFromObjects libinsttypes.lib : insttypes_$(SUFOBJ) ;
++
++# Support file
++Object alphix$(SUFOBJ) : ../target/alphix.c ;
++ObjectHdrs alphix$(SUFOBJ) : ../h ../numlib ;
++
++# General target reader program
++Object chartread$(SUFOBJ) : chartread.c ;
++ObjectHdrs chartread : . ../h ../cgats ../icc ../numlib ../xicc ../target $(LIBUSB) ;
++MainFromObjects chartread : chartread$(SUFOBJ) alphix$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
++LinkLibraries chartread : libinst.lib ../cgats/libcgats.lib
++ ../rspl/librspl.lib
++ ../xicc/libxicc.lib ../xicc/libxcolorants.lib
++ ../numlib/libnum.lib ../icc/libicc.lib
++ ../plot/libplot.lib $(LIBUSB)/libusb.lib
++ $(HIDLIBS) ;
++
++# Printed target spot reader utility
++Object spotread$(SUFOBJ) : spotread.c ;
++ObjectHdrs spotread : . ../h ../cgats ../icc ../numlib ../rspl ../xicc ../gamut
++ ../spectro ../plot $(LIBUSB) ;
++MainFromObjects spotread : spotread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
++LinkLibraries spotread : libinst.lib
++ ../rspl/librspl.lib ../xicc/libxicc.lib
++ ../icc/libicc.lib ../gamut/libgamut.lib ../cgats/libcgats.lib
++ ../plot/libplot.lib ../numlib/libnum.lib
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++# Gretag Spectroscan/T filmstrip reader
++#Object filmread$(SUFOBJ) : filmread.c ;
++#ObjectHdrs filmread : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) ;
++#MainFromObjects filmread : filmread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
++#LinkLibraries filmread : libinst.lib ../cgats/libcgats.lib ../xicc/libxicc.lib
++# ../rspl/librspl.lib
++# ../numlib/libnum.lib ../icc/libicc ../plot/libplot.lib
++# $(LIBUSB)/libusb.lib
++# $(HIDLIBS) ;
++
++# Create linear .cal
++Main displin : displin.c ;
++ObjectHdrs displin : . ../h ../cgats ../numlib ;
++LinkLibraries displin : ../cgats/libcgats.lib ../numlib/libnum.lib ;
++
++# Display calibration program
++Object dispcal$(SUFOBJ) : dispcal.c ;
++ObjectHdrs dispcal dispwin dispsup ../target/ofps : . ../h ../cgats ../icc
++ ../numlib ../rspl ../spectro ../xicc ../spectro ../gamut
++ ../target ../plot $(LIBUSB) $(LibWinH) ;
++MainFromObjects dispcal : dispcal$(SUFOBJ) dispwin$(SUFOBJ) ../target/ofps$(SUFOBJ)
++ dispsup$(SUFOBJ) ;
++LinkLibraries dispcal : libinst.lib ../cgats/libcgats.lib
++ ../rspl/librspl.lib
++ ../xicc/libxicc.lib ../icc/libicc.lib
++ ../rspl/librspl.lib ../numlib/libnum.lib
++ ../gamut/libgamut.lib ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++# Display tester program
++Main dispread : dispread.c dispwin.c dispsup.c ;
++ObjectHdrs dispread dispwin dispsup : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) $(LibWinH) ;
++LinkLibraries dispread : libinst.lib ../cgats/libcgats.lib
++ ../rspl/librspl.lib
++ ../xicc/libxicc.lib ../icc/libicc.lib
++ ../numlib/libnum.lib ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++
++# ~~~999
++#display test window test/Lut loader utility
++Object sa_dispwin$(SUFOBJ) : dispwin.c ;
++ObjectHdrs sa_dispwin : . ../h ../numlib ../cgats ../icc $(LibWinH) ;
++MainFromObjects dispwin : sa_dispwin$(SUFOBJ) ;
++ObjectCcFlags sa_dispwin.c : -DSTANDALONE_TEST ;
++LinkLibraries dispwin : libinst.lib ../cgats/libcgats.lib
++ ../xicc/libxicc.lib ../icc/libicc.lib
++ ../numlib/libnum.lib ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++# Fake device print/read utility using ICC profile
++Main fakeread : fakeread.c ;
++ObjectHdrs fakeread : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../plot ../icc ;
++LinkLibraries fakeread : libinsttypes.lib ../icc/libicc.lib
++ ../xicc/libxicc.lib ../xicc/libxcolorants.lib
++ ../gamut/libgamut.lib ../cgats/libcgats.lib
++ ../rspl/librspl.lib ../numlib/libnum.lib
++ ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin) ;
++
++# Synthetic device print/read utility
++Main synthread : synthread.c ;
++ObjectHdrs synthread : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../plot ../icc ;
++LinkLibraries synthread : libinsttypes.lib ../icc/libicc.lib
++ ../xicc/libxicc.lib ../xicc/libxcolorants.lib
++ ../gamut/libgamut.lib ../cgats/libcgats.lib
++ ../rspl/librspl.lib ../numlib/libnum.lib
++ ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin) ;
++
++# Add CIE values to a spectral reading file
++Main spec2cie : spec2cie.c ;
++ObjectHdrs spec2cie : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../icc ../plot $(LIBUSB) ;
++LinkLibraries spec2cie : libinsttypes.lib ../icc/libicc.lib
++ ../xicc/libxicc.lib ../xicc/libxcolorants.lib
++ ../gamut/libgamut.lib ../numlib/libnum.lib
++ ../cgats/libcgats.lib ../plot/libplot.lib
++ $(LIBUSB)/libusb.lib $(LibWin) ;
++
++# Utility to enable the Spyder 2 instrument */
++Main spyd2en : spyd2en.c vinflate.c ;
++ObjectHdrs spyd2en vinflate : . ../h ../numlib ;
++LinkLibraries spyd2en : ../numlib/libnum.lib ;
++
++# Dumy ti3 file generator for testing
++#Main dumyti3 : dumyti3.c ;
++#ObjectHdrs dumyti3 : . ../h ../cgats ;
++#LinkLibraries dumyti3 : ../cgats/libcgats.lib ;
++
++# Test utility for XYZ matrix spectral correction
++#Main xyzfix : xyzfix.c ;
++#ObjectHdrs xyzfix : . ../h ../numlib ../icc ../cgats ;
++#LinkLibraries xyzfix : ../numlib/libnum.lib ../icc/libicc.lib ../cgats/libcgats.lib ;
++
++# Experimental RAMDAC loader
++# Main vgamma : vgamma.c ;
++
++# fp conversion code test
++#Main fp : fp.c ;
++
++# test code
++#Main tt : tt.c
++#ObjectHdrs tt : . ../numlib ../plot ;
++#LinkLibraries tt : ../numlib/libnum.lib ../plot/libplot.lib ;
++
++if $(OLD_GRETAG) && $(UNIX) && $(OS) != MACOSX {
++
++ # test for parsing a VISE archive
++ Main visetest : visetest.c vinflate.c ;
++ ObjectHdrs visetest vinflate : . ../h ../numlib ;
++ LinkLibraries visetest : ../numlib/libnum.lib ;
++
++ # Compute deconvolution filter for i1pro
++ #Main i1deconv : i1deconv.c ;
++ #ObjectHdrs i1deconv : . ../numlib ../rspl ../plot ;
++ #LinkLibraries i1deconv : ../numlib/libnum.lib ../rspl/librspl.lib ../plot/libplot.lib ;
++
++ # Compute stray light calibration for i1pro
++ #Main i1stray : i1stray.c ;
++ #ObjectHdrs i1stray : . ../numlib ../rspl ../plot ../icc ../xicc ;
++ #LinkLibraries i1stray : ../numlib/libnum.lib ../rspl/librspl.lib ../plot/libplot.lib ;
++
++ # test gretag interface
++ Object gt_gretag$(SUFOBJ) : gretag.c ;
++ ObjectCcFlags gt_gretag.c : -DSTANDALONE_TEST ;
++ ObjectHdrs gt_gretag.c : . ../h ../icc ../xicc ;
++ MainFromObjects gt_test : gt_gretag$(SUFOBJ) spm$(SUFOBJ) $(IOFILE:S=$(SUFOBJ)) ;
++ LinkLibraries gt_test : libinst.lib ../xicc/libxicc.lib ../cgats/libcgats.lib
++ ../icc/libicc.lib $(LIBUSB)/libusb.lib $(LibWin) ;
++ LINKFLAGS on gt_test += -L$(LibWinD) ;
++ LINKLIBS on gt_test += -lglut -lGL -lGLU -lX11 -lXext -lXmu -lXi -lm ;
++}
++
+diff -uNr argyllcms-0.70.orig/spectro/Jamfile.rej argyllcms-0.70/spectro/Jamfile.rej
+--- argyllcms-0.70.orig/spectro/Jamfile.rej 1970-01-01 01:00:00.000000000 +0100
++++ argyllcms-0.70/spectro/Jamfile.rej 2008-02-07 20:51:37.000000000 +0100
+@@ -0,0 +1,42 @@
++***************
++*** 37,43 ****
++
++ #Products
++ Libraries = libinsttypes libinst ;
++- Executables = dispwin displin dispread dispcal fakeread synthread filmread printread spotread spec2cie spyd2en ;
++ Headers = inst.h ;
++ Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
++
++--- 37,43 ----
++
++ #Products
++ Libraries = libinsttypes libinst ;
+++ Executables = dispwin displin dispread dispcal fakeread synthread printread spotread spec2cie spyd2en ;
++ Headers = inst.h ;
++ Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
++
++***************
++*** 84,99 ****
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++- # Gretag Spectroscan/T filmstrip reader
++- Object filmread$(SUFOBJ) : filmread.c ;
++- ObjectHdrs filmread : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) ;
++- MainFromObjects filmread : filmread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
++- LinkLibraries filmread : libinst.lib ../cgats/libcgats.lib ../xicc/libxicc.lib
++- ../rspl/librspl.lib
++- ../numlib/libnum.lib ../icc/libicc ../plot/libplot.lib
++- $(LIBUSB)/libusb.lib
++- $(HIDLIBS) ;
++-
++ # Create linear .cal
++ Main displin : displin.c ;
++ ObjectHdrs displin : . ../h ../cgats ../numlib ;
++--- 84,89 ----
++ $(LIBUSB)/libusb.lib $(LibWin)
++ $(HIDLIBS) ;
++
++ # Create linear .cal
++ Main displin : displin.c ;
++ ObjectHdrs displin : . ../h ../cgats ../numlib ;
+diff -uNr argyllcms-0.70.orig/target/Jamfile argyllcms-0.70/target/Jamfile
+--- argyllcms-0.70.orig/target/Jamfile 2008-01-16 02:47:45.000000000 +0100
++++ argyllcms-0.70/target/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -14,9 +14,9 @@
+ LINKFLAGS += -framework IOKit ;
+ LINKFLAGS += -framework CoreFoundation ;
+ } else {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include/X11 ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+ }
+diff -uNr argyllcms-0.70.orig/target/Jamfile.orig argyllcms-0.70/target/Jamfile.orig
+--- argyllcms-0.70.orig/target/Jamfile.orig 1970-01-01 01:00:00.000000000 +0100
++++ argyllcms-0.70/target/Jamfile.orig 2008-01-16 02:47:45.000000000 +0100
+@@ -0,0 +1,138 @@
++# Print Calibration Target Data File generator
++
++#SubDir TOP target ;
++
++CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on
++#CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags
++#CCFLAGS += $(CCPROFFLAG) ; # Profile flags
++#LINKFLAGS += $(LINKPROFFLAG) ; # Profile flags
++#CCFLAGS += $(CCHEAPDEBUG) ; # Heap Debugging flags
++LINKFLAGS += $(LINKDEBUGFLAG) ; # Link debugging flags
++
++if $(UNIX) {
++ if $(OS) = MACOSX {
++ LINKFLAGS += -framework IOKit ;
++ LINKFLAGS += -framework CoreFoundation ;
++ } else {
++ WinDir = /usr/X11R6 ;
++ LibWinH = $(WinDir)/include/X11 ;
++ LibWinD = $(WinDir)/lib ;
++ LibWin = ;
++ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
++ }
++}
++
++if $(HAVE_TIFF) {
++ TIFFLIB = ;
++ TIFFINC = ;
++ LINKLIBS on targen$(SUFEXE)
++ filmtarg$(SUFEXE) = -ltiff $(LINKLIBS) ;
++} else {
++ TIFFLIB = ../tiff/libtiff.lib ;
++ TIFFINC = ../tiff ;
++}
++
++#Products
++Executables = targen printtarg ;
++
++#Install
++InstallBin $(DOTDOT)$(SLASH)bin : $(Executables)$(SUFEXE) ;
++
++Object alphix$(SUFOBJ) : alphix.c ;
++ObjectHdrs alphix$(SUFOBJ) : ../h ../numlib ;
++
++Object randix$(SUFOBJ) : randix.c ;
++ObjectHdrs randix$(SUFOBJ) : ../h ../numlib ;
++
++#target generator
++Main targen : targen.c ppoint.c ofps.c ifarp.c simplat.c simdlat.c prand.c ;
++ObjectHdrs ppoint$(SUFOBJ) : ../h ../numlib ../plot ../icc ../rspl ../xicc ;
++ObjectHdrs ofps$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++ObjectHdrs ifarp$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++ObjectHdrs simplat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++ObjectHdrs simdlat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++ObjectHdrs prand$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++ObjectHdrs targen$(SUFOBJ) : ../h ../numlib ../rspl ../cgats ../icc ../gamut ../xicc ../spectro ;
++LinkLibraries targen : ../rspl/librspl.lib ../cgats/libcgats.lib
++ ../icc/libicc.lib ../plot/libplot.lib ../xicc/libxicc.lib
++ ../xicc/libxcolorants.lib ../gamut/libgamut.lib
++ ../numlib/libnum.lib ../spectro/libinsttypes.lib
++ $(LibWin) ;
++
++# Film Calibration Target File generator
++#MainFromObjects filmtarg : filmtarg$(SUFOBJ) alphix$(SUFOBJ) randix$(SUFOBJ) ;
++#Object filmtarg$(SUFOBJ) : filmtarg.c ;
++#ObjectHdrs filmtarg$(SUFOBJ) : ../h ../numlib ../cgats $(TIFFINC) ;
++#LinkLibraries filmtarg : ../cgats/libcgats.lib $(TIFFLIB) ;
++
++# Print Calibration Target Postscrip../numlib t File generator
++MainFromObjects printtarg : printtarg$(SUFOBJ) alphix$(SUFOBJ) randix$(SUFOBJ) ;
++Object printtarg$(SUFOBJ) : printtarg.c ;
++ObjectHdrs printtarg$(SUFOBJ) : ../h ../numlib ../cgats ../spectro ../rspl ../icc ../xicc
++ ../gamut ;
++LinkLibraries printtarg : ../cgats/libcgats.lib ../xicc/libxicc.lib
++ ../xicc/libxcolorants.lib ../icc/libicc.lib
++ ../numlib/libnum.lib ../spectro/libinsttypes.lib
++ ../plot/libplot.lib $(LibWin) ;
++
++# Individual stand alone test of sample point classes
++
++# Percepttual point distribution
++MainFromObjects ppoint : sa_ppoint$(SUFOBJ) ;
++Object sa_ppoint$(SUFOBJ) : ppoint.c ;
++ObjectCcFlags sa_ppoint$(SUFOBJ) : -DSTANDALONE_TEST ;
++ObjectHdrs sa_ppoint$(SUFOBJ) : ../h ../numlib ../plot ../icc ../rspl ../xicc ;
++LinkLibraries ppoint : ../plot/libplot.lib ../rspl/librspl.lib ../numlib/libnum.lib $(LibWin) ;
++
++# Optimised farthest point sampling class
++MainFromObjects ofps : sa_ofps$(SUFOBJ) ;
++Object sa_ofps$(SUFOBJ) : ofps.c ;
++ObjectCcFlags sa_ofps$(SUFOBJ) : -DSTANDALONE_TEST ;
++ObjectHdrs sa_ofps$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++LinkLibraries ofps : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
++
++# Incremental far point class
++MainFromObjects ifarp : sa_ifarp$(SUFOBJ) ;
++Object sa_ifarp$(SUFOBJ) : ifarp.c ;
++ObjectCcFlags sa_ifarp$(SUFOBJ) : -DSTANDALONE_TEST ;
++ObjectHdrs sa_ifarp$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++LinkLibraries ifarp : ../numlib/libnum.lib ../plot/libplot.lib
++ ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
++
++# Perceptual space simplex lattice
++MainFromObjects simplat : sa_simplat$(SUFOBJ) ;
++Object sa_simplat$(SUFOBJ) : simplat.c ;
++ObjectCcFlags sa_simplat$(SUFOBJ) : -DSTANDALONE_TEST ;
++ObjectHdrs sa_simplat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++LinkLibraries simplat : ../numlib/libnum.lib ../plot/libplot.lib
++ ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
++
++# Device space simplex lattice
++MainFromObjects simdlat : sa_simdlat$(SUFOBJ) ;
++Object sa_simdlat$(SUFOBJ) : simdlat.c ;
++ObjectCcFlags sa_simdlat$(SUFOBJ) : -DSTANDALONE_TEST ;
++ObjectHdrs sa_simdlat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
++LinkLibraries simdlat : ../numlib/libnum.lib ../plot/libplot.lib
++ ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
++
++if $(BUILD_JUNK) {
++
++ # Test program
++ MainFromObjects test : test$(SUFOBJ) alphix$(SUFOBJ) ;
++ Object test$(SUFOBJ) : test.c ;
++ ObjectHdrs test$(SUFOBJ) : ../h ../numlib ;
++ LinkLibraries test : ../numlib/libnum.lib ;
++
++ # Test program
++ MainFromObjects temp : temp$(SUFOBJ) ;
++ Object temp$(SUFOBJ) : temp.c ;
++ ObjectHdrs temp$(SUFOBJ) : ../h ../numlib ../plot ;
++ LinkLibraries temp : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
++
++ # Test lmean experiment
++ MainFromObjects lmean : lmean$(SUFOBJ) ;
++ Object lmean$(SUFOBJ) : lmean.c ;
++ ObjectHdrs lmean$(SUFOBJ) : ../h ../numlib ../plot ;
++ LinkLibraries lmean : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
++
++}
+diff -uNr argyllcms-0.70.orig/xicc/Jamfile argyllcms-0.70/xicc/Jamfile
+--- argyllcms-0.70.orig/xicc/Jamfile 2008-01-16 02:47:40.000000000 +0100
++++ argyllcms-0.70/xicc/Jamfile 2008-02-07 20:51:37.000000000 +0100
+@@ -12,9 +12,9 @@
+ LINKFLAGS += -framework IOKit ;
+ LINKFLAGS += -framework CoreFoundation ;
+ } else {
+- WinDir = /usr/X11R6 ;
++ WinDir = /usr ;
+ LibWinH = $(WinDir)/include/X11 ;
+- LibWinD = $(WinDir)/lib ;
++ LibWinD = ;
+ LibWin = ;
+ LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+ }
+@@ -23,7 +23,9 @@
+ if $(HAVE_TIFF) { # Alternate TIFF library
+ TIFFLIB = ;
+ TIFFINC = ;
+- LINKLIBS on tiffgamut$(SUFEXE) = $(LINKLIBS) -ltiff ;
++ LINKLIBS on tiffgamut$(SUFEXE)
++ cam02plot$(SUFEXE) = $(LINKLIBS) -ltiff ;
++
+ } else {
+ TIFFLIB = ../tiff/libtiff.lib ;
+ TIFFINC = ../tiff ;
diff --git a/argyllcms-0.70-color-device-file.policy b/argyllcms-0.70-color-device-file.policy
new file mode 100644
index 0000000..c55c0ce
--- /dev/null
+++ b/argyllcms-0.70-color-device-file.policy
@@ -0,0 +1,12 @@
+
+
+
+
+ Directly access color meter devices
+ System policy prevents access to the color meter devices
+
+ no
+ yes
+
+
+
diff --git a/argyllcms-0.70-printf.patch b/argyllcms-0.70-printf.patch
new file mode 100644
index 0000000..fdf2d42
--- /dev/null
+++ b/argyllcms-0.70-printf.patch
@@ -0,0 +1,1382 @@
+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; cu.table.channels; c++) {
+- op->printf(op," channel #%d\n",c);
++ (op->printf)(op," channel #%d\n",c);
+ for (i=0; iu.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 = \n");
++ (op->printf)(op," ID = \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]);
diff --git a/argyllcms.spec b/argyllcms.spec
new file mode 100644
index 0000000..f8fb769
--- /dev/null
+++ b/argyllcms.spec
@@ -0,0 +1,211 @@
+%define alphaversion Beta8
+%define alphatag .%{alphaversion}
+%define archivename argyllV%{version}%{?alphaversion}_src.zip
+
+Name: argyllcms
+Version: 0.70
+Release: 0.8%{?alphatag}%{?dist}
+Summary: ICC compatible color management system
+
+Group: User Interface/X
+License: GPLv3 and MIT
+URL: http://www.%{name}.com/
+
+Source0: %{url}%{archivename}
+Source1: %{name}-0.70-19-color.fdi
+Source2: %{name}-0.70-color-device-file.policy
+Patch0: %{name}-0.70-build.patch
+# Patch by Stefan Brüns, bz421921#c18
+Patch1: %{name}-0.70-printf.patch
+
+BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
+BuildRequires: jam, libtiff-devel, libusb-devel
+BuildRequires: libX11-devel, libXext-devel, libXxf86vm-devel, libXinerama-devel
+BuildRequires: libXScrnSaver-devel
+
+Requires: udev, PolicyKit
+
+%description
+The Argyll color management system supports accurate ICC profile creation for
+scanners, CMYK printers, film recorders and calibration and profiling of
+displays.
+
+Spectral sample data is supported, allowing a selection of illuminants observer
+types, and paper fluorescent whitener additive compensation. Profiles can also
+incorporate source specific gamut mappings for perceptual and saturation
+intents. Gamut mapping and profile linking uses the CIECAM02 appearance model,
+a unique gamut mapping algorithm, and a wide selection of rendering intents. It
+also includes code for the fastest portable 8 bit raster color conversion
+engine available anywhere, as well as support for fast, fully accurate 16 bit
+conversion. Device color gamuts can also be viewed and compared using a VRML
+viewer.
+
+
+%package doc
+Summary: Argyll CMS documentation
+Group: User Interface/X
+# Does not really make sense without Argyll CMS itself
+Requires: %{name} = %{version}-%{release}
+
+%description doc
+The Argyll color management system supports accurate ICC profile creation for
+scanners, CMYK printers, film recorders and calibration and profiling of
+displays.
+
+This package contains the Argyll color management system documentation.
+
+
+%prep
+%setup -q -c
+# Remove useless bundled libs to make sure we don't accidentally include them
+rm -fr tiff libusb libusbw
+# Make argyllcms actually build on a modern Linux system
+%patch0 -p1 -b .build
+# Do not use printf as a function name
+%patch1 -p1 -b .printf
+
+
+%build
+CCOPTFLAG="%{optflags}"
+PATH=$PATH:.
+export CCOPTFLAG PATH
+
+%define jam jam -d x -f../Jambase %{?_smp_mflags}
+
+# Patching and running makeall.ksh would be easier, but that would hide build
+# errors from rpm. If the build process was a real DAG a single for loop would
+# be sufficient
+
+for dir in numlib plot icc cgats ; do
+ pushd $dir
+ %{jam}
+ popd
+done
+
+pushd rspl
+ %{jam} librspl.a
+popd
+
+pushd xicc
+ %{jam} libxicc.a libxcolorants.a
+popd
+
+pushd gamut
+ %{jam}
+popd
+
+pushd spectro
+ %{jam} libinsttypes.a
+popd
+
+for dir in xicc imdi target scanin profile link tweak render spectro rspl ; do
+ pushd $dir
+ %{jam}
+ popd
+done
+
+
+%install
+rm -rf %{buildroot}
+
+# Use upstream's install logic targetting a temp dir so files can be re-sorted
+# sanely later
+
+PATH=$PATH:.
+DOTDOT=$PWD/tmp
+
+export DOTDOT PATH
+
+for dir in gamut icc imdi link profile render scanin spectro target tweak xicc
+do
+ pushd $dir
+ %{jam} install
+ popd
+done
+
+# No business in bin
+rm $DOTDOT/bin/*.txt
+mv $DOTDOT/bin/*.gam .
+
+# Licensing madness
+install -p -m 0644 icc/License.txt License-icc.txt
+install -p -m 0644 cgats/License.txt License-cgats.txt
+
+ln -s ArgyllDoc.html doc/index.html
+
+# Little CMS conflict
+mv $DOTDOT/bin/icclink $DOTDOT/bin/icclink-%{name}
+
+# Actual install phase
+
+install -d -m 0755 %{buildroot}%{_bindir}
+install -p -m 0755 tmp/bin/* %{buildroot}%{_bindir}
+
+install -d -m 0755 %{buildroot}%{_datadir}/%{name}
+install -p -m 0644 ref/* scanin/QPcard_201.c* *.gam \
+ %{buildroot}%{_datadir}/%{name}
+rm %{buildroot}%{_datadir}/%{name}/afiles
+
+# Do some device permission magic
+install -d -m 0755 %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
+install -p -m 0644 %{SOURCE1} \
+ %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/19-color.fdi
+
+install -d -m 0755 %{buildroot}%{_datadir}/PolicyKit/policy/
+install -p -m 0644 %{SOURCE2} \
+ %{buildroot}%{_datadir}/PolicyKit/policy/color-device-file.policy
+
+
+%clean
+rm -rf %{buildroot}
+
+
+%files
+%defattr(0644,root,root,0755)
+%doc *.txt
+
+%attr(0755,root,root) %{_bindir}/*
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}/*
+%{_datadir}/hal/fdi/policy/10osvendor/19-color.fdi
+%{_datadir}/PolicyKit/policy/color-device-file.policy
+
+
+%files doc
+%defattr(0644,root,root,0755)
+%doc doc/*.html doc/*.jpg doc/*.txt
+
+
+%changelog
+* Thu Feb 8 2008 Nicolas Mailhot
+- 0.70-0.8.Beta8
+✓ update to Stefan Brüns' latest safe-printf patch (bz421921#c18)
+
+* Thu Feb 7 2008 Nicolas Mailhot
+- 0.70-0.7.Beta8
+ Finally got around packaging beta8, I suck
+✓ Fedora patches merged upstream, dropped from rpm
+✓ Huey handling seems sanitized (needs testing by Huey users)
+⚖ Upstream relicensed icc and cgats library to plain MIT license (Thanks!)
+
+* Thu Dec 14 2007 Nicolas Mailhot
+- 0.70-0.6.Beta7
+☹ fix udev typo
+- 0.70-0.5.Beta7
+⚖ Remove files that may be GPLv2-only according to upstream
+
+* Thu Dec 13 2007 Nicolas Mailhot
+- 0.70-0.4.Beta7
+✓ move to modern PolicyKit world (David Zeuthen, Frédéric Crozat, me)
+
+* Wed Dec 12 2007 Nicolas Mailhot
+- 0.70-0.3.Beta7
+✓ integrate review feedback
+- 0.70-0.2.Beta7
+✓ fix buffer overflows in dispread and iccdump (credits Daniel Berrangé)
+- 0.70-0.1.Beta7
+✓ 0.70 beta7
+➤ initial laborious packaging
+✌ Build system from hell untangling by Frédéric Crozat (Mandriva), and me
+✌ device permission magic by me
+☣ Massively under-tested package, please report problems
diff --git a/sources b/sources
index e69de29..6f1a938 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+5cdc5e6cbb794a06c97f484fd8f9053f argyllV0.70Beta8_src.zip