xref: /plan9/sys/src/cmd/gs/icclib/icc9809.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier 
23ff48bf5SDavid du Colombier /*
33ff48bf5SDavid du Colombier  * Note: Modified for use by icclib V2.00:
43ff48bf5SDavid du Colombier  *
53ff48bf5SDavid du Colombier  * Changed guard bands from ICC_H to ICC9809_H
63ff48bf5SDavid du Colombier  *
73ff48bf5SDavid du Colombier  * Replace tag last values 0xFFFFFFFFL with define icMaxTagVal,
83ff48bf5SDavid du Colombier  * and define this to be -1, for better compiler compatibility.
93ff48bf5SDavid du Colombier  *
10*593dc095SDavid du Colombier  * Add section to use machine specific INR & ORD to define
113ff48bf5SDavid du Colombier  * the sizes of ic Numbers, if ORD is defined.
123ff48bf5SDavid du Colombier  *
133ff48bf5SDavid du Colombier  * Adding colorspaces 'MCH5-8' for Hexachrome and others. (Colorsync ?)
143ff48bf5SDavid du Colombier  * Added the Positive/Negative and Color/BlackAndWhite Attribute bits
153ff48bf5SDavid du Colombier  *
163ff48bf5SDavid du Colombier  * I believe icMeasurementFlare as an enumeration is bogus in
173ff48bf5SDavid du Colombier  * this file. It is meant to be a u16.16 number.
183ff48bf5SDavid du Colombier  *
193ff48bf5SDavid du Colombier  * Add Chromaticity Tag and Type from ICC.1A:1999-04,
203ff48bf5SDavid du Colombier  * but there is no formal "icc.h" from the ICC that indicates
213ff48bf5SDavid du Colombier  * what the names should be.
223ff48bf5SDavid du Colombier  *
233ff48bf5SDavid du Colombier  * Added Colorsync 2.5 specific VideoCardGamma defines.
243ff48bf5SDavid du Colombier  *
253ff48bf5SDavid du Colombier  *  Graeme Gill.
263ff48bf5SDavid du Colombier  */
273ff48bf5SDavid du Colombier 
283ff48bf5SDavid du Colombier /* Header file guard bands */
293ff48bf5SDavid du Colombier #ifndef ICC9809_H
303ff48bf5SDavid du Colombier #define ICC9809_H
313ff48bf5SDavid du Colombier 
323ff48bf5SDavid du Colombier /*****************************************************************
333ff48bf5SDavid du Colombier  Copyright (c) 1994-1998 SunSoft, Inc.
343ff48bf5SDavid du Colombier 
353ff48bf5SDavid du Colombier                     Rights Reserved
363ff48bf5SDavid du Colombier 
373ff48bf5SDavid du Colombier Permission is hereby granted, free of charge, to any person
383ff48bf5SDavid du Colombier obtaining a copy of this software and associated documentation
393ff48bf5SDavid du Colombier files (the "Software"), to deal in the Software without restrict-
403ff48bf5SDavid du Colombier ion, including without limitation the rights to use, copy, modify,
413ff48bf5SDavid du Colombier merge, publish distribute, sublicense, and/or sell copies of the
423ff48bf5SDavid du Colombier Software, and to permit persons to whom the Software is furnished
433ff48bf5SDavid du Colombier to do so, subject to the following conditions:
443ff48bf5SDavid du Colombier 
453ff48bf5SDavid du Colombier The above copyright notice and this permission notice shall be
463ff48bf5SDavid du Colombier included in all copies or substantial portions of the Software.
473ff48bf5SDavid du Colombier 
483ff48bf5SDavid du Colombier THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
493ff48bf5SDavid du Colombier EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
503ff48bf5SDavid du Colombier OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
513ff48bf5SDavid du Colombier INFRINGEMENT.  IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT
523ff48bf5SDavid du Colombier COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
533ff48bf5SDavid du Colombier WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
543ff48bf5SDavid du Colombier FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
553ff48bf5SDavid du Colombier OTHER DEALINGS IN THE SOFTWARE.
563ff48bf5SDavid du Colombier 
573ff48bf5SDavid du Colombier Except as contained in this notice, the name of SunSoft, Inc.
583ff48bf5SDavid du Colombier shall not be used in advertising or otherwise to promote the
593ff48bf5SDavid du Colombier sale, use or other dealings in this Software without written
603ff48bf5SDavid du Colombier authorization from SunSoft Inc.
613ff48bf5SDavid du Colombier ******************************************************************/
623ff48bf5SDavid du Colombier 
633ff48bf5SDavid du Colombier /*
643ff48bf5SDavid du Colombier  * This version of the header file corresponds to the profile
653ff48bf5SDavid du Colombier  * Specification ICC.1:1998-09.
663ff48bf5SDavid du Colombier  *
673ff48bf5SDavid du Colombier  * All header file entries are pre-fixed with "ic" to help
683ff48bf5SDavid du Colombier  * avoid name space collisions. Signatures are pre-fixed with
693ff48bf5SDavid du Colombier  * icSig.
703ff48bf5SDavid du Colombier  *
713ff48bf5SDavid du Colombier  * The structures defined in this header file were created to
723ff48bf5SDavid du Colombier  * represent a description of an ICC profile on disk. Rather
733ff48bf5SDavid du Colombier  * than use pointers a technique is used where a single byte array
743ff48bf5SDavid du Colombier  * was placed at the end of each structure. This allows us in "C"
753ff48bf5SDavid du Colombier  * to extend the structure by allocating more data than is needed
763ff48bf5SDavid du Colombier  * to account for variable length structures.
773ff48bf5SDavid du Colombier  *
783ff48bf5SDavid du Colombier  * This also ensures that data following is allocated
793ff48bf5SDavid du Colombier  * contiguously and makes it easier to write and read data from
803ff48bf5SDavid du Colombier  * the file.
813ff48bf5SDavid du Colombier  *
823ff48bf5SDavid du Colombier  * For example to allocate space for a 256 count length UCR
833ff48bf5SDavid du Colombier  * and BG array, and fill the allocated data.  Note strlen + 1
843ff48bf5SDavid du Colombier  * to remember NULL terminator.
853ff48bf5SDavid du Colombier  *
863ff48bf5SDavid du Colombier         icUcrBgCurve    *ucrCurve, *bgCurve;
873ff48bf5SDavid du Colombier         int             ucr_nbytes, bg_nbytes, string_bytes;
883ff48bf5SDavid du Colombier         icUcrBg         *ucrBgWrite;
893ff48bf5SDavid du Colombier         char            ucr_string[100], *ucr_char;
903ff48bf5SDavid du Colombier 
913ff48bf5SDavid du Colombier         strcpy(ucr_string, "Example ucrBG curves");
923ff48bf5SDavid du Colombier         ucr_nbytes = sizeof(icUInt32Number) +
933ff48bf5SDavid du Colombier                  (UCR_CURVE_SIZE * sizeof(icUInt16Number));
943ff48bf5SDavid du Colombier         bg_nbytes = sizeof(icUInt32Number) +
953ff48bf5SDavid du Colombier                  (BG_CURVE_SIZE * sizeof(icUInt16Number));
963ff48bf5SDavid du Colombier         string_bytes = strlen(ucr_string) + 1;
973ff48bf5SDavid du Colombier 
983ff48bf5SDavid du Colombier         ucrBgWrite = (icUcrBg *)malloc(
993ff48bf5SDavid du Colombier                                 (ucr_nbytes + bg_nbytes + string_bytes));
1003ff48bf5SDavid du Colombier 
1013ff48bf5SDavid du Colombier         ucrCurve = (icUcrBgCurve *)ucrBgWrite->data;
1023ff48bf5SDavid du Colombier         ucrCurve->count = UCR_CURVE_SIZE;
1033ff48bf5SDavid du Colombier         for (i=0; i<ucrCurve->count; i++)
1043ff48bf5SDavid du Colombier                 ucrCurve->curve[i] = (icUInt16Number)i;
1053ff48bf5SDavid du Colombier 
1063ff48bf5SDavid du Colombier         bgCurve = (icUcrBgCurve *)((char *)ucrCurve + ucr_nbytes);
1073ff48bf5SDavid du Colombier         bgCurve->count = BG_CURVE_SIZE;
1083ff48bf5SDavid du Colombier         for (i=0; i<bgCurve->count; i++)
1093ff48bf5SDavid du Colombier                 bgCurve->curve[i] = 255 - (icUInt16Number)i;
1103ff48bf5SDavid du Colombier 
1113ff48bf5SDavid du Colombier         ucr_char = (char *)((char *)bgCurve + bg_nbytes);
1123ff48bf5SDavid du Colombier         memcpy(ucr_char, ucr_string, string_bytes);
1133ff48bf5SDavid du Colombier  *
1143ff48bf5SDavid du Colombier  */
1153ff48bf5SDavid du Colombier 
1163ff48bf5SDavid du Colombier /*
1173ff48bf5SDavid du Colombier  * Many of the structures contain variable length arrays. This
1183ff48bf5SDavid du Colombier  * is represented by the use of the convention.
1193ff48bf5SDavid du Colombier  *
1203ff48bf5SDavid du Colombier  *      type    data[icAny];
1213ff48bf5SDavid du Colombier  */
1223ff48bf5SDavid du Colombier 
1233ff48bf5SDavid du Colombier /* Some compilers accept unsigned value in enum, some don't ... */
1243ff48bf5SDavid du Colombier /* #define icMaxTagVal 0xFFFFFFFFL */
1253ff48bf5SDavid du Colombier 
1263ff48bf5SDavid du Colombier #define icMaxTagVal -1
1273ff48bf5SDavid du Colombier 
1283ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
1293ff48bf5SDavid du Colombier /*
1303ff48bf5SDavid du Colombier  * Defines used in the specification
1313ff48bf5SDavid du Colombier  */
1323ff48bf5SDavid du Colombier #define icMagicNumber                   0x61637370L     /* 'acsp' */
1333ff48bf5SDavid du Colombier #define icVersionNumber                 0x02200000L     /* 2.2.0, BCD */
1343ff48bf5SDavid du Colombier 
1353ff48bf5SDavid du Colombier /* Screening Encodings */
1363ff48bf5SDavid du Colombier #define icPrtrDefaultScreensFalse       0x00000000L     /* Bit pos 0 */
1373ff48bf5SDavid du Colombier #define icPrtrDefaultScreensTrue        0x00000001L     /* Bit pos 0 */
1383ff48bf5SDavid du Colombier #define icLinesPerInch                  0x00000002L     /* Bit pos 1 */
1393ff48bf5SDavid du Colombier #define icLinesPerCm                    0x00000000L     /* Bit pos 1 */
1403ff48bf5SDavid du Colombier 
1413ff48bf5SDavid du Colombier /*
1423ff48bf5SDavid du Colombier  * Device attributes, currently defined values correspond
1433ff48bf5SDavid du Colombier  * to the least-significant 4 bytes of the 8 byte attribute
1443ff48bf5SDavid du Colombier  * quantity, see the header for their location.
1453ff48bf5SDavid du Colombier  */
1463ff48bf5SDavid du Colombier #define icReflective                    0x00000000L     /* Bit pos 0 */
1473ff48bf5SDavid du Colombier #define icTransparency                  0x00000001L     /* Bit pos 0 */
1483ff48bf5SDavid du Colombier #define icGlossy                        0x00000000L     /* Bit pos 1 */
1493ff48bf5SDavid du Colombier #define icMatte                         0x00000002L     /* Bit pos 1 */
1503ff48bf5SDavid du Colombier #define icPositive                      0x00000000L     /* Bit pos 2 */
1513ff48bf5SDavid du Colombier #define icNegative                      0x00000004L     /* Bit pos 2 */
1523ff48bf5SDavid du Colombier #define icColor                         0x00000000L     /* Bit pos 3 */
1533ff48bf5SDavid du Colombier #define icBlackAndWhite                 0x00000008L     /* Bit pos 3 */
1543ff48bf5SDavid du Colombier 
1553ff48bf5SDavid du Colombier /*
1563ff48bf5SDavid du Colombier  * Profile header flags, the least-significant 16 bits are reserved
1573ff48bf5SDavid du Colombier  * for consortium use.
1583ff48bf5SDavid du Colombier  */
1593ff48bf5SDavid du Colombier #define icEmbeddedProfileFalse          0x00000000L     /* Bit pos 0 */
1603ff48bf5SDavid du Colombier #define icEmbeddedProfileTrue           0x00000001L     /* Bit pos 0 */
1613ff48bf5SDavid du Colombier #define icUseAnywhere                   0x00000000L     /* Bit pos 1 */
1623ff48bf5SDavid du Colombier #define icUseWithEmbeddedDataOnly       0x00000002L     /* Bit pos 1 */
1633ff48bf5SDavid du Colombier 
1643ff48bf5SDavid du Colombier /* Ascii or Binary data */
1653ff48bf5SDavid du Colombier #define icAsciiData                     0x00000000L
1663ff48bf5SDavid du Colombier #define icBinaryData                    0x00000001L
1673ff48bf5SDavid du Colombier 
1683ff48bf5SDavid du Colombier /* Phosphor or Colorant sets */
1693ff48bf5SDavid du Colombier #define icPhColUnknown                  0x0000          /* Specified */
1703ff48bf5SDavid du Colombier #define icPhColITU_R_BT_709             0x0001          /* ITU-R BT.709 */
1713ff48bf5SDavid du Colombier #define icPhColSMPTE_RP145_1994         0x0002          /* SMPTE RP145-1994 */
1723ff48bf5SDavid du Colombier #define icPhColEBU_Tech_3213_E          0x0003          /* EBU Tech.3213-E */
1733ff48bf5SDavid du Colombier #define icPhColP22                      0x0004          /* P22 */
1743ff48bf5SDavid du Colombier 
1753ff48bf5SDavid du Colombier /* Video card gamma formats (ColorSync 2.5 specific) */
1763ff48bf5SDavid du Colombier #define icVideoCardGammaTable           0x00000000
1773ff48bf5SDavid du Colombier #define icVideoCardGammaFormula         0x00000001
1783ff48bf5SDavid du Colombier 
1793ff48bf5SDavid du Colombier /*
1803ff48bf5SDavid du Colombier  * Define used to indicate that this is a variable length array
1813ff48bf5SDavid du Colombier  */
1823ff48bf5SDavid du Colombier #define icAny                           1
1833ff48bf5SDavid du Colombier 
1843ff48bf5SDavid du Colombier 
1853ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
1863ff48bf5SDavid du Colombier /*
1873ff48bf5SDavid du Colombier  * Use this area to translate platform definitions of long
1883ff48bf5SDavid du Colombier  * etc into icXXX form. The rest of the header uses the icXXX
1893ff48bf5SDavid du Colombier  * typedefs. Signatures are 4 byte quantities.
1903ff48bf5SDavid du Colombier  */
1913ff48bf5SDavid du Colombier #ifdef ORD32			/* Formal sizes defined */
1923ff48bf5SDavid du Colombier 
193*593dc095SDavid du Colombier typedef INR32           icSignature;
1943ff48bf5SDavid du Colombier 
1953ff48bf5SDavid du Colombier /* Unsigned integer numbers */
1963ff48bf5SDavid du Colombier typedef ORD8            icUInt8Number;
1973ff48bf5SDavid du Colombier typedef ORD16           icUInt16Number;
1983ff48bf5SDavid du Colombier typedef ORD32           icUInt32Number;
1993ff48bf5SDavid du Colombier typedef ORD32           icUInt64Number[2];
2003ff48bf5SDavid du Colombier 
2013ff48bf5SDavid du Colombier /* Signed numbers */
202*593dc095SDavid du Colombier typedef INR8            icInt8Number;
203*593dc095SDavid du Colombier typedef INR16           icInt16Number;
204*593dc095SDavid du Colombier typedef INR32	        icInt32Number;
205*593dc095SDavid du Colombier typedef INR32           icInt64Number[2];
2063ff48bf5SDavid du Colombier 
2073ff48bf5SDavid du Colombier /* Fixed numbers */
208*593dc095SDavid du Colombier typedef INR32           icS15Fixed16Number;
2093ff48bf5SDavid du Colombier typedef ORD32           icU16Fixed16Number;
2103ff48bf5SDavid du Colombier 
2113ff48bf5SDavid du Colombier #else /* Not formal */
2123ff48bf5SDavid du Colombier 
2133ff48bf5SDavid du Colombier #ifdef __sgi
2143ff48bf5SDavid du Colombier #include "sgidefs.h"
2153ff48bf5SDavid du Colombier 
2163ff48bf5SDavid du Colombier typedef __int32_t       icSignature;
2173ff48bf5SDavid du Colombier 
2183ff48bf5SDavid du Colombier /*
2193ff48bf5SDavid du Colombier  * Number definitions
2203ff48bf5SDavid du Colombier  */
2213ff48bf5SDavid du Colombier 
2223ff48bf5SDavid du Colombier /* Unsigned integer numbers */
2233ff48bf5SDavid du Colombier typedef unsigned char   icUInt8Number;
2243ff48bf5SDavid du Colombier typedef unsigned short  icUInt16Number;
2253ff48bf5SDavid du Colombier typedef __uint32_t      icUInt32Number;
2263ff48bf5SDavid du Colombier typedef __uint32_t      icUInt64Number[2];
2273ff48bf5SDavid du Colombier 
2283ff48bf5SDavid du Colombier /* Signed numbers */
2293ff48bf5SDavid du Colombier typedef char            icInt8Number;
2303ff48bf5SDavid du Colombier typedef short           icInt16Number;
2313ff48bf5SDavid du Colombier typedef __int32_t       icInt32Number;
2323ff48bf5SDavid du Colombier typedef __int32_t       icInt64Number[2];
2333ff48bf5SDavid du Colombier 
2343ff48bf5SDavid du Colombier /* Fixed numbers */
2353ff48bf5SDavid du Colombier typedef __int32_t       icS15Fixed16Number;
2363ff48bf5SDavid du Colombier typedef __uint32_t      icU16Fixed16Number;
2373ff48bf5SDavid du Colombier 
2383ff48bf5SDavid du Colombier #else   /* default definitions */
2393ff48bf5SDavid du Colombier 
2403ff48bf5SDavid du Colombier typedef long            icSignature;
2413ff48bf5SDavid du Colombier 
2423ff48bf5SDavid du Colombier /*
2433ff48bf5SDavid du Colombier  * Number definitions
2443ff48bf5SDavid du Colombier  */
2453ff48bf5SDavid du Colombier 
2463ff48bf5SDavid du Colombier /* Unsigned integer numbers */
2473ff48bf5SDavid du Colombier typedef unsigned char   icUInt8Number;
2483ff48bf5SDavid du Colombier typedef unsigned short  icUInt16Number;
2493ff48bf5SDavid du Colombier typedef unsigned long   icUInt32Number;
2503ff48bf5SDavid du Colombier typedef unsigned long   icUInt64Number[2];
2513ff48bf5SDavid du Colombier 
2523ff48bf5SDavid du Colombier /* Signed numbers */
2533ff48bf5SDavid du Colombier typedef char            icInt8Number;
2543ff48bf5SDavid du Colombier typedef short           icInt16Number;
2553ff48bf5SDavid du Colombier typedef long            icInt32Number;
2563ff48bf5SDavid du Colombier typedef long            icInt64Number[2];
2573ff48bf5SDavid du Colombier 
2583ff48bf5SDavid du Colombier /* Fixed numbers */
2593ff48bf5SDavid du Colombier typedef long            icS15Fixed16Number;
2603ff48bf5SDavid du Colombier typedef unsigned long   icU16Fixed16Number;
2613ff48bf5SDavid du Colombier #endif  /* default defs */
2623ff48bf5SDavid du Colombier #endif  /* Not formal */
2633ff48bf5SDavid du Colombier 
2643ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
2653ff48bf5SDavid du Colombier /* public tags and sizes */
2663ff48bf5SDavid du Colombier typedef enum {
2673ff48bf5SDavid du Colombier     icSigAToB0Tag                       = 0x41324230L,  /* 'A2B0' */
2683ff48bf5SDavid du Colombier     icSigAToB1Tag                       = 0x41324231L,  /* 'A2B1' */
2693ff48bf5SDavid du Colombier     icSigAToB2Tag                       = 0x41324232L,  /* 'A2B2' */
2703ff48bf5SDavid du Colombier     icSigBlueColorantTag                = 0x6258595AL,  /* 'bXYZ' */
2713ff48bf5SDavid du Colombier     icSigBlueTRCTag                     = 0x62545243L,  /* 'bTRC' */
2723ff48bf5SDavid du Colombier     icSigBToA0Tag                       = 0x42324130L,  /* 'B2A0' */
2733ff48bf5SDavid du Colombier     icSigBToA1Tag                       = 0x42324131L,  /* 'B2A1' */
2743ff48bf5SDavid du Colombier     icSigBToA2Tag                       = 0x42324132L,  /* 'B2A2' */
2753ff48bf5SDavid du Colombier     icSigCalibrationDateTimeTag         = 0x63616C74L,  /* 'calt' */
2763ff48bf5SDavid du Colombier     icSigCharTargetTag                  = 0x74617267L,  /* 'targ' */
2773ff48bf5SDavid du Colombier     icSigChromaticityTag                = 0x6368726DL,  /* 'chrm' */
2783ff48bf5SDavid du Colombier     icSigCopyrightTag                   = 0x63707274L,  /* 'cprt' */
2793ff48bf5SDavid du Colombier     icSigCrdInfoTag                     = 0x63726469L,  /* 'crdi' */
2803ff48bf5SDavid du Colombier     icSigDeviceMfgDescTag               = 0x646D6E64L,  /* 'dmnd' */
2813ff48bf5SDavid du Colombier     icSigDeviceModelDescTag             = 0x646D6464L,  /* 'dmdd' */
2823ff48bf5SDavid du Colombier     icSigDeviceSettingsTag              = 0x64657673L,  /* 'devs' */
2833ff48bf5SDavid du Colombier     icSigGamutTag                       = 0x67616D74L,  /* 'gamt ' */
2843ff48bf5SDavid du Colombier     icSigGrayTRCTag                     = 0x6b545243L,  /* 'kTRC' */
2853ff48bf5SDavid du Colombier     icSigGreenColorantTag               = 0x6758595AL,  /* 'gXYZ' */
2863ff48bf5SDavid du Colombier     icSigGreenTRCTag                    = 0x67545243L,  /* 'gTRC' */
2873ff48bf5SDavid du Colombier     icSigLuminanceTag                   = 0x6C756d69L,  /* 'lumi' */
2883ff48bf5SDavid du Colombier     icSigMeasurementTag                 = 0x6D656173L,  /* 'meas' */
2893ff48bf5SDavid du Colombier     icSigMediaBlackPointTag             = 0x626B7074L,  /* 'bkpt' */
2903ff48bf5SDavid du Colombier     icSigMediaWhitePointTag             = 0x77747074L,  /* 'wtpt' */
2913ff48bf5SDavid du Colombier     icSigNamedColorTag                  = 0x6E636f6CL,  /* 'ncol'
2923ff48bf5SDavid du Colombier                                                          * OBSOLETE, use ncl2 */
2933ff48bf5SDavid du Colombier     icSigNamedColor2Tag                 = 0x6E636C32L,  /* 'ncl2' */
2943ff48bf5SDavid du Colombier     icSigOutputResponseTag              = 0x72657370L,  /* 'resp' */
2953ff48bf5SDavid du Colombier     icSigPreview0Tag                    = 0x70726530L,  /* 'pre0' */
2963ff48bf5SDavid du Colombier     icSigPreview1Tag                    = 0x70726531L,  /* 'pre1' */
2973ff48bf5SDavid du Colombier     icSigPreview2Tag                    = 0x70726532L,  /* 'pre2' */
2983ff48bf5SDavid du Colombier     icSigProfileDescriptionTag          = 0x64657363L,  /* 'desc' */
2993ff48bf5SDavid du Colombier     icSigProfileSequenceDescTag         = 0x70736571L,  /* 'pseq' */
3003ff48bf5SDavid du Colombier     icSigPs2CRD0Tag                     = 0x70736430L,  /* 'psd0' */
3013ff48bf5SDavid du Colombier     icSigPs2CRD1Tag                     = 0x70736431L,  /* 'psd1' */
3023ff48bf5SDavid du Colombier     icSigPs2CRD2Tag                     = 0x70736432L,  /* 'psd2' */
3033ff48bf5SDavid du Colombier     icSigPs2CRD3Tag                     = 0x70736433L,  /* 'psd3' */
3043ff48bf5SDavid du Colombier     icSigPs2CSATag                      = 0x70733273L,  /* 'ps2s' */
3053ff48bf5SDavid du Colombier     icSigPs2RenderingIntentTag          = 0x70733269L,  /* 'ps2i' */
3063ff48bf5SDavid du Colombier     icSigRedColorantTag                 = 0x7258595AL,  /* 'rXYZ' */
3073ff48bf5SDavid du Colombier     icSigRedTRCTag                      = 0x72545243L,  /* 'rTRC' */
3083ff48bf5SDavid du Colombier     icSigScreeningDescTag               = 0x73637264L,  /* 'scrd' */
3093ff48bf5SDavid du Colombier     icSigScreeningTag                   = 0x7363726EL,  /* 'scrn' */
3103ff48bf5SDavid du Colombier     icSigTechnologyTag                  = 0x74656368L,  /* 'tech' */
3113ff48bf5SDavid du Colombier     icSigUcrBgTag                       = 0x62666420L,  /* 'bfd ' */
3123ff48bf5SDavid du Colombier 	icSigVideoCardGammaTag              = 0x76636774L,  /* 'vcgt' ColorSync 2.5 */
3133ff48bf5SDavid du Colombier     icSigViewingCondDescTag             = 0x76756564L,  /* 'vued' */
3143ff48bf5SDavid du Colombier     icSigViewingConditionsTag           = 0x76696577L,  /* 'view' */
3153ff48bf5SDavid du Colombier     icMaxEnumTag                        = icMaxTagVal
3163ff48bf5SDavid du Colombier } icTagSignature;
3173ff48bf5SDavid du Colombier 
3183ff48bf5SDavid du Colombier /* technology signature descriptions */
3193ff48bf5SDavid du Colombier typedef enum {
3203ff48bf5SDavid du Colombier     icSigDigitalCamera                  = 0x6463616DL,  /* 'dcam' */
3213ff48bf5SDavid du Colombier     icSigFilmScanner                    = 0x6673636EL,  /* 'fscn' */
3223ff48bf5SDavid du Colombier     icSigReflectiveScanner              = 0x7273636EL,  /* 'rscn' */
3233ff48bf5SDavid du Colombier     icSigInkJetPrinter                  = 0x696A6574L,  /* 'ijet' */
3243ff48bf5SDavid du Colombier     icSigThermalWaxPrinter              = 0x74776178L,  /* 'twax' */
3253ff48bf5SDavid du Colombier     icSigElectrophotographicPrinter     = 0x6570686FL,  /* 'epho' */
3263ff48bf5SDavid du Colombier     icSigElectrostaticPrinter           = 0x65737461L,  /* 'esta' */
3273ff48bf5SDavid du Colombier     icSigDyeSublimationPrinter          = 0x64737562L,  /* 'dsub' */
3283ff48bf5SDavid du Colombier     icSigPhotographicPaperPrinter       = 0x7270686FL,  /* 'rpho' */
3293ff48bf5SDavid du Colombier     icSigFilmWriter                     = 0x6670726EL,  /* 'fprn' */
3303ff48bf5SDavid du Colombier     icSigVideoMonitor                   = 0x7669646DL,  /* 'vidm' */
3313ff48bf5SDavid du Colombier     icSigVideoCamera                    = 0x76696463L,  /* 'vidc' */
3323ff48bf5SDavid du Colombier     icSigProjectionTelevision           = 0x706A7476L,  /* 'pjtv' */
3333ff48bf5SDavid du Colombier     icSigCRTDisplay                     = 0x43525420L,  /* 'CRT ' */
3343ff48bf5SDavid du Colombier     icSigPMDisplay                      = 0x504D4420L,  /* 'PMD ' */
3353ff48bf5SDavid du Colombier     icSigAMDisplay                      = 0x414D4420L,  /* 'AMD ' */
3363ff48bf5SDavid du Colombier     icSigPhotoCD                        = 0x4B504344L,  /* 'KPCD' */
3373ff48bf5SDavid du Colombier     icSigPhotoImageSetter               = 0x696D6773L,  /* 'imgs' */
3383ff48bf5SDavid du Colombier     icSigGravure                        = 0x67726176L,  /* 'grav' */
3393ff48bf5SDavid du Colombier     icSigOffsetLithography              = 0x6F666673L,  /* 'offs' */
3403ff48bf5SDavid du Colombier     icSigSilkscreen                     = 0x73696C6BL,  /* 'silk' */
3413ff48bf5SDavid du Colombier     icSigFlexography                    = 0x666C6578L,  /* 'flex' */
3423ff48bf5SDavid du Colombier     icMaxEnumTechnology                 = icMaxTagVal
3433ff48bf5SDavid du Colombier } icTechnologySignature;
3443ff48bf5SDavid du Colombier 
3453ff48bf5SDavid du Colombier /* type signatures */
3463ff48bf5SDavid du Colombier typedef enum {
3473ff48bf5SDavid du Colombier     icSigCurveType                      = 0x63757276L,  /* 'curv' */
3483ff48bf5SDavid du Colombier     icSigChromaticityType               = 0x6368726DL,  /* 'chrm' */
3493ff48bf5SDavid du Colombier     icSigDataType                       = 0x64617461L,  /* 'data' */
3503ff48bf5SDavid du Colombier     icSigDateTimeType                   = 0x6474696DL,  /* 'dtim' */
3513ff48bf5SDavid du Colombier     icSigDeviceSettingsType             = 0x64657673L,  /* 'devs' */
3523ff48bf5SDavid du Colombier     icSigLut16Type                      = 0x6d667432L,  /* 'mft2' */
3533ff48bf5SDavid du Colombier     icSigLut8Type                       = 0x6d667431L,  /* 'mft1' */
3543ff48bf5SDavid du Colombier     icSigMeasurementType                = 0x6D656173L,  /* 'meas' */
3553ff48bf5SDavid du Colombier     icSigNamedColorType                 = 0x6E636f6CL,  /* 'ncol'
3563ff48bf5SDavid du Colombier                                                          * OBSOLETE, use ncl2 */
3573ff48bf5SDavid du Colombier     icSigProfileSequenceDescType        = 0x70736571L,  /* 'pseq' */
3583ff48bf5SDavid du Colombier     icSigResponseCurveSet16Type         = 0x72637332L,  /* 'rcs2' */
3593ff48bf5SDavid du Colombier     icSigS15Fixed16ArrayType            = 0x73663332L,  /* 'sf32' */
3603ff48bf5SDavid du Colombier     icSigScreeningType                  = 0x7363726EL,  /* 'scrn' */
3613ff48bf5SDavid du Colombier     icSigSignatureType                  = 0x73696720L,  /* 'sig ' */
3623ff48bf5SDavid du Colombier     icSigTextType                       = 0x74657874L,  /* 'text' */
3633ff48bf5SDavid du Colombier     icSigTextDescriptionType            = 0x64657363L,  /* 'desc' */
3643ff48bf5SDavid du Colombier     icSigU16Fixed16ArrayType            = 0x75663332L,  /* 'uf32' */
3653ff48bf5SDavid du Colombier     icSigUcrBgType                      = 0x62666420L,  /* 'bfd ' */
3663ff48bf5SDavid du Colombier     icSigUInt16ArrayType                = 0x75693136L,  /* 'ui16' */
3673ff48bf5SDavid du Colombier     icSigUInt32ArrayType                = 0x75693332L,  /* 'ui32' */
3683ff48bf5SDavid du Colombier     icSigUInt64ArrayType                = 0x75693634L,  /* 'ui64' */
3693ff48bf5SDavid du Colombier     icSigUInt8ArrayType                 = 0x75693038L,  /* 'ui08' */
3703ff48bf5SDavid du Colombier 	icSigVideoCardGammaType             = 0x76636774L,  /* 'vcgt' ColorSync 2.5 */
3713ff48bf5SDavid du Colombier     icSigViewingConditionsType          = 0x76696577L,  /* 'view' */
3723ff48bf5SDavid du Colombier     icSigXYZType                        = 0x58595A20L,  /* 'XYZ ' */
3733ff48bf5SDavid du Colombier     icSigXYZArrayType                   = 0x58595A20L,  /* 'XYZ ' */
3743ff48bf5SDavid du Colombier     icSigNamedColor2Type                = 0x6E636C32L,  /* 'ncl2' */
3753ff48bf5SDavid du Colombier     icSigCrdInfoType                    = 0x63726469L,  /* 'crdi' */
3763ff48bf5SDavid du Colombier     icMaxEnumType                       = icMaxTagVal
3773ff48bf5SDavid du Colombier } icTagTypeSignature;
3783ff48bf5SDavid du Colombier 
3793ff48bf5SDavid du Colombier /*
3803ff48bf5SDavid du Colombier  * Color Space Signatures
3813ff48bf5SDavid du Colombier  * Note that only icSigXYZData and icSigLabData are valid
3823ff48bf5SDavid du Colombier  * Profile Connection Spaces (PCSs)
3833ff48bf5SDavid du Colombier  */
3843ff48bf5SDavid du Colombier typedef enum {
3853ff48bf5SDavid du Colombier     icSigXYZData                        = 0x58595A20L,  /* 'XYZ ' */
3863ff48bf5SDavid du Colombier     icSigLabData                        = 0x4C616220L,  /* 'Lab ' */
3873ff48bf5SDavid du Colombier     icSigLuvData                        = 0x4C757620L,  /* 'Luv ' */
3883ff48bf5SDavid du Colombier     icSigYCbCrData                      = 0x59436272L,  /* 'YCbr' */
3893ff48bf5SDavid du Colombier     icSigYxyData                        = 0x59787920L,  /* 'Yxy ' */
3903ff48bf5SDavid du Colombier     icSigRgbData                        = 0x52474220L,  /* 'RGB ' */
3913ff48bf5SDavid du Colombier     icSigGrayData                       = 0x47524159L,  /* 'GRAY' */
3923ff48bf5SDavid du Colombier     icSigHsvData                        = 0x48535620L,  /* 'HSV ' */
3933ff48bf5SDavid du Colombier     icSigHlsData                        = 0x484C5320L,  /* 'HLS ' */
3943ff48bf5SDavid du Colombier     icSigCmykData                       = 0x434D594BL,  /* 'CMYK' */
3953ff48bf5SDavid du Colombier     icSigCmyData                        = 0x434D5920L,  /* 'CMY ' */
3963ff48bf5SDavid du Colombier     icSigMch5Data                       = 0x4D434835L,  /* 'MCH5' Colorsync ? */
3973ff48bf5SDavid du Colombier     icSigMch6Data                       = 0x4D434836L,  /* 'MCH6' Hexachrome: CMYKOG */
3983ff48bf5SDavid du Colombier     icSigMch7Data                       = 0x4D434837L,  /* 'MCH7' Colorsync ? */
3993ff48bf5SDavid du Colombier     icSigMch8Data                       = 0x4D434838L,  /* 'MCH8' Colorsync ? */
4003ff48bf5SDavid du Colombier     icSig2colorData                     = 0x32434C52L,  /* '2CLR' */
4013ff48bf5SDavid du Colombier     icSig3colorData                     = 0x33434C52L,  /* '3CLR' */
4023ff48bf5SDavid du Colombier     icSig4colorData                     = 0x34434C52L,  /* '4CLR' */
4033ff48bf5SDavid du Colombier     icSig5colorData                     = 0x35434C52L,  /* '5CLR' */
4043ff48bf5SDavid du Colombier     icSig6colorData                     = 0x36434C52L,  /* '6CLR' */
4053ff48bf5SDavid du Colombier     icSig7colorData                     = 0x37434C52L,  /* '7CLR' */
4063ff48bf5SDavid du Colombier     icSig8colorData                     = 0x38434C52L,  /* '8CLR' */
4073ff48bf5SDavid du Colombier     icSig9colorData                     = 0x39434C52L,  /* '9CLR' */
4083ff48bf5SDavid du Colombier     icSig10colorData                    = 0x41434C52L,  /* 'ACLR' */
4093ff48bf5SDavid du Colombier     icSig11colorData                    = 0x42434C52L,  /* 'BCLR' */
4103ff48bf5SDavid du Colombier     icSig12colorData                    = 0x43434C52L,  /* 'CCLR' */
4113ff48bf5SDavid du Colombier     icSig13colorData                    = 0x44434C52L,  /* 'DCLR' */
4123ff48bf5SDavid du Colombier     icSig14colorData                    = 0x45434C52L,  /* 'ECLR' */
4133ff48bf5SDavid du Colombier     icSig15colorData                    = 0x46434C52L,  /* 'FCLR' */
4143ff48bf5SDavid du Colombier     icMaxEnumData                       = icMaxTagVal
4153ff48bf5SDavid du Colombier } icColorSpaceSignature;
4163ff48bf5SDavid du Colombier 
4173ff48bf5SDavid du Colombier /* profileClass enumerations */
4183ff48bf5SDavid du Colombier typedef enum {
4193ff48bf5SDavid du Colombier     icSigInputClass                     = 0x73636E72L,  /* 'scnr' */
4203ff48bf5SDavid du Colombier     icSigDisplayClass                   = 0x6D6E7472L,  /* 'mntr' */
4213ff48bf5SDavid du Colombier     icSigOutputClass                    = 0x70727472L,  /* 'prtr' */
4223ff48bf5SDavid du Colombier     icSigLinkClass                      = 0x6C696E6BL,  /* 'link' */
4233ff48bf5SDavid du Colombier     icSigAbstractClass                  = 0x61627374L,  /* 'abst' */
4243ff48bf5SDavid du Colombier     icSigColorSpaceClass                = 0x73706163L,  /* 'spac' */
4253ff48bf5SDavid du Colombier     icSigNamedColorClass                = 0x6e6d636cL,  /* 'nmcl' */
4263ff48bf5SDavid du Colombier     icMaxEnumClass                      = icMaxTagVal
4273ff48bf5SDavid du Colombier } icProfileClassSignature;
4283ff48bf5SDavid du Colombier 
4293ff48bf5SDavid du Colombier /* Platform Signatures */
4303ff48bf5SDavid du Colombier typedef enum {
4313ff48bf5SDavid du Colombier     icSigMacintosh                      = 0x4150504CL,  /* 'APPL' */
4323ff48bf5SDavid du Colombier     icSigMicrosoft                      = 0x4D534654L,  /* 'MSFT' */
4333ff48bf5SDavid du Colombier     icSigSolaris                        = 0x53554E57L,  /* 'SUNW' */
4343ff48bf5SDavid du Colombier     icSigSGI                            = 0x53474920L,  /* 'SGI ' */
4353ff48bf5SDavid du Colombier     icSigTaligent                       = 0x54474E54L,  /* 'TGNT' */
4363ff48bf5SDavid du Colombier     icMaxEnumPlatform                   = icMaxTagVal
4373ff48bf5SDavid du Colombier } icPlatformSignature;
4383ff48bf5SDavid du Colombier 
4393ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
4403ff48bf5SDavid du Colombier /*
4413ff48bf5SDavid du Colombier  * Other enums
4423ff48bf5SDavid du Colombier  */
4433ff48bf5SDavid du Colombier 
4443ff48bf5SDavid du Colombier /* Measurement Flare, used in the measurmentType tag */
4453ff48bf5SDavid du Colombier typedef enum {
4463ff48bf5SDavid du Colombier     icFlare0                            = 0x00000000L,  /* 0% flare */
4473ff48bf5SDavid du Colombier     icFlare100                          = 0x00000001L,  /* 100% flare */
4483ff48bf5SDavid du Colombier     icMaxFlare                          = icMaxTagVal
4493ff48bf5SDavid du Colombier } icMeasurementFlare;
4503ff48bf5SDavid du Colombier 
4513ff48bf5SDavid du Colombier /* Measurement Geometry, used in the measurmentType tag */
4523ff48bf5SDavid du Colombier typedef enum {
4533ff48bf5SDavid du Colombier     icGeometryUnknown                   = 0x00000000L,  /* Unknown */
4543ff48bf5SDavid du Colombier     icGeometry045or450                  = 0x00000001L,  /* 0/45, 45/0 */
4553ff48bf5SDavid du Colombier     icGeometry0dord0                    = 0x00000002L,  /* 0/d or d/0 */
4563ff48bf5SDavid du Colombier     icMaxGeometry                       = icMaxTagVal
4573ff48bf5SDavid du Colombier } icMeasurementGeometry;
4583ff48bf5SDavid du Colombier 
4593ff48bf5SDavid du Colombier /* Rendering Intents, used in the profile header */
4603ff48bf5SDavid du Colombier typedef enum {
4613ff48bf5SDavid du Colombier     icPerceptual                        = 0,
4623ff48bf5SDavid du Colombier     icRelativeColorimetric              = 1,
4633ff48bf5SDavid du Colombier     icSaturation                        = 2,
4643ff48bf5SDavid du Colombier     icAbsoluteColorimetric              = 3,
4653ff48bf5SDavid du Colombier     icMaxEnumIntent                     = icMaxTagVal
4663ff48bf5SDavid du Colombier } icRenderingIntent;
4673ff48bf5SDavid du Colombier 
4683ff48bf5SDavid du Colombier /* Different Spot Shapes currently defined, used for screeningType */
4693ff48bf5SDavid du Colombier typedef enum {
4703ff48bf5SDavid du Colombier     icSpotShapeUnknown                  = 0,
4713ff48bf5SDavid du Colombier     icSpotShapePrinterDefault           = 1,
4723ff48bf5SDavid du Colombier     icSpotShapeRound                    = 2,
4733ff48bf5SDavid du Colombier     icSpotShapeDiamond                  = 3,
4743ff48bf5SDavid du Colombier     icSpotShapeEllipse                  = 4,
4753ff48bf5SDavid du Colombier     icSpotShapeLine                     = 5,
4763ff48bf5SDavid du Colombier     icSpotShapeSquare                   = 6,
4773ff48bf5SDavid du Colombier     icSpotShapeCross                    = 7,
4783ff48bf5SDavid du Colombier     icMaxEnumSpot                       = icMaxTagVal
4793ff48bf5SDavid du Colombier } icSpotShape;
4803ff48bf5SDavid du Colombier 
4813ff48bf5SDavid du Colombier /* Standard Observer, used in the measurmentType tag */
4823ff48bf5SDavid du Colombier typedef enum {
4833ff48bf5SDavid du Colombier     icStdObsUnknown                     = 0x00000000L,  /* Unknown */
4843ff48bf5SDavid du Colombier     icStdObs1931TwoDegrees              = 0x00000001L,  /* 2 deg */
4853ff48bf5SDavid du Colombier     icStdObs1964TenDegrees              = 0x00000002L,  /* 10 deg */
4863ff48bf5SDavid du Colombier     icMaxStdObs                         = icMaxTagVal
4873ff48bf5SDavid du Colombier } icStandardObserver;
4883ff48bf5SDavid du Colombier 
4893ff48bf5SDavid du Colombier /* Pre-defined illuminants, used in measurement and viewing conditions type */
4903ff48bf5SDavid du Colombier typedef enum {
4913ff48bf5SDavid du Colombier     icIlluminantUnknown                 = 0x00000000L,
4923ff48bf5SDavid du Colombier     icIlluminantD50                     = 0x00000001L,
4933ff48bf5SDavid du Colombier     icIlluminantD65                     = 0x00000002L,
4943ff48bf5SDavid du Colombier     icIlluminantD93                     = 0x00000003L,
4953ff48bf5SDavid du Colombier     icIlluminantF2                      = 0x00000004L,
4963ff48bf5SDavid du Colombier     icIlluminantD55                     = 0x00000005L,
4973ff48bf5SDavid du Colombier     icIlluminantA                       = 0x00000006L,
4983ff48bf5SDavid du Colombier     icIlluminantEquiPowerE              = 0x00000007L,
4993ff48bf5SDavid du Colombier     icIlluminantF8                      = 0x00000008L,
5003ff48bf5SDavid du Colombier     icMaxEnumIluminant                  = icMaxTagVal
5013ff48bf5SDavid du Colombier } icIlluminant;
5023ff48bf5SDavid du Colombier 
5033ff48bf5SDavid du Colombier /* media type for icSigDeviceSettingsTag */
5043ff48bf5SDavid du Colombier typedef enum {
5053ff48bf5SDavid du Colombier     icStandard                          = 1,
5063ff48bf5SDavid du Colombier     icTrans                             = 2, /* transparency */
5073ff48bf5SDavid du Colombier     icGloss                             = 3,
5083ff48bf5SDavid du Colombier     icUser1                             = 256,
5093ff48bf5SDavid du Colombier     icMaxDeviceMedia                    = icMaxTagVal
5103ff48bf5SDavid du Colombier } icDeviceMedia;
5113ff48bf5SDavid du Colombier 
5123ff48bf5SDavid du Colombier /* halftone settings for icSigDeviceSettingTag */
5133ff48bf5SDavid du Colombier typedef enum {
5143ff48bf5SDavid du Colombier     icNone                              = 1,
5153ff48bf5SDavid du Colombier     icCoarse                            = 2,
5163ff48bf5SDavid du Colombier     icFine                              = 3,
5173ff48bf5SDavid du Colombier     icLineArt                           = 4,
5183ff48bf5SDavid du Colombier     icErrorDiffusion                    = 5,
5193ff48bf5SDavid du Colombier     icReserved6                         = 6,
5203ff48bf5SDavid du Colombier     icReserved7                         = 7,
5213ff48bf5SDavid du Colombier     icReserved8                         = 8,
5223ff48bf5SDavid du Colombier     icReserved9                         = 9,
5233ff48bf5SDavid du Colombier     icGrayScale                         = 10,
5243ff48bf5SDavid du Colombier     icUser2                             = 256,
5253ff48bf5SDavid du Colombier     icMaxDither                         = icMaxTagVal
5263ff48bf5SDavid du Colombier } icDeviceDither;
5273ff48bf5SDavid du Colombier 
5283ff48bf5SDavid du Colombier /* signatures for icSigDeviceSettingsTag */
5293ff48bf5SDavid du Colombier typedef enum {
5303ff48bf5SDavid du Colombier     icSigResolution                     = 0x72736c6eL, /* 'rsln' */
5313ff48bf5SDavid du Colombier     icSigMedia                          = 0x6d747970L, /* 'mtyp' */
5323ff48bf5SDavid du Colombier     icSigHalftone                       = 0x6866746eL, /* 'hftn' */
5333ff48bf5SDavid du Colombier     icMaxSettings                       = icMaxTagVal
5343ff48bf5SDavid du Colombier } icSettingsSig;
5353ff48bf5SDavid du Colombier 
5363ff48bf5SDavid du Colombier /* measurement units for the icResponseCurveSet16Type */
5373ff48bf5SDavid du Colombier typedef enum {
5383ff48bf5SDavid du Colombier     icStaA                              = 0x53746141L, /* 'StaA' */
5393ff48bf5SDavid du Colombier     icStaE                              = 0x53746145L, /* 'StaE' */
5403ff48bf5SDavid du Colombier     icStaI                              = 0x53746149L, /* 'StaI' */
5413ff48bf5SDavid du Colombier     icStaT                              = 0x53746154L, /* 'StaT' */
5423ff48bf5SDavid du Colombier     icStaM                              = 0x5374614dL, /* 'StaM' */
5433ff48bf5SDavid du Colombier     icDN                                = 0x444e2020L, /* 'DN ' */
5443ff48bf5SDavid du Colombier     icDNP                               = 0x444e2050L, /* 'DN P' */
5453ff48bf5SDavid du Colombier     icDNN                               = 0x444e4e20L, /* 'DNN ' */
5463ff48bf5SDavid du Colombier     icDNNP                              = 0x444e4e50L, /* 'DNNP' */
5473ff48bf5SDavid du Colombier     icMaxUnits                          = icMaxTagVal
5483ff48bf5SDavid du Colombier } icMeasUnitsSig;
5493ff48bf5SDavid du Colombier 
5503ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
5513ff48bf5SDavid du Colombier /*
5523ff48bf5SDavid du Colombier  * Arrays of numbers
5533ff48bf5SDavid du Colombier  */
5543ff48bf5SDavid du Colombier 
5553ff48bf5SDavid du Colombier /* Int8 Array */
5563ff48bf5SDavid du Colombier typedef struct {
5573ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Variable array of values */
5583ff48bf5SDavid du Colombier } icInt8Array;
5593ff48bf5SDavid du Colombier 
5603ff48bf5SDavid du Colombier /* UInt8 Array */
5613ff48bf5SDavid du Colombier typedef struct {
5623ff48bf5SDavid du Colombier     icUInt8Number       data[icAny];    /* Variable array of values */
5633ff48bf5SDavid du Colombier } icUInt8Array;
5643ff48bf5SDavid du Colombier 
5653ff48bf5SDavid du Colombier /* uInt16 Array */
5663ff48bf5SDavid du Colombier typedef struct {
5673ff48bf5SDavid du Colombier     icUInt16Number      data[icAny];    /* Variable array of values */
5683ff48bf5SDavid du Colombier } icUInt16Array;
5693ff48bf5SDavid du Colombier 
5703ff48bf5SDavid du Colombier /* Int16 Array */
5713ff48bf5SDavid du Colombier typedef struct {
5723ff48bf5SDavid du Colombier     icInt16Number       data[icAny];    /* Variable array of values */
5733ff48bf5SDavid du Colombier } icInt16Array;
5743ff48bf5SDavid du Colombier 
5753ff48bf5SDavid du Colombier /* uInt32 Array */
5763ff48bf5SDavid du Colombier typedef struct {
5773ff48bf5SDavid du Colombier     icUInt32Number      data[icAny];    /* Variable array of values */
5783ff48bf5SDavid du Colombier } icUInt32Array;
5793ff48bf5SDavid du Colombier 
5803ff48bf5SDavid du Colombier /* Int32 Array */
5813ff48bf5SDavid du Colombier typedef struct {
5823ff48bf5SDavid du Colombier     icInt32Number       data[icAny];    /* Variable array of values */
5833ff48bf5SDavid du Colombier } icInt32Array;
5843ff48bf5SDavid du Colombier 
5853ff48bf5SDavid du Colombier /* UInt64 Array */
5863ff48bf5SDavid du Colombier typedef struct {
5873ff48bf5SDavid du Colombier     icUInt64Number      data[icAny];    /* Variable array of values */
5883ff48bf5SDavid du Colombier } icUInt64Array;
5893ff48bf5SDavid du Colombier 
5903ff48bf5SDavid du Colombier /* Int64 Array */
5913ff48bf5SDavid du Colombier typedef struct {
5923ff48bf5SDavid du Colombier     icInt64Number       data[icAny];    /* Variable array of values */
5933ff48bf5SDavid du Colombier } icInt64Array;
5943ff48bf5SDavid du Colombier 
5953ff48bf5SDavid du Colombier /* u16Fixed16 Array */
5963ff48bf5SDavid du Colombier typedef struct {
5973ff48bf5SDavid du Colombier     icU16Fixed16Number  data[icAny];    /* Variable array of values */
5983ff48bf5SDavid du Colombier } icU16Fixed16Array;
5993ff48bf5SDavid du Colombier 
6003ff48bf5SDavid du Colombier /* s15Fixed16 Array */
6013ff48bf5SDavid du Colombier typedef struct {
6023ff48bf5SDavid du Colombier     icS15Fixed16Number  data[icAny];    /* Variable array of values */
6033ff48bf5SDavid du Colombier } icS15Fixed16Array;
6043ff48bf5SDavid du Colombier 
6053ff48bf5SDavid du Colombier /* The base date time number */
6063ff48bf5SDavid du Colombier typedef struct {
6073ff48bf5SDavid du Colombier     icUInt16Number      year;
6083ff48bf5SDavid du Colombier     icUInt16Number      month;
6093ff48bf5SDavid du Colombier     icUInt16Number      day;
6103ff48bf5SDavid du Colombier     icUInt16Number      hours;
6113ff48bf5SDavid du Colombier     icUInt16Number      minutes;
6123ff48bf5SDavid du Colombier     icUInt16Number      seconds;
6133ff48bf5SDavid du Colombier } icDateTimeNumber;
6143ff48bf5SDavid du Colombier 
6153ff48bf5SDavid du Colombier /* XYZ Number  */
6163ff48bf5SDavid du Colombier typedef struct {
6173ff48bf5SDavid du Colombier     icS15Fixed16Number  X;
6183ff48bf5SDavid du Colombier     icS15Fixed16Number  Y;
6193ff48bf5SDavid du Colombier     icS15Fixed16Number  Z;
6203ff48bf5SDavid du Colombier } icXYZNumber;
6213ff48bf5SDavid du Colombier 
6223ff48bf5SDavid du Colombier /* XYZ Array */
6233ff48bf5SDavid du Colombier typedef struct {
6243ff48bf5SDavid du Colombier     icXYZNumber         data[icAny];    /* Variable array of XYZ numbers */
6253ff48bf5SDavid du Colombier } icXYZArray;
6263ff48bf5SDavid du Colombier 
6273ff48bf5SDavid du Colombier /* Curve */
6283ff48bf5SDavid du Colombier typedef struct {
6293ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Number of entries */
6303ff48bf5SDavid du Colombier     icUInt16Number      data[icAny];    /* The actual table data, real
6313ff48bf5SDavid du Colombier                                          * number is determined by count
6323ff48bf5SDavid du Colombier                                          * Interpretation depends on how
6333ff48bf5SDavid du Colombier                                          * data is used with a given tag
6343ff48bf5SDavid du Colombier                                          */
6353ff48bf5SDavid du Colombier } icCurve;
6363ff48bf5SDavid du Colombier 
6373ff48bf5SDavid du Colombier /* Data */
6383ff48bf5SDavid du Colombier typedef struct {
6393ff48bf5SDavid du Colombier     icUInt32Number      dataFlag;       /* 0 = ascii, 1 = binary */
6403ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Data, size from tag */
6413ff48bf5SDavid du Colombier } icData;
6423ff48bf5SDavid du Colombier 
6433ff48bf5SDavid du Colombier /* lut16 */
6443ff48bf5SDavid du Colombier typedef struct {
6453ff48bf5SDavid du Colombier     icUInt8Number       inputChan;      /* Number of input channels */
6463ff48bf5SDavid du Colombier     icUInt8Number       outputChan;     /* Number of output channels */
6473ff48bf5SDavid du Colombier     icUInt8Number       clutPoints;     /* Number of grid points */
6483ff48bf5SDavid du Colombier     icInt8Number        pad;            /* Padding for byte alignment */
6493ff48bf5SDavid du Colombier     icS15Fixed16Number  e00;            /* e00 in the 3 * 3 */
6503ff48bf5SDavid du Colombier     icS15Fixed16Number  e01;            /* e01 in the 3 * 3 */
6513ff48bf5SDavid du Colombier     icS15Fixed16Number  e02;            /* e02 in the 3 * 3 */
6523ff48bf5SDavid du Colombier     icS15Fixed16Number  e10;            /* e10 in the 3 * 3 */
6533ff48bf5SDavid du Colombier     icS15Fixed16Number  e11;            /* e11 in the 3 * 3 */
6543ff48bf5SDavid du Colombier     icS15Fixed16Number  e12;            /* e12 in the 3 * 3 */
6553ff48bf5SDavid du Colombier     icS15Fixed16Number  e20;            /* e20 in the 3 * 3 */
6563ff48bf5SDavid du Colombier     icS15Fixed16Number  e21;            /* e21 in the 3 * 3 */
6573ff48bf5SDavid du Colombier     icS15Fixed16Number  e22;            /* e22 in the 3 * 3 */
6583ff48bf5SDavid du Colombier     icUInt16Number      inputEnt;       /* Num of in-table entries */
6593ff48bf5SDavid du Colombier     icUInt16Number      outputEnt;      /* Num of out-table entries */
6603ff48bf5SDavid du Colombier     icUInt16Number      data[icAny];    /* Data follows see spec */
6613ff48bf5SDavid du Colombier /*
6623ff48bf5SDavid du Colombier  *  Data that follows is of this form
6633ff48bf5SDavid du Colombier  *
6643ff48bf5SDavid du Colombier  *  icUInt16Number      inputTable[inputChan][icAny];   * The in-table
6653ff48bf5SDavid du Colombier  *  icUInt16Number      clutTable[icAny];               * The clut
6663ff48bf5SDavid du Colombier  *  icUInt16Number      outputTable[outputChan][icAny]; * The out-table
6673ff48bf5SDavid du Colombier  */
6683ff48bf5SDavid du Colombier } icLut16;
6693ff48bf5SDavid du Colombier 
6703ff48bf5SDavid du Colombier /* lut8, input & output tables are always 256 bytes in length */
6713ff48bf5SDavid du Colombier typedef struct {
6723ff48bf5SDavid du Colombier     icUInt8Number       inputChan;      /* Num of input channels */
6733ff48bf5SDavid du Colombier     icUInt8Number       outputChan;     /* Num of output channels */
6743ff48bf5SDavid du Colombier     icUInt8Number       clutPoints;     /* Num of grid points */
6753ff48bf5SDavid du Colombier     icInt8Number        pad;
6763ff48bf5SDavid du Colombier     icS15Fixed16Number  e00;            /* e00 in the 3 * 3 */
6773ff48bf5SDavid du Colombier     icS15Fixed16Number  e01;            /* e01 in the 3 * 3 */
6783ff48bf5SDavid du Colombier     icS15Fixed16Number  e02;            /* e02 in the 3 * 3 */
6793ff48bf5SDavid du Colombier     icS15Fixed16Number  e10;            /* e10 in the 3 * 3 */
6803ff48bf5SDavid du Colombier     icS15Fixed16Number  e11;            /* e11 in the 3 * 3 */
6813ff48bf5SDavid du Colombier     icS15Fixed16Number  e12;            /* e12 in the 3 * 3 */
6823ff48bf5SDavid du Colombier     icS15Fixed16Number  e20;            /* e20 in the 3 * 3 */
6833ff48bf5SDavid du Colombier     icS15Fixed16Number  e21;            /* e21 in the 3 * 3 */
6843ff48bf5SDavid du Colombier     icS15Fixed16Number  e22;            /* e22 in the 3 * 3 */
6853ff48bf5SDavid du Colombier     icUInt8Number       data[icAny];    /* Data follows see spec */
6863ff48bf5SDavid du Colombier /*
6873ff48bf5SDavid du Colombier  *  Data that follows is of this form
6883ff48bf5SDavid du Colombier  *
6893ff48bf5SDavid du Colombier  *  icUInt8Number       inputTable[inputChan][256];     * The in-table
6903ff48bf5SDavid du Colombier  *  icUInt8Number       clutTable[icAny];               * The clut
6913ff48bf5SDavid du Colombier  *  icUInt8Number       outputTable[outputChan][256];   * The out-table
6923ff48bf5SDavid du Colombier  */
6933ff48bf5SDavid du Colombier } icLut8;
6943ff48bf5SDavid du Colombier 
6953ff48bf5SDavid du Colombier /* Measurement Data */
6963ff48bf5SDavid du Colombier typedef struct {
6973ff48bf5SDavid du Colombier     icStandardObserver          stdObserver;    /* Standard observer */
6983ff48bf5SDavid du Colombier     icXYZNumber                 backing;        /* XYZ for backing */
6993ff48bf5SDavid du Colombier     icMeasurementGeometry       geometry;       /* Meas. geometry */
7003ff48bf5SDavid du Colombier     icMeasurementFlare          flare;          /* Measurement flare */
7013ff48bf5SDavid du Colombier     icIlluminant                illuminant;     /* Illuminant */
7023ff48bf5SDavid du Colombier } icMeasurement;
7033ff48bf5SDavid du Colombier 
7043ff48bf5SDavid du Colombier /* Named color */
7053ff48bf5SDavid du Colombier 
7063ff48bf5SDavid du Colombier /*
7073ff48bf5SDavid du Colombier  * icNamedColor2 takes the place of icNamedColor
7083ff48bf5SDavid du Colombier  */
7093ff48bf5SDavid du Colombier typedef struct {
7103ff48bf5SDavid du Colombier     icUInt32Number      vendorFlag;     /* Bottom 16 bits for IC use */
7113ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Count of named colors */
7123ff48bf5SDavid du Colombier     icUInt32Number      nDeviceCoords;  /* Num of device coordinates */
7133ff48bf5SDavid du Colombier     icInt8Number        prefix[32];     /* Prefix for each color name */
7143ff48bf5SDavid du Colombier     icInt8Number        suffix[32];     /* Suffix for each color name */
7153ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Named color data follows */
7163ff48bf5SDavid du Colombier /*
7173ff48bf5SDavid du Colombier  *  Data that follows is of this form
7183ff48bf5SDavid du Colombier  *
7193ff48bf5SDavid du Colombier  * icInt8Number         root1[32];              * Root name for 1st color
7203ff48bf5SDavid du Colombier  * icUInt16Number       pcsCoords1[icAny];      * PCS coords of 1st color
7213ff48bf5SDavid du Colombier  * icUInt16Number       deviceCoords1[icAny];   * Dev coords of 1st color
7223ff48bf5SDavid du Colombier  * icInt8Number         root2[32];              * Root name for 2nd color
7233ff48bf5SDavid du Colombier  * icUInt16Number       pcsCoords2[icAny];      * PCS coords of 2nd color
7243ff48bf5SDavid du Colombier  * icUInt16Number       deviceCoords2[icAny];   * Dev coords of 2nd color
7253ff48bf5SDavid du Colombier  *                      :
7263ff48bf5SDavid du Colombier  *                      :
7273ff48bf5SDavid du Colombier  * Repeat for name and PCS and device color coordinates up to (count-1)
7283ff48bf5SDavid du Colombier  *
7293ff48bf5SDavid du Colombier  * NOTES:
7303ff48bf5SDavid du Colombier  * PCS and device space can be determined from the header.
7313ff48bf5SDavid du Colombier  *
7323ff48bf5SDavid du Colombier  * PCS coordinates are icUInt16 numbers and are described in Annex A of
7333ff48bf5SDavid du Colombier  * the ICC spec. Only 16 bit L*a*b* and XYZ are allowed. The number of
7343ff48bf5SDavid du Colombier  * coordinates is consistent with the headers PCS.
7353ff48bf5SDavid du Colombier  *
7363ff48bf5SDavid du Colombier  * Device coordinates are icUInt16 numbers where 0x0000 represents
7373ff48bf5SDavid du Colombier  * the minimum value and 0xFFFF represents the maximum value.
7383ff48bf5SDavid du Colombier  * If the nDeviceCoords value is 0 this field is not given.
7393ff48bf5SDavid du Colombier  */
7403ff48bf5SDavid du Colombier } icNamedColor2;
7413ff48bf5SDavid du Colombier 
7423ff48bf5SDavid du Colombier /* Profile sequence structure */
7433ff48bf5SDavid du Colombier typedef struct {
7443ff48bf5SDavid du Colombier     icSignature                 deviceMfg;      /* Dev Manufacturer */
7453ff48bf5SDavid du Colombier     icSignature                 deviceModel;    /* Dev Model */
7463ff48bf5SDavid du Colombier     icUInt64Number              attributes;     /* Dev attributes */
7473ff48bf5SDavid du Colombier     icTechnologySignature       technology;     /* Technology sig */
7483ff48bf5SDavid du Colombier     icInt8Number                data[icAny];    /* Desc text follows */
7493ff48bf5SDavid du Colombier /*
7503ff48bf5SDavid du Colombier  *  Data that follows is of this form, this is an icInt8Number
7513ff48bf5SDavid du Colombier  *  to avoid problems with a compiler generating  bad code as
7523ff48bf5SDavid du Colombier  *  these arrays are variable in length.
7533ff48bf5SDavid du Colombier  *
7543ff48bf5SDavid du Colombier  * icTextDescription            deviceMfgDesc;  * Manufacturer text
7553ff48bf5SDavid du Colombier  * icTextDescription            modelDesc;      * Model text
7563ff48bf5SDavid du Colombier  */
7573ff48bf5SDavid du Colombier } icDescStruct;
7583ff48bf5SDavid du Colombier 
7593ff48bf5SDavid du Colombier /* Profile sequence description */
7603ff48bf5SDavid du Colombier typedef struct {
7613ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Number of descriptions */
7623ff48bf5SDavid du Colombier     icUInt8Number       data[icAny];    /* Array of desc structs */
7633ff48bf5SDavid du Colombier } icProfileSequenceDesc;
7643ff48bf5SDavid du Colombier 
7653ff48bf5SDavid du Colombier /* textDescription */
7663ff48bf5SDavid du Colombier typedef struct {
7673ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Description length */
7683ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Descriptions follow */
7693ff48bf5SDavid du Colombier /*
7703ff48bf5SDavid du Colombier  *  Data that follows is of this form
7713ff48bf5SDavid du Colombier  *
7723ff48bf5SDavid du Colombier  * icInt8Number         desc[count]     * NULL terminated ascii string
7733ff48bf5SDavid du Colombier  * icUInt32Number       ucLangCode;     * UniCode language code
7743ff48bf5SDavid du Colombier  * icUInt32Number       ucCount;        * UniCode description length
7753ff48bf5SDavid du Colombier  * icInt16Number        ucDesc[ucCount];* The UniCode description
7763ff48bf5SDavid du Colombier  * icUInt16Number       scCode;         * ScriptCode code
7773ff48bf5SDavid du Colombier  * icUInt8Number        scCount;        * ScriptCode count
7783ff48bf5SDavid du Colombier  * icInt8Number         scDesc[67];     * ScriptCode Description
7793ff48bf5SDavid du Colombier  */
7803ff48bf5SDavid du Colombier } icTextDescription;
7813ff48bf5SDavid du Colombier 
7823ff48bf5SDavid du Colombier /* Screening Data */
7833ff48bf5SDavid du Colombier typedef struct {
7843ff48bf5SDavid du Colombier     icS15Fixed16Number  frequency;      /* Frequency */
7853ff48bf5SDavid du Colombier     icS15Fixed16Number  angle;          /* Screen angle */
7863ff48bf5SDavid du Colombier     icSpotShape         spotShape;      /* Spot Shape encodings below */
7873ff48bf5SDavid du Colombier } icScreeningData;
7883ff48bf5SDavid du Colombier 
7893ff48bf5SDavid du Colombier typedef struct {
7903ff48bf5SDavid du Colombier     icUInt32Number      screeningFlag;  /* Screening flag */
7913ff48bf5SDavid du Colombier     icUInt32Number      channels;       /* Number of channels */
7923ff48bf5SDavid du Colombier     icScreeningData     data[icAny];    /* Array of screening data */
7933ff48bf5SDavid du Colombier } icScreening;
7943ff48bf5SDavid du Colombier 
7953ff48bf5SDavid du Colombier /* Text Data */
7963ff48bf5SDavid du Colombier typedef struct {
7973ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Variable array of chars */
7983ff48bf5SDavid du Colombier } icText;
7993ff48bf5SDavid du Colombier 
8003ff48bf5SDavid du Colombier /* Structure describing either a UCR or BG curve */
8013ff48bf5SDavid du Colombier typedef struct {
8023ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Curve length */
8033ff48bf5SDavid du Colombier     icUInt16Number      curve[icAny];   /* The array of curve values */
8043ff48bf5SDavid du Colombier } icUcrBgCurve;
8053ff48bf5SDavid du Colombier 
8063ff48bf5SDavid du Colombier /* Under color removal, black generation */
8073ff48bf5SDavid du Colombier typedef struct {
8083ff48bf5SDavid du Colombier     icInt8Number        data[icAny];            /* The Ucr BG data */
8093ff48bf5SDavid du Colombier /*
8103ff48bf5SDavid du Colombier  *  Data that follows is of this form, this is a icInt8Number
8113ff48bf5SDavid du Colombier  *  to avoid problems with a compiler generating  bad code as
8123ff48bf5SDavid du Colombier  *  these arrays are variable in length.
8133ff48bf5SDavid du Colombier  *
8143ff48bf5SDavid du Colombier  * icUcrBgCurve         ucr;            * Ucr curve
8153ff48bf5SDavid du Colombier  * icUcrBgCurve         bg;             * Bg curve
8163ff48bf5SDavid du Colombier  * icInt8Number         string;         * UcrBg description
8173ff48bf5SDavid du Colombier  */
8183ff48bf5SDavid du Colombier } icUcrBg;
8193ff48bf5SDavid du Colombier 
8203ff48bf5SDavid du Colombier /* viewingConditionsType */
8213ff48bf5SDavid du Colombier typedef struct {
8223ff48bf5SDavid du Colombier     icXYZNumber         illuminant;     /* In candelas per sq. meter */
8233ff48bf5SDavid du Colombier     icXYZNumber         surround;       /* In candelas per sq. meter */
8243ff48bf5SDavid du Colombier     icIlluminant        stdIluminant;   /* See icIlluminant defines */
8253ff48bf5SDavid du Colombier } icViewingCondition;
8263ff48bf5SDavid du Colombier 
8273ff48bf5SDavid du Colombier /* CrdInfo type */
8283ff48bf5SDavid du Colombier typedef struct {
8293ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Char count includes NULL */
8303ff48bf5SDavid du Colombier     icInt8Number        desc[icAny];    /* Null terminated string */
8313ff48bf5SDavid du Colombier } icCrdInfo;
8323ff48bf5SDavid du Colombier 
8333ff48bf5SDavid du Colombier /* support structures for the icSigDeviceSettingsTag */
8343ff48bf5SDavid du Colombier typedef struct {
8353ff48bf5SDavid du Colombier     icUInt32Number      numPlatforms; /* number of platforms */
8363ff48bf5SDavid du Colombier     icUInt32Number      data[icAny];
8373ff48bf5SDavid du Colombier }icSettingsData;
8383ff48bf5SDavid du Colombier 
8393ff48bf5SDavid du Colombier /* where data is "numPlatforms" of the following structure
8403ff48bf5SDavid du Colombier  *
8413ff48bf5SDavid du Colombier  *typedef struct {
8423ff48bf5SDavid du Colombier  *  icPlatformSignature platform;
8433ff48bf5SDavid du Colombier  *  icUInt32Number      size;         total size of all settings
8443ff48bf5SDavid du Colombier  *  icUInt32Number      combCount;    # of settings
8453ff48bf5SDavid du Colombier  *  icSettingsStruct    data[icAny];
8463ff48bf5SDavid du Colombier  *};
8473ff48bf5SDavid du Colombier  *
8483ff48bf5SDavid du Colombier  * where data is "combCount" of the following structure
8493ff48bf5SDavid du Colombier  *
8503ff48bf5SDavid du Colombier  *typedef struct {
8513ff48bf5SDavid du Colombier  *  icUInt32Number      structSize;   size in bytes of entire structure
8523ff48bf5SDavid du Colombier  *  icUInt32Number      numStructs;   # of setting structures inlcuded
8533ff48bf5SDavid du Colombier  *  icSettings          data[icAny];
8543ff48bf5SDavid du Colombier  *}icSettingsStruct;
8553ff48bf5SDavid du Colombier  *
8563ff48bf5SDavid du Colombier  * where data is "numStructs" of the following structure
8573ff48bf5SDavid du Colombier  *
8583ff48bf5SDavid du Colombier  *typedef struct {
8593ff48bf5SDavid du Colombier  *  icSettingsSig       settingSig;
8603ff48bf5SDavid du Colombier  *  icUInt32Number      size;         size in bytes per setting value
8613ff48bf5SDavid du Colombier  *  icUInt32Number      numSettings;  number of seting values
8623ff48bf5SDavid du Colombier  *  icUInt32Number      data[icAny];
8633ff48bf5SDavid du Colombier  *}icSettings;
8643ff48bf5SDavid du Colombier  *
8653ff48bf5SDavid du Colombier  * where data is "numsettings" of one of the following:
8663ff48bf5SDavid du Colombier  *  icUInt64Number      resolution;
8673ff48bf5SDavid du Colombier  *  icDeviceMedia       media;
8683ff48bf5SDavid du Colombier  *  icDeviceDither      halftone;
8693ff48bf5SDavid du Colombier */
8703ff48bf5SDavid du Colombier 
8713ff48bf5SDavid du Colombier /* for use with the icResponseCurveSet16Type */
8723ff48bf5SDavid du Colombier typedef struct {
8733ff48bf5SDavid du Colombier     icUInt16Number channels;            /* number of channels */
8743ff48bf5SDavid du Colombier     icUInt16Number numTypes;            /* count of meas. types */
8753ff48bf5SDavid du Colombier     icUInt32Number data[icAny];
8763ff48bf5SDavid du Colombier }icResponse;
8773ff48bf5SDavid du Colombier 
8783ff48bf5SDavid du Colombier /* where data is "numTypes" of the following
8793ff48bf5SDavid du Colombier  *  icMeasUnitsSig      sigType;
8803ff48bf5SDavid du Colombier  *  icUInt32Number      numMeas;   one entry for each "channels"
8813ff48bf5SDavid du Colombier  *  icXYZNumber         meas;      one xyz entry for each "channels"
8823ff48bf5SDavid du Colombier  *                                     respective "numMeas"
8833ff48bf5SDavid du Colombier  *  icResponse16Number  respNum;   one structure for each "channels"
8843ff48bf5SDavid du Colombier  *                                     respective "numMeas"
8853ff48bf5SDavid du Colombier */
8863ff48bf5SDavid du Colombier 
8873ff48bf5SDavid du Colombier typedef struct {
8883ff48bf5SDavid du Colombier     icUInt16Number      interval;       /* device value scaled 0-FFFF */
8893ff48bf5SDavid du Colombier     icUInt16Number      pad;            /* 0 */
8903ff48bf5SDavid du Colombier     icS15Fixed16Number  measurement;    /* actual measurement value */
8913ff48bf5SDavid du Colombier } icResponse16Number;
8923ff48bf5SDavid du Colombier 
8933ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
8943ff48bf5SDavid du Colombier /*
8953ff48bf5SDavid du Colombier  * Tag Type definitions
8963ff48bf5SDavid du Colombier  */
8973ff48bf5SDavid du Colombier 
8983ff48bf5SDavid du Colombier /*
8993ff48bf5SDavid du Colombier  * Many of the structures contain variable length arrays. This
9003ff48bf5SDavid du Colombier  * is represented by the use of the convention.
9013ff48bf5SDavid du Colombier  *
9023ff48bf5SDavid du Colombier  *      type    data[icAny];
9033ff48bf5SDavid du Colombier  */
9043ff48bf5SDavid du Colombier 
9053ff48bf5SDavid du Colombier /* The base part of each tag */
9063ff48bf5SDavid du Colombier typedef struct {
9073ff48bf5SDavid du Colombier     icTagTypeSignature  sig;            /* Signature */
9083ff48bf5SDavid du Colombier     icInt8Number        reserved[4];    /* Reserved, set to 0 */
9093ff48bf5SDavid du Colombier } icTagBase;
9103ff48bf5SDavid du Colombier 
9113ff48bf5SDavid du Colombier /* curveType */
9123ff48bf5SDavid du Colombier typedef struct {
9133ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "curv" */
9143ff48bf5SDavid du Colombier     icCurve             curve;          /* The curve data */
9153ff48bf5SDavid du Colombier } icCurveType;
9163ff48bf5SDavid du Colombier 
9173ff48bf5SDavid du Colombier /* dataType */
9183ff48bf5SDavid du Colombier typedef struct {
9193ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "data" */
9203ff48bf5SDavid du Colombier     icData              data;           /* The data structure */
9213ff48bf5SDavid du Colombier } icDataType;
9223ff48bf5SDavid du Colombier 
9233ff48bf5SDavid du Colombier /* dateTimeType */
9243ff48bf5SDavid du Colombier typedef struct {
9253ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "dtim" */
9263ff48bf5SDavid du Colombier     icDateTimeNumber    date;           /* The date */
9273ff48bf5SDavid du Colombier } icDateTimeType;
9283ff48bf5SDavid du Colombier 
9293ff48bf5SDavid du Colombier /* lut16Type */
9303ff48bf5SDavid du Colombier typedef struct {
9313ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "mft2" */
9323ff48bf5SDavid du Colombier     icLut16             lut;            /* Lut16 data */
9333ff48bf5SDavid du Colombier } icLut16Type;
9343ff48bf5SDavid du Colombier 
9353ff48bf5SDavid du Colombier /* lut8Type, input & output tables are always 256 bytes in length */
9363ff48bf5SDavid du Colombier typedef struct {
9373ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "mft1" */
9383ff48bf5SDavid du Colombier     icLut8              lut;            /* Lut8 data */
9393ff48bf5SDavid du Colombier } icLut8Type;
9403ff48bf5SDavid du Colombier 
9413ff48bf5SDavid du Colombier /* Measurement Type */
9423ff48bf5SDavid du Colombier typedef struct {
9433ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "meas" */
9443ff48bf5SDavid du Colombier     icMeasurement       measurement;    /* Measurement data */
9453ff48bf5SDavid du Colombier } icMeasurementType;
9463ff48bf5SDavid du Colombier 
9473ff48bf5SDavid du Colombier /* Named color type */
9483ff48bf5SDavid du Colombier /* icNamedColor2Type, replaces icNamedColorType */
9493ff48bf5SDavid du Colombier typedef struct {
9503ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ncl2" */
9513ff48bf5SDavid du Colombier     icNamedColor2       ncolor;         /* Named color data */
9523ff48bf5SDavid du Colombier } icNamedColor2Type;
9533ff48bf5SDavid du Colombier 
9543ff48bf5SDavid du Colombier /* Profile sequence description type */
9553ff48bf5SDavid du Colombier typedef struct {
9563ff48bf5SDavid du Colombier     icTagBase                   base;   /* Signature, "pseq" */
9573ff48bf5SDavid du Colombier     icProfileSequenceDesc       desc;   /* The seq description */
9583ff48bf5SDavid du Colombier } icProfileSequenceDescType;
9593ff48bf5SDavid du Colombier 
9603ff48bf5SDavid du Colombier /* textDescriptionType */
9613ff48bf5SDavid du Colombier typedef struct {
9623ff48bf5SDavid du Colombier     icTagBase                   base;   /* Signature, "desc" */
9633ff48bf5SDavid du Colombier     icTextDescription           desc;   /* The description */
9643ff48bf5SDavid du Colombier } icTextDescriptionType;
9653ff48bf5SDavid du Colombier 
9663ff48bf5SDavid du Colombier /* s15Fixed16Type */
9673ff48bf5SDavid du Colombier typedef struct {
9683ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "sf32" */
9693ff48bf5SDavid du Colombier     icS15Fixed16Array   data;           /* Array of values */
9703ff48bf5SDavid du Colombier } icS15Fixed16ArrayType;
9713ff48bf5SDavid du Colombier 
9723ff48bf5SDavid du Colombier typedef struct {
9733ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "scrn" */
9743ff48bf5SDavid du Colombier     icScreening         screen;         /* Screening structure */
9753ff48bf5SDavid du Colombier } icScreeningType;
9763ff48bf5SDavid du Colombier 
9773ff48bf5SDavid du Colombier /* sigType */
9783ff48bf5SDavid du Colombier typedef struct {
9793ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "sig" */
9803ff48bf5SDavid du Colombier     icSignature         signature;      /* The signature data */
9813ff48bf5SDavid du Colombier } icSignatureType;
9823ff48bf5SDavid du Colombier 
9833ff48bf5SDavid du Colombier /* textType */
9843ff48bf5SDavid du Colombier typedef struct {
9853ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "text" */
9863ff48bf5SDavid du Colombier     icText              data;           /* Variable array of chars */
9873ff48bf5SDavid du Colombier } icTextType;
9883ff48bf5SDavid du Colombier 
9893ff48bf5SDavid du Colombier /* u16Fixed16Type */
9903ff48bf5SDavid du Colombier typedef struct {
9913ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "uf32" */
9923ff48bf5SDavid du Colombier     icU16Fixed16Array   data;           /* Variable array of values */
9933ff48bf5SDavid du Colombier } icU16Fixed16ArrayType;
9943ff48bf5SDavid du Colombier 
9953ff48bf5SDavid du Colombier /* Under color removal, black generation type */
9963ff48bf5SDavid du Colombier typedef struct {
9973ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "bfd " */
9983ff48bf5SDavid du Colombier     icUcrBg             data;           /* ucrBg structure */
9993ff48bf5SDavid du Colombier } icUcrBgType;
10003ff48bf5SDavid du Colombier 
10013ff48bf5SDavid du Colombier /* uInt16Type */
10023ff48bf5SDavid du Colombier typedef struct {
10033ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ui16" */
10043ff48bf5SDavid du Colombier     icUInt16Array       data;           /* Variable array of values */
10053ff48bf5SDavid du Colombier } icUInt16ArrayType;
10063ff48bf5SDavid du Colombier 
10073ff48bf5SDavid du Colombier /* uInt32Type */
10083ff48bf5SDavid du Colombier typedef struct {
10093ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ui32" */
10103ff48bf5SDavid du Colombier     icUInt32Array       data;           /* Variable array of values */
10113ff48bf5SDavid du Colombier } icUInt32ArrayType;
10123ff48bf5SDavid du Colombier 
10133ff48bf5SDavid du Colombier /* uInt64Type */
10143ff48bf5SDavid du Colombier typedef struct {
10153ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ui64" */
10163ff48bf5SDavid du Colombier     icUInt64Array       data;           /* Variable array of values */
10173ff48bf5SDavid du Colombier } icUInt64ArrayType;
10183ff48bf5SDavid du Colombier 
10193ff48bf5SDavid du Colombier /* uInt8Type */
10203ff48bf5SDavid du Colombier typedef struct {
10213ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ui08" */
10223ff48bf5SDavid du Colombier     icUInt8Array        data;           /* Variable array of values */
10233ff48bf5SDavid du Colombier } icUInt8ArrayType;
10243ff48bf5SDavid du Colombier 
10253ff48bf5SDavid du Colombier /* viewingConditionsType */
10263ff48bf5SDavid du Colombier typedef struct {
10273ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "view" */
10283ff48bf5SDavid du Colombier     icViewingCondition  view;           /* Viewing conditions */
10293ff48bf5SDavid du Colombier } icViewingConditionType;
10303ff48bf5SDavid du Colombier 
10313ff48bf5SDavid du Colombier /* XYZ Type */
10323ff48bf5SDavid du Colombier typedef struct {
10333ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "XYZ" */
10343ff48bf5SDavid du Colombier     icXYZArray          data;           /* Variable array of XYZ nums */
10353ff48bf5SDavid du Colombier } icXYZType;
10363ff48bf5SDavid du Colombier 
10373ff48bf5SDavid du Colombier /* CRDInfoType where [0] is the CRD product name count and string and
10383ff48bf5SDavid du Colombier  * [1] -[5] are the rendering intents 0-4 counts and strings
10393ff48bf5SDavid du Colombier  */
10403ff48bf5SDavid du Colombier typedef struct {
10413ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "crdi" */
10423ff48bf5SDavid du Colombier     icCrdInfo           info;           /* 5 sets of counts & strings */
10433ff48bf5SDavid du Colombier }icCrdInfoType;
10443ff48bf5SDavid du Colombier      /*   icCrdInfo       productName;     PS product count/string */
10453ff48bf5SDavid du Colombier      /*   icCrdInfo       CRDName0;        CRD name for intent 0 */
10463ff48bf5SDavid du Colombier      /*   icCrdInfo       CRDName1;        CRD name for intent 1 */
10473ff48bf5SDavid du Colombier      /*   icCrdInfo       CRDName2;        CRD name for intent 2 */
10483ff48bf5SDavid du Colombier      /*   icCrdInfo       CRDName3;        CRD name for intent 3 */
10493ff48bf5SDavid du Colombier 
10503ff48bf5SDavid du Colombier 
10513ff48bf5SDavid du Colombier typedef struct {
10523ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, 'devs' */
10533ff48bf5SDavid du Colombier     icSettingsData      data;
10543ff48bf5SDavid du Colombier }icDeviceSettingsType;
10553ff48bf5SDavid du Colombier 
10563ff48bf5SDavid du Colombier typedef struct {
10573ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, 'rcs2' */
10583ff48bf5SDavid du Colombier     icResponse data;
10593ff48bf5SDavid du Colombier }icResponseCurveSet16Type;
10603ff48bf5SDavid du Colombier 
10613ff48bf5SDavid du Colombier /* where data is structured as follows
10623ff48bf5SDavid du Colombier  * icUInt16Number  channels;          number of channels
10633ff48bf5SDavid du Colombier  * icUInt16Number  numTypes;          count of measurement types
10643ff48bf5SDavid du Colombier  * icUInt32Number  offset[numTypes];  offset from byte 0 of tag to each
10653ff48bf5SDavid du Colombier  *                                       response data set
10663ff48bf5SDavid du Colombier  *
10673ff48bf5SDavid du Colombier  * plus one or more of the following structures
10683ff48bf5SDavid du Colombier  * typedef struct {
10693ff48bf5SDavid du Colombier  *    icMeasUnitsSig      measurementUnit;        sig of the meas. unit
10703ff48bf5SDavid du Colombier  *    icUInt32Number      perChannel[channels];   # of meas's per chan
10713ff48bf5SDavid du Colombier  *    icXYZNumber         measure[channels];      measurements of patch
10723ff48bf5SDavid du Colombier  *                                                  w/max colorant value
10733ff48bf5SDavid du Colombier  *    icResponse16Number  response[channels][perChannel[channels]];
10743ff48bf5SDavid du Colombier  *    }
10753ff48bf5SDavid du Colombier  */
10763ff48bf5SDavid du Colombier 
10773ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
10783ff48bf5SDavid du Colombier 
10793ff48bf5SDavid du Colombier /*
10803ff48bf5SDavid du Colombier  * Lists of tags, tags, profile header and profile structure
10813ff48bf5SDavid du Colombier  */
10823ff48bf5SDavid du Colombier 
10833ff48bf5SDavid du Colombier /* A tag */
10843ff48bf5SDavid du Colombier typedef struct {
10853ff48bf5SDavid du Colombier     icTagSignature      sig;            /* The tag signature */
10863ff48bf5SDavid du Colombier     icUInt32Number      offset;         /* Start of tag relative to
10873ff48bf5SDavid du Colombier                                          * start of header, Spec
10883ff48bf5SDavid du Colombier                                          * Clause 5 */
10893ff48bf5SDavid du Colombier     icUInt32Number      size;           /* Size in bytes */
10903ff48bf5SDavid du Colombier } icTag;
10913ff48bf5SDavid du Colombier 
10923ff48bf5SDavid du Colombier /* A Structure that may be used independently for a list of tags */
10933ff48bf5SDavid du Colombier typedef struct {
10943ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Num tags in the profile */
10953ff48bf5SDavid du Colombier     icTag               tags[icAny];    /* Variable array of tags */
10963ff48bf5SDavid du Colombier } icTagList;
10973ff48bf5SDavid du Colombier 
10983ff48bf5SDavid du Colombier /* The Profile header */
10993ff48bf5SDavid du Colombier typedef struct {
11003ff48bf5SDavid du Colombier     icUInt32Number              size;           /* Prof size in bytes */
11013ff48bf5SDavid du Colombier     icSignature                 cmmId;          /* CMM for profile */
11023ff48bf5SDavid du Colombier     icUInt32Number              version;        /* Format version */
11033ff48bf5SDavid du Colombier     icProfileClassSignature     deviceClass;    /* Type of profile */
11043ff48bf5SDavid du Colombier     icColorSpaceSignature       colorSpace;     /* Clr space of data */
11053ff48bf5SDavid du Colombier     icColorSpaceSignature       pcs;            /* PCS, XYZ or Lab */
11063ff48bf5SDavid du Colombier     icDateTimeNumber            date;           /* Creation Date */
11073ff48bf5SDavid du Colombier     icSignature                 magic;          /* icMagicNumber */
11083ff48bf5SDavid du Colombier     icPlatformSignature         platform;       /* Primary Platform */
11093ff48bf5SDavid du Colombier     icUInt32Number              flags;          /* Various bits */
11103ff48bf5SDavid du Colombier     icSignature                 manufacturer;   /* Dev manufacturer */
11113ff48bf5SDavid du Colombier     icUInt32Number              model;          /* Dev model number */
11123ff48bf5SDavid du Colombier     icUInt64Number              attributes;     /* Device attributes */
11133ff48bf5SDavid du Colombier     icUInt32Number              renderingIntent;/* Rendering intent */
11143ff48bf5SDavid du Colombier     icXYZNumber                 illuminant;     /* Profile illuminant */
11153ff48bf5SDavid du Colombier     icSignature                 creator;        /* Profile creator */
11163ff48bf5SDavid du Colombier     icInt8Number                reserved[44];   /* Reserved */
11173ff48bf5SDavid du Colombier } icHeader;
11183ff48bf5SDavid du Colombier 
11193ff48bf5SDavid du Colombier /*
11203ff48bf5SDavid du Colombier  * A profile,
11213ff48bf5SDavid du Colombier  * we can't use icTagList here because its not at the end of the structure
11223ff48bf5SDavid du Colombier  */
11233ff48bf5SDavid du Colombier typedef struct {
11243ff48bf5SDavid du Colombier     icHeader            header;         /* The header */
11253ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Num tags in the profile */
11263ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* The tagTable and tagData */
11273ff48bf5SDavid du Colombier /*
11283ff48bf5SDavid du Colombier  * Data that follows is of the form
11293ff48bf5SDavid du Colombier  *
11303ff48bf5SDavid du Colombier  * icTag        tagTable[icAny];        * The tag table
11313ff48bf5SDavid du Colombier  * icInt8Number tagData[icAny];         * The tag data
11323ff48bf5SDavid du Colombier  */
11333ff48bf5SDavid du Colombier } icProfile;
11343ff48bf5SDavid du Colombier 
11353ff48bf5SDavid du Colombier /*------------------------------------------------------------------------*/
11363ff48bf5SDavid du Colombier /* Obsolete entries */
11373ff48bf5SDavid du Colombier 
11383ff48bf5SDavid du Colombier /* icNamedColor was replaced with icNamedColor2 */
11393ff48bf5SDavid du Colombier typedef struct {
11403ff48bf5SDavid du Colombier     icUInt32Number      vendorFlag;     /* Bottom 16 bits for IC use */
11413ff48bf5SDavid du Colombier     icUInt32Number      count;          /* Count of named colors */
11423ff48bf5SDavid du Colombier     icInt8Number        data[icAny];    /* Named color data follows */
11433ff48bf5SDavid du Colombier /*
11443ff48bf5SDavid du Colombier  *  Data that follows is of this form
11453ff48bf5SDavid du Colombier  *
11463ff48bf5SDavid du Colombier  * icInt8Number         prefix[icAny];  * Prefix
11473ff48bf5SDavid du Colombier  * icInt8Number         suffix[icAny];  * Suffix
11483ff48bf5SDavid du Colombier  * icInt8Number         root1[icAny];   * Root name
11493ff48bf5SDavid du Colombier  * icInt8Number         coords1[icAny]; * Color coordinates
11503ff48bf5SDavid du Colombier  * icInt8Number         root2[icAny];   * Root name
11513ff48bf5SDavid du Colombier  * icInt8Number         coords2[icAny]; * Color coordinates
11523ff48bf5SDavid du Colombier  *                      :
11533ff48bf5SDavid du Colombier  *                      :
11543ff48bf5SDavid du Colombier  * Repeat for root name and color coordinates up to (count-1)
11553ff48bf5SDavid du Colombier  */
11563ff48bf5SDavid du Colombier } icNamedColor;
11573ff48bf5SDavid du Colombier 
11583ff48bf5SDavid du Colombier /* icNamedColorType was replaced by icNamedColor2Type */
11593ff48bf5SDavid du Colombier typedef struct {
11603ff48bf5SDavid du Colombier     icTagBase           base;           /* Signature, "ncol" */
11613ff48bf5SDavid du Colombier     icNamedColor        ncolor;         /* Named color data */
11623ff48bf5SDavid du Colombier } icNamedColorType;
11633ff48bf5SDavid du Colombier 
11643ff48bf5SDavid du Colombier #endif /* ICC9809_H */
1165