text: #ifndef ICM_H
  #define ICM_H
  #include "windows.h"
  #include "icc.h"
  #include "icc_i386.h"
  
  #define CMS_GET_VERSION     0x00000000
  #define CMS_GET_IDENT       0x00000001
  #define CMS_GET_DRIVER_LEVEL 0x00000002
  #define CMS_GET_RESERVED    0xFFFFFFFC
  
  #define CMS_LEVEL_1         0x00000001
  #define CMS_LEVEL_2         0x00000002
  #define CMS_LEVEL_3         0x00000004
  #define CMS_LEVEL_RESERVED  0xFFFFFFFC
  
  
  
  #define CMS_FORWARD         0x00000000
  #define CMS_BACKWARD        0x00000001
  
  #define CMS_X555WORD        0x00000000
  #define CMS_565WORD         0x00000001
  #define CMS_RGBTRIPLETS     0x00000002
  #define CMS_BGRTRIPLETS     0x00000004
  #define CMS_XRGBQUADS       0x00000008
  #define CMS_XBGRQUADS       0x00000010
  #define CMS_QUADS           0x00000020
  
  #ifndef ICMDLL
  #define LCS_CALIBRATED_RGB  0x00000000
  #define LCS_DEVICE_RGB      0x00000001
  #define LCS_DEVICE_CMYK     0x00000002
  
  #define LCS_GM_DEFAULT      0x00000000
  #define LCS_GM_BUSINESS     0x00000001
  #define LCS_GM_GRAPHICS     0x00000002
  #define LCS_GM_IMAGES       0x00000004   
  #define LCS_GM_ABSOLUTE     0x0000FFFF
  #endif
  
  // Use printer colors       == 0
  // Change all RGBs          == CM_USE_ICM;
  // Select downloaded CRD    == CM_USE_CS | CM_USE_CRD
  // Download/select CRD      == CM_USE_CS | CM_USE_CRD | CM_SEND_CRD
  // Use Sony                 == CM_USE_CS
  #define CM_USE_CS           0x00000001
  #define CM_USE_CRD          0x00000002
  #define CM_SEND_CRD         0x00000004
  #define CM_USE_ICM          0x00000008
  #define CM_CMYK_IN          0x00000010
  #define CM_CMYK_DIB_IN      0x00000020
  #define CM_CMYK_OUT         0x00000040
  #define CM_CMYK       CM_CMYK_IN | CM_CMYK_DIB_IN | CM_CMYK_OUT
  
  
  typedef HANDLE      HCOLORSPACE;
  typedef DWORD       HCTMTRANSFORM;
  
  // SRGB98
  #define  REVCURVE_RATIO         1
  
  /*  Logical Color Space Structure */
  
  #ifndef ICMDLL
  typedef struct tagLOGCOLORSPACE {
  DWORD lcsSignature;
  DWORD lcsVersion;
  DWORD lcsSize;
  DWORD lcsCSType;
  DWORD lcsGamutMatch;
  CIEXYZTRIPLE lcsEndpoints;
  DWORD lcsGammaRed;
  DWORD lcsGammaGreen;
  DWORD lcsGammaBlue;
  char    lcsFilename[MAX_PATH];
  } LOGCOLORSPACE;
  typedef LOGCOLORSPACE FAR *LPLOGCOLORSPACE;
  #endif
  
  typedef struct tagICMINFO {
     LOGCOLORSPACE   lcsSource;  // source image colorspace
     HCTMTRANSFORM   hICMT;      // Handle to the associated transform
          char            lcsDestFilename[256];
          char            lcsTargetFilename[256];
          LPSTR           lppd;       // Used to find the buffered bitmap.
                                      // Fix bug 195632. jjia  2/20/97.
  } ICMINFO , FAR *LPICMINFO;
  
  
  typedef enum {CS_DEVICE_RGB = 0, CS_DEVICE_CMYK,
           CS_CALIBRATED_RGB, CS_SONY_TRINITRON } CSPACESET;
  
  
  #ifndef ICMDLL
  BOOL FAR PASCAL EnableICM(HDC, BOOL);
  HANDLE FAR PASCAL LoadImageColorMatcher(LPSTR);
  BOOL FAR PASCAL FreeImageColorMatcher(HANDLE);
  int FAR PASCAL EnumColorProfiles(HDC,FARPROC,LPARAM);
  BOOL FAR PASCAL CheckColorsInGamut(HDC,LPVOID,LPVOID,DWORD);
  HANDLE FAR PASCAL GetColorSpace(HDC);
  BOOL FAR PASCAL GetLogColorSpace(HCOLORSPACE,LPVOID,DWORD);
  HCOLORSPACE FAR PASCAL CreateColorSpace(LPLOGCOLORSPACE);
  BOOL FAR PASCAL SetColorSpace(HDC,HCOLORSPACE);
  BOOL FAR PASCAL DeleteColorSpace(HCOLORSPACE);
  BOOL FAR PASCAL GetColorProfile(HDC,LPSTR,WORD);
  BOOL FAR PASCAL SetColorProfile(HDC,LPSTR);
  BOOL FAR PASCAL GetDeviceGammaRamp(HDC,LPVOID);
  BOOL FAR PASCAL SetDeviceGammaRamp(HDC,LPVOID);
  BOOL FAR PASCAL ColorMatchToTarget(HDC,HDC,WORD);
  #endif
  
  #define CS_ENABLE       1
  #define CS_DISABLE      2
  #define CS_DELETE_TRANSFORM 3
  
  DWORD _loadds FAR PASCAL CMGetInfo(DWORD dwInfo);
  
  HCTMTRANSFORM _loadds      FAR PASCAL CMCreateTransform(LPLOGCOLORSPACE lpCS, 
                    LPSTR lpDevCh, LPSTR lpTargetDevCh);
  
  BOOL _loadds    FAR PASCAL  CMDeleteTransform(HCTMTRANSFORM hTransform);
  
  BOOL _loadds    FAR PASCAL  CMTranslateRGB(HCTMTRANSFORM hTransform,RGBQUAD RGBQuad,
                    LPVOID lpResult, DWORD dwFlags);
  
  BOOL _loadds    FAR PASCAL  CMTranslateRGBs(HCTMTRANSFORM hTransform, 
                     LPVOID    lpSrc, DWORD dwSrcFlags,
                       DWORD nSrcWidth, DWORD nSrcHeight, DWORD nSrcStride,
                     LPVOID lpDest, DWORD dwDestFlags, DWORD dwFlags);
  
  BOOL _loadds    FAR PASCAL   CMCheckColorsInGamut(HCTMTRANSFORM hTransform, 
                     LPVOID   lpSrc,
                     LPVOID lpDest, DWORD dwCount);
  BOOL _loadds    FAR PASCAL   CMGetPS2ColorSpaceArray(
                                                   LPSTR       lpProfileName,
                                                   DWORD       InputIntent,
                                                   WORD        InpDrvClrSp,
                                                   MEMPTR      lpBuffer, 
                                                   LPDWORD     lpcbSize,
                                                   BOOL        AllowBinary);
  
  BOOL _loadds    FAR PASCAL   CMGetPS2ColorRenderingDictionary(
                                                   LPSTR       lpProfileName,
                                                   DWORD       Intent, 
                                                   MEMPTR      lpMem, 
                                                   LPDWORD     lpcbSize,
                                                   BOOL        AllowBinary);
  
  BOOL _loadds    FAR PASCAL  CMGetPS2ColorRenderingIntent(
                                                   LPSTR       lpProfileName,
                                                   DWORD       Intent,
                                                   MEMPTR      lpMem,
                                                   LPDWORD     lpcbSize);
  
  
  HCTMTRANSFORM _loadds      FAR PASCAL ICMCreateTransform(LPLOGCOLORSPACE lpCS, 
                    LPSTR lpDevCh, LPSTR lpTargetDevCh);
  
  BOOL _loadds    FAR PASCAL  ICMDeleteTransform(HCTMTRANSFORM hTransform);
  
  BOOL _loadds    FAR PASCAL  ICMTranslateRGB(HCTMTRANSFORM hTransform, RGBQUAD RGBQuad,
                    LPVOID lpResult, DWORD dwFlags);
  
  BOOL _loadds    FAR PASCAL  ICMTranslateRGBs(HCTMTRANSFORM hTransform, 
                     LPVOID    lpSrc, DWORD dwSrcFlags, 
                     DWORD nSrcWidth, DWORD nSrcHeight, DWORD nSrcStride,
                     LPVOID lpDest, DWORD dwDestFlags, DWORD dwFlags);
  
  BOOL _loadds    FAR PASCAL   ICMCheckColorsInGamut(HCTMTRANSFORM hTransform, 
                     LPVOID   lpSrc,
                     LPVOID lpDest, DWORD dwCount);
  // ALWAYS_ICM
  HCTMTRANSFORM _loadds FAR PASCAL CreateDefTransform (LPVOID lppd);
  BOOL _loadds FAR PASCAL DeleteDefTransform (HCTMTRANSFORM hTransform);
  #endif
  
  