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