windows-nt/Source/XPSP1/NT/public/internal/windows/inc/icmpriv.h

303 lines
9.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/****************************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_