301 lines
9.5 KiB
C
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
|
||
|
|