diff mupdf-source/source/fitz/icc34.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/source/fitz/icc34.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,1000 @@
+/* Header file guard bands */
+#ifndef ICC_H
+#define ICC_H
+
+/*****************************************************************
+ Copyright (c) 1994-1996 SunSoft, Inc.
+
+					Rights Reserved
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restrict-
+ion, including without limitation the rights to use, copy, modify,
+merge, publish distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
+INFRINGEMENT.  IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT
+COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of SunSoft, Inc.
+shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without written
+authorization from SunSoft Inc.
+******************************************************************/
+
+/*
+ * This version of the header file corresponds to the profile
+ * specification version 3.4.
+ *
+ * All header file entries are pre-fixed with "ic" to help
+ * avoid name space collisions. Signatures are pre-fixed with
+ * icSig.
+ *
+ * The structures defined in this header file were created to
+ * represent a description of an ICC profile on disk. Rather
+ * than use pointers a technique is used where a single byte array
+ * was placed at the end of each structure. This allows us in "C"
+ * to extend the structure by allocating more data than is needed
+ * to account for variable length structures.
+ *
+ * This also ensures that data following is allocated
+ * contiguously and makes it easier to write and read data from
+ * the file.
+ *
+ * For example to allocate space for a 256 count length UCR
+ * and BG array, and fill the allocated data.  Note strlen + 1
+ * to remember NULL terminator.
+ *
+		icUcrBgCurve    *ucrCurve, *bgCurve;
+		int             ucr_nbytes, bg_nbytes, string_bytes;
+		icUcrBg         *ucrBgWrite;
+		char            ucr_string[100], *ucr_char;
+
+		strcpy(ucr_string, "Example ucrBG curves");
+		ucr_nbytes = sizeof(icUInt32Number) +
+				 (UCR_CURVE_SIZE * sizeof(icUInt16Number));
+		bg_nbytes = sizeof(icUInt32Number) +
+				 (BG_CURVE_SIZE * sizeof(icUInt16Number));
+		string_bytes = strlen(ucr_string) + 1;
+
+		ucrBgWrite = (icUcrBg *)malloc(
+								(ucr_nbytes + bg_nbytes + string_bytes));
+
+		ucrCurve = (icUcrBgCurve *)ucrBgWrite->data;
+		ucrCurve->count = UCR_CURVE_SIZE;
+		for (i=0; i<ucrCurve->count; i++)
+				ucrCurve->curve[i] = (icUInt16Number)i;
+
+		bgCurve = (icUcrBgCurve *)((char *)ucrCurve + ucr_nbytes);
+		bgCurve->count = BG_CURVE_SIZE;
+		for (i=0; i<bgCurve->count; i++)
+				bgCurve->curve[i] = 255 - (icUInt16Number)i;
+
+		ucr_char = (char *)((char *)bgCurve + bg_nbytes);
+		memcpy(ucr_char, ucr_string, string_bytes);
+ *
+ */
+
+/*
+ * Many of the structures contain variable length arrays. This
+ * is represented by the use of the convention.
+ *
+ *      type    data[icAny];
+ */
+
+/*------------------------------------------------------------------------*/
+/*
+ * Defines used in the specification
+ */
+#define icMagicNumber                   0x61637370L     /* 'acsp' */
+#define icVersionNumber                 0x02100000L     /* 2.1.0, BCD */
+
+/* Screening Encodings */
+#define icPrtrDefaultScreensFalse       0x00000000L     /* Bit pos 0 */
+#define icPrtrDefaultScreensTrue        0x00000001L     /* Bit pos 0 */
+#define icLinesPerInch                  0x00000002L     /* Bit pos 1 */
+#define icLinesPerCm                    0x00000000L     /* Bit pos 1 */
+
+/*
+ * Device attributes, currently defined values correspond
+ * to the low 4 bytes of the 8 byte attribute quantity, see
+ * the header for their location.
+ */
+#define icReflective                    0x00000000L     /* Bit pos 0 */
+#define icTransparency                  0x00000001L     /* Bit pos 0 */
+#define icGlossy                        0x00000000L     /* Bit pos 1 */
+#define icMatte                         0x00000002L     /* Bit pos 1 */
+
+/*
+ * Profile header flags, the low 16 bits are reserved for consortium
+ * use.
+ */
+#define icEmbeddedProfileFalse          0x00000000L     /* Bit pos 0 */
+#define icEmbeddedProfileTrue           0x00000001L     /* Bit pos 0 */
+#define icUseAnywhere                   0x00000000L     /* Bit pos 1 */
+#define icUseWithEmbeddedDataOnly       0x00000002L     /* Bit pos 1 */
+
+/* Ascii or Binary data */
+#define icAsciiData                     0x00000000L
+#define icBinaryData                    0x00000001L
+
+/*
+ * Define used to indicate that this is a variable length array
+ */
+#define icAny                           1
+
+/*------------------------------------------------------------------------*/
+/*
+ * Use this area to translate platform definitions of long
+ * etc into icXXX form. The rest of the header uses the icXXX
+ * typedefs. Signatures are 4 byte quantities.
+ *
+ */
+
+#ifdef PACKAGE_NAME
+/*
+  June 9, 2003, Adapted for use with configure by Bob Friesenhahn
+  Added the stupid check for autoconf by Marti Maria.
+  PACKAGE_NAME is defined if autoconf is being used
+*/
+
+typedef @UINT8_T@	icUInt8Number;
+typedef @UINT16_T@	icUInt16Number;
+typedef @UINT32_T@	icUInt32Number;
+typedef @UINT32_T@	icUInt64Number[2];
+
+typedef @INT8_T@	icInt8Number;
+typedef @INT16_T@	icInt16Number;
+typedef @INT32_T@	icInt32Number;
+typedef @INT32_T@	icInt64Number[2];
+
+#elif defined (__digital__) && defined (__unix__)
+
+/*
+ *Apr-17-2002: Modified by Marti Maria in order to provide wider portability.
+ */
+
+/* Tru64 */
+
+#include <inttypes.h>
+
+typedef uint8_t   icUInt8Number;
+typedef uint16_t  icUInt16Number;
+typedef uint32_t  icUInt32Number;
+typedef uint32_t  icUInt64Number[2];
+
+typedef int8_t     icInt8Number;
+typedef int16_t    icInt16Number;
+typedef int32_t    icInt32Number;
+typedef int32_t    icInt64Number[2];
+
+#elif defined(__sgi)
+#include "sgidefs.h"
+
+/*
+ * Number definitions
+ */
+
+/* Unsigned integer numbers */
+typedef unsigned char   icUInt8Number;
+typedef unsigned short  icUInt16Number;
+typedef __uint32_t      icUInt32Number;
+typedef __uint32_t      icUInt64Number[2];
+
+/* Signed numbers */
+typedef char            icInt8Number;
+typedef short           icInt16Number;
+typedef __int32_t       icInt32Number;
+typedef __int32_t       icInt64Number[2];
+
+#elif defined(__GNUC__) || defined(__unix__) || defined(__unix)
+
+#include <sys/types.h>
+
+#if defined(__sun) || defined(__hpux) || defined (__MINGW) || defined(__MINGW32__) || defined(HAVE_STDINT_H)
+
+#if defined (__MINGW) || defined(__MINGW32__) || defined(HAVE_STDINT_H)
+#include <stdint.h>
+#endif
+
+typedef uint8_t   icUInt8Number;
+typedef uint16_t  icUInt16Number;
+typedef uint32_t  icUInt32Number;
+typedef uint32_t  icUInt64Number[2];
+
+#else
+
+/* Unsigned integer numbers */
+typedef u_int8_t   icUInt8Number;
+typedef u_int16_t  icUInt16Number;
+typedef u_int32_t  icUInt32Number;
+typedef u_int32_t  icUInt64Number[2];
+
+#endif /* defined(__sun) || defined(__hpux) || defined (__MINGW) || defined(__MINGW32__) || defined(HAVE_STDINT_H) */
+
+/* Signed numbers */
+typedef int8_t     icInt8Number;
+typedef int16_t    icInt16Number;
+typedef int32_t    icInt32Number;
+typedef int32_t    icInt64Number[2];
+
+#else /* default definitions */
+
+/*
+ * Number definitions
+ */
+
+/* Unsigned integer numbers */
+typedef unsigned char   icUInt8Number;
+typedef unsigned short  icUInt16Number;
+typedef unsigned long   icUInt32Number;
+typedef unsigned long   icUInt64Number[2];
+
+/* Signed numbers */
+typedef char            icInt8Number;
+typedef short           icInt16Number;
+typedef long            icInt32Number;
+typedef long            icInt64Number[2];
+
+#endif  /* default defs */
+
+/* Base types */
+
+typedef icInt32Number    icSignature;
+typedef icInt32Number    icS15Fixed16Number;
+typedef icUInt32Number   icU16Fixed16Number;
+
+/*------------------------------------------------------------------------*/
+/* public tags and sizes */
+typedef enum {
+	icSigAToB0Tag                       = 0x41324230L,  /* 'A2B0' */
+	icSigAToB1Tag                       = 0x41324231L,  /* 'A2B1' */
+	icSigAToB2Tag                       = 0x41324232L,  /* 'A2B2' */
+	icSigBlueColorantTag                = 0x6258595AL,  /* 'bXYZ' */
+	icSigBlueTRCTag                     = 0x62545243L,  /* 'bTRC' */
+	icSigBToA0Tag                       = 0x42324130L,  /* 'B2A0' */
+	icSigBToA1Tag                       = 0x42324131L,  /* 'B2A1' */
+	icSigBToA2Tag                       = 0x42324132L,  /* 'B2A2' */
+	icSigCalibrationDateTimeTag         = 0x63616C74L,  /* 'calt' */
+	icSigCharTargetTag                  = 0x74617267L,  /* 'targ' */
+	icSigCopyrightTag                   = 0x63707274L,  /* 'cprt' */
+	icSigCrdInfoTag                     = 0x63726469L,  /* 'crdi' */
+	icSigDeviceMfgDescTag               = 0x646D6E64L,  /* 'dmnd' */
+	icSigDeviceModelDescTag             = 0x646D6464L,  /* 'dmdd' */
+	icSigGamutTag                       = 0x67616D74L,  /* 'gamt ' */
+	icSigGrayTRCTag                     = 0x6b545243L,  /* 'kTRC' */
+	icSigGreenColorantTag               = 0x6758595AL,  /* 'gXYZ' */
+	icSigGreenTRCTag                    = 0x67545243L,  /* 'gTRC' */
+	icSigLuminanceTag                   = 0x6C756d69L,  /* 'lumi' */
+	icSigMeasurementTag                 = 0x6D656173L,  /* 'meas' */
+	icSigMediaBlackPointTag             = 0x626B7074L,  /* 'bkpt' */
+	icSigMediaWhitePointTag             = 0x77747074L,  /* 'wtpt' */
+	icSigNamedColorTag                  = 0x6E636f6CL,  /* 'ncol'
+														 * OBSOLETE, use ncl2 */
+	icSigNamedColor2Tag                 = 0x6E636C32L,  /* 'ncl2' */
+	icSigPreview0Tag                    = 0x70726530L,  /* 'pre0' */
+	icSigPreview1Tag                    = 0x70726531L,  /* 'pre1' */
+	icSigPreview2Tag                    = 0x70726532L,  /* 'pre2' */
+	icSigProfileDescriptionTag          = 0x64657363L,  /* 'desc' */
+	icSigProfileSequenceDescTag         = 0x70736571L,  /* 'pseq' */
+	icSigPs2CRD0Tag                     = 0x70736430L,  /* 'psd0' */
+	icSigPs2CRD1Tag                     = 0x70736431L,  /* 'psd1' */
+	icSigPs2CRD2Tag                     = 0x70736432L,  /* 'psd2' */
+	icSigPs2CRD3Tag                     = 0x70736433L,  /* 'psd3' */
+	icSigPs2CSATag                      = 0x70733273L,  /* 'ps2s' */
+	icSigPs2RenderingIntentTag          = 0x70733269L,  /* 'ps2i' */
+	icSigRedColorantTag                 = 0x7258595AL,  /* 'rXYZ' */
+	icSigRedTRCTag                      = 0x72545243L,  /* 'rTRC' */
+	icSigScreeningDescTag               = 0x73637264L,  /* 'scrd' */
+	icSigScreeningTag                   = 0x7363726EL,  /* 'scrn' */
+	icSigTechnologyTag                  = 0x74656368L,  /* 'tech' */
+	icSigUcrBgTag                       = 0x62666420L,  /* 'bfd ' */
+	icSigViewingCondDescTag             = 0x76756564L,  /* 'vued' */
+	icSigViewingConditionsTag           = 0x76696577L,  /* 'view' */
+} icTagSignature;
+
+/* technology signature descriptions */
+typedef enum {
+	icSigDigitalCamera                  = 0x6463616DL,  /* 'dcam' */
+	icSigFilmScanner                    = 0x6673636EL,  /* 'fscn' */
+	icSigReflectiveScanner              = 0x7273636EL,  /* 'rscn' */
+	icSigInkJetPrinter                  = 0x696A6574L,  /* 'ijet' */
+	icSigThermalWaxPrinter              = 0x74776178L,  /* 'twax' */
+	icSigElectrophotographicPrinter     = 0x6570686FL,  /* 'epho' */
+	icSigElectrostaticPrinter           = 0x65737461L,  /* 'esta' */
+	icSigDyeSublimationPrinter          = 0x64737562L,  /* 'dsub' */
+	icSigPhotographicPaperPrinter       = 0x7270686FL,  /* 'rpho' */
+	icSigFilmWriter                     = 0x6670726EL,  /* 'fprn' */
+	icSigVideoMonitor                   = 0x7669646DL,  /* 'vidm' */
+	icSigVideoCamera                    = 0x76696463L,  /* 'vidc' */
+	icSigProjectionTelevision           = 0x706A7476L,  /* 'pjtv' */
+	icSigCRTDisplay                     = 0x43525420L,  /* 'CRT ' */
+	icSigPMDisplay                      = 0x504D4420L,  /* 'PMD ' */
+	icSigAMDisplay                      = 0x414D4420L,  /* 'AMD ' */
+	icSigPhotoCD                        = 0x4B504344L,  /* 'KPCD' */
+	icSigPhotoImageSetter               = 0x696D6773L,  /* 'imgs' */
+	icSigGravure                        = 0x67726176L,  /* 'grav' */
+	icSigOffsetLithography              = 0x6F666673L,  /* 'offs' */
+	icSigSilkscreen                     = 0x73696C6BL,  /* 'silk' */
+	icSigFlexography                    = 0x666C6578L,  /* 'flex' */
+} icTechnologySignature;
+
+/* type signatures */
+typedef enum {
+	icSigCurveType                      = 0x63757276L,  /* 'curv' */
+	icSigDataType                       = 0x64617461L,  /* 'data' */
+	icSigDateTimeType                   = 0x6474696DL,  /* 'dtim' */
+	icSigLut16Type                      = 0x6d667432L,  /* 'mft2' */
+	icSigLut8Type                       = 0x6d667431L,  /* 'mft1' */
+	icSigMeasurementType                = 0x6D656173L,  /* 'meas' */
+	icSigNamedColorType                 = 0x6E636f6CL,  /* 'ncol'
+														 * OBSOLETE, use ncl2 */
+	icSigProfileSequenceDescType        = 0x70736571L,  /* 'pseq' */
+	icSigS15Fixed16ArrayType            = 0x73663332L,  /* 'sf32' */
+	icSigScreeningType                  = 0x7363726EL,  /* 'scrn' */
+	icSigSignatureType                  = 0x73696720L,  /* 'sig ' */
+	icSigTextType                       = 0x74657874L,  /* 'text' */
+	icSigTextDescriptionType            = 0x64657363L,  /* 'desc' */
+	icSigU16Fixed16ArrayType            = 0x75663332L,  /* 'uf32' */
+	icSigUcrBgType                      = 0x62666420L,  /* 'bfd ' */
+	icSigUInt16ArrayType                = 0x75693136L,  /* 'ui16' */
+	icSigUInt32ArrayType                = 0x75693332L,  /* 'ui32' */
+	icSigUInt64ArrayType                = 0x75693634L,  /* 'ui64' */
+	icSigUInt8ArrayType                 = 0x75693038L,  /* 'ui08' */
+	icSigViewingConditionsType          = 0x76696577L,  /* 'view' */
+	icSigXYZType                        = 0x58595A20L,  /* 'XYZ ' */
+	icSigXYZArrayType                   = 0x58595A20L,  /* 'XYZ ' */
+	icSigNamedColor2Type                = 0x6E636C32L,  /* 'ncl2' */
+	icSigCrdInfoType                    = 0x63726469L,  /* 'crdi' */
+} icTagTypeSignature;
+
+/*
+ * Color Space Signatures
+ * Note that only icSigXYZData and icSigLabData are valid
+ * Profile Connection Spaces (PCSs)
+ */
+typedef enum {
+	icSigXYZData                        = 0x58595A20L,  /* 'XYZ ' */
+	icSigLabData                        = 0x4C616220L,  /* 'Lab ' */
+	icSigLuvData                        = 0x4C757620L,  /* 'Luv ' */
+	icSigYCbCrData                      = 0x59436272L,  /* 'YCbr' */
+	icSigYxyData                        = 0x59787920L,  /* 'Yxy ' */
+	icSigRgbData                        = 0x52474220L,  /* 'RGB ' */
+	icSigGrayData                       = 0x47524159L,  /* 'GRAY' */
+	icSigHsvData                        = 0x48535620L,  /* 'HSV ' */
+	icSigHlsData                        = 0x484C5320L,  /* 'HLS ' */
+	icSigCmykData                       = 0x434D594BL,  /* 'CMYK' */
+	icSigCmyData                        = 0x434D5920L,  /* 'CMY ' */
+	icSig2colorData                     = 0x32434C52L,  /* '2CLR' */
+	icSig3colorData                     = 0x33434C52L,  /* '3CLR' */
+	icSig4colorData                     = 0x34434C52L,  /* '4CLR' */
+	icSig5colorData                     = 0x35434C52L,  /* '5CLR' */
+	icSig6colorData                     = 0x36434C52L,  /* '6CLR' */
+	icSig7colorData                     = 0x37434C52L,  /* '7CLR' */
+	icSig8colorData                     = 0x38434C52L,  /* '8CLR' */
+	icSig9colorData                     = 0x39434C52L,  /* '9CLR' */
+	icSig10colorData                    = 0x41434C52L,  /* 'ACLR' */
+	icSig11colorData                    = 0x42434C52L,  /* 'BCLR' */
+	icSig12colorData                    = 0x43434C52L,  /* 'CCLR' */
+	icSig13colorData                    = 0x44434C52L,  /* 'DCLR' */
+	icSig14colorData                    = 0x45434C52L,  /* 'ECLR' */
+	icSig15colorData                    = 0x46434C52L,  /* 'FCLR' */
+} icColorSpaceSignature;
+
+/* profileClass enumerations */
+typedef enum {
+	icSigInputClass                     = 0x73636E72L,  /* 'scnr' */
+	icSigDisplayClass                   = 0x6D6E7472L,  /* 'mntr' */
+	icSigOutputClass                    = 0x70727472L,  /* 'prtr' */
+	icSigLinkClass                      = 0x6C696E6BL,  /* 'link' */
+	icSigAbstractClass                  = 0x61627374L,  /* 'abst' */
+	icSigColorSpaceClass                = 0x73706163L,  /* 'spac' */
+	icSigNamedColorClass                = 0x6e6d636cL,  /* 'nmcl' */
+} icProfileClassSignature;
+
+/* Platform Signatures */
+typedef enum {
+	icSigMacintosh                      = 0x4150504CL,  /* 'APPL' */
+	icSigMicrosoft                      = 0x4D534654L,  /* 'MSFT' */
+	icSigSolaris                        = 0x53554E57L,  /* 'SUNW' */
+	icSigSGI                            = 0x53474920L,  /* 'SGI ' */
+	icSigTaligent                       = 0x54474E54L,  /* 'TGNT' */
+} icPlatformSignature;
+
+/*------------------------------------------------------------------------*/
+/*
+ * Other enums
+ */
+
+/* Measurement Flare, used in the measurmentType tag */
+typedef enum {
+	icFlare0                            = 0x00000000L,  /* 0% flare */
+	icFlare100                          = 0x00000001L,  /* 100% flare */
+} icMeasurementFlare;
+
+/* Measurement Geometry, used in the measurmentType tag */
+typedef enum {
+	icGeometryUnknown                   = 0x00000000L,  /* Unknown */
+	icGeometry045or450                  = 0x00000001L,  /* 0/45, 45/0 */
+	icGeometry0dord0                    = 0x00000002L,  /* 0/d or d/0 */
+} icMeasurementGeometry;
+
+/* Rendering Intents, used in the profile header */
+typedef enum {
+	icPerceptual                        = 0,
+	icRelativeColorimetric              = 1,
+	icSaturation                        = 2,
+	icAbsoluteColorimetric              = 3,
+} icRenderingIntent;
+
+/* Different Spot Shapes currently defined, used for screeningType */
+typedef enum {
+	icSpotShapeUnknown                  = 0,
+	icSpotShapePrinterDefault           = 1,
+	icSpotShapeRound                    = 2,
+	icSpotShapeDiamond                  = 3,
+	icSpotShapeEllipse                  = 4,
+	icSpotShapeLine                     = 5,
+	icSpotShapeSquare                   = 6,
+	icSpotShapeCross                    = 7,
+} icSpotShape;
+
+/* Standard Observer, used in the measurmentType tag */
+typedef enum {
+	icStdObsUnknown                     = 0x00000000L,  /* Unknown */
+	icStdObs1931TwoDegrees              = 0x00000001L,  /* 2 deg */
+	icStdObs1964TenDegrees              = 0x00000002L,  /* 10 deg */
+} icStandardObserver;
+
+/* Pre-defined illuminants, used in measurement and viewing conditions type */
+typedef enum {
+	icIlluminantUnknown                 = 0x00000000L,
+	icIlluminantD50                     = 0x00000001L,
+	icIlluminantD65                     = 0x00000002L,
+	icIlluminantD93                     = 0x00000003L,
+	icIlluminantF2                      = 0x00000004L,
+	icIlluminantD55                     = 0x00000005L,
+	icIlluminantA                       = 0x00000006L,
+	icIlluminantEquiPowerE              = 0x00000007L,
+	icIlluminantF8                      = 0x00000008L,
+} icIlluminant;
+
+/*------------------------------------------------------------------------*/
+/*
+ * Arrays of numbers
+ */
+
+/* Int8 Array */
+typedef struct {
+	icInt8Number        data[icAny];    /* Variable array of values */
+} icInt8Array;
+
+/* UInt8 Array */
+typedef struct {
+	icUInt8Number       data[icAny];    /* Variable array of values */
+} icUInt8Array;
+
+/* uInt16 Array */
+typedef struct {
+	icUInt16Number      data[icAny];    /* Variable array of values */
+} icUInt16Array;
+
+/* Int16 Array */
+typedef struct {
+	icInt16Number       data[icAny];    /* Variable array of values */
+} icInt16Array;
+
+/* uInt32 Array */
+typedef struct {
+	icUInt32Number      data[icAny];    /* Variable array of values */
+} icUInt32Array;
+
+/* Int32 Array */
+typedef struct {
+	icInt32Number       data[icAny];    /* Variable array of values */
+} icInt32Array;
+
+/* UInt64 Array */
+typedef struct {
+	icUInt64Number      data[icAny];    /* Variable array of values */
+} icUInt64Array;
+
+/* Int64 Array */
+typedef struct {
+	icInt64Number       data[icAny];    /* Variable array of values */
+} icInt64Array;
+
+/* u16Fixed16 Array */
+typedef struct {
+	icU16Fixed16Number  data[icAny];    /* Variable array of values */
+} icU16Fixed16Array;
+
+/* s15Fixed16 Array */
+typedef struct {
+	icS15Fixed16Number  data[icAny];    /* Variable array of values */
+} icS15Fixed16Array;
+
+/* The base date time number */
+typedef struct {
+	icUInt16Number      year;
+	icUInt16Number      month;
+	icUInt16Number      day;
+	icUInt16Number      hours;
+	icUInt16Number      minutes;
+	icUInt16Number      seconds;
+} icDateTimeNumber;
+
+/* XYZ Number  */
+typedef struct {
+	icS15Fixed16Number  X;
+	icS15Fixed16Number  Y;
+	icS15Fixed16Number  Z;
+} icXYZNumber;
+
+/* XYZ Array */
+typedef struct {
+	icXYZNumber         data[icAny];    /* Variable array of XYZ numbers */
+} icXYZArray;
+
+/* Curve */
+typedef struct {
+	icUInt32Number      count;          /* Number of entries */
+	icUInt16Number      data[icAny];    /* The actual table data, real
+										 * number is determined by count
+										 * Interpretation depends on how
+										 * data is used with a given tag
+										 */
+} icCurve;
+
+/* Data */
+typedef struct {
+	icUInt32Number      dataFlag;       /* 0 = ascii, 1 = binary */
+	icInt8Number        data[icAny];    /* Data, size from tag */
+} icData;
+
+/* lut16 */
+typedef struct {
+	icUInt8Number       inputChan;      /* Number of input channels */
+	icUInt8Number       outputChan;     /* Number of output channels */
+	icUInt8Number       clutPoints;     /* Number of grid points */
+	icInt8Number        pad;            /* Padding for byte alignment */
+	icS15Fixed16Number  e00;            /* e00 in the 3 * 3 */
+	icS15Fixed16Number  e01;            /* e01 in the 3 * 3 */
+	icS15Fixed16Number  e02;            /* e02 in the 3 * 3 */
+	icS15Fixed16Number  e10;            /* e10 in the 3 * 3 */
+	icS15Fixed16Number  e11;            /* e11 in the 3 * 3 */
+	icS15Fixed16Number  e12;            /* e12 in the 3 * 3 */
+	icS15Fixed16Number  e20;            /* e20 in the 3 * 3 */
+	icS15Fixed16Number  e21;            /* e21 in the 3 * 3 */
+	icS15Fixed16Number  e22;            /* e22 in the 3 * 3 */
+	icUInt16Number      inputEnt;       /* Num of in-table entries */
+	icUInt16Number      outputEnt;      /* Num of out-table entries */
+	icUInt16Number      data[icAny];    /* Data follows see spec */
+/*
+ *  Data that follows is of this form
+ *
+ *  icUInt16Number      inputTable[inputChan][icAny];   * The in-table
+ *  icUInt16Number      clutTable[icAny];               * The clut
+ *  icUInt16Number      outputTable[outputChan][icAny]; * The out-table
+ */
+} icLut16;
+
+/* lut8, input & output tables are always 256 bytes in length */
+typedef struct {
+	icUInt8Number       inputChan;      /* Num of input channels */
+	icUInt8Number       outputChan;     /* Num of output channels */
+	icUInt8Number       clutPoints;     /* Num of grid points */
+	icInt8Number        pad;
+	icS15Fixed16Number  e00;            /* e00 in the 3 * 3 */
+	icS15Fixed16Number  e01;            /* e01 in the 3 * 3 */
+	icS15Fixed16Number  e02;            /* e02 in the 3 * 3 */
+	icS15Fixed16Number  e10;            /* e10 in the 3 * 3 */
+	icS15Fixed16Number  e11;            /* e11 in the 3 * 3 */
+	icS15Fixed16Number  e12;            /* e12 in the 3 * 3 */
+	icS15Fixed16Number  e20;            /* e20 in the 3 * 3 */
+	icS15Fixed16Number  e21;            /* e21 in the 3 * 3 */
+	icS15Fixed16Number  e22;            /* e22 in the 3 * 3 */
+	icUInt8Number       data[icAny];    /* Data follows see spec */
+/*
+ *  Data that follows is of this form
+ *
+ *  icUInt8Number       inputTable[inputChan][256];     * The in-table
+ *  icUInt8Number       clutTable[icAny];               * The clut
+ *  icUInt8Number       outputTable[outputChan][256];   * The out-table
+ */
+} icLut8;
+
+/* Measurement Data */
+typedef struct {
+	icStandardObserver          stdObserver;    /* Standard observer */
+	icXYZNumber                 backing;        /* XYZ for backing */
+	icMeasurementGeometry       geometry;       /* Meas. geometry */
+	icMeasurementFlare          flare;          /* Measurement flare */
+	icIlluminant                illuminant;     /* Illuminant */
+} icMeasurement;
+
+/* Named color */
+
+/*
+ * icNamedColor2 takes the place of icNamedColor
+ */
+typedef struct {
+	icUInt32Number      vendorFlag;     /* Bottom 16 bits for IC use */
+	icUInt32Number      count;          /* Count of named colors */
+	icUInt32Number      nDeviceCoords;  /* Num of device coordinates */
+	icInt8Number        prefix[32];     /* Prefix for each color name */
+	icInt8Number        suffix[32];     /* Suffix for each color name */
+	icInt8Number        data[icAny];    /* Named color data follows */
+/*
+ *  Data that follows is of this form
+ *
+ * icInt8Number         root1[32];              * Root name for 1st color
+ * icUInt16Number       pcsCoords1[icAny];      * PCS coords of 1st color
+ * icUInt16Number       deviceCoords1[icAny];   * Dev coords of 1st color
+ * icInt8Number         root2[32];              * Root name for 2nd color
+ * icUInt16Number       pcsCoords2[icAny];      * PCS coords of 2nd color
+ * icUInt16Number       deviceCoords2[icAny];   * Dev coords of 2nd color
+ *                      :
+ *                      :
+ * Repeat for name and PCS and device color coordinates up to (count-1)
+ *
+ * NOTES:
+ * PCS and device space can be determined from the header.
+ *
+ * PCS coordinates are icUInt16 numbers and are described in Annex A of
+ * the ICC spec. Only 16 bit L*a*b* and XYZ are allowed. The number of
+ * coordinates is consistent with the headers PCS.
+ *
+ * Device coordinates are icUInt16 numbers where 0x0000 represents
+ * the minimum value and 0xFFFF represents the maximum value.
+ * If the nDeviceCoords value is 0 this field is not given.
+ */
+} icNamedColor2;
+
+/* Profile sequence structure */
+typedef struct {
+	icSignature                 deviceMfg;      /* Dev Manufacturer */
+	icSignature                 deviceModel;    /* Dev Model */
+	icUInt64Number              attributes;     /* Dev attributes */
+	icTechnologySignature       technology;     /* Technology sig */
+	icInt8Number                data[icAny];    /* Desc text follows */
+/*
+ *  Data that follows is of this form, this is an icInt8Number
+ *  to avoid problems with a compiler generating  bad code as
+ *  these arrays are variable in length.
+ *
+ * icTextDescription            deviceMfgDesc;  * Manufacturer text
+ * icTextDescription            modelDesc;      * Model text
+ */
+} icDescStruct;
+
+/* Profile sequence description */
+typedef struct {
+	icUInt32Number      count;          /* Number of descriptions */
+	icUInt8Number       data[icAny];    /* Array of desc structs */
+} icProfileSequenceDesc;
+
+/* textDescription */
+typedef struct {
+	icUInt32Number      count;          /* Description length */
+	icInt8Number        data[icAny];    /* Descriptions follow */
+/*
+ *  Data that follows is of this form
+ *
+ * icInt8Number         desc[count]     * NULL terminated ascii string
+ * icUInt32Number       ucLangCode;     * UniCode language code
+ * icUInt32Number       ucCount;        * UniCode description length
+ * icInt16Number        ucDesc[ucCount];* The UniCode description
+ * icUInt16Number       scCode;         * ScriptCode code
+ * icUInt8Number        scCount;        * ScriptCode count
+ * icInt8Number         scDesc[67];     * ScriptCode Description
+ */
+} icTextDescription;
+
+/* Screening Data */
+typedef struct {
+	icS15Fixed16Number  frequency;      /* Frequency */
+	icS15Fixed16Number  angle;          /* Screen angle */
+	icSpotShape         spotShape;      /* Spot Shape encodings below */
+} icScreeningData;
+
+typedef struct {
+	icUInt32Number      screeningFlag;  /* Screening flag */
+	icUInt32Number      channels;       /* Number of channels */
+	icScreeningData     data[icAny];    /* Array of screening data */
+} icScreening;
+
+/* Text Data */
+typedef struct {
+	icInt8Number        data[icAny];    /* Variable array of chars */
+} icText;
+
+/* Structure describing either a UCR or BG curve */
+typedef struct {
+	icUInt32Number      count;          /* Curve length */
+	icUInt16Number      curve[icAny];   /* The array of curve values */
+} icUcrBgCurve;
+
+/* Under color removal, black generation */
+typedef struct {
+	icInt8Number        data[icAny];            /* The Ucr BG data */
+/*
+ *  Data that follows is of this form, this is a icInt8Number
+ *  to avoid problems with a compiler generating  bad code as
+ *  these arrays are variable in length.
+ *
+ * icUcrBgCurve         ucr;            * Ucr curve
+ * icUcrBgCurve         bg;             * Bg curve
+ * icInt8Number         string;         * UcrBg description
+ */
+} icUcrBg;
+
+/* viewingConditionsType */
+typedef struct {
+	icXYZNumber         illuminant;     /* In candelas per sq. meter */
+	icXYZNumber         surround;       /* In candelas per sq. meter */
+	icIlluminant        stdIluminant;   /* See icIlluminant defines */
+} icViewingCondition;
+
+/* CrdInfo type */
+typedef struct {
+	icUInt32Number      count;          /* Char count includes NULL */
+	icInt8Number        desc[icAny];    /* Null terminated string */
+} icCrdInfo;
+
+/*------------------------------------------------------------------------*/
+/*
+ * Tag Type definitions
+ */
+
+/*
+ * Many of the structures contain variable length arrays. This
+ * is represented by the use of the convention.
+ *
+ *      type    data[icAny];
+ */
+
+/* The base part of each tag */
+typedef struct {
+	icTagTypeSignature  sig;            /* Signature */
+	icInt8Number        reserved[4];    /* Reserved, set to 0 */
+} icTagBase;
+
+/* curveType */
+typedef struct {
+	icTagBase           base;           /* Signature, "curv" */
+	icCurve             curve;          /* The curve data */
+} icCurveType;
+
+/* dataType */
+typedef struct {
+	icTagBase           base;           /* Signature, "data" */
+	icData              data;           /* The data structure */
+} icDataType;
+
+/* dateTimeType */
+typedef struct {
+	icTagBase           base;           /* Signature, "dtim" */
+	icDateTimeNumber    date;           /* The date */
+} icDateTimeType;
+
+/* lut16Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "mft2" */
+	icLut16             lut;            /* Lut16 data */
+} icLut16Type;
+
+/* lut8Type, input & output tables are always 256 bytes in length */
+typedef struct {
+	icTagBase           base;           /* Signature, "mft1" */
+	icLut8              lut;            /* Lut8 data */
+} icLut8Type;
+
+/* Measurement Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "meas" */
+	icMeasurement       measurement;    /* Measurement data */
+} icMeasurementType;
+
+/* Named color type */
+/* icNamedColor2Type, replaces icNamedColorType */
+typedef struct {
+	icTagBase           base;           /* Signature, "ncl2" */
+	icNamedColor2       ncolor;         /* Named color data */
+} icNamedColor2Type;
+
+/* Profile sequence description type */
+typedef struct {
+	icTagBase                   base;   /* Signature, "pseq" */
+	icProfileSequenceDesc       desc;   /* The seq description */
+} icProfileSequenceDescType;
+
+/* textDescriptionType */
+typedef struct {
+	icTagBase                   base;   /* Signature, "desc" */
+	icTextDescription           desc;   /* The description */
+} icTextDescriptionType;
+
+/* s15Fixed16Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "sf32" */
+	icS15Fixed16Array   data;           /* Array of values */
+} icS15Fixed16ArrayType;
+
+typedef struct {
+	icTagBase           base;           /* Signature, "scrn" */
+	icScreening         screen;         /* Screening structure */
+} icScreeningType;
+
+/* sigType */
+typedef struct {
+	icTagBase           base;           /* Signature, "sig" */
+	icSignature         signature;      /* The signature data */
+} icSignatureType;
+
+/* textType */
+typedef struct {
+	icTagBase           base;           /* Signature, "text" */
+	icText              data;           /* Variable array of chars */
+} icTextType;
+
+/* u16Fixed16Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "uf32" */
+	icU16Fixed16Array   data;           /* Variable array of values */
+} icU16Fixed16ArrayType;
+
+/* Under color removal, black generation type */
+typedef struct {
+	icTagBase           base;           /* Signature, "bfd " */
+	icUcrBg             data;           /* ucrBg structure */
+} icUcrBgType;
+
+/* uInt16Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "ui16" */
+	icUInt16Array       data;           /* Variable array of values */
+} icUInt16ArrayType;
+
+/* uInt32Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "ui32" */
+	icUInt32Array       data;           /* Variable array of values */
+} icUInt32ArrayType;
+
+/* uInt64Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "ui64" */
+	icUInt64Array       data;           /* Variable array of values */
+} icUInt64ArrayType;
+
+/* uInt8Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "ui08" */
+	icUInt8Array        data;           /* Variable array of values */
+} icUInt8ArrayType;
+
+/* viewingConditionsType */
+typedef struct {
+	icTagBase           base;           /* Signature, "view" */
+	icViewingCondition  view;           /* Viewing conditions */
+} icViewingConditionType;
+
+/* XYZ Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "XYZ" */
+	icXYZArray          data;           /* Variable array of XYZ nums */
+} icXYZType;
+
+/* CRDInfoType where [0] is the CRD product name count and string and
+ * [1] -[5] are the rendering intents 0-4 counts and strings
+ */
+typedef struct {
+	icTagBase           base;           /* Signature, "crdi" */
+	icCrdInfo           info;           /* 5 sets of counts & strings */
+}icCrdInfoType;
+	 /*   icCrdInfo       productName;     PS product count/string */
+	 /*   icCrdInfo       CRDName0;        CRD name for intent 0 */
+	 /*   icCrdInfo       CRDName1;        CRD name for intent 1 */
+	 /*   icCrdInfo       CRDName2;        CRD name for intent 2 */
+	 /*   icCrdInfo       CRDName3;        CRD name for intent 3 */
+
+/*------------------------------------------------------------------------*/
+
+/*
+ * Lists of tags, tags, profile header and profile structure
+ */
+
+/* A tag */
+typedef struct {
+	icTagSignature      sig;            /* The tag signature */
+	icUInt32Number      offset;         /* Start of tag relative to
+										 * start of header, Spec
+										 * Clause 5 */
+	icUInt32Number      size;           /* Size in bytes */
+} icTag;
+
+/* A Structure that may be used independently for a list of tags */
+typedef struct {
+	icUInt32Number      count;          /* Num tags in the profile */
+	icTag               tags[icAny];    /* Variable array of tags */
+} icTagList;
+
+/* The Profile header */
+typedef struct {
+	icUInt32Number              size;           /* Prof size in bytes */
+	icSignature                 cmmId;          /* CMM for profile */
+	icUInt32Number              version;        /* Format version */
+	icProfileClassSignature     deviceClass;    /* Type of profile */
+	icColorSpaceSignature       colorSpace;     /* Clr space of data */
+	icColorSpaceSignature       pcs;            /* PCS, XYZ or Lab */
+	icDateTimeNumber            date;           /* Creation Date */
+	icSignature                 magic;          /* icMagicNumber */
+	icPlatformSignature         platform;       /* Primary Platform */
+	icUInt32Number              flags;          /* Various bits */
+	icSignature                 manufacturer;   /* Dev manufacturer */
+	icUInt32Number              model;          /* Dev model number */
+	icUInt64Number              attributes;     /* Device attributes */
+	icUInt32Number              renderingIntent;/* Rendering intent */
+	icXYZNumber                 illuminant;     /* Profile illuminant */
+	icSignature                 creator;        /* Profile creator */
+	icInt8Number                reserved[44];   /* Reserved */
+} icHeader;
+
+/*
+ * A profile,
+ * we can't use icTagList here because its not at the end of the structure
+ */
+typedef struct {
+	icHeader            header;         /* The header */
+	icUInt32Number      count;          /* Num tags in the profile */
+	icInt8Number        data[icAny];    /* The tagTable and tagData */
+/*
+ * Data that follows is of the form
+ *
+ * icTag        tagTable[icAny];        * The tag table
+ * icInt8Number tagData[icAny];         * The tag data
+ */
+} icProfile;
+
+/*------------------------------------------------------------------------*/
+/* Obsolete entries */
+
+/* icNamedColor was replaced with icNamedColor2 */
+typedef struct {
+	icUInt32Number      vendorFlag;     /* Bottom 16 bits for IC use */
+	icUInt32Number      count;          /* Count of named colors */
+	icInt8Number        data[icAny];    /* Named color data follows */
+/*
+ *  Data that follows is of this form
+ *
+ * icInt8Number         prefix[icAny];  * Prefix
+ * icInt8Number         suffix[icAny];  * Suffix
+ * icInt8Number         root1[icAny];   * Root name
+ * icInt8Number         coords1[icAny]; * Color coordinates
+ * icInt8Number         root2[icAny];   * Root name
+ * icInt8Number         coords2[icAny]; * Color coordinates
+ *                      :
+ *                      :
+ * Repeat for root name and color coordinates up to (count-1)
+ */
+} icNamedColor;
+
+/* icNamedColorType was replaced by icNamedColor2Type */
+typedef struct {
+	icTagBase           base;           /* Signature, "ncol" */
+	icNamedColor        ncolor;         /* Named color data */
+} icNamedColorType;
+
+#endif /* ICC_H */