// -------------------------------------------------------------------------- // // WINDDI.H // // Win16 DDI header // // -------------------------------------------------------------------------- #ifndef _WINDDI_ #define _WINDDI_ // // Display Driver ordinals // #define ORD_OEMINQUIRECURSOR 101 #define ORD_OEMSETCURSOR 102 #define ORD_OEMMOVECURSOR 103 #define ORD_OEMCHECKCURSOR 104 #define ORD_OEMSAVEBITS 92 // // DDI patches // #define DDI_FIRST 0 typedef enum { // // Screen Output routines // DDI_ARC = DDI_FIRST, DDI_BITBLT, DDI_CHORD, DDI_ELLIPSE, DDI_EXTFLOODFILL, DDI_EXTTEXTOUTA, DDI_EXTTEXTOUTW, DDI_FILLPATH, DDI_FILLRGN, DDI_FLOODFILL, DDI_FRAMERGN, DDI_INVERTRGN, DDI_LINETO, DDI_PAINTRGN, DDI_PATBLT, DDI_PIE, DDI_PLAYENHMETAFILERECORD, DDI_PLAYMETAFILE, DDI_PLAYMETAFILERECORD, DDI_POLYGON, DDI_POLYBEZIER, DDI_POLYBEZIERTO, DDI_POLYLINE, DDI_POLYLINETO, DDI_POLYPOLYLINE, DDI_POLYPOLYGON, DDI_RECTANGLE, DDI_ROUNDRECT, DDI_SETDIBITSTODEVICE, DDI_SETPIXEL, DDI_STRETCHBLT, DDI_STRETCHDIBITS, DDI_STROKEANDFILLPATH, DDI_STROKEPATH, DDI_TEXTOUTA, DDI_TEXTOUTW, DDI_UPDATECOLORS, // // SPB stuff // DDI_CREATESPB, DDI_DELETEOBJECT, // DDI_SETOBJECTOWNER for Memphis // // Display mode, dosbox stuff // DDI_DEATH, DDI_RESURRECTION, DDI_WINOLDAPPHACKOMATIC, DDI_GDIREALIZEPALETTE, DDI_REALIZEDEFAULTPALETTE, // // If we implement an SBC, // DDI_SETBITMAPBITS, // DDI_SETDIBCOLORTABLE, // DDI_SETDIBITS, // DDI_SYSDELETEOBJECT, // DDI_MAX } DDI_PATCH; // // IM Patches // We patch these DDIs when you are sharing and your machine is being // controlled by a remote. If a 16-bit shared app goes into a modal loop // on mouse/key down, we pulse the win16lock so our 32-bit thread can // play back the mouse/key moves and ups. // #define IM_FIRST 0 typedef enum { // // Low level input processing // IM_MOUSEEVENT = IM_FIRST, IM_KEYBOARDEVENT, IM_SIGNALPROC32, // // Win16lock pulsing for 16-bit apps that do modal loops on mouse input // IM_GETASYNCKEYSTATE, IM_GETCURSORPOS, IM_MAX } IM_PATCH; // // DDI Routines // BOOL WINAPI DrvArc(HDC, int, int, int, int, int, int, int, int); BOOL WINAPI DrvBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD); BOOL WINAPI DrvChord(HDC, int, int, int, int, int, int, int, int); BOOL WINAPI DrvEllipse(HDC, int, int, int, int); BOOL WINAPI DrvExtFloodFill(HDC, int, int, COLORREF, UINT); BOOL WINAPI DrvExtTextOutA(HDC, int, int, UINT, LPRECT, LPSTR, UINT, LPINT); BOOL WINAPI DrvExtTextOutW(HDC, int, int, UINT, LPRECT, LPWSTR, UINT, LPINT); BOOL WINAPI DrvFillPath(HDC); BOOL WINAPI DrvFillRgn(HDC, HRGN, HBRUSH); BOOL WINAPI DrvFloodFill(HDC, int, int, COLORREF); BOOL WINAPI DrvFrameRgn(HDC, HRGN, HBRUSH, int, int); BOOL WINAPI DrvInvertRgn(HDC, HRGN); BOOL WINAPI DrvLineTo(HDC, int, int); BOOL WINAPI DrvPaintRgn(HDC, HRGN); BOOL WINAPI DrvPatBlt(HDC, int, int, int, int, DWORD); BOOL WINAPI DrvPie(HDC, int, int, int, int, int, int, int, int); BOOL WINAPI DrvPlayEnhMetaFileRecord(HDC, LPHANDLETABLE, LPENHMETARECORD, DWORD); BOOL WINAPI DrvPlayMetaFile(HDC, HMETAFILE); void WINAPI DrvPlayMetaFileRecord(HDC, LPHANDLETABLE, METARECORD FAR*, UINT); BOOL WINAPI DrvPolyBezier(HDC, LPPOINT, UINT); BOOL WINAPI DrvPolyBezierTo(HDC, LPPOINT, UINT); BOOL WINAPI DrvPolygon(HDC, LPPOINT, int); BOOL WINAPI DrvPolyline(HDC, LPPOINT, int); BOOL WINAPI DrvPolylineTo(HDC, LPPOINT, int); BOOL WINAPI DrvPolyPolygon(HDC, LPPOINT, LPINT, int); BOOL WINAPI DrvPolyPolyline(DWORD, HDC, LPPOINT, LPINT, int); BOOL WINAPI DrvRectangle(HDC, int, int, int, int); BOOL WINAPI DrvRoundRect(HDC, int, int, int, int, int, int); int WINAPI DrvSetDIBitsToDevice(HDC, int, int, int, int, int, int, UINT, UINT, LPVOID, LPBITMAPINFO, UINT); COLORREF WINAPI DrvSetPixel(HDC, int, int, COLORREF); BOOL WINAPI DrvStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); int WINAPI DrvStretchDIBits(HDC, int, int, int, int, int, int, int, int, const void FAR*, LPBITMAPINFO, UINT, DWORD); BOOL WINAPI DrvStrokeAndFillPath(HDC); BOOL WINAPI DrvStrokePath(HDC); BOOL WINAPI DrvTextOutA(HDC, int, int, LPSTR, int); BOOL WINAPI DrvTextOutW(HDC, int, int, LPWSTR, int); int WINAPI DrvUpdateColors(HDC); void WINAPI DrvRealizeDefaultPalette(HDC); DWORD WINAPI DrvGDIRealizePalette(HDC); UINT WINAPI DrvCreateSpb(HDC, int, int); BOOL WINAPI DrvDeleteObject(HGDIOBJ); LONG WINAPI DrvSetBitmapBits(HBITMAP, DWORD, const void FAR*); UINT WINAPI DrvSetDIBColorTable(HDC, UINT, UINT, const RGBQUAD FAR*); int WINAPI DrvSetDIBits(HDC, HBITMAP, UINT, UINT, const void FAR*, BITMAPINFO FAR*, UINT); BOOL WINAPI DrvSysDeleteObject(HGDIOBJ); BOOL WINAPI DrvSetPointerShape(LPCURSORSHAPE lpcur); BOOL WINAPI DrvSaveBits(LPRECT lprc, UINT wSave); UINT WINAPI DrvDeath(HDC); UINT WINAPI DrvResurrection(HDC, DWORD, DWORD, DWORD); LONG WINAPI DrvWinOldAppHackoMatic(LONG flags); LONG WINAPI DrvChangeDisplaySettings(LPDEVMODE, DWORD); LONG WINAPI DrvChangeDisplaySettingsEx(LPCSTR, LPDEVMODE, HWND, DWORD, LPVOID); BOOL WINAPI DrvSignalProc32(DWORD, DWORD, DWORD, WORD); void WINAPI DrvMouseEvent(UINT regAX, UINT regBX, UINT regCX, UINT regDX, UINT regSI, UINT regDI); void WINAPI DrvKeyboardEvent(UINT regAX, UINT regBX, UINT regSI, UINT regDI); // // GetAsyncKeyState // GetCursorPos // int WINAPI DrvGetAsyncKeyState(int); BOOL WINAPI DrvGetCursorPos(LPPOINT); // // GDI STRUCTURES // typedef struct tagGDIHANDLE { PBYTE pGdiObj; // If not swapped out, in GDI ds // If swapped out, local32handle BYTE objFlags; } GDIHANDLE, FAR* LPGDIHANDLE; #define OBJFLAGS_SWAPPEDOUT 0x40 #define OBJFLAGS_INVALID 0xFF // // More useful definition of RGNDATA // #define CRECTS_COMPLEX 32 #define CRECTS_MAX ((0x4000 - sizeof(RDH)) / sizeof(RECTL)) // // Keep RGNDATA <= 8K. WE can get a larger region then combine areas if // needed. // typedef struct tagRDH { DWORD dwSize; DWORD iType; DWORD nRectL; // Number of rect pieces DWORD nRgnSize; RECTL arclBounds; } RDH, FAR* LPRDH; typedef struct tagREAL_RGNDATA { RDH rdh; RECTL arclPieces[CRECTS_MAX]; } REAL_RGNDATA, FAR* LPREAL_RGNDATA; // // DRAWMODE // typedef struct tagDRAWMODE { int Rop2; // 16-bit encoded logical op int bkMode; // Background mode (for text only) DWORD bkColorP; // Physical background color DWORD txColorP; // Physical foreground (text) color int TBreakExtra; // Total pixels to stuff into a line int BreakExtra; // div(TBreakExtra, BreakCount) int BreakErr; // Running error term int BreakRem; // mod(TBreakExtra, BreakCount) int BreakCount; // Number of breaks in the line int CharExtra; // Extra pixels to stuff after each char DWORD bkColorL; // Logical background color DWORD txColorL; // Logical foreground color DWORD ICMCXform; // Transform for DIC image color matching int StretchBltMode; // Stretch blt mode DWORD eMiterLimit; // Miter limit (single precision IEEE float) } DRAWMODE; typedef DRAWMODE FAR * LPDRAWMODE; typedef struct tagGDIOBJ_HEAD { LOCALHANDLE ilhphOBJ; UINT ilObjType; DWORD ilObjCount; UINT ilObjMetaList; UINT ilObjSelCount; UINT ilObjTask; } GDIOBJ_HEAD; typedef GDIOBJ_HEAD FAR* LPGDIOBJ_HEAD; typedef struct tagDC { GDIOBJ_HEAD MrDCHead; BYTE DCFlags; BYTE DCFlags2; HMETAFILE hMetaFile; HRGN hClipRgn; HRGN hMetaRgn; GLOBALHANDLE hPDevice; // Physical device handle HPEN hPen; // Current logical pen HBRUSH hBrush; // Current logical brush HFONT hFont; // Current logical font HBITMAP hBitmap; // Current logical bitmap HPALETTE hPal; // Current logical palette LOCALHANDLE hLDevice; // Logical device handle HRGN hRaoClip; // Intersection of clip regions LOCALHANDLE hPDeviceBlock; // DC phys instance data inc. GDIINFO LOCALHANDLE hPPen; // Current physical pen LOCALHANDLE hPBrush; // Current physical brush LOCALHANDLE hPFontTrans; // Current physical font transform LOCALHANDLE hPFont; // Current physical font LPBYTE lpPDevice; // Ptr to physical device or bitmap PBYTE pLDeviceBlock; // Near ptr to logical device block PBYTE hBitBits; // Handle of selected bitmap bits PBYTE pPDeviceBlock; // Near ptr to physical device block LPBYTE lpPPen; // Ptr to OEM pen data LPBYTE lpPBrush; // Ptr to OEM brush data PBYTE pPFontTrans; // Near ptr to text transform LPBYTE lpPFont; // Ptr to physical font UINT nPFTIndex; // PFT index for font/DEVICE_FONT POINT Translate; DRAWMODE DrawMode; HGLOBAL hPath; UINT fwPath; // ... } DC; typedef DC FAR* LPDC; // // Values for DCFlags // #define DC_IS_MEMORY 0x01 #define DC_IS_DISPLAY 0x02 #define DC_HAS_DIRTYVISRGN 0x04 #define DC_IS_PARTIAL 0x80 #define DC_HAS_DIRTYFONT 0x40 #define DC_HAS_DIRTYPEN 0x20 #define DC_HAS_DIRTYCLIP 0x10 // // Values for DCFlags2 // #define DRAFTFLAG 0x01 #define ChkDispPal 0x02 #define dfFont 0x04 #define SimVectFont 0x08 #define deFont 0x10 #define TT_NO_DX_MOD 0x40 // DC is for Micrografx's metafile recorder #define DC_DIB 0x80 // memory DC is now a DIB DC. // // Values for fwPath // #define DCPATH_ACTIVE 0x0001 #define DCPATH_SAVE 0x0002 #define DCPATH_CLOCKWISE 0x0004 // // BRUSH structure // typedef struct tagBRUSH { GDIOBJ_HEAD ilObjHead; LOGBRUSH ilBrushOverhead; // lbHatch is the HGLOBAL of the bitmap HBITMAP ilBrushBitmapOrg; } BRUSH; typedef BRUSH FAR* LPBRUSH; #endif // !_WINDDI_