#else
#include <windows.h>
#endif
+#include <ddk/ddrawi.h>
#ifndef IN
#define IN
typedef DWORD PTRDIFF;
#endif
-#define GDI_DRIVER_VERSION 0x4000 // NT 4 compatibility
-
-/* FIXME: find definitions for these structs */
-typedef PVOID PCOLORADJUSTMENT;
-typedef PVOID PDD_CALLBACKS;
-typedef PVOID PDD_HALINFO;
-typedef PVOID PDD_PALETTECALLBACKS;
-typedef PVOID PDD_SURFACECALLBACKS;
-typedef PVOID PFONTINFO;
-typedef PVOID PGAMMA_TABLES;
-typedef PVOID PGLYPHDATA;
-typedef PVOID PLINEATTRS;
-typedef DWORD MIX;
-typedef DWORD ROP4;
-typedef PVOID PSTROBJ;
-typedef PVOID PTTPOLYGONHEADER;
-typedef PVOID PVIDEOMEMORY;
+#define DDI_DRIVER_VERSION_NT4 0x20000
+#define DDI_DRIVER_VERSION_SP3 0x20003
+#define DDI_DRIVER_VERSION_NT5 0x30000
+#define DDI_DRIVER_VERSION_NT5_01 0x30100
+#define GDI_DRIVER_VERSION 0x4000 /* NT 4 compatibility */
+
+typedef DDHAL_DDCALLBACKS *PDD_CALLBACKS;
+typedef DDHALINFO *PDD_HALINFO;
+typedef DDHAL_DDPALETTECALLBACKS *PDD_PALETTECALLBACKS;
+typedef DDHAL_DDSURFACECALLBACKS *PDD_SURFACECALLBACKS;
+typedef struct _VIDEOMEMORY
+{
+ DWORD dwFlags;
+ FLATPTR fpStart;
+ union
+ {
+ FLATPTR fpEnd;
+ DWORD dwWidth;
+ };
+ DDSCAPS ddsCaps;
+ DDSCAPS ddsCapsAlt;
+ union
+ {
+ struct _VMEMHEAP *lpHeap;
+ DWORD dwHeight;
+ };
+} VIDEOMEMORY, *PVIDEOMEMORY;
+
+typedef struct _FONTINFO
+{
+ ULONG cjThis;
+ FLONG flCaps;
+ ULONG cGlyphsSupported;
+ ULONG cjMaxGlyph1;
+ ULONG cjMaxGlyph4;
+ ULONG cjMaxGlyph8;
+ ULONG cjMaxGlyph32;
+} FONTINFO, *PFONTINFO;
+
+typedef BYTE GAMMA_TABLES[2][256];
+typedef GAMMA_TABLES *PGAMMA_TABLES;
+typedef COLORADJUSTMENT *PCOLORADJUSTMENT;
+
+typedef ULONG MIX;
+typedef ULONG ROP4;
#define DDI_DRIVER_VERSION 0x00010000
-/* FIXME: how big should this constant be? */
#define HS_DDI_MAX 6
/* XLate types */
BMF_24BPP,
BMF_32BPP,
BMF_4RLE,
- BMF_8RLE
+ BMF_8RLE,
+ BMF_JPEG,
+ BMF_PNG
};
#define BMF_TOPDOWN 0x00000001
#define BMF_DONTCACHE 0x00000004
#define BMF_USERMEM 0x00000008
#define BMF_KMSECTION 0x00000010
+#define BMF_NOTSYSMEM 0x0020
+#define BMF_WINDOW_BLT 0x0040
+#define BMF_UMPDMEM 0x0080
+#define BMF_RESERVED 0xFF00
#define DC_TRIVIAL 0
#define DC_RECT 1
FP_WINDINGMODE
};
+typedef struct _FD_GLYPHATTR {
+ ULONG cjThis;
+ ULONG cGlyphs;
+ ULONG iMode;
+ BYTE aGlyphAttr[1];
+} FD_GLYPHATTR, *PFD_GLYPHATTR;
+
enum _GLYPH_MODE
{
FO_HGLYPHS,
FO_PATHOBJ
};
-// Allowed values for GDIINFO.ulPrimaryOrder.
+/* Allowed values for GDIINFO.ulPrimaryOrder. */
#define PRIMARY_ORDER_ABC 0
#define PRIMARY_ORDER_ACB 1
#define PRIMARY_ORDER_CBA 4
#define PRIMARY_ORDER_CAB 5
-// Allowed values for GDIINFO.ulHTPatternSize.
+/* Allowed values for GDIINFO.ulHTPatternSize. */
#define HT_PATSIZE_2x2 0
#define HT_PATSIZE_2x2_M 1
#define HT_PATSIZE_MAX_INDEX HT_PATSIZE_16x16_M
#define HT_PATSIZE_DEFAULT HT_PATSIZE_4x4_M
-// Allowed values for GDIINFO.ulHTOutputFormat.
+/* Allowed values for GDIINFO.ulHTOutputFormat. */
#define HT_FORMAT_1BPP 0
#define HT_FORMAT_4BPP 2
#define HT_FORMAT_24BPP 6
#define HT_FORMAT_32BPP 7
-// Allowed values for GDIINFO.flHTFlags.
+/* Allowed values for GDIINFO.flHTFlags. */
#define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
#define HT_FLAG_HAS_BLACK_DYE 0x00000002
INDEX_DrvDisableSurface,
INDEX_DrvAssertMode,
INDEX_DrvResetPDEV = 7,
+ INDEX_DrvDisableDriver,
INDEX_DrvCreateDeviceBitmap = 10,
INDEX_DrvDeleteDeviceBitmap,
INDEX_DrvRealizeBrush,
INDEX_DrvQueryTrueTypeOutline,
INDEX_DrvGetTrueTypeFile,
INDEX_DrvQueryFontFile,
- INDEX_DrvQueryAdvanceWidths = 53,
+ INDEX_DrvMovePanning,
+ INDEX_DrvQueryAdvanceWidths,
INDEX_DrvSetPixelFormat,
INDEX_DrvDescribePixelFormat,
INDEX_DrvSwapBuffers,
INDEX_DrvEnableDirectDraw,
INDEX_DrvDisableDirectDraw,
INDEX_DrvQuerySpoolType,
- INDEX_DrvTransparentBlt = 74,
+ INDEX_DrvIcmCreateColorTransform,
+ INDEX_DrvIcmDeleteColorTransform,
+ INDEX_DrvIcmCheckBitmapBits,
+ INDEX_DrvIcmSetDeviceGammaRamp,
+ INDEX_DrvGradientFill,
+ INDEX_DrvStretchBltROP,
+ INDEX_DrvPlgBlt,
+ INDEX_DrvAlphaBlend,
+ INDEX_DrvSynthesizeFont,
+ INDEX_DrvGetSynthesizedFontFiles,
+ INDEX_DrvTransparentBlt,
+ INDEX_DrvQueryPerBandInfo,
+ INDEX_DrvQueryDeviceSupport,
+ INDEX_DrvReserved1,
+ INDEX_DrvReserved2,
+ INDEX_DrvReserved3,
+ INDEX_DrvReserved4,
+ INDEX_DrvReserved5,
+ INDEX_DrvReserved6,
+ INDEX_DrvReserved7,
+ INDEX_DrvReserved8,
+ INDEX_DrvQueryGlyphAttrs,
+ INDEX_DrvNotify,
+ INDEX_DrvSynchronizeSurface,
+ INDEX_DrvResetDevice,
+ INDEX_DrvReserved9,
+ INDEX_DrvReserved10,
+ INDEX_DrvReserved11,
+ INDEX_DrvDeriveSurface = 85,
INDEX_LAST
};
DRVFN *pdrvfn;
} DRVENABLEDATA, *PDRVENABLEDATA;
-/* FIXME: replace this with correct def for LDECI4 */
-typedef DWORD LDECI4;
+typedef LONG LDECI4;
typedef struct _CIECHROMA
{
{
ULONG iSolidColor;
PVOID pvRbrush;
-
+ FLONG flColorType;
/* remainder of fields are for GDI internal use */
LOGBRUSH logbrush;
} BRUSHOBJ, *PBRUSHOBJ;
RECTL arcl[1];
} ENUMRECTS, *PENUMRECTS;
+typedef struct _BLENDOBJ
+{
+ BLENDFUNCTION BlendFunction;
+}BLENDOBJ,*PBLENDOBJ;
+
+typedef struct
+{
+ DWORD nSize;
+ HDC hdc;
+ PBYTE pvEMF;
+ PBYTE pvCurrentRecord;
+} EMFINFO, *PEMFINFO;
+
typedef struct _FONTOBJ
{
ULONG iUniq;
PANOSE panose;
} IFIMETRICS, *PIFIMETRICS;
-#define NB_RESERVED_COLORS 20 // number of fixed colors in system palette
+#define NB_RESERVED_COLORS 20 /* number of fixed colors in system palette */
typedef struct _XLATEOBJ
{
typedef struct _PALOBJ
{
+ ULONG ulReserved;
PXLATEOBJ logicalToSystem;
int *mapping;
- PLOGPALETTE logpalette; // _MUST_ be the last field
+ PLOGPALETTE logpalette; /* _MUST_ be the last field */
} PALOBJ, *PPALOBJ;
typedef struct _PATHOBJ
typedef struct _XFORMOBJ
{
- /* FIXME: what does this beast look like? */
+ ULONG ulReserved;
} XFORMOBJ, *PXFORMOBJ;
+typedef struct _GLYPHBITS
+{
+ POINTL ptlOrigin;
+ SIZEL sizlBitmap;
+ BYTE aj[1];
+} GLYPHBITS;
+
+typedef union _GLYPHDEF
+{
+ GLYPHBITS *pgb;
+ PATHOBJ *ppo;
+} GLYPHDEF;
+
+typedef struct _POINTQF
+{
+ LARGE_INTEGER x;
+ LARGE_INTEGER y;
+} POINTQF, *PPOINTQF;
+
+typedef struct _GLYPHDATA {
+ GLYPHDEF gdf;
+ HGLYPH hg;
+ FIX fxD;
+ FIX fxA;
+ FIX fxAB;
+ FIX fxInkTop;
+ FIX fxInkBottom;
+ RECTL rclInk;
+ POINTQF ptqD;
+} GLYPHDATA, *PGLYPHDATA;
+
+typedef struct _GLYPHPOS
+{
+ HGLYPH hg;
+ GLYPHDEF *pgdf;
+ POINTL *ptl;
+} GLYPHPOS, *PGLYPHPOS;
+
+typedef struct _STROBJ
+{
+ ULONG cGlyphs;
+ FLONG flAccel;
+ ULONG ulCharInc;
+ RECTL rclBkGround;
+ GLYPHPOS *pgp;
+ LPWSTR pwszOrg;
+} STROBJ, *PSTROBJ;
+
+typedef struct _WCRUN
+{
+ WCHAR wcLow;
+ USHORT cGlyphs;
+ HGLYPH *phg;
+} WCRUN, *PWCRUN;
+
+typedef struct _FD_GLYPHSET
+{
+ ULONG cjThis;
+ FLONG flAccel;
+ ULONG cGlyphsSupported;
+ ULONG cRuns;
+ WCRUN awcrun[1];
+} FD_GLYPHSET, *PFD_GLYPHSET;
+
+struct _DRIVEROBJ;
+
+typedef BOOL (CALLBACK * FREEOBJPROC) (struct _DRIVEROBJ* pDriverObj);
+
+typedef struct _DRIVEROBJ
+{
+ PVOID pvObj;
+ FREEOBJPROC pFreeProc;
+ HDEV hdev;
+ DHPDEV dhpdev;
+} DRIVEROBJ;
+
+typedef struct _TYPE1_FONT
+{
+ HANDLE hPFM;
+ HANDLE hPFB;
+ ULONG ulIdentifier;
+} TYPE1_FONT;
+
+typedef struct _ENG_TIME_FIELDS
+{
+ USHORT usYear;
+ USHORT usMonth;
+ USHORT usDay;
+ USHORT usHour;
+ USHORT usMinute;
+ USHORT usSecond;
+ USHORT usMilliseconds;
+ USHORT usWeekday;
+} ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
+
+typedef struct _LINEATTRS
+{
+ FLONG fl;
+ ULONG iJoin;
+ ULONG iEndCap;
+ FLOAT_LONG elWidth;
+ FLOATL eMiterLimit;
+ ULONG cstyle;
+ PFLOAT_LONG pstyle;
+ FLOAT_LONG elStyleState;
+} LINEATTRS, *PLINEATTRS;
+
+typedef struct _FLOATOBJ
+{
+ ULONG ul1,
+ ul2;
+} FLOATOBJ, *PFLOATOBJ;
+
+typedef struct _POINTFIX
+{
+ FIX x,
+ y;
+} POINTFIX;
+
+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;
+
+typedef struct _RECTFX
+{
+ FIX xLeft,
+ yTop,
+ xRight,
+ yBottom;
+} RECTFX, *PRECTFX;
+
+typedef struct
+{
+ FLOATOBJ eM11,
+ eM12,
+ eM21,
+ eM22,
+ eDx,
+ eDy;
+} FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
+
+typedef struct _XFORML
+{
+ FLOATL eM11,
+ eM12,
+ eM21,
+ eM22,
+ eDx,
+ eDy;
+} XFORML, *PXFORML;
+
/*
* Functions Prefixed with Drv are calls made from GDI to DDI, and
* everything else are calls made from DDI to GDI. DDI is
BOOL STDCALL
DrvAssertMode(IN DHPDEV PDev,
IN BOOL ShouldEnable);
+
BOOL STDCALL
DrvBitBlt(IN PSURFOBJ DestSurface,
IN PSURFOBJ SrcSurface,
IN LPWSTR LogAddress,
IN ULONG PatternCount,
OUT HSURF *SurfPatterns,
- IN ULONG CapsSize,
- OUT ULONG *DevCaps,
+ IN ULONG GDIInfoSize,
+ OUT GDIINFO *GDIInfo,
IN ULONG DevInfoSize,
- OUT DEVINFO *DI,
+ OUT DEVINFO *DevInfo,
IN LPWSTR DevDataFile,
IN LPWSTR DeviceName,
IN HANDLE Driver);
PPATHOBJ STDCALL
CLIPOBJ_ppoGetPath(PCLIPOBJ ClipObj);
-/*
-EngAcquireSemaphore
-*/
-
-/* FIXME: find correct defines for following symbols */
#define FL_ZERO_MEMORY 1
+#define FL_NONPAGED_MEMORY 2
PVOID STDCALL
EngAllocMem(ULONG Flags,
ROP4 rop4);
/*
-EngCheckAbort
EngComputeGlyphSet
*/
IN ULONG Green,
IN ULONG Blue);
+HSEMAPHORE
+STDCALL
+EngCreateSemaphore ( VOID );
+
+VOID
+STDCALL
+EngAcquireSemaphore ( IN HSEMAPHORE hsem );
+
+VOID
+STDCALL
+EngReleaseSemaphore ( IN HSEMAPHORE hsem );
+
+VOID
+STDCALL
+EngDeleteSemaphore ( IN HSEMAPHORE hsem );
+
+BOOL
+STDCALL
+EngIsSemaphoreOwned ( IN HSEMAPHORE hsem );
+
+BOOL
+STDCALL
+EngIsSemaphoreOwnedByCurrentThread ( IN HSEMAPHORE hsem );
+
/*
EngCreatePath
EngCreateSemaphore
BOOL STDCALL
EngDeletePalette(IN HPALETTE Palette);
-/*
-EngDeletePath
-EngDeleteSemaphore
-*/
-
BOOL STDCALL
EngDeleteSurface(IN HSURF Surface);
ULONG iColor);
/*
-EngFillPath
EngFindImageProcAddress
EngFindResource
*/
VOID STDCALL
EngFreeUserMem(PVOID pv);
+VOID STDCALL
+EngGetCurrentCodePage(OUT PUSHORT OemCodePage,
+ OUT PUSHORT AnsiCodePage);
+
/*
-EngGetCurrentCodePage
-EngGetDriverName
EngGetFileChangeTime
EngGetFilePath
EngGetForm
EngGetLastError
EngGetPrinter
EngGetPrinterData
-EngGetPrinterDataFileName
EngGetProcessHandle
EngGetType1FontList
*/
EngLoadImage(LPWSTR DriverName);
/*
-EngLoadModule
EngLoadModuleForWrite
EngLockDriverObj
*/
EngMapEvent
EngMapFontFile
EngMapModule
-EngMarkBandingSurface
EngMovePointer
-EngMultiByteToUnicodeN
-EngMultiByteToWideChar
*/
-INT STDCALL EngMulDiv(
- INT nMultiplicand,
- INT nMultiplier,
- INT nDivisor);
+INT STDCALL
+EngMulDiv(IN INT nMultiplicand,
+ IN INT nMultiplier,
+ IN INT nDivisor);
+
+VOID STDCALL
+EngMultiByteToUnicodeN(OUT LPWSTR UnicodeString,
+ IN ULONG MaxBytesInUnicodeString,
+ OUT PULONG BytesInUnicodeString,
+ IN PCHAR MultiByteString,
+ IN ULONG BytesInMultiByteString);
BOOL STDCALL
EngPaint(IN SURFOBJ *Surface,
EngQueryPalette
EngQueryPerformanceCounter
EngQueryPerformanceFrequency
-EngReleaseSemaphore
EngRestoreFloatingPointState
EngSaveFloatingPointState
EngSecureMem
EngSetPointerShape
EngSetPointerTag
EngSetPrinterData
-EngSort
-EngStretchBlt
+*/
+
+typedef int CDECL (*SORTCOMP)(const void *Elem1, const void *Elem2);
+
+void STDCALL
+EngSort(IN OUT PBYTE Buf, IN ULONG ElemSize, IN ULONG ElemCount, IN SORTCOMP CompFunc);
+
+/*
EngStrokeAndFillPath
EngStrokePath
EngTextOut
*/
BOOL STDCALL
-EngTransparentBlt(PSURFOBJ Dest,
- PSURFOBJ Source,
- PCLIPOBJ Clip,
- PXLATEOBJ ColorTranslation,
- PRECTL DestRect,
- PRECTL SourceRect,
- ULONG TransparentColor,
- ULONG Reserved);
+EngTransparentBlt(IN PSURFOBJ Dest,
+ IN PSURFOBJ Source,
+ IN PCLIPOBJ Clip,
+ IN PXLATEOBJ ColorTranslation,
+ IN PRECTL DestRect,
+ IN PRECTL SourceRect,
+ IN ULONG TransparentColor,
+ IN ULONG Reserved);
+
+VOID STDCALL
+EngUnicodeToMultiByteN(OUT PCHAR MultiByteString,
+ IN ULONG MaxBytesInMultiByteString,
+ OUT PULONG BytesInMultiByteString,
+ IN PWSTR UnicodeString,
+ IN ULONG BytesInUnicodeString);
/*
-EngUnicodeToMultiByteN
EngUnloadImage
EngUnlockDriverObj
-EngUnlockSurface
EngUnmapEvent
EngUnmapFontFile
EngUnsecureMem = NTOSKRNL.MmUnsecureVirtualMemory
FLOATOBJ_SubLong
*/
-ULONG FONTOBJ_cGetAllGlyphHandles(IN PFONTOBJ FontObj,
- IN HGLYPH *Glyphs);
-ULONG FONTOBJ_cGetGlyphs(IN PFONTOBJ FontObj,
- IN ULONG Mode,
- IN ULONG NumGlyphs,
- IN HGLYPH *GlyphHandles,
- IN PVOID *OutGlyphs);
-PGAMMA_TABLES FONTOBJ_pGetGammaTables(IN PFONTOBJ FontObj);
-IFIMETRICS *FONTOBJ_pifi(IN PFONTOBJ FontObj);
-PVOID FONTOBJ_pvTrueTypeFontFile(IN PFONTOBJ FontObj,
- IN ULONG *FileSize);
-XFORMOBJ *FONTOBJ_pxoGetXform(IN PFONTOBJ FontObj);
-VOID FONTOBJ_vGetInfo(IN PFONTOBJ FontObj,
- IN ULONG InfoSize,
- OUT PFONTINFO FontInfo);
+ULONG
+STDCALL
+FONTOBJ_cGetAllGlyphHandles(IN PFONTOBJ FontObj,
+ IN HGLYPH *Glyphs);
+
+ULONG
+STDCALL
+FONTOBJ_cGetGlyphs(IN PFONTOBJ FontObj,
+ IN ULONG Mode,
+ IN ULONG NumGlyphs,
+ IN HGLYPH *GlyphHandles,
+ IN PVOID *OutGlyphs);
+
+PGAMMA_TABLES
+STDCALL
+FONTOBJ_pGetGammaTables(IN PFONTOBJ FontObj);
+
+IFIMETRICS*
+STDCALL
+FONTOBJ_pifi(IN PFONTOBJ FontObj);
+
+PVOID
+STDCALL
+FONTOBJ_pvTrueTypeFontFile(IN PFONTOBJ FontObj,
+ IN ULONG *FileSize);
+
+XFORMOBJ*
+STDCALL
+FONTOBJ_pxoGetXform(IN PFONTOBJ FontObj);
+
+VOID
+STDCALL
+FONTOBJ_vGetInfo(IN PFONTOBJ FontObj,
+ IN ULONG InfoSize,
+ OUT PFONTINFO FontInfo);
/*
HT_ComputeRGBGammaTable
HT_Get8BPPFormatPalette
*/
-ULONG STDCALL
+ULONG
+STDCALL
PALOBJ_cGetColors(PALOBJ *PalObj,
ULONG Start,
ULONG Colors,
/*
PATHOBJ_bCloseFigure
-PATHOBJ_bEnum
PATHOBJ_bEnumClipLines
PATHOBJ_bMoveTo
PATHOBJ_bPolyBezierTo
PATHOBJ_bPolyLineTo
PATHOBJ_vEnumStart
PATHOBJ_vEnumStartClipLines
-PATHOBJ_vGetBounds
RtlAnsiCharToUnicodeChar = NTOSKRNL.RtlAnsiCharToUnicodeChar
RtlMultiByteToUnicodeN = NTOSKRNL.RtlMultiByteToUnicodeN
RtlRaiseException = NTOSKRNL.RtlRaiseException
ULONG * STDCALL
XLATEOBJ_piVector(XLATEOBJ *XlateObj);
-#endif
+HANDLE STDCALL
+BRUSHOBJ_hGetColorTransform(BRUSHOBJ *pbo);
+ULONG STDCALL
+BRUSHOBJ_ulGetBrushColor(BRUSHOBJ *pbo);
+BOOL STDCALL
+EngAlphaBlend(SURFOBJ *psoDest,SURFOBJ *psoSrc,CLIPOBJ *pco,XLATEOBJ *pxlo,RECTL *prclDest,RECTL *prclSrc,BLENDOBJ *pBlendObj);
+BOOL STDCALL
+EngCheckAbort(SURFOBJ *pso);
+FD_GLYPHSET* STDCALL
+EngComputeGlyphSet(INT nCodePage,INT nFirstChar,INT cChars);
+VOID STDCALL
+EngDeletePath(PATHOBJ *ppo);
+BOOL STDCALL
+EngFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,MIX mix,FLONG flOptions);
+PVOID STDCALL
+EngFindResource(HANDLE h,int iName,int iType,PULONG pulSize);
+VOID STDCALL
+EngFreeModule(HANDLE h);
+LPWSTR STDCALL
+EngGetDriverName(HDEV hdev);
+LPWSTR STDCALL
+EngGetPrinterDataFileName(HDEV hdev);
+BOOL STDCALL
+EngGradientFill(SURFOBJ *psoDest,CLIPOBJ *pco,XLATEOBJ *pxlo,TRIVERTEX *pVertex,ULONG nVertex,PVOID pMesh,ULONG nMesh,RECTL *prclExtents,POINTL *pptlDitherOrg,ULONG ulMode);
+HANDLE STDCALL
+EngLoadModule(LPWSTR pwsz);
+BOOL STDCALL
+EngMarkBandingSurface(HSURF hsurf);
+INT STDCALL
+EngMultiByteToWideChar(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString);
+BOOL STDCALL
+EngPlgBlt(SURFOBJ *psoTrg,SURFOBJ *psoSrc,SURFOBJ *psoMsk,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlBrushOrg,POINTFIX *pptfx,RECTL *prcl,POINTL *pptl,ULONG iMode);
+BOOL STDCALL
+EngQueryEMFInfo(HDEV hdev,EMFINFO *pEMFInfo);
+VOID STDCALL
+EngQueryLocalTime(PENG_TIME_FIELDS etf);
+BOOL STDCALL
+EngStretchBlt(SURFOBJ *psoDest,SURFOBJ *psoSrc,SURFOBJ *psoMask,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlHTOrg,RECTL *prclDest,RECTL *prclSrc,POINTL *pptlMask,ULONG iMode);
+BOOL STDCALL
+EngStretchBltROP(SURFOBJ *psoDest,SURFOBJ *psoSrc,SURFOBJ *psoMask,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlHTOrg,RECTL *prclDest,RECTL *prclSrc,POINTL *pptlMask,ULONG iMode,BRUSHOBJ *pbo,DWORD rop4);
+BOOL STDCALL
+EngStrokeAndFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pboStroke,LINEATTRS *plineattrs,BRUSHOBJ *pboFill,POINTL *pptlBrushOrg,MIX mixFill,FLONG flOptions);
+BOOL STDCALL
+EngStrokePath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,LINEATTRS *plineattrs,MIX mix);
+BOOL STDCALL
+EngTextOut(SURFOBJ *pso,STROBJ *pstro,FONTOBJ *pfo,CLIPOBJ *pco,RECTL *prclExtra,RECTL *prclOpaque,BRUSHOBJ *pboFore,BRUSHOBJ *pboOpaque,POINTL *pptlOrg,MIX mix);
+VOID STDCALL
+EngUnlockSurface(SURFOBJ *pso);
+INT STDCALL
+EngWideCharToMultiByte(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString);
+PFD_GLYPHATTR STDCALL
+FONTOBJ_pQueryGlyphAttrs(FONTOBJ *pfo,ULONG iMode);
+VOID STDCALL
+PATHOBJ_vGetBounds(PATHOBJ *ppo,PRECTFX prectfx);
+FD_GLYPHSET *STDCALL
+FONTOBJ_pfdg(FONTOBJ *pfo);
+BOOL STDCALL
+PATHOBJ_bEnum(PATHOBJ *ppo,PATHDATA *ppd);
+BOOL STDCALL
+PATHOBJ_bEnumClipLines(PATHOBJ *ppo,ULONG cb,CLIPLINE *pcl);
+VOID STDCALL
+PATHOBJ_vEnumStart(PATHOBJ *ppo);
+VOID STDCALL
+PATHOBJ_vEnumStartClipLines(PATHOBJ *ppo,CLIPOBJ *pco,SURFOBJ *pso,LINEATTRS *pla);
+BOOL STDCALL
+STROBJ_bEnum(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos);
+BOOL STDCALL
+STROBJ_bEnumPositionsOnly(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos);
+BOOL STDCALL
+STROBJ_bGetAdvanceWidths(STROBJ *pso,ULONG iFirst,ULONG c,POINTQF *pptqD);
+DWORD STDCALL
+STROBJ_dwGetCodePage(STROBJ *pstro);
+VOID STDCALL
+STROBJ_vEnumStart(STROBJ *pstro);
+ULONG STDCALL
+XFORMOBJ_iGetXform(XFORMOBJ *pxo,XFORML *pxform);
+BOOL STDCALL
+XFORMOBJ_bApplyXform(XFORMOBJ *pxo,ULONG iMode,ULONG cPoints,PVOID pvIn,PVOID pvOut);
+HANDLE STDCALL
+XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo);
+#endif