|
|
/****************************Module*Header******************************\ * Module Name: ICMPRIV.H * * Module Descripton: Internal data structures and constants for ICM * * Warnings: * * Issues: * * Created: 8 January 1996 * Author: Srinivasan Chandrasekar [srinivac] * * Copyright (c) Microsoft Corporation. All rights reserved. \***********************************************************************/
#ifndef _ICMPRIV_H_ #define _ICMPRIV_H_
#include "icm.h" // include external stuff first
#ifdef __cplusplus extern "C" { #endif
// // External (but OS internal) functional declarations //
BOOL InternalGetPS2ColorSpaceArray (PBYTE, DWORD, DWORD, PBYTE, PDWORD, PBOOL); BOOL InternalGetPS2ColorRenderingIntent(PBYTE, DWORD, PBYTE, PDWORD); BOOL InternalGetPS2ColorRenderingDictionary(PBYTE, DWORD, PBYTE, PDWORD, PBOOL); BOOL InternalGetPS2PreviewCRD(PBYTE, PBYTE, DWORD, PBYTE, PDWORD, PBOOL); BOOL InternalGetPS2CSAFromLCS(LPLOGCOLORSPACE, PBYTE, PDWORD, PBOOL); BOOL InternalGetDeviceConfig(LPCTSTR,DWORD,DWORD,PVOID,PDWORD); BOOL InternalSetDeviceConfig(LPCTSTR,DWORD,DWORD,PVOID,DWORD);
// // Function ID for InternalGet/SetDeviceConfig //
#define MSCMS_PROFILE_ENUM_MODE 1
#if !defined(_GDI32_) // not include from here if gdi32.
// // Useful macros //
#define ABS(x) ((x) > 0 ? (x) : -(x)) #define DWORD_ALIGN(x) (((x) + 3) & ~3)
#ifdef LITTLE_ENDIAN #define FIX_ENDIAN(x) (((x) & 0xff000000) >> 24 | \ ((x) & 0xff0000) >> 8 | \ ((x) & 0xff00) << 8 | \ ((x) & 0xff) << 24 )
#define FIX_ENDIAN16(x) (((x) & 0xff00) >> 8 | ((x) & 0xff) << 8) #else #define FIX_ENDIAN(x) (x) #define FIX_ENDIAN16(x) (x) #endif
#if !defined(FROM_PS) // not include from here if postscript driver.
// // MSCMS Internal definition //
typedef struct tagTAGDATA { TAGTYPE tagType; DWORD dwOffset; DWORD cbSize; } TAGDATA; typedef TAGDATA *PTAGDATA;
// // ICM supports the following objects: // 1. Profile object: This is created when an application requsts a handle // to a profile. // 2. Color transform object: This is created when an application creates // a color transform. // 3. CMM object: This is created when ICM loads a CMM into memory to // perform color matching. //
typedef enum { OBJ_PROFILE = 'PRFL', OBJ_TRANSFORM = 'XFRM', OBJ_CMM = ' CMM', } OBJECTTYPE;
typedef struct tagOBJHEAD { OBJECTTYPE objType; DWORD dwUseCount; } OBJHEAD; typedef OBJHEAD *POBJHEAD;
// // Profile object: // Memory for profile objects is allocated from ICM's per process heap. // These objects use handles from ICM's per process handle table. //
typedef struct tagPROFOBJ { OBJHEAD objHdr; // common object header info DWORD dwType; // type (from profile structure) PVOID pProfileData; // data (from profile structure) DWORD cbDataSize; // size of data (from profile structure) DWORD dwFlags; // miscellaneous flags HANDLE hFile; // handle to open profile HANDLE hMap; // handle to profile mapping DWORD dwMapSize; // size of the file mapping object PBYTE pView; // pointer to mapped view of profile } PROFOBJ; typedef PROFOBJ *PPROFOBJ;
// // Flags for ((PPROFOBJ)0)->dwFlags //
#define MEMORY_MAPPED 1 // memory mapped profile #define PROFILE_TEMP 2 // temporary profile has been created #define READWRITE_ACCESS 4 // if this bit is set, app has read & write // access to profile, else it has only read // read access.
// // Transform returned by CMM //
typedef HANDLE HCMTRANSFORM;
// // For internal use, compiler doesn't accept PBYTE* below //
typedef PBYTE* PPBYTE;
// // CMM function calltable //
typedef struct tagCMMFNS {
// // Required functions //
DWORD (WINAPI *pCMGetInfo)(DWORD); HCMTRANSFORM (WINAPI *pCMCreateTransform)(LPLOGCOLORSPACE, PVOID, PVOID); HCMTRANSFORM (WINAPI *pCMCreateTransformExt)(LPLOGCOLORSPACE, PVOID, PVOID, DWORD); BOOL (WINAPI *pCMDeleteTransform)(HCMTRANSFORM); BOOL (WINAPI *pCMTranslateRGBs)(HCMTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD); BOOL (WINAPI *pCMTranslateRGBsExt)(HCMTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD, PBMCALLBACKFN, LPARAM); BOOL (WINAPI *pCMCheckRGBs)(HCMTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PBYTE, PBMCALLBACKFN, LPARAM); HCMTRANSFORM (WINAPI *pCMCreateMultiProfileTransform)(PHPROFILE, DWORD, PDWORD, DWORD, DWORD); BOOL (WINAPI *pCMTranslateColors)(HCMTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE); BOOL (WINAPI *pCMCheckColors)(HCMTRANSFORM, PCOLOR, DWORD, COLORTYPE, PBYTE); // // Optional functions //
BOOL (WINAPI *pCMCreateProfile)(LPLOGCOLORSPACE, PPBYTE); BOOL (WINAPI *pCMGetNamedProfileInfo)(HPROFILE, PNAMED_PROFILE_INFO); BOOL (WINAPI *pCMConvertColorNameToIndex)(HPROFILE, LPCOLOR_NAME, LPDWORD, DWORD); BOOL (WINAPI *pCMConvertIndexToColorName)(HPROFILE, LPDWORD, LPCOLOR_NAME, DWORD); BOOL (WINAPI *pCMCreateDeviceLinkProfile)(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, PPBYTE); BOOL (WINAPI *pCMIsProfileValid)(HPROFILE, PBOOL); BOOL (WINAPI *pCMGetPS2ColorSpaceArray)(HPROFILE, DWORD, DWORD, PBYTE, PDWORD, PBOOL); BOOL (WINAPI *pCMGetPS2ColorRenderingIntent)(HPROFILE, DWORD, PBYTE, PDWORD); BOOL (WINAPI *pCMGetPS2ColorRenderingDictionary)(HPROFILE, DWORD, PBYTE, PDWORD, PBOOL); } CMMFNS; typedef CMMFNS *PCMMFNS;
// // CMM object: // Memory for CMM objects is allocated from ICM's per process heap. // They are maintained in a linked list. //
typedef struct tagCMMOBJ { OBJHEAD objHdr; DWORD dwFlags; // miscellaneous flags DWORD dwCMMID; // ICC identifier DWORD dwTaskID; // process ID of current task HINSTANCE hCMM; // handle to instance of CMM dll CMMFNS fns; // function calltable struct tagCMMOBJ* pNext; // pointer to next object } CMMOBJ; typedef CMMOBJ *PCMMOBJ;
// // dwFlags for CMMOBJ //
#define CMM_DONT_USE_PS2_FNS 0x00001
// // Color transform object //
typedef struct tagTRANSFORMOBJ { OBJHEAD objHdr; PCMMOBJ pCMMObj; // pointer to CMM object HCMTRANSFORM hcmxform; // transform returned by CMM } TRANSFORMOBJ; typedef TRANSFORMOBJ *PTRANSFORMOBJ;
// // Parameter to InternalHandleColorProfile //
typedef enum { ADDPROFILES, REMOVEPROFILES, ENUMPROFILES, } PROFILEOP;
// // CMM returned transform should be larger than this value //
#define TRANSFORM_ERROR (HTRANSFORM)255
#define PROFILE_SIGNATURE 'psca'
#define HEADER(pProfObj) ((PPROFILEHEADER)pProfObj->pView) #define VIEW(pProfObj) (pProfObj->pView) #define PROFILE_SIZE(pProfObj) (FIX_ENDIAN(HEADER(pProfObj)->phSize)) #define TAG_COUNT(pProfObj) (*((DWORD *)(VIEW(pProfObj) + \ sizeof(PROFILEHEADER)))) #define TAG_DATA(pProfObj) ((PTAGDATA)(VIEW(pProfObj) + \ sizeof(PROFILEHEADER) + sizeof(DWORD)))
#define MAGIC 'ICM ' #define PTRTOHDL(x) ((HANDLE)((ULONG_PTR)(x) ^ MAGIC)) #define HDLTOPTR(x) ((ULONG_PTR)(x) ^ MAGIC)
PVOID MemAlloc(DWORD); PVOID MemReAlloc(PVOID, DWORD); VOID MemFree(PVOID); VOID MyCopyMemory(PBYTE, PBYTE, DWORD); PVOID AllocateHeapObject(OBJECTTYPE); VOID FreeHeapObject(HANDLE); BOOL ValidHandle(HANDLE, OBJECTTYPE); PCMMOBJ GetColorMatchingModule(DWORD); BOOL ValidColorMatchingModule(DWORD,PTSTR); PCMMOBJ GetPreferredCMM(); VOID ReleaseColorMatchingModule(PCMMOBJ); BOOL ValidProfile(PPROFOBJ); BOOL ConvertToAnsi(PCWSTR, PSTR*, BOOL); BOOL ConvertToUnicode(PCSTR, PWSTR*, BOOL); PTSTR GetFilenameFromPath(PTSTR);
// // For use with the new Device Settings tag //
typedef struct _SETTINGS { DWORD dwSettingType; // 'rsln', 'mdia' etc. DWORD dwSizePerValue; // number of bytes per value DWORD nValues; // number of values DWORD Value[1]; // array of value entries } SETTINGS, *PSETTINGS;
typedef struct _SETTINGCOMBOS { DWORD dwSize; // size of this structure, including sub structures DWORD nSettings; // number of setting structures SETTINGS Settings[1]; // array of setting entries } SETTINGCOMBOS, *PSETTINGCOMBOS;
typedef struct _PERPLATFORMENTRY { DWORD PlatformID; // platform signature ('msft', 'appl' etc.) DWORD dwSize; // size of this structure, including sub structures DWORD nSettingCombos; // number of setting combo structures SETTINGCOMBOS SettingCombos[1]; // array of setting combos entries } PLATFORMENTRY, *PPLATFORMENTRY;
typedef struct _DEVICESETTINGS { DWORD dwTagID; // 'devs' DWORD dwReserved; // must be 0 DWORD nPlatforms; // number of platform structures PLATFORMENTRY PlatformEntry[1]; // array of platform entries } DEVICESETTINGS, *PDEVICESETTINGS;
#endif // ifndef FROM_PS
#endif // ifndef _GDI32_
#ifdef __cplusplus } #endif
#endif // ifndef _ICMPRIV_H_
|