/*
 *  icm.h       Image Color Management (ICM) functions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _ICM_H_
#define _ICM_H_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* Primitive data types */
typedef char        COLOR_NAME[32];
typedef COLOR_NAME  *PCOLOR_NAME;
typedef COLOR_NAME  *LPCOLOR_NAME;
typedef HANDLE      HPROFILE;
typedef HPROFILE    *PHPROFILE;
typedef HANDLE      HTRANSFORM;
typedef DWORD       TAGTYPE;
typedef TAGTYPE     *PTAGTYPE;
typedef TAGTYPE     *LPTAGTYPE;
typedef HANDLE      HCMTRANSFORM;
typedef PVOID       LPDEVCHARACTER;

/* Maximum number of color channels */
#define MAX_COLOR_CHANNELS  8

/* Rendering intents */
#define INTENT_PERCEPTUAL               0
#define INTENT_RELATIVE_COLORIMETRIC    1
#define INTENT_SATURATION               2
#define INTENT_ABSOLUTE_COLORIMETRIC    3

/* Profile class values */
#define CLASS_MONITOR       'mntr'
#define CLASS_PRINTER       'prtr'
#define CLASS_SCANNER       'scnr'
#define CLASS_LINK          'link'
#define CLASS_ABSTRACT      'abst'
#define CLASS_COLORSPACE    'spac'
#define CLASS_NAMED         'nmcl'
#if (NTDDI_VERSION >= 0x06000000)
    #define CLASS_CAMP      'camp'
    #define CLASS_GMMP      'gmmp'
#endif

/* Color space values */
#define SPACE_XYZ       'XYZ '
#define SPACE_Lab       'Lab '
#define SPACE_Luv       'Luv '
#define SPACE_YCbCr     'YCbr'
#define SPACE_Yxy       'Yxy '
#define SPACE_RGB       'RGB '
#define SPACE_GRAY      'GRAY'
#define SPACE_HSV       'HSV '
#define SPACE_HLS       'HLS '
#define SPACE_CMYK      'CMYK'
#define SPACE_CMY       'CMY '
#define SPACE_2_CHANNEL '2CLR'
#define SPACE_3_CHANNEL '3CLR'
#define SPACE_4_CHANNEL '4CLR'
#define SPACE_5_CHANNEL '5CLR'
#define SPACE_6_CHANNEL '6CLR'
#define SPACE_7_CHANNEL '7CLR'
#define SPACE_8_CHANNEL '8CLR'

/* Profile flags */
#define FLAG_EMBEDDEDPROFILE                    0x00000001L
#define FLAG_DEPENDENTONDATA                    0x00000002L
#if (NTDDI_VERSION >= 0x06000000)
    #define FLAG_ENABLE_CHROMATIC_ADAPTATION    0x02000000L
#endif

/* Profile attribute flags */
#define ATTRIB_TRANSPARENCY 0x00000001L
#define ATTRIB_MATTE        0x00000002L

/* Profile types */
#define PROFILE_FILENAME    1L
#define PROFILE_MEMBUFFER   2L

/* Profile access modes */
#define PROFILE_READ        1L
#define PROFILE_READWRITE   2L

/* CMM special values */
#define INDEX_DONT_CARE     0
#define CMM_FROM_PROFILE    INDEX_DONT_CARE
#define CMM_WINDOWS_DEFAULT 'Win '

/* Enumeration type version number */
#define ENUM_TYPE_VERSION   0x0300

/* Enumeration type fields */
#define ET_DEVICENAME       0x00000001L
#define ET_MEDIATYPE        0x00000002L
#define ET_DITHERMODE       0x00000004L
#define ET_RESOLUTION       0x00000008L
#define ET_CMMTYPE          0x00000010L
#define ET_CLASS            0x00000020L
#define ET_DATACOLORSPACE   0x00000040L
#define ET_CONNECTIONSPACE  0x00000080L
#define ET_SIGNATURE        0x00000100L
#define ET_PLATFORM         0x00000200L
#define ET_PROFILEFLAGS     0x00000400L
#define ET_MANUFACTURER     0x00000800L
#define ET_MODEL            0x00001000L
#define ET_ATTRIBUTES       0x00002000L
#define ET_RENDERINGINTENT  0x00004000L
#define ET_CREATOR          0x00008000L
#define ET_DEVICECLASS      0x00010000L

/* Color transform modes */
#define PROOF_MODE                  0x00000001L
#define NORMAL_MODE                 0x00000002L
#define BEST_MODE                   0x00000003L
#define ENABLE_GAMUT_CHECKING       0x00010000L
#define USE_RELATIVE_COLORIMETRIC   0x00020000L
#define FAST_TRANSLATE              0x00040000L
#if (NTDDI_VERSION >= 0x06000000)
    #define PRESERVEBLACK           0x00100000L
    #define WCS_ALWAYS              0x00200000L
    #define SEQUENTIAL_TRANSFORM    0x80800000L
#endif

/* GetPS2ColorSpaceArray() constants */
#define CSA_A       1
#define CSA_ABC     2
#define CSA_DEF     3
#define CSA_DEFG    4
#define CSA_GRAY    5
#define CSA_RGB     6
#define CSA_CMYK    7
#define CSA_Lab     8

/* CMGetInfo() constants */
#define CMM_WIN_VERSION     0
#define CMM_IDENT           1
#define CMM_DRIVER_VERSION  2
#define CMM_DLL_VERSION     3
#define CMM_VERSION         4
#define CMM_DESCRIPTION     5
#define CMM_LOGOICON        6

/* CMTranslateRGBs() constants */
#define CMS_FORWARD     0
#define CMS_BACKWARD    1

/* SetupColorMatching() constants */
#define COLOR_MATCH_VERSION 0x0200

/* Color matching flags */
#define CMS_DISABLEICM          0x00000001L
#define CMS_ENABLEPROOFING      0x00000002L
#define CMS_SETRENDERINTENT     0x00000004L
#define CMS_SETPROOFINTENT      0x00000008L
#define CMS_SETMONITORPROFILE   0x00000010L
#define CMS_SETPRINTERPROFILE   0x00000020L
#define CMS_SETTARGETPROFILE    0x00000040L
#define CMS_USEHOOK             0x00000080L
#define CMS_USEAPPLYCALLBACK    0x00000100L
#define CMS_USEDESCRIPTION      0x00000200L
#define CMS_DISABLEINTENT       0x00000400L
#define CMS_DISABLERENDERINTENT 0x00000800L
#define CMS_MONITOROVERFLOW     0x80000000L
#define CMS_PRINTEROVERFLOW     0x40000000L
#define CMS_TARGETOVERFLOW      0x20000000L

/* WcsOpenColorProfile() flags */
#if (NTDDI_VERSION >= 0x06000000)
    #define DONT_USE_EMBEDDED_WCS_PROFILES  0x00000001L
#endif

/* WcsCreateIccProfile() flags */
#if (NTDDI_VERSION >= 0x06000000)
    #define WCS_DEFAULT 0x00000000L
    #define WCS_ICCONLY 0x00010000L
#endif

/* ICC tag types */
#if (NTDDI_VERSION >= 0x06000000)
    #define WCS_EMBEDDED_TAG_SIGNATURE      'MS00'
    #define WCS_EMBEDDED_TAG_TYPE_SIGNATURE 'MS10'
#endif

/* Named profile information */
typedef struct tagNAMED_PROFILE_INFO {
    DWORD       dwFlags;
    DWORD       dwCount;
    DWORD       dwCountDevCoordinates;
    COLOR_NAME  szPrefix;
    COLOR_NAME  szSuffix;
} NAMED_PROFILE_INFO;
typedef NAMED_PROFILE_INFO  *PNAMED_PROFILE_INFO;
typedef NAMED_PROFILE_INFO  *LPNAMED_PROFILE_INFO;

/* Gray color */
struct GRAYCOLOR {
    WORD    gray;
};

/* RGB color */
struct RGBCOLOR {
    WORD    red;
    WORD    green;
    WORD    blue;
} RGBCOLOR;

/* CMYK color */
struct CMYKCOLOR {
    WORD    cyan;
    WORD    magenta;
    WORD    yellow;
    WORD    black;
};

/* XYZ color */
struct XYZCOLOR {
    WORD    X;
    WORD    Y;
    WORD    Z;
};

/* Yxy color */
struct YxyCOLOR {
    WORD    Y;
    WORD    x;
    WORD    y;
};

/* Lab color */
struct LabCOLOR {
    WORD    L;
    WORD    a;
    WORD    b;
};

/* Generic 3-channel color */
struct GENERIC3CHANNEL {
    WORD    ch1;
    WORD    ch2;
    WORD    ch3;
};

/* Named color */
struct NAMEDCOLOR {
    DWORD   dwIndex;
};

/* HiFi color */
struct HiFiCOLOR {
    BYTE    channel[MAX_COLOR_CHANNELS];
};

/* Color */
typedef union tagCOLOR {
    struct GRAYCOLOR        gray;
    struct RGBCOLOR         rgb;
    struct CMYKCOLOR        cmyk;
    struct XYZCOLOR         XYZ;
    struct YxyCOLOR         Yxy;
    struct LabCOLOR         Lab;
    struct GENERIC3CHANNEL  gen3ch;
    struct NAMEDCOLOR       named;
    struct HiFiCOLOR        hifi;
    struct {
        DWORD   reserved1;
        VOID    *reserved2;
    };
} COLOR;
typedef COLOR   *PCOLOR;
typedef COLOR   *LPCOLOR;

/* Color types */
typedef enum {
    COLOR_GRAY      = 1,
    COLOR_RGB       = 2,
    COLOR_XYZ       = 3,
    COLOR_Yxy       = 4,
    COLOR_Lab       = 5,
    COLOR_3_CHANNEL = 6,
    COLOR_CMYK      = 7,
    COLOR_5_CHANNEL = 8,
    COLOR_6_CHANNEL = 9,
    COLOR_7_CHANNEL = 10,
    COLOR_8_CHANNEL = 11,
    COLOR_NAMED     = 12
} COLORTYPE;
typedef COLORTYPE   *PCOLORTYPE;
typedef COLORTYPE   *LPCOLORTYPE;

/* Color profile types */
#if (NTDDI_VERSION >= 0x06000000)
typedef enum {
    CPT_ICC     = 0,
    CPT_DMP     = 1,
    CPT_CAMP    = 2,
    CPT_GMMP    = 3
} COLORPROFILETYPE;
typedef COLORPROFILETYPE    *PCOLORPROFILETYPE;
typedef COLORPROFILETYPE    *LPCOLORPROFILETYPE;
#endif

/* Color profile subtypes */
#if (NTDDI_VERSION >= 0x06000000)
typedef enum {
    CPST_PERCEPTUAL             = INTENT_PERCEPTUAL,
    CPST_RELATIVE_COLORIMETRIC  = INTENT_RELATIVE_COLORIMETRIC,
    CPST_SATURATION             = INTENT_SATURATION,
    CPST_ABSOLUTE_COLORIMETRIC  = INTENT_ABSOLUTE_COLORIMETRIC,
    CPST_NONE                   = 4,
    CPST_RGB_WORKING_SPACE      = 5,
    CPST_CUSTOM_WORKING_SPACE   = 6
} COLORPROFILESUBTYPE;
typedef COLORPROFILESUBTYPE *PCOLORPROFILESUBTYPE;
typedef COLORPROFILESUBTYPE *LPCOLORPROFILESUBTYPE;
#endif

/* Color data types */
#if (NTDDI_VERSION >= 0x06000000)
typedef enum {
    COLOR_BYTE                  = 1,
    COLOR_WORD                  = 2,
    COLOR_FLOAT                 = 3,
    COLOR_S2DOT13FIXED          = 4,
    COLOR_10b_R10G10B10A2       = 5,
    COLOR_10b_R10G10B10A2_XR    = 6,
    COLOR_FLOAT16               = 7
} COLORDATATYPE;
typedef COLORDATATYPE   *PCOLORDATATYPE;
typedef COLORDATATYPE   *LPCOLORDATATYPE;
#endif

/* Bitmap formats */
typedef enum {
    BM_x555RGB              = 0x0000,
    BM_x555XYZ              = 0x0101,
    BM_x555Yxy              = 0x0102,
    BM_x555Lab              = 0x0103,
    BM_x555G3CH             = 0x0104,
    BM_RGBTRIPLETS          = 0x0002,
    BM_BGRTRIPLETS          = 0x0004,
    BM_XYZTRIPLETS          = 0x0201,
    BM_YxyTRIPLETS          = 0x0202,
    BM_LabTRIPLETS          = 0x0203,
    BM_G3CHTRIPLETS         = 0x0204,
    BM_5CHANNEL             = 0x0205,
    BM_6CHANNEL             = 0x0206,
    BM_7CHANNEL             = 0x0207,
    BM_8CHANNEL             = 0x0208,
    BM_GRAY                 = 0x0209,
    BM_xRGBQUADS            = 0x0008,
    BM_xBGRQUADS            = 0x0010,
    BM_xG3CHQUADS           = 0x0304,
    BM_KYMCQUADS            = 0x0305,
    BM_CMYKQUADS            = 0x0020,
    BM_10b_RGB              = 0x0009,
    BM_10b_XYZ              = 0x0401,
    BM_10b_Yxy              = 0x0402,
    BM_10b_Lab              = 0x0403,
    BM_10b_G3CH             = 0x0404,
    BM_NAMED_INDEX          = 0x0405,
    BM_16b_RGB              = 0x000A,
    BM_16b_XYZ              = 0x0501,
    BM_16b_Yxy              = 0x0502,
    BM_16b_Lab              = 0x0503,
    BM_16b_G3CH             = 0x0504,
    BM_16b_GRAY             = 0x0505,
    BM_565RGB               = 0x0001,
    BM_32b_scRGB            = 0x0601,
    BM_32b_scARGB           = 0x0602,
    BM_S2DOT13FIXED_scRGB   = 0x0603,
    BM_S2DOT13FIXED_scARGB  = 0x0604,
    BM_R10G10B10A2          = 0x0701,
    BM_R10G10B10A2_XR       = 0x0702,
    BM_R16G16B16A16_FLOAT   = 0x0703
} BMFORMAT;
typedef BMFORMAT    *PBMFORMAT;
typedef BMFORMAT    *LPBMFORMAT;

/* Bitmap callback */
typedef BOOL (WINAPI *PBMCALLBACKFN)( ULONG, ULONG, LPARAM );
typedef PBMCALLBACKFN   LPBMCALLBACKFN;

/* Profile header */
typedef struct tagPROFILEHEADER {
    DWORD   phSize;
    DWORD   phCMMType;
    DWORD   phVersion;
    DWORD   phClass;
    DWORD   phDataColorSpace;
    DWORD   phConnectionSpace;
    DWORD   phDateTime[3];
    DWORD   phSignature;
    DWORD   phPlatform;
    DWORD   phProfileFlags;
    DWORD   phManufacturer;
    DWORD   phModel;
    DWORD   phAttributes[2];
    DWORD   phRenderingIntent;
    CIEXYZ  phIlluminant;
    DWORD   phCreator;
    BYTE    phReserved[44];
} PROFILEHEADER;
typedef PROFILEHEADER   *PPROFILEHEADER;
typedef PROFILEHEADER   *LPPROFILEHEADER;

/* Profile */
typedef struct tagPROFILE {
    DWORD   dwType;
    PVOID   pProfileData;
    DWORD   cbDataSize;
} PROFILE;
typedef PROFILE *PPROFILE;
typedef PROFILE *LPPROFILE;

/* Enumeration type */
typedef struct tagENUMTYPEA {
    DWORD   dwSize;
    DWORD   dwVersion;
    DWORD   dwFields;
    PCSTR   pDeviceName;
    DWORD   dwMediaType;
    DWORD   dwDitheringMode;
    DWORD   dwResolution[2];
    DWORD   dwCMMType;
    DWORD   dwClass;
    DWORD   dwDataColorSpace;
    DWORD   dwConnectionSpace;
    DWORD   dwSignature;
    DWORD   dwPlatform;
    DWORD   dwProfileFlags;
    DWORD   dwManufacturer;
    DWORD   dwModel;
    DWORD   dwAttributes[2];
    DWORD   dwRenderingIntent;
    DWORD   dwCreator;
    DWORD   dwDeviceClass;
} ENUMTYPEA;
typedef ENUMTYPEA   *PENUMTYPEA;
typedef ENUMTYPEA   *LPENUMTYPEA;
typedef struct tagENUMTYPEW {
    DWORD   dwSize;
    DWORD   dwVersion;
    DWORD   dwFields;
    PCWSTR  pDeviceName;
    DWORD   dwMediaType;
    DWORD   dwDitheringMode;
    DWORD   dwResolution[2];
    DWORD   dwCMMType;
    DWORD   dwClass;
    DWORD   dwDataColorSpace;
    DWORD   dwConnectionSpace;
    DWORD   dwSignature;
    DWORD   dwPlatform;
    DWORD   dwProfileFlags;
    DWORD   dwManufacturer;
    DWORD   dwModel;
    DWORD   dwAttributes[2];
    DWORD   dwRenderingIntent;
    DWORD   dwCreator;
    DWORD   dwDeviceClass;
} ENUMTYPEW;
typedef ENUMTYPEW   *PENUMTYPEW;
typedef ENUMTYPEW   *LPENUMTYPEW;
#ifdef UNICODE
typedef ENUMTYPEW   ENUMTYPE;
typedef PENUMTYPEW  PENUMTYPE;
#else
typedef ENUMTYPEA   ENUMTYPE;
typedef PENUMTYPEA  PENUMTYPE;
#endif

/* WCS profile management scopes */
#if (NTDDI_VERSION >= 0x06000000)
typedef enum {
    WCS_PROFILE_MANAGEMENT_SCOPE_SYSTEM_WIDE    = 0,
    WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER   = 1
} WCS_PROFILE_MANAGEMENT_SCOPE;
#endif

/* Color matching callback */
typedef BOOL (WINAPI *PCMSCALLBACKA)( struct _tagCOLORMATCHSETUPA *, LPARAM );
typedef BOOL (WINAPI *PCMSCALLBACKW)( struct _tagCOLORMATCHSETUPW *, LPARAM );
#ifdef UNICODE
    #define PCMSCALLBACK    PCMSCALLBACKW
#else
    #define PCMSCALLBACK    PCMSCALLBACKA
#endif

/* Color matching setup information */
typedef struct _tagCOLORMATCHSETUPA {
    DWORD           dwSize;
    DWORD           dwVersion;
    DWORD           dwFlags;
    HWND            hwndOwner;
    PCSTR           pSourceName;
    PCSTR           pDisplayName;
    PCSTR           pPrinterName;
    DWORD           dwRenderIntent;
    DWORD           dwProofingIntent;
    PWSTR           pMonitorProfile;
    DWORD           ccMonitorProfile;
    PWSTR           pPrinterProfile;
    DWORD           ccPrinterProfile;
    PSTR            pTargetProfile;
    DWORD           ccTargetProfile;
    DLGPROC         lpfnHook;
    LPARAM          lParam;
    PCMSCALLBACKA   lpfnApplyCallback;
    LPARAM          lParamApplyCallback;
} COLORMATCHSETUPA;
typedef COLORMATCHSETUPA    *PCOLORMATCHSETUPA;
typedef COLORMATCHSETUPA    *LPCOLORMATCHSETUPA;
typedef struct _tagCOLORMATCHSETUPW {
    DWORD           dwSize;
    DWORD           dwVersion;
    DWORD           dwFlags;
    HWND            hwndOwner;
    PCWSTR          pSourceName;
    PCWSTR          pDisplayName;
    PCWSTR          pPrinterName;
    DWORD           dwRenderIntent;
    DWORD           dwProofingIntent;
    PWSTR           pMonitorProfile;
    DWORD           ccMonitorProfile;
    PWSTR           pPrinterProfile;
    DWORD           ccPrinterProfile;
    PWSTR           pTargetProfile;
    DWORD           ccTargetProfile;
    DLGPROC         lpfnHook;
    LPARAM          lParam;
    PCMSCALLBACKW   lpfnApplyCallback;
    LPARAM          lParamApplyCallback;
} COLORMATCHSETUPW;
typedef COLORMATCHSETUPW    *PCOLORMATCHSETUPW;
typedef COLORMATCHSETUPW    *LPCOLORMATCHSETUPW;
#ifdef UNICODE
typedef COLORMATCHSETUPW    COLORMATCHSETUP;
typedef PCOLORMATCHSETUPW   PCOLORMATCHSETUP;
typedef LPCOLORMATCHSETUPW  LPCOLORMATCHSETUP;
#else
typedef COLORMATCHSETUPA    COLORMATCHSETUP;
typedef PCOLORMATCHSETUPA   PCOLORMATCHSETUP;
typedef LPCOLORMATCHSETUPA  LPCOLORMATCHSETUP;
#endif

/* Functions in MSCMS.DLL */
BOOL WINAPI         AssociateColorProfileWithDeviceA( PCSTR, PCSTR, PCSTR );
BOOL WINAPI         AssociateColorProfileWithDeviceW( PCWSTR, PCWSTR, PCWSTR );
BOOL WINAPI         CheckBitmapBits( HTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PBYTE, PBMCALLBACKFN, LPARAM );
BOOL WINAPI         CheckColors( HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PBYTE );
BOOL WINAPI         CloseColorProfile( HPROFILE );
BOOL WINAPI         ConvertColorNameToIndex( HPROFILE, PCOLOR_NAME, PDWORD, DWORD );
BOOL WINAPI         ConvertIndexToColorName( HPROFILE, PDWORD, PCOLOR_NAME, DWORD );
BOOL WINAPI         CreateProfileFromLogColorSpaceA( LPLOGCOLORSPACEA, PBYTE * );
BOOL WINAPI         CreateProfileFromLogColorSpaceW( LPLOGCOLORSPACEW, PBYTE * );
HTRANSFORM WINAPI   CreateColorTransformA( LPLOGCOLORSPACEA, HPROFILE, HPROFILE, DWORD );
HTRANSFORM WINAPI   CreateColorTransformW( LPLOGCOLORSPACEW, HPROFILE, HPROFILE, DWORD );
BOOL WINAPI         CreateDeviceLinkProfile( PHPROFILE, DWORD, PDWORD, DWORD, DWORD, PBYTE *, DWORD );
HTRANSFORM WINAPI   CreateMultiPlatformTransform( PHPROFILE, DWORD, PDWORD, DWORD, DWORD, DWORD );
BOOL WINAPI         DeleteColorTransform( HTRANSFORM );
BOOL WINAPI         DisassociateColorProfileFromDeviceA( PCSTR, PCSTR, PCSTR );
BOOL WINAPI         DisassociateColorProfileFromDeviceW( PCWSTR, PCWSTR, PCWSTR );
BOOL WINAPI         EnumColorProfilesA( PCSTR, PENUMTYPEA, PBYTE, PDWORD, PDWORD );
BOOL WINAPI         EnumColorProfilesW( PCWSTR, PENUMTYPEW, PBYTE, PDWORD, PDWORD );
DWORD WINAPI        GetCMMInfo( HTRANSFORM, DWORD );
BOOL WINAPI         GetColorDirectoryA( PCSTR, PSTR, PDWORD );
BOOL WINAPI         GetColorDirectoryW( PCWSTR, PWSTR, PDWORD );
BOOL WINAPI         GetColorProfileElement( HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID, PBOOL );
BOOL WINAPI         GetColorProfileElementTag( HPROFILE, DWORD, PTAGTYPE );
BOOL WINAPI         GetColorProfileFromHandle( HPROFILE, PBYTE, PDWORD );
BOOL WINAPI         GetColorProfileHeader( HPROFILE, PPROFILEHEADER );
BOOL WINAPI         GetCountColorProfileElements( HPROFILE, PDWORD );
BOOL WINAPI         GetNamedProfileInfo( HPROFILE, PNAMED_PROFILE_INFO );
BOOL WINAPI         GetPS2ColorRenderingDictionary( HPROFILE, DWORD, PBYTE, PDWORD, PBOOL );
BOOL WINAPI         GetPS2ColorRenderingIntent( HPROFILE, DWORD, PBYTE, PDWORD );
BOOL WINAPI         GetPS2ColorSpaceArray( HPROFILE, DWORD, DWORD, PBYTE, PDWORD, PBOOL );
BOOL WINAPI         GetStandardColorSpaceProfileA( PCSTR, DWORD, PSTR, PDWORD );
BOOL WINAPI         GetStandardColorSpaceProfileW( PCWSTR, DWORD, PWSTR, PDWORD );
BOOL WINAPI         InstallColorProfileA( PCSTR, PCSTR );
BOOL WINAPI         InstallColorProfileW( PCWSTR, PCWSTR );
BOOL WINAPI         IsColorProfileTagPresent( HPROFILE, TAGTYPE, PBOOL );
BOOL WINAPI         IsColorProfileValid( HPROFILE, PBOOL );
HPROFILE WINAPI     OpenColorProfileA( PPROFILE, DWORD, DWORD, DWORD );
HPROFILE WINAPI     OpenColorProfileW( PPROFILE, DWORD, DWORD, DWORD );
BOOL WINAPI         RegisterCMMA( PCSTR, DWORD, PCSTR );
BOOL WINAPI         RegisterCMMW( PCWSTR, DWORD, PCWSTR );
BOOL WINAPI         SelectCMM( DWORD );
BOOL WINAPI         SetColorProfileElement( HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID );
BOOL WINAPI         SetColorProfileElementReference( HPROFILE, TAGTYPE, TAGTYPE );
BOOL WINAPI         SetColorProfileElementSize( HPROFILE, TAGTYPE, DWORD );
BOOL WINAPI         SetColorProfileHeader( HPROFILE, PPROFILEHEADER );
BOOL WINAPI         SetStandardColorSpaceBufferA( PCSTR, DWORD, PCSTR );
BOOL WINAPI         SetStandardColorSpaceBufferW( PCWSTR, DWORD, PCWSTR );
BOOL WINAPI         TransformBitmapBits( HTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD, PBMCALLBACKFN, LPARAM );
BOOL WINAPI         TranslateColors( HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE );
BOOL WINAPI         UninstallColorProfileA( PCSTR, PCSTR, BOOL );
BOOL WINAPI         UninstallColorProfileW( PCWSTR, PCWSTR, BOOL );
BOOL WINAPI         UnregisterCMMA( PCSTR, DWORD );
BOOL WINAPI         UnregisterCMMW( PCWSTR, DWORD );
#if (NTDDI_VERSION >= 0x06000000)
BOOL WINAPI         WcsAssociateColorProfileWithDevice( WCS_PROFILE_MANAGEMENT_SCOPE, PCWSTR, PCWSTR );
BOOL WINAPI         WcsCheckColors( HTRANSFORM, DWORD, DWORD, COLORDATATYPE, DWORD, PVOID, PBYTE );
HPROFILE WINAPI     WcsCreateIccProfile( HPROFILE, DWORD );
BOOL WINAPI         WcsDisassociateColorProfileFromDevice( WCS_PROFILE_MANAGEMENT_SCOPE, PCWSTR, PCWSTR );
BOOL WINAPI         WcsEnumColorProfiles( WCS_PROFILE_MANAGEMENT_SCOPE, PENUMTYPEW, PBYTE, DWORD, PDWORD );
BOOL WINAPI         WcsEnumColorProfilesSize( WCS_PROFILE_MANAGEMENT_SCOPE, PENUMTYPEW, PDWORD );
BOOL WINAPI         WcsGetDefaultColorProfile( WCS_PROFILE_MANAGEMENT_SCOPE, PCWSTR, COLORPROFILETYPE, COLORPROFILESUBTYPE, DWORD, DWORD, LPWSTR );
BOOL WINAPI         WcsGetDefaultColorProfileSize( WCS_PROFILE_MANAGEMENT_SCOPE, PCWSTR, COLORPROFILETYPE, COLORPROFILESUBTYPE, DWORD, PDWORD );
BOOL WINAPI         WcsGetDefaultRenderingIntent( WCS_PROFILE_MANAGEMENT_SCOPE, PDWORD );
BOOL WINAPI         WcsGetUsePerUserProfiles( LPCWSTR, DWORD, PBOOL );
HPROFILE WINAPI     WcsOpenColorProfileA( PPROFILE, PPROFILE, PPROFILE, DWORD, DWORD, DWORD, DWORD );
HPROFILE WINAPI     WcsOpenColorProfileW( PPROFILE, PPROFILE, PPROFILE, DWORD, DWORD, DWORD, DWORD );
BOOL WINAPI         WcsSetDefaultColorProfile( WCS_PROFILE_MANAGEMENT_SCOPE, PCWSTR, COLORPROFILETYPE, COLORPROFILESUBTYPE, DWORD, LPCWSTR );
BOOL WINAPI         WcsSetDefaultRenderingIntent( WCS_PROFILE_MANAGEMENT_SCOPE, DWORD );
BOOL WINAPI         WcsSetUsePerUserProfiles( LPCWSTR, DWORD, BOOL );
BOOL WINAPI         WcsTranslateColors( HTRANSFORM, DWORD, DWORD, COLORDATATYPE, DWORD, PVOID, DWORD, COLORDATATYPE, DWORD, PVOID );
#endif
#if (NTDDI_VERSION >= 0x06010000)
BOOL WINAPI         WcsGetCalibrationManagementState( BOOL * );
BOOL WINAPI         WcsSetCalibrationManagementState( BOOL );
#endif

/* Functions in ICMUI.DLL */
BOOL WINAPI SetupColorMatchingA( PCOLORMATCHSETUPA );
BOOL WINAPI SetupColorMatchingW( PCOLORMATCHSETUPW );

/* Functions in ICM32.DLL */
BOOL WINAPI         CMCheckColors( HCMTRANSFORM, LPCOLOR, DWORD, COLORTYPE, LPBYTE );
BOOL WINAPI         CMCheckColorsInGamut( HCMTRANSFORM, RGBTRIPLE *, LPBYTE, UINT );
BOOL WINAPI         CMCheckRGBs( HCMTRANSFORM, LPVOID, BMFORMAT, DWORD, DWORD, DWORD, LPBYTE, PBMCALLBACKFN, LPARAM );
BOOL WINAPI         CMConvertColorNameToIndex( HPROFILE, PCOLOR_NAME, PDWORD, DWORD );
BOOL WINAPI         CMConvertIndexToColorName( HPROFILE, PDWORD, PCOLOR_NAME, DWORD );
BOOL WINAPI         CMCreateDeviceLinkProfile( PHPROFILE, DWORD, PDWORD, DWORD, DWORD, LPBYTE * );
HCMTRANSFORM WINAPI CMCreateMultiProfileTransform( PHPROFILE, DWORD, PDWORD, DWORD, DWORD );
BOOL WINAPI         CMCreateProfile( LPLOGCOLORSPACEA, LPDEVCHARACTER * );
BOOL WINAPI         CMCreateProfileW( LPLOGCOLORSPACEW, LPDEVCHARACTER * );
HCMTRANSFORM WINAPI CMCreateTransform( LPLOGCOLORSPACEA, LPDEVCHARACTER, LPDEVCHARACTER );
HCMTRANSFORM WINAPI CMCreateTransformExt( LPLOGCOLORSPACEA, LPDEVCHARACTER, LPDEVCHARACTER, DWORD );
HCMTRANSFORM WINAPI CMCreateTransformExtW( LPLOGCOLORSPACEW, LPDEVCHARACTER, LPDEVCHARACTER, DWORD );
HCMTRANSFORM WINAPI CMCreateTransformW( LPLOGCOLORSPACEW, LPDEVCHARACTER, LPDEVCHARACTER );
BOOL WINAPI         CMDeleteTransform( HCMTRANSFORM );
DWORD WINAPI        CMGetInfo( DWORD );
BOOL WINAPI         CMGetNamedProfileInfo( HPROFILE, PNAMED_PROFILE_INFO );
BOOL WINAPI         CMIsProfileValid( HPROFILE, LPBOOL );
BOOL WINAPI         CMTranslateColors( HCMTRANSFORM, LPCOLOR, DWORD, COLORTYPE, LPCOLOR, COLORTYPE );
BOOL WINAPI         CMTranslateRGB( HCMTRANSFORM, COLORREF, LPCOLORREF, DWORD );
BOOL WINAPI         CMTranslateRGBs( HCMTRANSFORM, LPVOID, BMFORMAT, DWORD, DWORD, DWORD, LPVOID, BMFORMAT, DWORD );
BOOL WINAPI         CMTranslateRGBsExt( HCMTRANSFORM, LPVOID, BMFORMAT, DWORD, DWORD, DWORD, LPVOID, BMFORMAT, DWORD, LPBMCALLBACKFN, LPARAM );

/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
    #define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceW
    #define CreateColorTransform            CreateColorTransformW
    #define CreateProfileFromLogColorSpace  CreateProfileFromLogColorSpaceW
    #define DisassociateColorProfileFromDevice  DisassociateColorProfileFromDeviceW
    #define EnumColorProfiles               EnumColorProfilesW
    #define GetColorDirectory               GetColorDirectoryW
    #define GetStandardColorSpaceProfile    GetStandardColorSpaceProfileW
    #define InstallColorProfile             InstallColorProfileW
    #define OpenColorProfile                OpenColorProfileW
    #define RegisterCMM                     RegisterCMMW
    #define SetStandardColorSpaceProfile    SetStandardColorSpaceProfileW
    #define SetupColorMatching              SetupColorMatchingW
    #define UninstallColorProfile           UninstallColorProfileW
    #define UnregisterCMM                   UnregisterCMMW
    #if (NTDDI_VERSION >= 0x06000000)
        #define WcsOpenColorProfile         WcsOpenColorProfileW
    #endif
#else
    #define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceA
    #define CreateColorTransform            CreateColorTransformA
    #define CreateProfileFromLogColorSpace  CreateProfileFromLogColorSpaceA
    #define DisassociateColorProfileFromDevice  DisassociateColorProfileFromDeviceA
    #define EnumColorProfiles               EnumColorProfilesA
    #define GetColorDirectory               GetColorDirectoryA
    #define GetStandardColorSpaceProfile    GetStandardColorSpaceProfileA
    #define InstallColorProfile             InstallColorProfileA
    #define OpenColorProfile                OpenColorProfileA
    #define RegisterCMM                     RegisterCMMA
    #define SetStandardColorSpaceProfile    SetStandardColorSpaceProfileA
    #define SetupColorMatching              SetupColorMatchingA
    #define UninstallColorProfile           UninstallColorProfileA
    #define UnregisterCMM                   UnregisterCMMA
    #if (NTDDI_VERSION >= 0x06000000)
        #define WcsOpenColorProfile         WcsOpenColorProfileA
    #endif
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* _ICM_H_ */
