diff options
Diffstat (limited to 'public/oak/inc/winddi.h')
-rw-r--r-- | public/oak/inc/winddi.h | 2539 |
1 files changed, 2539 insertions, 0 deletions
diff --git a/public/oak/inc/winddi.h b/public/oak/inc/winddi.h new file mode 100644 index 000000000..a0f7db5b3 --- /dev/null +++ b/public/oak/inc/winddi.h @@ -0,0 +1,2539 @@ +/*++ + +Copyright (c) 1985-1995, Microsoft Corporation + +Module Name: + + winddi.h + +Abstract: + + Private entry points, defines and types for Windows NT GDI device + driver interface. + +--*/ + +#ifndef _WINDDI_ +#define _WINDDI_ + +#include <ddrawint.h> + +// +// drivers and other components that include this should NOT include +// windows.h They should be system conponents that only use GDI internals +// and therefore only include wingdi.h +// + +typedef ptrdiff_t PTRDIFF; +typedef PTRDIFF *PPTRDIFF; +typedef LONG FIX; +typedef FIX *PFIX; +typedef ULONG ROP4; +typedef ULONG MIX; + +typedef ULONG HGLYPH; +typedef HGLYPH *PHGLYPH; +#define HGLYPH_INVALID ((HGLYPH)-1) + +typedef ULONG IDENT; + +// +// handles for font file and font context objects +// + +typedef ULONG HFF; +typedef ULONG HFC; +#define HFF_INVALID ((HFF) 0) +#define HFC_INVALID ((HFC) 0) + +#define FD_ERROR 0xFFFFFFFF +#define DDI_ERROR 0xFFFFFFFF + +typedef struct _POINTE /* pte */ +{ + FLOAT x; + FLOAT y; +} POINTE, *PPOINTE; + +typedef union _FLOAT_LONG +{ + FLOAT e; + LONG l; +} FLOAT_LONG, *PFLOAT_LONG; + +typedef struct _POINTFIX +{ + FIX x; + FIX y; +} POINTFIX, *PPOINTFIX; + +typedef struct _RECTFX +{ + FIX xLeft; + FIX yTop; + FIX xRight; + FIX yBottom; +} RECTFX, *PRECTFX; + + +DECLARE_HANDLE(HBM); +DECLARE_HANDLE(HDEV); +DECLARE_HANDLE(HSURF); +DECLARE_HANDLE(DHSURF); +DECLARE_HANDLE(DHPDEV); +DECLARE_HANDLE(HDRVOBJ); + +#define LTOFX(x) ((x)<<4) + +#define FXTOL(x) ((x)>>4) +#define FXTOLFLOOR(x) ((x)>>4) +#define FXTOLCEILING(x) ((x + 0x0F)>>4) +#define FXTOLROUND(x) ((((x) >> 3) + 1) >> 1) + +// context information + +typedef struct _FD_XFORM { + FLOAT eXX; + FLOAT eXY; + FLOAT eYX; + FLOAT eYY; +} FD_XFORM, *PFD_XFORM; + + + +typedef struct _FD_DEVICEMETRICS { // devm + FLONG flRealizedType; + POINTE pteBase; + POINTE pteSide; + LONG lD; + FIX fxMaxAscender; + FIX fxMaxDescender; + POINTL ptlUnderline1; + POINTL ptlStrikeOut; + POINTL ptlULThickness; + POINTL ptlSOThickness; + ULONG cxMax; // max pel width of bitmaps + +// the fields formerly in REALIZE_EXTRA as well as some new fields: + + ULONG cyMax; // did not use to be here + ULONG cjGlyphMax; // (cxMax + 7)/8 * cyMax, or at least it should be + + FD_XFORM fdxQuantized; + LONG lNonLinearExtLeading; + LONG lNonLinearIntLeading; + LONG lNonLinearMaxCharWidth; + LONG lNonLinearAvgCharWidth; + +// some new fields + + LONG lMinA; + LONG lMinC; + LONG lMinD; + + LONG alReserved[1]; // just in case we need it. + +} FD_DEVICEMETRICS, *PFD_DEVICEMETRICS; + +typedef struct _LIGATURE { /* lig */ + ULONG culSize; + LPWSTR pwsz; + ULONG chglyph; + HGLYPH ahglyph[1]; +} LIGATURE, *PLIGATURE; + +typedef struct _FD_LIGATURE { + ULONG culThis; + ULONG ulType; + ULONG cLigatures; + LIGATURE alig[1]; +} FD_LIGATURE; + + +// glyph handle must be 32 bit + + +// signed 16 bit integer type denoting number of FUnit's + +typedef SHORT FWORD; + +// point in the 32.32 bit precission + +typedef struct _POINTQF // ptq +{ + LARGE_INTEGER x; + LARGE_INTEGER y; +} POINTQF, *PPOINTQF; + +//. Structures + + +// devm.flRealizedType flags + +// FDM_TYPE_ZERO_BEARINGS // all glyphs have zero a and c spaces + +// the following two features refer to all glyphs in this font realization + +// FDM_TYPE_CHAR_INC_EQUAL_BM_BASE // base width == cx for horiz, == cy for vert. +// FDM_TYPE_MAXEXT_EQUAL_BM_SIDE // side width == cy for horiz, == cx for vert. + +#define FDM_TYPE_BM_SIDE_CONST 0x00000001 +#define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002 +#define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004 +#define FDM_TYPE_ZERO_BEARINGS 0x00000008 +#define FDM_TYPE_CONST_BEARINGS 0x00000010 + + +// structures for describing a supported set of glyphs in a font + +typedef struct _WCRUN { + WCHAR wcLow; // lowest character in run inclusive + USHORT cGlyphs; // wcHighInclusive = wcLow + cGlyphs - 1; + HGLYPH *phg; // pointer to an array of cGlyphs HGLYPH's +} WCRUN, *PWCRUN; + +// If phg is set to (HGLYPH *)NULL, for all wc's in this particular run +// the handle can be computed as simple zero extension: +// HGLYPH hg = (HGLYPH) wc; +// +// If phg is not NULL, memory pointed to by phg, allocated by the driver, +// WILL NOT MOVE. + + +typedef struct _FD_GLYPHSET { + ULONG cjThis; // size of this structure in butes + FLONG flAccel; // accel flags, bits to be explained below + ULONG cGlyphsSupported; // sum over all wcrun's of wcrun.cGlyphs + ULONG cRuns; + WCRUN awcrun[1]; // an array of cRun WCRUN structures +} FD_GLYPHSET, *PFD_GLYPHSET; + +// If GS_UNICODE_HANDLES bit is set, +// for ALL WCRUNS in this FD_GLYPHSET the handles are +// obtained by zero extending unicode code points of +// the corresponding supported glyphs, i.e. all gs.phg's are NULL + +#define GS_UNICODE_HANDLES 0x00000001 + +// If GS_8BIT_HANDLES bit is set, all handles are in 0-255 range. +// This is just an ansi font then and we are really making up all +// the unicode stuff about this font. + +#define GS_8BIT_HANDLES 0x00000002 + +// all handles fit in 16 bits. +// to 8 bit handles as it should. + +#define GS_16BIT_HANDLES 0x00000004 + + +// ligatures + + +typedef struct _FD_KERNINGPAIR { + WCHAR wcFirst; + WCHAR wcSecond; + FWORD fwdKern; +} FD_KERNINGPAIR; + +// IFIMETRICS constants + +#define FM_VERSION_NUMBER 0x0 + +// +// IFIMETRICS::fsType flags +// +#define FM_TYPE_LICENSED 0x2 +#define FM_READONLY_EMBED 0x4 +#define FM_EDITABLE_EMBED 0x8 +#define FM_NO_EMBEDDING FM_TYPE_LICENSED + +// +// IFIMETRICS::flInfo flags +// +#define FM_INFO_TECH_TRUETYPE 0x00000001 +#define FM_INFO_TECH_BITMAP 0x00000002 +#define FM_INFO_TECH_STROKE 0x00000004 +#define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008 +#define FM_INFO_ARB_XFORMS 0x00000010 +#define FM_INFO_1BPP 0x00000020 +#define FM_INFO_4BPP 0x00000040 +#define FM_INFO_8BPP 0x00000080 +#define FM_INFO_16BPP 0x00000100 +#define FM_INFO_24BPP 0x00000200 +#define FM_INFO_32BPP 0x00000400 +#define FM_INFO_INTEGER_WIDTH 0x00000800 +#define FM_INFO_CONSTANT_WIDTH 0x00001000 +#define FM_INFO_NOT_CONTIGUOUS 0x00002000 +#define FM_INFO_PID_EMBEDDED 0x00004000 +#define FM_INFO_RETURNS_OUTLINES 0x00008000 +#define FM_INFO_RETURNS_STROKES 0x00010000 +#define FM_INFO_RETURNS_BITMAPS 0x00020000 +#define FM_INFO_UNICODE_COMPLIANT 0x00040000 +#define FM_INFO_RIGHT_HANDED 0x00080000 +#define FM_INFO_INTEGRAL_SCALING 0x00100000 +#define FM_INFO_90DEGREE_ROTATIONS 0x00200000 +#define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000 +#define FM_INFO_DO_NOT_ENUMERATE 0x00800000 +#define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000 +#define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000 +#define FM_INFO_TID_EMBEDDED 0x04000000 +#define FM_INFO_FAMILY_EQUIV 0x08000000 +#define FM_INFO_DBCS_FIXED_PITCH 0x10000000 +#define FM_INFO_NONNEGATIVE_AC 0x20000000 +#define FM_INFO_IGNORE_TC_RA_ABLE 0x40000000 +#define FM_INFO_TECH_TYPE1 0x80000000 + +// max number of charsets supported in a tt font, 16 according to win95 guys + +#define MAXCHARSETS 16 + +// +// IFIMETRICS::ulPanoseCulture +// +#define FM_PANOSE_CULTURE_LATIN 0x0 + + +// +// IFMETRICS::fsSelection flags +// +#define FM_SEL_ITALIC 0x0001 +#define FM_SEL_UNDERSCORE 0x0002 +#define FM_SEL_NEGATIVE 0x0004 +#define FM_SEL_OUTLINED 0x0008 +#define FM_SEL_STRIKEOUT 0x0010 +#define FM_SEL_BOLD 0x0020 +#define FM_SEL_REGULAR 0x0040 + +// +// The FONTDIFF structure contains all of the fields that could +// possibly change under simulation +// +typedef struct _FONTDIFF { + BYTE jReserved1; // 0x0 + BYTE jReserved2; // 0x1 + BYTE jReserved3; // 0x2 + BYTE bWeight; // 0x3 Panose Weight + USHORT usWinWeight; // 0x4 + FSHORT fsSelection; // 0x6 + FWORD fwdAveCharWidth; // 0x8 + FWORD fwdMaxCharInc; // 0xA + POINTL ptlCaret; // 0xC +} FONTDIFF; + +typedef struct _FONTSIM { + PTRDIFF dpBold; // offset from beginning of FONTSIM to FONTDIFF + PTRDIFF dpItalic; // offset from beginning of FONTSIM to FONTDIFF + PTRDIFF dpBoldItalic; // offset from beginning of FONTSIM to FONTDIFF +} FONTSIM; + + +typedef struct _IFIMETRICS { + ULONG cjThis; // includes attached information + ULONG cjIfiExtra; // sizeof IFIEXTRA if any, formerly ulVersion + PTRDIFF dpwszFamilyName; + PTRDIFF dpwszStyleName; + PTRDIFF dpwszFaceName; + PTRDIFF dpwszUniqueName; + PTRDIFF dpFontSim; + LONG lEmbedId; + LONG lItalicAngle; + LONG lCharBias; + +// dpCharSet field replaced alReserved[0]. +// If the 3.51 pcl minidrivers are still to work on NT 4.0 this field must not +// move because they will have 0 at this position. + + PTRDIFF dpCharSets; + BYTE jWinCharSet; // as in LOGFONT::lfCharSet + BYTE jWinPitchAndFamily; // as in LOGFONT::lfPitchAndFamily + USHORT usWinWeight; // as in LOGFONT::lfWeight + ULONG flInfo; // see above + USHORT fsSelection; // see above + USHORT fsType; // see above + FWORD fwdUnitsPerEm; // em height + FWORD fwdLowestPPEm; // readable limit + FWORD fwdWinAscender; + FWORD fwdWinDescender; + FWORD fwdMacAscender; + FWORD fwdMacDescender; + FWORD fwdMacLineGap; + FWORD fwdTypoAscender; + FWORD fwdTypoDescender; + FWORD fwdTypoLineGap; + FWORD fwdAveCharWidth; + FWORD fwdMaxCharInc; + FWORD fwdCapHeight; + FWORD fwdXHeight; + FWORD fwdSubscriptXSize; + FWORD fwdSubscriptYSize; + FWORD fwdSubscriptXOffset; + FWORD fwdSubscriptYOffset; + FWORD fwdSuperscriptXSize; + FWORD fwdSuperscriptYSize; + FWORD fwdSuperscriptXOffset; + FWORD fwdSuperscriptYOffset; + FWORD fwdUnderscoreSize; + FWORD fwdUnderscorePosition; + FWORD fwdStrikeoutSize; + FWORD fwdStrikeoutPosition; + BYTE chFirstChar; // for win 3.1 compatibility + BYTE chLastChar; // for win 3.1 compatibility + BYTE chDefaultChar; // for win 3.1 compatibility + BYTE chBreakChar; // for win 3.1 compatibility + WCHAR wcFirstChar; // lowest supported code in Unicode set + WCHAR wcLastChar; // highest supported code in Unicode set + WCHAR wcDefaultChar; + WCHAR wcBreakChar; + POINTL ptlBaseline; // + POINTL ptlAspect; // designed aspect ratio (bitmaps) + POINTL ptlCaret; // points along caret + RECTL rclFontBox; // bounding box for all glyphs (font space) + BYTE achVendId[4]; // as per TrueType + ULONG cKerningPairs; + ULONG ulPanoseCulture; + PANOSE panose; +} IFIMETRICS, *PIFIMETRICS; + + +// rather than adding the fields of IFIEXTRA to IFIMETRICS itself +// we add them as a separate structure. This structure, if present at all, +// lies below IFIMETRICS in memory. +// If IFIEXTRA is present at all, ifi.cjIfiExtra (formerly ulVersion) +// will contain size of IFIEXTRA including any reserved fields. +// That way ulVersion = 0 (NT 3.51 or less) printer minidrivers +// will work with NT 4.0. + +typedef struct _IFIEXTRA +{ + ULONG ulIdentifier; // used for Type 1 fonts only + PTRDIFF dpFontSig; // nontrivial for tt only, at least for now. + ULONG cig; // maxp->numGlyphs, # of distinct glyph indicies + ULONG aulReserved[1]; // in case we need even more stuff in the future +} IFIEXTRA, *PIFIEXTRA; + + +/**************************************************************************\ + * +\**************************************************************************/ + +/* OpenGL DDI ExtEscape escape numbers (4352 - 4607) */ + +#define OPENGL_CMD 4352 /* for OpenGL ExtEscape */ +#define OPENGL_GETINFO 4353 /* for OpenGL ExtEscape */ +#define WNDOBJ_SETUP 4354 /* for live video ExtEscape */ + +#define DDI_DRIVER_VERSION 0x00020000 +#define GDI_DRIVER_VERSION 0x4000 /* for NT version 4.0.00 */ + +typedef int (*PFN)(); + +typedef struct _DRVFN /* drvfn */ +{ + ULONG iFunc; + PFN pfn; +} DRVFN, *PDRVFN; + +/* Required functions */ + +#define INDEX_DrvEnablePDEV 0L +#define INDEX_DrvCompletePDEV 1L +#define INDEX_DrvDisablePDEV 2L +#define INDEX_DrvEnableSurface 3L +#define INDEX_DrvDisableSurface 4L + +/* Other functions */ + +#define INDEX_DrvAssertMode 5L +#define INDEX_DrvResetPDEV 7L +#define INDEX_DrvCreateDeviceBitmap 10L +#define INDEX_DrvDeleteDeviceBitmap 11L +#define INDEX_DrvRealizeBrush 12L +#define INDEX_DrvDitherColor 13L +#define INDEX_DrvStrokePath 14L +#define INDEX_DrvFillPath 15L +#define INDEX_DrvStrokeAndFillPath 16L +#define INDEX_DrvPaint 17L +#define INDEX_DrvBitBlt 18L +#define INDEX_DrvCopyBits 19L +#define INDEX_DrvStretchBlt 20L +#define INDEX_DrvSetPalette 22L +#define INDEX_DrvTextOut 23L +#define INDEX_DrvEscape 24L +#define INDEX_DrvDrawEscape 25L +#define INDEX_DrvQueryFont 26L +#define INDEX_DrvQueryFontTree 27L +#define INDEX_DrvQueryFontData 28L +#define INDEX_DrvSetPointerShape 29L +#define INDEX_DrvMovePointer 30L +#define INDEX_DrvLineTo 31L +#define INDEX_DrvSendPage 32L +#define INDEX_DrvStartPage 33L +#define INDEX_DrvEndDoc 34L +#define INDEX_DrvStartDoc 35L +#define INDEX_DrvGetGlyphMode 37L +#define INDEX_DrvSynchronize 38L +#define INDEX_DrvSaveScreenBits 40L +#define INDEX_DrvGetModes 41L +#define INDEX_DrvFree 42L +#define INDEX_DrvDestroyFont 43L +#define INDEX_DrvQueryFontCaps 44L +#define INDEX_DrvLoadFontFile 45L +#define INDEX_DrvUnloadFontFile 46L +#define INDEX_DrvFontManagement 47L +#define INDEX_DrvQueryTrueTypeTable 48L +#define INDEX_DrvQueryTrueTypeOutline 49L +#define INDEX_DrvGetTrueTypeFile 50L +#define INDEX_DrvQueryFontFile 51L +#define INDEX_UNUSED5 52L +#define INDEX_DrvQueryAdvanceWidths 53L +#define INDEX_DrvSetPixelFormat 54L +#define INDEX_DrvDescribePixelFormat 55L +#define INDEX_DrvSwapBuffers 56L +#define INDEX_DrvStartBanding 57L +#define INDEX_DrvNextBand 58L +#define INDEX_DrvGetDirectDrawInfo 59L +#define INDEX_DrvEnableDirectDraw 60L +#define INDEX_DrvDisableDirectDraw 61L +#define INDEX_DrvQuerySpoolType 62L + +/* The total number of dispatched functions */ + +#define INDEX_LAST 63L + +typedef struct tagDRVENABLEDATA +{ + ULONG iDriverVersion; + ULONG c; + DRVFN *pdrvfn; +} DRVENABLEDATA, *PDRVENABLEDATA; + +typedef struct tagDEVINFO +{ + FLONG flGraphicsCaps; + LOGFONTW lfDefaultFont; + LOGFONTW lfAnsiVarFont; + LOGFONTW lfAnsiFixFont; + ULONG cFonts; + ULONG iDitherFormat; + USHORT cxDither; + USHORT cyDither; + HPALETTE hpalDefault; +} DEVINFO, *PDEVINFO; + +#define GCAPS_BEZIERS 0x00000001 +#define GCAPS_GEOMETRICWIDE 0x00000002 +#define GCAPS_ALTERNATEFILL 0x00000004 +#define GCAPS_WINDINGFILL 0x00000008 +#define GCAPS_HALFTONE 0x00000010 +#define GCAPS_COLOR_DITHER 0x00000020 +#define GCAPS_HORIZSTRIKE 0x00000040 +#define GCAPS_VERTSTRIKE 0x00000080 +#define GCAPS_OPAQUERECT 0x00000100 +#define GCAPS_VECTORFONT 0x00000200 +#define GCAPS_MONO_DITHER 0x00000400 +#define GCAPS_ASYNCCHANGE 0x00000800 +#define GCAPS_ASYNCMOVE 0x00001000 +#define GCAPS_DONTJOURNAL 0x00002000 +#define GCAPS_DIRECTDRAW 0x00004000 +#define GCAPS_ARBRUSHOPAQUE 0x00008000 +#define GCAPS_PANNING 0x00010000 +#define GCAPS_HIGHRESTEXT 0x00040000 +#define GCAPS_PALMANAGED 0x00080000 +#define GCAPS_DITHERONREALIZE 0x00200000 +#define GCAPS_NO64BITMEMACCESS 0x00400000 +#define GCAPS_FORCEDITHER 0x00800000 +#define GCAPS_GRAY16 0x01000000 + +typedef struct _LINEATTRS +{ + FLONG fl; + ULONG iJoin; + ULONG iEndCap; + FLOAT_LONG elWidth; + FLOAT eMiterLimit; + ULONG cstyle; + PFLOAT_LONG pstyle; + FLOAT_LONG elStyleState; +} LINEATTRS, *PLINEATTRS; + +#define LA_GEOMETRIC 0x00000001 +#define LA_ALTERNATE 0x00000002 +#define LA_STARTGAP 0x00000004 +#define LA_STYLED 0x00000008 + +#define JOIN_ROUND 0L +#define JOIN_BEVEL 1L +#define JOIN_MITER 2L + +#define ENDCAP_ROUND 0L +#define ENDCAP_SQUARE 1L +#define ENDCAP_BUTT 2L + +typedef LONG LDECI4; + +typedef struct _CIECHROMA +{ + LDECI4 x; + LDECI4 y; + LDECI4 Y; +}CIECHROMA; + +typedef struct _COLORINFO +{ + CIECHROMA Red; + CIECHROMA Green; + CIECHROMA Blue; + CIECHROMA Cyan; + CIECHROMA Magenta; + CIECHROMA Yellow; + CIECHROMA AlignmentWhite; + + LDECI4 RedGamma; + LDECI4 GreenGamma; + LDECI4 BlueGamma; + + LDECI4 MagentaInCyanDye; + LDECI4 YellowInCyanDye; + LDECI4 CyanInMagentaDye; + LDECI4 YellowInMagentaDye; + LDECI4 CyanInYellowDye; + LDECI4 MagentaInYellowDye; +}COLORINFO, *PCOLORINFO; + +// Allowed values for GDIINFO.ulPrimaryOrder. + +#define PRIMARY_ORDER_ABC 0 +#define PRIMARY_ORDER_ACB 1 +#define PRIMARY_ORDER_BAC 2 +#define PRIMARY_ORDER_BCA 3 +#define PRIMARY_ORDER_CBA 4 +#define PRIMARY_ORDER_CAB 5 + +// Allowed values for GDIINFO.ulHTPatternSize. + +#define HT_PATSIZE_2x2 0 +#define HT_PATSIZE_2x2_M 1 +#define HT_PATSIZE_4x4 2 +#define HT_PATSIZE_4x4_M 3 +#define HT_PATSIZE_6x6 4 +#define HT_PATSIZE_6x6_M 5 +#define HT_PATSIZE_8x8 6 +#define HT_PATSIZE_8x8_M 7 +#define HT_PATSIZE_10x10 8 +#define HT_PATSIZE_10x10_M 9 +#define HT_PATSIZE_12x12 10 +#define HT_PATSIZE_12x12_M 11 +#define HT_PATSIZE_14x14 12 +#define HT_PATSIZE_14x14_M 13 +#define HT_PATSIZE_16x16 14 +#define HT_PATSIZE_16x16_M 15 +#define HT_PATSIZE_MAX_INDEX HT_PATSIZE_16x16_M +#define HT_PATSIZE_DEFAULT HT_PATSIZE_4x4_M + +// Allowed values for GDIINFO.ulHTOutputFormat. + +#define HT_FORMAT_1BPP 0 +#define HT_FORMAT_4BPP 2 +#define HT_FORMAT_4BPP_IRGB 3 +#define HT_FORMAT_8BPP 4 +#define HT_FORMAT_16BPP 5 +#define HT_FORMAT_24BPP 6 +#define HT_FORMAT_32BPP 7 + +// Allowed values for GDIINFO.flHTFlags. + +#define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001 +#define HT_FLAG_HAS_BLACK_DYE 0x00000002 +#define HT_FLAG_ADDITIVE_PRIMS 0x00000004 +#define HT_FLAG_OUTPUT_CMY 0x00000100 + +typedef struct _GDIINFO +{ + ULONG ulVersion; + ULONG ulTechnology; + ULONG ulHorzSize; + ULONG ulVertSize; + ULONG ulHorzRes; + ULONG ulVertRes; + ULONG cBitsPixel; + ULONG cPlanes; + ULONG ulNumColors; + ULONG flRaster; + ULONG ulLogPixelsX; + ULONG ulLogPixelsY; + ULONG flTextCaps; + + ULONG ulDACRed; + ULONG ulDACGreen; + ULONG ulDACBlue; + + ULONG ulAspectX; + ULONG ulAspectY; + ULONG ulAspectXY; + + LONG xStyleStep; + LONG yStyleStep; + LONG denStyleStep; + + POINTL ptlPhysOffset; + SIZEL szlPhysSize; + + ULONG ulNumPalReg; + +// These fields are for halftone initialization. + + COLORINFO ciDevice; + ULONG ulDevicePelsDPI; + ULONG ulPrimaryOrder; + ULONG ulHTPatternSize; + ULONG ulHTOutputFormat; + ULONG flHTFlags; + + ULONG ulVRefresh; + ULONG ulBltAlignment; + + ULONG ulPanningHorzRes; + ULONG ulPanningVertRes; + +} GDIINFO, *PGDIINFO; + +/* + * User objects + */ + +typedef struct _BRUSHOBJ +{ + ULONG iSolidColor; + PVOID pvRbrush; +} BRUSHOBJ; + +typedef struct _CLIPOBJ +{ + ULONG iUniq; + RECTL rclBounds; + BYTE iDComplexity; + BYTE iFComplexity; + BYTE iMode; + BYTE fjOptions; +} CLIPOBJ; + +typedef struct _DRIVEROBJ DRIVEROBJ; + +typedef BOOL (CALLBACK * FREEOBJPROC)(DRIVEROBJ *pDriverObj); + +typedef struct _DRIVEROBJ +{ + PVOID pvObj; + FREEOBJPROC pFreeProc; + HDEV hdev; + DHPDEV dhpdev; +} DRIVEROBJ; + +typedef struct _FONTOBJ +{ + ULONG iUniq; + ULONG iFace; + ULONG cxMax; + FLONG flFontType; + ULONG iTTUniq; + ULONG iFile; + SIZE sizLogResPpi; + ULONG ulStyleSize; + PVOID pvConsumer; + PVOID pvProducer; +} FONTOBJ; + +typedef BYTE GAMMA_TABLES[2][256]; + +// +// FONTOBJ::flFontType +// +#define FO_TYPE_RASTER RASTER_FONTTYPE /* 0x1 */ +#define FO_TYPE_DEVICE DEVICE_FONTTYPE /* 0x2 */ +#define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE /* 0x4 */ +#define FO_SIM_BOLD 0x00002000 +#define FO_SIM_ITALIC 0x00004000 +#define FO_EM_HEIGHT 0x00008000 +#define FO_GRAY16 0x00010000 /* [1] */ +#define FO_NOGRAY16 0x00020000 /* [1] */ +#define FO_NOHINTS 0x00040000 /* [3] */ +#define FO_NO_CHOICE 0x00080000 /* [3] */ + +/**************************************************************************\ +* +* [1] +* +* If the FO_GRAY16 flag is set then the bitmaps of the font +* are 4-bit per pixel blending (alpha) values. A value of zero +* means that the the resulting pixel should be equal to the +* background color. If the value of the alpha value is k != 0 +* then the resulting pixel must be: +* +* c0 = background color +* c1 = foreground color +* b = blending value = (k+1)/16 // {k = 1,2,..,15} +* b = 0 (k = 0) +* d0 = gamma[c0], d1 = gamma[c1] // luminance components +* d = (1 - b)*d0 + b*d1 // blended luminance +* c = lambda[d] // blended device voltage +* +* where gamma[] takes a color component from application space +* to CIE space and labmda[] takes a color from CIE space to +* device color space +* +* GDI will set this bit if it request a font be gray scaled +* to 16 values then GDI will set FO_GRAY16 upon entry to +* DrvQueryFontData(). If the font driver cannot (or will +* not) grayscale a particular realization of a font then the +* font provider will zero out FO_GRAY16 and set FO_NOGRAY16 +* to inform GDI that +* the gray scaling request cannot (or should not) be +* satisfied. +* +* [2] +* +* The FO_NOHINTS indicates that hints were not used in the formation +* of the glyph images. GDI will set this bit to request that hinting +* be supressed. The font provider will set this bit accroding to the +* rendering scheme that it used in generating the glyph image. +* +* [3] +* +* The FO_NO_CHOICE flag indicates that the flags FO_GRAY16 and +* FO_NOHINTS must be obeyed if at all possible. +* +\**************************************************************************/ + +typedef struct _PALOBJ +{ + ULONG ulReserved; +} PALOBJ; + +typedef struct _PATHOBJ +{ + FLONG fl; + ULONG cCurves; +} PATHOBJ; + +typedef struct _SURFOBJ +{ + DHSURF dhsurf; + HSURF hsurf; + DHPDEV dhpdev; + HDEV hdev; + SIZEL sizlBitmap; + ULONG cjBits; + PVOID pvBits; + PVOID pvScan0; + LONG lDelta; + ULONG iUniq; + ULONG iBitmapFormat; + USHORT iType; + USHORT fjBitmap; +} SURFOBJ; + +typedef struct _WNDOBJ +{ + CLIPOBJ coClient; + PVOID pvConsumer; + RECTL rclClient; + SURFOBJ *psoOwner; +} WNDOBJ, *PWNDOBJ; + +typedef struct _XFORMOBJ +{ + ULONG ulReserved; +} XFORMOBJ; + +typedef struct _XLATEOBJ +{ + ULONG iUniq; + FLONG flXlate; + USHORT iSrcType; + USHORT iDstType; + ULONG cEntries; + ULONG *pulXlate; +} XLATEOBJ; + +/* + * BRUSHOBJ callbacks + */ + +PVOID APIENTRY BRUSHOBJ_pvAllocRbrush( +BRUSHOBJ *pbo, +ULONG cj); + +PVOID APIENTRY BRUSHOBJ_pvGetRbrush(BRUSHOBJ *pbo); + +/* + * CLIPOBJ callbacks + */ + +#define DC_TRIVIAL 0 +#define DC_RECT 1 +#define DC_COMPLEX 3 + +#define FC_RECT 1 +#define FC_RECT4 2 +#define FC_COMPLEX 3 + +#define TC_RECTANGLES 0 +#define TC_PATHOBJ 2 + +#define OC_BANK_CLIP 1 + +#define CT_RECTANGLES 0L + +#define CD_RIGHTDOWN 0L +#define CD_LEFTDOWN 1L +#define CD_RIGHTUP 2L +#define CD_LEFTUP 3L +#define CD_ANY 4L + +#define CD_LEFTWARDS 1L +#define CD_UPWARDS 2L + +typedef struct _ENUMRECTS +{ + ULONG c; + RECTL arcl[1]; +} ENUMRECTS; + +ULONG APIENTRY CLIPOBJ_cEnumStart( +CLIPOBJ *pco, +BOOL bAll, +ULONG iType, +ULONG iDirection, +ULONG cLimit); + +BOOL APIENTRY CLIPOBJ_bEnum( +CLIPOBJ *pco, +ULONG cj, +ULONG *pul); + +PATHOBJ * APIENTRY CLIPOBJ_ppoGetPath(CLIPOBJ* pco); + +/* + * FONTOBJ callbacks + */ + +typedef struct _GLYPHBITS +{ + POINTL ptlOrigin; + SIZEL sizlBitmap; + BYTE aj[1]; +} GLYPHBITS; + +#define FO_HGLYPHS 0L +#define FO_GLYPHBITS 1L +#define FO_PATHOBJ 2L + +#define FD_NEGATIVE_FONT 1L + +#define FO_DEVICE_FONT 1L +#define FO_OUTLINE_CAPABLE 2L + +typedef union _GLYPHDEF +{ + GLYPHBITS *pgb; + PATHOBJ *ppo; +} GLYPHDEF; + +typedef struct _GLYPHPOS /* gp */ +{ + HGLYPH hg; + GLYPHDEF *pgdf; + POINTL ptl; +} GLYPHPOS,*PGLYPHPOS; + + +// individual glyph data + +// r is a unit vector along the baseline in device coordinates. +// s is a unit vector in the ascent direction in device coordinates. +// A, B, and C, are simple tranforms of the notional space versions into +// (28.4) device coordinates. The dot products of those vectors with r +// are recorded here. Note that the high words of ptqD are also 28.4 +// device coordinates. The low words provide extra accuracy. + +// THE STRUCTURE DIFFERS IN ORDERING FROM NT 3.51 VERSION OF THE STRUCTURE. +// ptqD has been moved to the bottom. +// This requires only recompile of all the drivers. + +typedef struct _GLYPHDATA { + GLYPHDEF gdf; // pointer to GLYPHBITS or to PATHOBJ + HGLYPH hg; // glyhp handle + FIX fxD; // Character increment amount: D*r. + FIX fxA; // Prebearing amount: A*r. + FIX fxAB; // Advancing edge of character: (A+B)*r. + FIX fxInkTop; // Baseline to inkbox top along s. + FIX fxInkBottom; // Baseline to inkbox bottom along s. + RECTL rclInk; // Ink box with sides parallel to x,y axes + POINTQF ptqD; // Character increment vector: D=A+B+C. +} GLYPHDATA; + + +// flAccel flags for STROBJ + +// SO_FLAG_DEFAULT_PLACEMENT // defult inc vectors used to position chars +// SO_HORIZONTAL // "left to right" or "right to left" +// SO_VERTICAL // "top to bottom" or "bottom to top" +// SO_REVERSED // set if horiz & "right to left" or if vert & "bottom to top" +// SO_ZERO_BEARINGS // all glyphs have zero a and c spaces +// SO_CHAR_INC_EQUAL_BM_BASE // base == cx for horiz, == cy for vert. +// SO_MAXEXT_EQUAL_BM_SIDE // side == cy for horiz, == cx for vert. + +// do not substitute device font for tt font even if device font sub table +// tells the driver this should be done + +// SO_DO_NOT_SUBSTITUTE_DEVICE_FONT + +#define SO_FLAG_DEFAULT_PLACEMENT 0x00000001 +#define SO_HORIZONTAL 0x00000002 +#define SO_VERTICAL 0x00000004 +#define SO_REVERSED 0x00000008 +#define SO_ZERO_BEARINGS 0x00000010 +#define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020 +#define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040 +#define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080 +#define SO_GLYPHINDEX_TEXTOUT 0x00000100 +#define SO_ESC_NOT_ORIENT 0x00000200 + +typedef struct _STROBJ +{ + ULONG cGlyphs; // # of glyphs to render + FLONG flAccel; // accel flags + ULONG ulCharInc; // non-zero only if fixed pitch font, equal to advanced width. + RECTL rclBkGround; // bk ground rect of the string in device coords + GLYPHPOS *pgp; // If non-NULL then has all glyphs. + LPWSTR pwszOrg; // pointer to original unicode string. +} STROBJ; + +typedef struct _FONTINFO /* fi */ +{ + ULONG cjThis; + FLONG flCaps; + ULONG cGlyphsSupported; + ULONG cjMaxGlyph1; + ULONG cjMaxGlyph4; + ULONG cjMaxGlyph8; + ULONG cjMaxGlyph32; +} FONTINFO, *PFONTINFO; + +ULONG APIENTRY FONTOBJ_cGetAllGlyphHandles( +FONTOBJ *pfo, +HGLYPH *phg); + +VOID APIENTRY FONTOBJ_vGetInfo( +FONTOBJ *pfo, +ULONG cjSize, +FONTINFO *pfi); + +ULONG APIENTRY FONTOBJ_cGetGlyphs( +FONTOBJ *pfo, +ULONG iMode, +ULONG cGlyph, +HGLYPH *phg, +PVOID *ppvGlyph); + +GAMMA_TABLES* APIENTRY FONTOBJ_pGetGammaTables(FONTOBJ *pfo); + +XFORMOBJ * APIENTRY FONTOBJ_pxoGetXform(FONTOBJ *pfo); +IFIMETRICS * APIENTRY FONTOBJ_pifi(FONTOBJ *pfo); + +PVOID FONTOBJ_pvTrueTypeFontFile( +FONTOBJ *pfo, +ULONG *pcjFile); + +// possible values that iMode can take: + +/* + * PALOBJ callbacks + */ + +#define PAL_INDEXED 0x00000001 +#define PAL_BITFIELDS 0x00000002 +#define PAL_RGB 0x00000004 +#define PAL_BGR 0x00000008 + +ULONG APIENTRY PALOBJ_cGetColors( +PALOBJ *ppalo, +ULONG iStart, +ULONG cColors, +ULONG *pulColors); + +/* + * PATHOBJ callbacks + */ + +#define PO_BEZIERS 0x00000001 +#define PO_ELLIPSE 0x00000002 + +#define PD_BEGINSUBPATH 0x00000001 +#define PD_ENDSUBPATH 0x00000002 +#define PD_RESETSTYLE 0x00000004 +#define PD_CLOSEFIGURE 0x00000008 +#define PD_BEZIERS 0x00000010 +#define PD_ALL (PD_BEGINSUBPATH | \ + PD_ENDSUBPATH | \ + PD_RESETSTYLE | \ + PD_CLOSEFIGURE | \ + PD_BEZIERS) + +typedef struct _PATHDATA +{ + FLONG flags; + ULONG count; + POINTFIX *pptfx; +} PATHDATA, *PPATHDATA; + +typedef struct _RUN +{ + LONG iStart; + LONG iStop; +} RUN, *PRUN; + +typedef struct _CLIPLINE +{ + POINTFIX ptfxA; + POINTFIX ptfxB; + LONG lStyleState; + ULONG c; + RUN arun[1]; +} CLIPLINE, *PCLIPLINE; + +VOID APIENTRY PATHOBJ_vEnumStart(PATHOBJ *ppo); + +BOOL APIENTRY PATHOBJ_bEnum( +PATHOBJ *ppo, +PATHDATA *ppd); + +VOID APIENTRY PATHOBJ_vEnumStartClipLines( +PATHOBJ *ppo, +CLIPOBJ *pco, +SURFOBJ *pso, +LINEATTRS *pla); + +BOOL APIENTRY PATHOBJ_bEnumClipLines( +PATHOBJ *ppo, +ULONG cb, +CLIPLINE *pcl); + +BOOL APIENTRY PATHOBJ_bMoveTo( +PATHOBJ *ppo, +POINTFIX ptfx); + +BOOL APIENTRY PATHOBJ_bPolyLineTo( +PATHOBJ *ppo, +POINTFIX *pptfx, +ULONG cptfx); + +BOOL APIENTRY PATHOBJ_bPolyBezierTo( +PATHOBJ *ppo, +POINTFIX *pptfx, +ULONG cptfx); + +BOOL APIENTRY PATHOBJ_bCloseFigure(PATHOBJ *ppo); + +VOID APIENTRY PATHOBJ_vGetBounds( +PATHOBJ *ppo, +PRECTFX prectfx); + +/* + * STROBJ callbacks + */ + +VOID APIENTRY STROBJ_vEnumStart( +STROBJ *pstro); + +BOOL APIENTRY STROBJ_bEnum( +STROBJ *pstro, +ULONG *pc, +PGLYPHPOS *ppgpos); + +DWORD APIENTRY STROBJ_dwGetCodePage( +STROBJ *pstro); + +#define SGI_EXTRASPACE 0 + +/* + * SURFOBJ callbacks + */ + +#define STYPE_BITMAP 0L +#define STYPE_DEVICE 1L +#define STYPE_DEVBITMAP 3L + +#define BMF_1BPP 1L +#define BMF_4BPP 2L +#define BMF_8BPP 3L +#define BMF_16BPP 4L +#define BMF_24BPP 5L +#define BMF_32BPP 6L +#define BMF_4RLE 7L +#define BMF_8RLE 8L + +#define BMF_TOPDOWN 0x0001 +#define BMF_NOZEROINIT 0x0002 +#define BMF_DONTCACHE 0x0004 +#define BMF_USERMEM 0x0008 +#define BMF_KMSECTION 0x0010 + + +/* + * XFORMOBJ callbacks + */ + +#define GX_IDENTITY 0L +#define GX_OFFSET 1L +#define GX_SCALE 2L +#define GX_GENERAL 3L + +#define XF_LTOL 0L +#define XF_INV_LTOL 1L +#define XF_LTOFX 2L +#define XF_INV_FXTOL 3L + +ULONG APIENTRY XFORMOBJ_iGetXform( +XFORMOBJ *pxo, +XFORM *pxform); + +BOOL APIENTRY XFORMOBJ_bApplyXform( +XFORMOBJ *pxo, +ULONG iMode, +ULONG cPoints, +PVOID pvIn, +PVOID pvOut); + +/* + * XLATEOBJ callbacks + */ + +#define XO_TRIVIAL 0x00000001 +#define XO_TABLE 0x00000002 +#define XO_TO_MONO 0x00000004 + +#define XO_SRCPALETTE 1 +#define XO_DESTPALETTE 2 +#define XO_DESTDCPALETTE 3 + +ULONG APIENTRY XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor); +ULONG * APIENTRY XLATEOBJ_piVector(XLATEOBJ *pxlo); +ULONG APIENTRY XLATEOBJ_cGetPalette( +XLATEOBJ *pxlo, +ULONG iPal, +ULONG cPal, +ULONG *pPal); + +/* + * Engine callbacks - error logging + */ + +VOID APIENTRY EngSetLastError(ULONG); +ULONG APIENTRY EngGetLastError(); + +/* + * Engine callbacks - Surfaces + */ + +#define HOOK_BITBLT 0x00000001 +#define HOOK_STRETCHBLT 0x00000002 +#define HOOK_PLGBLT 0x00000004 +#define HOOK_TEXTOUT 0x00000008 +#define HOOK_PAINT 0x00000010 +#define HOOK_STROKEPATH 0x00000020 +#define HOOK_FILLPATH 0x00000040 +#define HOOK_STROKEANDFILLPATH 0x00000080 +#define HOOK_LINETO 0x00000100 +#define HOOK_COPYBITS 0x00000400 +#define HOOK_SYNCHRONIZE 0x00001000 +#define HOOK_SYNCHRONIZEACCESS 0x00004000 + +HBITMAP APIENTRY EngCreateBitmap( +SIZEL sizl, +LONG lWidth, +ULONG iFormat, +FLONG fl, +PVOID pvBits); + +HSURF APIENTRY EngCreateDeviceSurface(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat); +HBITMAP APIENTRY EngCreateDeviceBitmap(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat); +BOOL APIENTRY EngDeleteSurface(HSURF hsurf); +SURFOBJ * APIENTRY EngLockSurface(HSURF hsurf); +VOID APIENTRY EngUnlockSurface(SURFOBJ *pso); + +BOOL APIENTRY EngEraseSurface( +SURFOBJ *pso, +RECTL *prcl, +ULONG iColor); + +BOOL APIENTRY EngAssociateSurface( +HSURF hsurf, +HDEV hdev, +FLONG flHooks); + +BOOL APIENTRY EngMarkBandingSurface( HSURF hsurf ); + +BOOL APIENTRY EngCheckAbort(SURFOBJ *pso); + +/* + * Engine callbacks - Paths + */ + +PATHOBJ * APIENTRY EngCreatePath(); +VOID APIENTRY EngDeletePath(PATHOBJ *ppo); + +/* + * Engine callbacks - Palettes + */ + +HPALETTE APIENTRY EngCreatePalette( +ULONG iMode, +ULONG cColors, +ULONG *pulColors, +FLONG flRed, +FLONG flGreen, +FLONG flBlue); + +BOOL APIENTRY EngDeletePalette(HPALETTE hpal); + +/* + * Engine callbacks - Clipping + */ + +CLIPOBJ * APIENTRY EngCreateClip(); +VOID APIENTRY EngDeleteClip(CLIPOBJ *pco); + +/* + * Function prototypes + */ + +// These are the only EXPORTED functions for ANY driver + +BOOL APIENTRY DrvEnableDriver( +ULONG iEngineVersion, +ULONG cj, +DRVENABLEDATA *pded); + +/* + * Driver functions + */ + +DHPDEV APIENTRY DrvEnablePDEV( +DEVMODEW *pdm, +LPWSTR pwszLogAddress, +ULONG cPat, +HSURF *phsurfPatterns, +ULONG cjCaps, +ULONG *pdevcaps, +ULONG cjDevInfo, +DEVINFO *pdi, +HDEV hdev, +LPWSTR pwszDeviceName, +HANDLE hDriver); + +#define HS_DDI_MAX 6 + +BOOL APIENTRY DrvResetPDEV(DHPDEV dhpdevOld, DHPDEV dhpdevNew); + +VOID APIENTRY DrvCompletePDEV(DHPDEV dhpdev,HDEV hdev); + +HSURF APIENTRY DrvEnableSurface(DHPDEV dhpdev); +VOID APIENTRY DrvSynchronize(DHPDEV dhpdev,RECTL *prcl); +VOID APIENTRY DrvDisableSurface(DHPDEV dhpdev); +VOID APIENTRY DrvDisablePDEV(DHPDEV dhpdev); + +BOOL APIENTRY DrvStartBanding(SURFOBJ *pso, POINTL *pptl); +BOOL APIENTRY DrvNextBand(SURFOBJ *pso, POINTL *pptl); + +/* DrvSaveScreenBits - iMode definitions */ + +#define SS_SAVE 0 +#define SS_RESTORE 1 +#define SS_FREE 2 + +ULONG APIENTRY DrvSaveScreenBits(SURFOBJ *pso,ULONG iMode,ULONG ident,RECTL *prcl); + +/* + * Desktops + */ + +BOOL APIENTRY DrvAssertMode( +DHPDEV dhpdev, +BOOL bEnable); + +ULONG APIENTRY DrvGetModes( +HANDLE hDriver, +ULONG cjSize, +DEVMODEW *pdm); + +/* + * Bitmaps + */ + +HBITMAP APIENTRY DrvCreateDeviceBitmap ( +DHPDEV dhpdev, +SIZEL sizl, +ULONG iFormat); + +VOID APIENTRY DrvDeleteDeviceBitmap(DHSURF dhsurf); + +/* + * Palettes + */ + +BOOL APIENTRY DrvSetPalette( +DHPDEV dhpdev, +PALOBJ *ppalo, +FLONG fl, +ULONG iStart, +ULONG cColors); + +/* + * Brushes + */ + +#define DM_DEFAULT 0x00000001 +#define DM_MONOCHROME 0x00000002 + +#define DCR_SOLID 0 +#define DCR_DRIVER 1 +#define DCR_HALFTONE 2 + +ULONG APIENTRY DrvDitherColor( +DHPDEV dhpdev, +ULONG iMode, +ULONG rgb, +ULONG *pul); + +BOOL APIENTRY DrvRealizeBrush( +BRUSHOBJ *pbo, +SURFOBJ *psoTarget, +SURFOBJ *psoPattern, +SURFOBJ *psoMask, +XLATEOBJ *pxlo, +ULONG iHatch); + +#define RB_DITHERCOLOR 0x80000000L + + +/* + * Fonts + */ + +PIFIMETRICS APIENTRY DrvQueryFont( +DHPDEV dhpdev, +ULONG iFile, +ULONG iFace, +ULONG *pid); + +// #define QFT_UNICODE 0L +#define QFT_LIGATURES 1L +#define QFT_KERNPAIRS 2L +#define QFT_GLYPHSET 3L + +PVOID APIENTRY DrvQueryFontTree( +DHPDEV dhpdev, +ULONG iFile, +ULONG iFace, +ULONG iMode, +ULONG *pid); + +#define QFD_GLYPHANDBITMAP 1L +#define QFD_GLYPHANDOUTLINE 2L +#define QFD_MAXEXTENTS 3L +#define QFD_TT_GLYPHANDBITMAP 4L +#define QFD_TT_GRAY1_BITMAP 5L +#define QFD_TT_GRAY2_BITMAP 6L +#define QFD_TT_GRAY4_BITMAP 8L +#define QFD_TT_GRAY8_BITMAP 9L + +#define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP + +LONG APIENTRY DrvQueryFontData( +DHPDEV dhpdev, +FONTOBJ *pfo, +ULONG iMode, +HGLYPH hg, +GLYPHDATA *pgd, +PVOID pv, +ULONG cjSize); + +VOID APIENTRY DrvFree( +PVOID pv, +ULONG id); + +VOID APIENTRY DrvDestroyFont( +FONTOBJ *pfo); + +// Capability flags for DrvQueryCaps. + +#define QC_OUTLINES 0x00000001 +#define QC_1BIT 0x00000002 +#define QC_4BIT 0x00000004 + +// +// This is a mask of the capabilites of a font provider that can return more +// than just glyph metrics (i.e., bitmaps and/or outlines). If a driver has +// one or more of these capabilities, then it is FONT DRIVER. +// +// Drivers should only set individual bits. GDI will check if any are turned on +// using this define. +// + +#define QC_FONTDRIVERCAPS ( QC_OUTLINES | QC_1BIT | QC_4BIT ) + + + +LONG APIENTRY DrvQueryFontCaps( +ULONG culCaps, +ULONG *pulCaps); + +ULONG APIENTRY DrvLoadFontFile( +ULONG cFiles, // number of font files associated with this font +ULONG *piFile, // handles for individual files, cFiles of them +PVOID *ppvView, // array of cFiles views +ULONG *pcjView, // array of their sizes +ULONG ulLangID); + +BOOL APIENTRY DrvUnloadFontFile( +ULONG iFile); + +LONG APIENTRY DrvQueryTrueTypeTable( +ULONG iFile, +ULONG ulFont, +ULONG ulTag, +PTRDIFF dpStart, +ULONG cjBuf, +BYTE *pjBuf); + +BOOL APIENTRY DrvQueryAdvanceWidths( +DHPDEV dhpdev, +FONTOBJ *pfo, +ULONG iMode, +HGLYPH *phg, +PVOID pvWidths, +ULONG cGlyphs); + +// Values for iMode + +#define QAW_GETWIDTHS 0 +#define QAW_GETEASYWIDTHS 1 + +LONG APIENTRY DrvQueryTrueTypeOutline( +DHPDEV dhpdev, +FONTOBJ *pfo, +HGLYPH hglyph, +BOOL bMetricsOnly, +GLYPHDATA *pgldt, +ULONG cjBuf, +TTPOLYGONHEADER *ppoly); + +PVOID APIENTRY DrvGetTrueTypeFile ( +ULONG iFile, +ULONG *pcj); + +// values for ulMode: + +#define QFF_DESCRIPTION 1L +#define QFF_NUMFACES 2L + +LONG APIENTRY DrvQueryFontFile( +ULONG iFile, +ULONG ulMode, +ULONG cjBuf, +ULONG *pulBuf); + +/* + * BitBlt + */ + +BOOL APIENTRY DrvBitBlt( +SURFOBJ *psoTrg, +SURFOBJ *psoSrc, +SURFOBJ *psoMask, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +RECTL *prclTrg, +POINTL *pptlSrc, +POINTL *pptlMask, +BRUSHOBJ *pbo, +POINTL *pptlBrush, +ROP4 rop4); + +BOOL APIENTRY DrvStretchBlt( +SURFOBJ *psoDest, +SURFOBJ *psoSrc, +SURFOBJ *psoMask, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +COLORADJUSTMENT *pca, +POINTL *pptlHTOrg, +RECTL *prclDest, +RECTL *prclSrc, +POINTL *pptlMask, +ULONG iMode); + +BOOL APIENTRY DrvCopyBits( +SURFOBJ *psoDest, +SURFOBJ *psoSrc, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +RECTL *prclDest, +POINTL *pptlSrc); + +/* + * Text Output + */ + +BOOL APIENTRY DrvTextOut( +SURFOBJ *pso, +STROBJ *pstro, +FONTOBJ *pfo, +CLIPOBJ *pco, +RECTL *prclExtra, +RECTL *prclOpaque, +BRUSHOBJ *pboFore, +BRUSHOBJ *pboOpaque, +POINTL *pptlOrg, +MIX mix); + +/* + * Graphics Output + */ + +BOOL APIENTRY DrvLineTo( +SURFOBJ *pso, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +LONG x1, +LONG y1, +LONG x2, +LONG y2, +RECTL *prclBounds, +MIX mix); + +BOOL APIENTRY DrvStrokePath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +XFORMOBJ *pxo, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +LINEATTRS *plineattrs, +MIX mix); + +#define FP_ALTERNATEMODE 1L +#define FP_WINDINGMODE 2L + +BOOL APIENTRY DrvFillPath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +MIX mix, +FLONG flOptions); + +BOOL APIENTRY DrvStrokeAndFillPath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +XFORMOBJ *pxo, +BRUSHOBJ *pboStroke, +LINEATTRS *plineattrs, +BRUSHOBJ *pboFill, +POINTL *pptlBrushOrg, +MIX mixFill, +FLONG flOptions); + +BOOL APIENTRY DrvPaint( +SURFOBJ *pso, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +MIX mix); + +/* + * Pointers + */ + +#define SPS_ERROR 0 +#define SPS_DECLINE 1 +#define SPS_ACCEPT_NOEXCLUDE 2 +#define SPS_ACCEPT_EXCLUDE 3 + +#define SPS_CHANGE 0x00000001L +#define SPS_ASYNCCHANGE 0x00000002L +#define SPS_ANIMATESTART 0x00000004L +#define SPS_ANIMATEUPDATE 0x00000008L + +ULONG APIENTRY DrvSetPointerShape( +SURFOBJ *pso, +SURFOBJ *psoMask, +SURFOBJ *psoColor, +XLATEOBJ *pxlo, +LONG xHot, +LONG yHot, +LONG x, +LONG y, +RECTL *prcl, +FLONG fl); + +VOID APIENTRY DrvMovePointer(SURFOBJ *pso,LONG x,LONG y,RECTL *prcl); + +/* + * Printing + */ + +BOOL APIENTRY DrvSendPage(SURFOBJ *pso); +BOOL APIENTRY DrvStartPage(SURFOBJ *pso); + +ULONG APIENTRY DrvEscape( +SURFOBJ *pso, +ULONG iEsc, +ULONG cjIn, +PVOID pvIn, +ULONG cjOut, +PVOID pvOut); + +BOOL APIENTRY DrvStartDoc( +SURFOBJ *pso, +LPWSTR pwszDocName, +DWORD dwJobId); + +#define ED_ABORTDOC 1 + +BOOL APIENTRY DrvEndDoc(SURFOBJ *pso, FLONG fl); + +BOOL APIENTRY DrvQuerySpoolType(DHPDEV, LPWSTR); + +ULONG APIENTRY DrvDrawEscape( +SURFOBJ *pso, +ULONG iEsc, +CLIPOBJ *pco, +RECTL *prcl, +ULONG cjIn, +PVOID pvIn); + +ULONG APIENTRY DrvGetGlyphMode(DHPDEV, FONTOBJ *); + +ULONG APIENTRY DrvFontManagement( +SURFOBJ *pso, +FONTOBJ *pfo, +ULONG iMode, +ULONG cjIn, +PVOID pvIn, +ULONG cjOut, +PVOID pvOut); + +/* + * DirectDraw + */ + +BOOL DrvEnableDirectDraw( +DHPDEV dhpdev, +DD_CALLBACKS *pCallBacks, +DD_SURFACECALLBACKS *pSurfaceCallBacks, +DD_PALETTECALLBACKS *pPaletteCallBacks); + +VOID DrvDisableDirectDraw( +DHPDEV dhpdev); + +BOOL DrvGetDirectDrawInfo( +DHPDEV dhpdev, +DD_HALINFO *pHalInfo, +DWORD *pdwNumHeaps, +VIDEOMEMORY *pvmList, +DWORD *pdwNumFourCCCodes, +DWORD *pdwFourCC); + +/* + * Engine callbacks - tracking clip region changes + */ + +#define WOC_RGN_CLIENT_DELTA 1 +#define WOC_RGN_CLIENT 2 +#define WOC_RGN_SURFACE_DELTA 4 +#define WOC_RGN_SURFACE 8 +#define WOC_CHANGED 16 +#define WOC_DELETE 32 + +typedef VOID (CALLBACK * WNDOBJCHANGEPROC)(WNDOBJ *pwo, FLONG fl); + +#define WO_RGN_CLIENT_DELTA 1 +#define WO_RGN_CLIENT 2 +#define WO_RGN_SURFACE_DELTA 4 +#define WO_RGN_SURFACE 8 +#define WO_RGN_UPDATE_ALL 16 + +WNDOBJ * APIENTRY EngCreateWnd( +SURFOBJ *pso, +HWND hwnd, +WNDOBJCHANGEPROC pfn, +FLONG fl, +int iPixelFormat); + +ULONG APIENTRY WNDOBJ_cEnumStart( +WNDOBJ *pwo, +ULONG iType, +ULONG iDirection, +ULONG cLimit); + +BOOL APIENTRY WNDOBJ_bEnum( +WNDOBJ *pwo, +ULONG cj, +ULONG *pul); + +VOID APIENTRY WNDOBJ_vSetConsumer( +WNDOBJ *pwo, +PVOID pvConsumer); + +/* + * Engine callbacks - tracking driver managed resources + */ + +HDRVOBJ APIENTRY EngCreateDriverObj( +PVOID pvObj, +FREEOBJPROC pFreeObjProc, +HDEV hdev); + +BOOL APIENTRY EngDeleteDriverObj( +HDRVOBJ hdo, +BOOL bCallBack, +BOOL bLocked); + +DRIVEROBJ * APIENTRY EngLockDriverObj(HDRVOBJ hdo); +BOOL APIENTRY EngUnlockDriverObj(HDRVOBJ hdo); + +/* + * Engine callback - return current process handle. + */ + +HANDLE APIENTRY EngGetProcessHandle(); + +/* + * Pixel formats + */ + +BOOL APIENTRY DrvSetPixelFormat( +SURFOBJ *pso, +LONG iPixelFormat, +HWND hwnd); + +LONG APIENTRY DrvDescribePixelFormat( +DHPDEV dhpdev, +LONG iPixelFormat, +ULONG cjpfd, +PIXELFORMATDESCRIPTOR *ppfd); + +/* + * Swap buffers + */ + +BOOL APIENTRY DrvSwapBuffers( +SURFOBJ *pso, +WNDOBJ *pwo); + +/* + * Function prototypes - Engine Simulations + */ + +BOOL APIENTRY EngBitBlt( +SURFOBJ *psoTrg, +SURFOBJ *psoSrc, +SURFOBJ *psoMask, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +RECTL *prclTrg, +POINTL *pptlSrc, +POINTL *pptlMask, +BRUSHOBJ *pbo, +POINTL *pptlBrush, +ROP4 rop4); + +BOOL APIENTRY EngLineTo( +SURFOBJ *pso, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +LONG x1, +LONG y1, +LONG x2, +LONG y2, +RECTL *prclBounds, +MIX mix); + +BOOL APIENTRY EngStretchBlt( +SURFOBJ *psoDest, +SURFOBJ *psoSrc, +SURFOBJ *psoMask, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +COLORADJUSTMENT *pca, +POINTL *pptlHTOrg, +RECTL *prclDest, +RECTL *prclSrc, +POINTL *pptlMask, +ULONG iMode); + +BOOL APIENTRY EngTextOut( +SURFOBJ *pso, +STROBJ *pstro, +FONTOBJ *pfo, +CLIPOBJ *pco, +RECTL *prclExtra, +RECTL *prclOpaque, +BRUSHOBJ *pboFore, +BRUSHOBJ *pboOpaque, +POINTL *pptlOrg, +MIX mix); + +BOOL APIENTRY EngStrokePath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +XFORMOBJ *pxo, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +LINEATTRS *plineattrs, +MIX mix); + +BOOL APIENTRY EngFillPath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +MIX mix, +FLONG flOptions); + +BOOL APIENTRY EngStrokeAndFillPath( +SURFOBJ *pso, +PATHOBJ *ppo, +CLIPOBJ *pco, +XFORMOBJ *pxo, +BRUSHOBJ *pboStroke, +LINEATTRS *plineattrs, +BRUSHOBJ *pboFill, +POINTL *pptlBrushOrg, +MIX mixFill, +FLONG flOptions); + +BOOL APIENTRY EngPaint( +SURFOBJ *pso, +CLIPOBJ *pco, +BRUSHOBJ *pbo, +POINTL *pptlBrushOrg, +MIX mix); + +BOOL APIENTRY EngCopyBits( +SURFOBJ *psoDest, +SURFOBJ *psoSrc, +CLIPOBJ *pco, +XLATEOBJ *pxlo, +RECTL *prclDest, +POINTL *pptlSrc); + +#define PPB_NOCLIP 0x0001 + + +// +// Halftone releated APIs +// + + +LONG +APIENTRY +HT_ComputeRGBGammaTable( + USHORT GammaTableEntries, + USHORT GammaTableType, + USHORT RedGamma, + USHORT GreenGamma, + USHORT BlueGamma, + LPBYTE pGammaTable + ); + +LONG +APIENTRY +HT_Get8BPPFormatPalette( + LPPALETTEENTRY pPaletteEntry, + USHORT RedGamma, + USHORT GreenGamma, + USHORT BlueGamma + ); + + +typedef struct _DEVHTINFO { + DWORD HTFlags; + DWORD HTPatternSize; + DWORD DevPelsDPI; + COLORINFO ColorInfo; + } DEVHTINFO, *PDEVHTINFO; + +#define DEVHTADJF_COLOR_DEVICE 0x00000001 +#define DEVHTADJF_ADDITIVE_DEVICE 0x00000002 + +typedef struct _DEVHTADJDATA { + DWORD DeviceFlags; + DWORD DeviceXDPI; + DWORD DeviceYDPI; + PDEVHTINFO pDefHTInfo; + PDEVHTINFO pAdjHTInfo; + } DEVHTADJDATA, *PDEVHTADJDATA; + +LONG +APIENTRY +HTUI_DeviceColorAdjustment( + LPSTR pDeviceName, + PDEVHTADJDATA pDevHTAdjData + ); + + +// +// General support APIS +// + +VOID +APIENTRY +EngDebugBreak( + VOID + ); + +VOID +APIENTRY +EngDebugPrint( + PCHAR StandardPrefix, + PCHAR DebugMessage, + va_list ap + ); + +VOID +APIENTRY +EngQueryPerformanceCounter( + LONGLONG *pPerformanceCount + ); + +VOID +APIENTRY +EngQueryPerformanceFrequency( + LONGLONG *pFrequency + ); + +// +// Kernel mode memory operations +// + +#define FL_ZERO_MEMORY 0x00000001 + +PVOID +APIENTRY +EngAllocMem( + ULONG Flags, + ULONG MemSize, + ULONG Tag + ); + +VOID +APIENTRY +EngFreeMem( + PVOID Mem + ); + +// +// User mode memory Operations +// + +VOID +APIENTRY +EngProbeForRead( + PVOID Address, + ULONG Length, + ULONG Alignment + ); + +VOID +APIENTRY +EngProbeForReadAndWrite( + PVOID Address, + ULONG Length, + ULONG Alignment + ); + +PVOID +APIENTRY +EngAllocUserMem( + ULONG cj, + ULONG tag + ); + +HANDLE +APIENTRY +EngSecureMem( + PVOID Address, + ULONG Length + ); + +VOID +APIENTRY +EngUnsecureMem( + HANDLE hSecure + ); + + +VOID +APIENTRY +EngFreeUserMem( + PVOID pv + ); + + + + +DWORD +APIENTRY +EngDeviceIoControl( + HANDLE hDevice, + DWORD dwIoControlCode, + LPVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesReturned + ); + +int +APIENTRY +EngMulDiv( + int a, + int b, + int c); + + +// +// Loading drivers and gettings entry points from them +// + +HANDLE +APIENTRY +EngLoadImage( + LPWSTR pwszDriver + ); + +PVOID +APIENTRY +EngFindImageProcAddress( + HANDLE hModule, + LPSTR lpProcName + ); + +VOID +APIENTRY +EngUnloadImage( + HANDLE hModule + ); + +// +// callback for extra PDEV information +// + +LPWSTR +APIENTRY +EngGetPrinterDataFileName( + HDEV hdev + ); + +LPWSTR +APIENTRY +EngGetDriverName( + HDEV hdev + ); + +typedef struct _TYPE1_FONT +{ + HANDLE hPFM; + HANDLE hPFB; + ULONG ulIdentifier; +} TYPE1_FONT; + + +BOOL +APIENTRY +EngGetType1FontList( + HDEV hdev, + TYPE1_FONT *pType1Buffer, + ULONG cjType1Buffer, + PULONG pulLocalFonts, + PULONG pulRemoteFonts, + LARGE_INTEGER *pLastModified + ); + + +// +// Manipulating resource sections +// + +HANDLE +APIENTRY +EngLoadModule( + LPWSTR pwsz + ); + +PVOID +APIENTRY +EngMapModule( + HANDLE h, + PULONG pSize + ); + +PVOID +APIENTRY +EngFindResource( + HANDLE h, + int iName, + int iType, + PULONG pulSize + ); + +VOID +APIENTRY +EngFreeModule( + HANDLE h + ); + +// +// FontFile Callbacks +// + +VOID +APIENTRY +EngUnmapFontFile( + ULONG iFile + ); + +BOOL +APIENTRY +EngMapFontFile( + ULONG iFile, + PULONG *ppjBuf, + ULONG *pcjBuf + ); + +// +// Semaphores +// + +DECLARE_HANDLE(HSEMAPHORE); + +HSEMAPHORE +APIENTRY +EngCreateSemaphore( + VOID + ); + +VOID +APIENTRY +EngAcquireSemaphore( + HSEMAPHORE hsem + ); + +VOID +APIENTRY +EngReleaseSemaphore( + HSEMAPHORE hsem + ); + +VOID +APIENTRY +EngDeleteSemaphore( + HSEMAPHORE hsem + ); + +VOID +APIENTRY +EngMultiByteToUnicodeN( + LPWSTR UnicodeString, + ULONG MaxBytesInUnicodeString, + PULONG BytesInUnicodeString, + PCHAR MultiByteString, + ULONG BytesInMultiByteString + ); + +VOID +APIENTRY +EngUnicodeToMultiByteN( + PCHAR MultiByteString, + ULONG MaxBytesInMultiByteString, + PULONG BytesInMultiByteString, + PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + + + +// for the spooler + +DWORD +APIENTRY +EngGetPrinterData( + HANDLE hPrinter, + LPWSTR pValueName, + LPDWORD pType, + LPBYTE pData, + DWORD nSize, + LPDWORD pcbNeeded + ); + + +DWORD +APIENTRY +EngSetPrinterData( + HANDLE hPrinter, + LPWSTR pType, + DWORD dwType, + LPBYTE lpbPrinterData, + DWORD cjPrinterData +); + + +BOOL +APIENTRY +EngGetForm( + HANDLE hPrinter, + LPWSTR pFormName, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded + ); + +BOOL +APIENTRY +EngWritePrinter( + HANDLE hPrinter, + LPVOID pBuf, + DWORD cbBuf, + LPDWORD pcWritten + ); + + +BOOL +APIENTRY +EngGetPrinter( + HANDLE hPrinter, + DWORD dwLevel, + LPBYTE pPrinter, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + +BOOL +APIENTRY +EngEnumForms( + HANDLE hPrinter, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned + ); + + +ULONG +APIENTRY +EngEscape( + HANDLE hPrinter, + ULONG iEsc, + ULONG cjIn, + PVOID pvIn, + ULONG cjOut, + PVOID pvOut + ); + + +#ifdef _X86_ + + typedef struct _FLOATOBJ + { + ULONG ul1; + ULONG ul2; + } FLOATOBJ, *PFLOATOBJ; + + VOID FLOATOBJ_SetFloat(PFLOATOBJ,FLOAT); + VOID FLOATOBJ_SetLong(PFLOATOBJ,LONG); + + LONG FLOATOBJ_GetFloat(PFLOATOBJ); + LONG FLOATOBJ_GetLong(PFLOATOBJ); + + VOID FLOATOBJ_AddFloat(PFLOATOBJ,FLOAT); + VOID FLOATOBJ_AddLong(PFLOATOBJ,LONG); + VOID FLOATOBJ_Add(PFLOATOBJ,PFLOATOBJ); + + VOID FLOATOBJ_SubFloat(PFLOATOBJ,FLOAT); + VOID FLOATOBJ_SubLong(PFLOATOBJ,LONG); + VOID FLOATOBJ_Sub(PFLOATOBJ,PFLOATOBJ); + + VOID FLOATOBJ_MulFloat(PFLOATOBJ,FLOAT); + VOID FLOATOBJ_MulLong(PFLOATOBJ,LONG); + VOID FLOATOBJ_Mul(PFLOATOBJ,PFLOATOBJ); + + VOID FLOATOBJ_DivFloat(PFLOATOBJ,FLOAT); + VOID FLOATOBJ_DivLong(PFLOATOBJ,LONG); + VOID FLOATOBJ_Div(PFLOATOBJ,PFLOATOBJ); + + VOID FLOATOBJ_Neg(PFLOATOBJ); + + BOOL FLOATOBJ_EqualLong(PFLOATOBJ,LONG); + BOOL FLOATOBJ_GreaterThanLong(PFLOATOBJ,LONG); + BOOL FLOATOBJ_LessThanLong(PFLOATOBJ,LONG); + + BOOL FLOATOBJ_Equal(PFLOATOBJ,PFLOATOBJ); + BOOL FLOATOBJ_GreaterThan(PFLOATOBJ,PFLOATOBJ); + BOOL FLOATOBJ_LessThan(PFLOATOBJ,PFLOATOBJ); + + +#else + + // any platform that has support for floats in the kernel + + typedef FLOAT FLOATOBJ; + typedef FLOAT *PFLOATOBJ; + + #define FLOATOBJ_SetFloat(pf,f) {*(pf) = (f); } + #define FLOATOBJ_SetLong(pf,l) {*(pf) = (FLOAT)(l); } + + #define FLOATOBJ_GetFloat(pf) *((PULONG)pf) + #define FLOATOBJ_GetLong(pf) (LONG)*(pf) + + #define FLOATOBJ_AddFloat(pf,f) {*(pf) += f; } + #define FLOATOBJ_AddLong(pf,l) {*(pf) += (LONG)(l); } + #define FLOATOBJ_Add(pf,pf1) {*(pf) += *(pf1); } + + #define FLOATOBJ_SubFloat(pf,f) {*(pf) -= f; } + #define FLOATOBJ_SubLong(pf,l) {*(pf) -= (LONG)(l); } + #define FLOATOBJ_Sub(pf,pf1) {*(pf) -= *(pf1); } + + #define FLOATOBJ_MulFloat(pf,f) {*(pf) *= f; } + #define FLOATOBJ_MulLong(pf,l) {*(pf) *= (LONG)(l); } + #define FLOATOBJ_Mul(pf,pf1) {*(pf) *= *(pf1); } + + #define FLOATOBJ_DivFloat(pf,f) {*(pf) /= f; } + #define FLOATOBJ_DivLong(pf,l) {*(pf) /= (LONG)(l); } + #define FLOATOBJ_Div(pf,pf1) {*(pf) /= *(pf1); } + + #define FLOATOBJ_Neg(pf) {*(pf) = -*(pf); } + + #define FLOATOBJ_EqualLong(pf,l) (*(pf) == (FLOAT)(l)) + #define FLOATOBJ_GreaterThanLong(pf,l) (*(pf) > (FLOAT)(l)) + #define FLOATOBJ_LessThanLong(pf,l) (*(pf) < (FLOAT)(l)) + + #define FLOATOBJ_Equal(pf,pf1) (*(pf) == *(pf1)) + #define FLOATOBJ_GreaterThan(pf,pf1) (*(pf) > *(pf1)) + #define FLOATOBJ_LessThan(pf,pf1) (*(pf) < *(pf1)) + + +#endif // _FLOATOBJ_ + +typedef struct tagFLOATOBJ_XFORM +{ + FLOATOBJ eM11; + FLOATOBJ eM12; + FLOATOBJ eM21; + FLOATOBJ eM22; + FLOATOBJ eDx; + FLOATOBJ eDy; +} FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM; + +ULONG +APIENTRY +XFORMOBJ_iGetFloatObjXform( + XFORMOBJ *pxo, + FLOATOBJ_XFORM * pfxo); + +// SORT specific defines + +typedef int (__cdecl *SORTCOMP)(const void *pv1, const void *pv2); + +VOID +APIENTRY +EngSort( + PBYTE pjBuf, + ULONG c, + ULONG cjElem, + SORTCOMP pfnComp); + +typedef struct _ENG_TIME_FIELDS { + USHORT usYear; // range [1601...] + USHORT usMonth; // range [1..12] + USHORT usDay; // range [1..31] + USHORT usHour; // range [0..23] + USHORT usMinute; // range [0..59] + USHORT usSecond; // range [0..59] + USHORT usMilliseconds;// range [0..999] + USHORT usWeekday; // range [0..6] == [Sunday..Saturday] +} ENG_TIME_FIELDS, *PENG_TIME_FIELDS; + +VOID EngQueryLocalTime( + PENG_TIME_FIELDS); + + + +FD_GLYPHSET * +APIENTRY +EngComputeGlyphSet( + INT nCodePage, + INT nFirstChar, + INT cChars + ); + + +INT +APIENTRY +EngMultiByteToWideChar( + UINT CodePage, + LPWSTR WideCharString, + INT BytesInWideCharString, + LPSTR MultiByteString, + INT BytesInMultiByteString + ); + +INT +APIENTRY +EngWideCharToMultiByte( + UINT CodePage, + LPWSTR WideCharString, + INT BytesInWideCharString, + LPSTR MultiByteString, + INT BytesInMultiByteString + ); + +VOID +APIENTRY +EngGetCurrentCodePage( + PUSHORT OemCodePage, + PUSHORT AnsiCodePage + ); + + +HANDLE +APIENTRY +EngLoadModuleForWrite( + LPWSTR pwsz, + ULONG cjSizeOfModule + ); + +BOOL +APIENTRY +EngGetFileChangeTime( + HANDLE h, + LARGE_INTEGER *pChangeTime + ); + +LPWSTR +APIENTRY +EngGetFilePath( + HANDLE h + ); + +#endif // _WINDDI_ |