windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/filtapi.h
2020-09-26 16:20:57 +08:00

301 lines
9.5 KiB
C

/*----------------------------------------------------------------------------
%%File: FILTAPI.H
%%Unit: FILTER32
%%Contact: rlittle@microsoft.com
This header is distributed as part of the 32 bit Filter SDK.
Changes to this header file should be sent to rlittle@microsoft.com
or doneill@microsoft.com
Revision History: (Current=1.03)
1/12/96 Created
1/23/96 Renamed grt values and synchronized with grfSupport values
1/24/96 Extra SetFilterPref arguments (smueller)
1/25/96 Correct packing (rlittle)
----------------------------------------------------------------------------*/
#ifndef FILTAPI_H
#define FILTAPI_H
// Definitions
#ifdef MAC
#include "macos\types.h"
#include "macos\files.h"
// Mac type equivalents
typedef Handle HANDLE;
typedef Handle HMETAFILE;
typedef Handle HENHMETAFILE;
typedef Rect RECT;
typedef long HDC; // unused
typedef short FH;
#endif // MAC
#ifdef WIN16
typedef HANDLE HENHMETAFILE; // win16 doesn't support enhanced metafiles
typedef HFILE FH;
#endif // WIN16
#ifdef WIN32
typedef HANDLE FH;
#endif // WIN32
// useful macros (mainly for Mac; windows.h defines most of these, so this
// will just be a failsafe.
typedef unsigned short ushort;
typedef unsigned long ulong;
typedef unsigned char uchar;
typedef int BOOL;
// these are the graphics definitions for Version 2 & Version 3
#ifdef WIN16
#define cchMaxGrName 124 // max file path length for graphics filter
#else // !WIN16
#define cchMaxGrName 260 // max file path length for graphics filter
#endif
#define cchMaxGrExt 4 // chars + end-of-string mark ('\0')
#pragma pack(2)
typedef struct _FILESPEC {
union
{
struct
{
ushort slippery: 1; // True if file may disappear.
ushort write : 1; // True if open for write.
ushort unnamed: 1; // True if unnamed.
ushort linked : 1; // Linked to an FS FCB.
ushort mark : 1; // Generic mark bit.
ushort unused : 11;
};
ushort wFlags;
};
union
{
char rgchExt[cchMaxGrExt]; // file extension, not used on MacPPC
FH hfEmbed; // embedded file handle
};
ushort wUnused;
#ifdef MACPPC
FSSpec fsSpec;
#else
char szName[cchMaxGrName]; // fully qualified path
#endif // MACPPC
ulong dcbFile; // file position in hfEmbed
/*** END VERSION 2 FIELDS
***
*** Fields above this point are IMMUTABLE. They are guaranteed
*** to be in the above format for backwards compatibility with
*** existing Version 2 filters.
***/
ulong dcbFileHigh;
} FILESPEC;
// NOTE: the client application will arbitrarily decide which type to
// send if the filter returns multiple support types
#define GrfSupportFromGrt(grt) (ulong)(1 << ((grt) + 15))
#define grfSupportEMF GrfSupportFromGrt(grtEMF) // 0x00010000
#define grfSupportWMF GrfSupportFromGrt(grtWMF) // 0x00020000
#define grfSupportPNG GrfSupportFromGrt(grtPNG) // 0x00040000
#define grfSupportPICT GrfSupportFromGrt(grtPICT) // 0x00080000
#define grfSupportJFIF GrfSupportFromGrt(grtJFIF) // 0x00100000
// NOTE: grfImport/grfExport are not mutually exclusive. They can be
// OR'ed together for a filter that does both. Values 2 and 4 cannot be
// used as they would be indistinguishable from version 2 return values.
#define grfImport 0x00000008
#define grfExport 0x00000010
// Version 2 support:
typedef struct _GRPI { // GRaPhic Interface
HMETAFILE hmf; // metafile
RECT bbox; // tightly bounds the image (in metafile units)
ushort inch; // metafile units per inch
} GRPI;
// Version 3 support:
#define grtEMF 0x01
#define grtWMF 0x02
#define grtPNG 0x03
#define grtPICT 0x04
#define grtJFIF 0x05
// NOTE:
// if fPointer is fTrue, then the information is represented as
// a pointer to data rather than a handle to data. This is not
// valid for HMETAFILE and HENHMETAFILE (as there is no pointer
// equivalent)
typedef struct _GRPIX { // GRaPhic Interface Extended
ushort cbGrpix; // size of this structure
uchar grt; // GRaphic Type
ulong cbData; // number of bytes in the graphic
BOOL fPointer;
union
{
HMETAFILE hmf; // metafile
HENHMETAFILE hemf; // enhanced metafile
HANDLE hPng; // handle to PNG bits
void *pPng; // pointer to PNG bits (fPointer = fTrue)
HANDLE hPict; // handle to MacPict
void *pPict; // pointer to MacPict (fPointer = fTrue)
HANDLE hJpeg; // handle to JPEG/JFIF
void *pJpeg; // pointer to JPEG/JFIF (fPointer = fTrue)
};
RECT bbox; // tightly bounds the image (in metafile units)
ulong inch; // metafile units per inch
} GRPIX;
#ifndef WIN16
// Update the percent complete (if return value is fTrue, then
// abort the conversion) lPct is the percent
// pfnPctComplete MUST be called frequently (every 2 or 3 percent)
typedef BOOL (*PFN_PCTCOMPLETE)(long lPct, void *pvData);
#if defined(RISC) // mips,alpha,ibm ppc,mac ppc
#define FILTAPI _cdecl
#else
#define FILTAPI PASCAL
#endif
// NOTE: For version 3 handling, pgrpi should be cast as
// pgrpix = (GRPIX *)pgrpi
typedef int (FILTAPI *PFNGetFilterInfo)(short, char *, HANDLE *, ulong);
typedef void (FILTAPI *PFNGetFilterPref)(HANDLE, HANDLE, HANDLE, ushort);
typedef int (FILTAPI *PFNExportGr)(FILESPEC *, GRPI *, HANDLE);
typedef int (FILTAPI *PFNExportEmbeddedGr)(FILESPEC *, GRPI *, HANDLE, ulong);
typedef int (FILTAPI *PFNImportGr)(HDC, FILESPEC *, GRPI *, HANDLE);
typedef int (FILTAPI *PFNImportEmbeddedGr)(HDC, FILESPEC *, GRPI *, HANDLE, ulong, char *);
typedef int (FILTAPI *PFNRegisterPercentCallback)(HANDLE, PFN_PCTCOMPLETE, void *);
typedef int (FILTAPI *PFNSetFilterPref)(HANDLE, char *, void *, ulong, ulong);
int FILTAPI GetFilterInfo(short wVersion, char *pIni,
HANDLE *phPrefMem, ulong lFlags);
void FILTAPI GetFilterPref(HANDLE hInst, HANDLE hWnd, HANDLE hPrefMem,
ushort wFlags);
int FILTAPI ExportGr(FILESPEC *pFileSpec, GRPI *pgrpi, HANDLE hPrefMem);
int FILTAPI ExportEmbeddedGr(FILESPEC *pFileSpec, GRPI *pgrpi, HANDLE hPrefMem, ulong *pdwSize);
int FILTAPI ImportGr(HDC hdcPrint, FILESPEC *pFileSpec, GRPI *pgrpi,
HANDLE hPrefMem);
int FILTAPI ImportEmbeddedGr(HDC hdcPrint, FILESPEC *pFileSpec, GRPI *pgrpi,
HANDLE hPrefMem, ulong ulSize, char *szMetaFileName);
int FILTAPI RegisterPercentCallback(HANDLE hPrefMem, PFN_PCTCOMPLETE pfnPctComplete, void *pvData);
int FILTAPI SetFilterPref(HANDLE hPrefMem, char *szOption, void *pvValue, ulong dwSize, ulong dwType);
#endif // WIN16
// Definitions of ordinal values for entry points
// backwards compatibility only
#define ordGetFilterInfo ((DWORD)1)
#define ordImportGr ((DWORD)2)
// SetFilterPref data types
// these exactly parallel a subset of Win32 registry value data types
#if !defined(REG_NONE) || !defined(REG_SZ) || !defined(REG_BINARY) || !defined(REG_DWORD)
#define REG_NONE ( 0 ) // No value type
#define REG_SZ ( 1 ) // '\0' terminated string
#define REG_BINARY ( 3 ) // Free form binary
#define REG_DWORD ( 4 ) // 32-bit number
#endif
// ERROR RETURN VALUES
#define IE_NO_ERROR 0
#define IE_INTERNAL_ERROR (-1)
#define IE_BASE 0x14B4
#define IE(err) (IE_BASE + err)
// IMPORT/EXPORT ERRORS
#define IE_NOT_MY_FILE IE(0x0001) // generic not my file error
#define IE_TOO_BIG IE(0x0002) // bitmap or pict too big error
#define IE_DUMB_BITMAP IE(0x0003) // bitmap all white
#define IE_BAD_VCHAR IE(0x0004) // bad vchar in ImportString
#define IE_BAD_TOKEN IE(0x0005) // illegal wp token
#define IE_NO_VERIFY IE(0x0006) // failed to verify imported story
#define IE_UNKNOWN_TYPE IE(0x0007) // unknown file type
#define IE_NOT_WP_FILE IE(0x0008) // not a wp file
#define IE_BAD_FILE_DATA IE(0x0009) // current file data is bad
#define IE_IMPORT_ABORT IE(0x000A) // import abort alert
#define IE_MEM_FULL IE(0x000B) // ran out of memory during import
#define IE_MSNG_FONTS IE(0x000C) // system font not found
#define IE_META_TOO_BIG IE(0x000D) // metafile too big
#define IE_MEM_FAIL IE(0x000F) // couldn't lock memory during import
#define IE_NO_FILTER IE(0x0012) // expected filter not found
#define IE_UNSUPP_COMPR IE(0x0029) // unsupported compress style
#define IE_UNSUPP_VERSION IE(0x002A) // unsupported file version
#define IE_UNSUPP_COLOR IE(0x002B) // unsupported color style
#define IE_ERROR_NOMSG IE(0x0037) // dialog box cancel
#define IE_FILE_NOT_FOUND IE(0x003C) // file not found
#define IE_BUG IE(0x0051)
#define IE_BAD_METAFILE IE(0x0053) // inconsistent metafile data
#define IE_BAD_METAFILE2 0xCCCC // inconsistent metafile data
#define IE_BAD_PARAM IE(0x0100) // bad parameter passed by client
#define IE_UNSUPP_FORMAT IE(0x0101) // cannot provide/accept format
#define FA_DISK_ERROR 7015
// values for WPG-specific PRF fields (for GetFilterPref)
// backwards compatibility only
#define bBGIni 0 // do what the mstxtcnv.ini file says
#define bBGDiscard 1 // discard the background
#define bBGKeep 2 // keep the background
#define bCCNone 0
#define bCCOutline 1 // convert black to black, all others to white
#define bCCBlackWhite 2 // convert white to white, all others to black
#define bCCInvert 3 // invert all colours, except black and white
#define bCCOutline6 4 // true outline
#define bCCSilhouette 5 // everything to black
#define bCCInvert6 6 // invert all colours, including black<->white
#define bMRNone 0
#define bMRHorizontal 1 // flip image horizontally, across y-axis
#define bMRVertical 2 // flip image vertically, across x-axis
typedef struct _PRF
{
uchar fSilent;
uchar bBackground;
uchar bColorChange;
uchar bMirror; // formerly fMirror
unsigned dgRotate;
} PRF;
#pragma pack()
#endif // !FILTAPI_H