You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
631 lines
32 KiB
631 lines
32 KiB
/****************************************************************************/
|
|
// ndddata.c
|
|
//
|
|
// RDP DD data
|
|
//
|
|
// Copyright (C) 1996-2000 Microsoft Corporation
|
|
/****************************************************************************/
|
|
|
|
#include <ndcgdata.h>
|
|
#include <nddapi.h>
|
|
#include <nshmapi.h>
|
|
#include <aschapi.h>
|
|
|
|
|
|
/****************************************************************************/
|
|
/* Functions supported by our Display Driver. Each entry is of the form: */
|
|
/* index - NT DDK defined index for the DDI function */
|
|
/* function - pointer to our intercept function */
|
|
/****************************************************************************/
|
|
#ifdef DRAW_GDIPLUS
|
|
#ifdef DRAW_NINEGRID
|
|
DC_CONST_DATA_ARRAY(DRVFN, ddDriverFns, DD_NUM_DRIVER_INTERCEPTS,
|
|
DC_STRUCT38(
|
|
// Required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvEnablePDEV, (PFN)DrvEnablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvCompletePDEV, (PFN)DrvCompletePDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisablePDEV, (PFN)DrvDisablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvEnableSurface, (PFN)DrvEnableSurface ),
|
|
DC_STRUCT2( INDEX_DrvDisableSurface, (PFN)DrvDisableSurface ),
|
|
|
|
// Non-required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvAssertMode, (PFN)DrvAssertMode ),
|
|
DC_STRUCT2( INDEX_DrvResetPDEV, (PFN)DrvResetPDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisableDriver, (PFN)DrvDisableDriver ),
|
|
DC_STRUCT2( INDEX_DrvGetModes, (PFN)DrvGetModes ),
|
|
DC_STRUCT2( INDEX_DrvCreateDeviceBitmap, (PFN)DrvCreateDeviceBitmap),
|
|
DC_STRUCT2( INDEX_DrvDeleteDeviceBitmap, (PFN)DrvDeleteDeviceBitmap),
|
|
|
|
// Mouse pointer related functions.
|
|
DC_STRUCT2( INDEX_DrvMovePointer, (PFN)DrvMovePointer ),
|
|
DC_STRUCT2( INDEX_DrvSetPointerShape, (PFN)DrvSetPointerShape ),
|
|
|
|
// Ouput functions.
|
|
DC_STRUCT2( INDEX_DrvCopyBits, (PFN)DrvCopyBits ),
|
|
DC_STRUCT2( INDEX_DrvStrokePath, (PFN)DrvStrokePath ),
|
|
DC_STRUCT2( INDEX_DrvTextOut, (PFN)DrvTextOut ),
|
|
DC_STRUCT2( INDEX_DrvBitBlt, (PFN)DrvBitBlt ),
|
|
DC_STRUCT2( INDEX_DrvLineTo, (PFN)DrvLineTo ),
|
|
DC_STRUCT2( INDEX_DrvStretchBlt, (PFN)DrvStretchBlt ),
|
|
DC_STRUCT2( INDEX_DrvFillPath, (PFN)DrvFillPath ),
|
|
DC_STRUCT2( INDEX_DrvPaint, (PFN)DrvPaint ),
|
|
DC_STRUCT2( INDEX_DrvSaveScreenBits, (PFN)DrvSaveScreenBits ),
|
|
DC_STRUCT2( INDEX_DrvNineGrid, (PFN)DrvNineGrid ),
|
|
DC_STRUCT2( INDEX_DrvDrawEscape, (PFN)DrvDrawEscape ),
|
|
|
|
// Support functions.
|
|
DC_STRUCT2( INDEX_DrvDestroyFont, (PFN)DrvDestroyFont ),
|
|
DC_STRUCT2( INDEX_DrvSetPalette, (PFN)DrvSetPalette ),
|
|
DC_STRUCT2( INDEX_DrvRealizeBrush, (PFN)DrvRealizeBrush ),
|
|
DC_STRUCT2( INDEX_DrvEscape, (PFN)DrvEscape ),
|
|
DC_STRUCT2( INDEX_DrvDitherColor, (PFN)DrvDitherColor ),
|
|
|
|
// TS-specfic entry points.
|
|
DC_STRUCT2( INDEX_DrvConnect, (PFN)DrvConnect ),
|
|
DC_STRUCT2( INDEX_DrvDisconnect, (PFN)DrvDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvReconnect, (PFN)DrvReconnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowConnect, (PFN)DrvShadowConnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowDisconnect, (PFN)DrvShadowDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvMovePointerEx, (PFN)DrvMovePointerEx ),
|
|
|
|
// For Direct Draw.
|
|
DC_STRUCT2( INDEX_DrvGetDirectDrawInfo, (PFN) DrvGetDirectDrawInfo),
|
|
DC_STRUCT2( INDEX_DrvEnableDirectDraw, (PFN) DrvEnableDirectDraw ),
|
|
DC_STRUCT2( INDEX_DrvDisableDirectDraw, (PFN) DrvDisableDirectDraw)
|
|
)
|
|
);
|
|
#else
|
|
DC_CONST_DATA_ARRAY(DRVFN, ddDriverFns, DD_NUM_DRIVER_INTERCEPTS,
|
|
DC_STRUCT37(
|
|
// Required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvEnablePDEV, (PFN)DrvEnablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvCompletePDEV, (PFN)DrvCompletePDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisablePDEV, (PFN)DrvDisablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvEnableSurface, (PFN)DrvEnableSurface ),
|
|
DC_STRUCT2( INDEX_DrvDisableSurface, (PFN)DrvDisableSurface ),
|
|
|
|
// Non-required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvAssertMode, (PFN)DrvAssertMode ),
|
|
DC_STRUCT2( INDEX_DrvResetPDEV, (PFN)DrvResetPDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisableDriver, (PFN)DrvDisableDriver ),
|
|
DC_STRUCT2( INDEX_DrvGetModes, (PFN)DrvGetModes ),
|
|
DC_STRUCT2( INDEX_DrvCreateDeviceBitmap, (PFN)DrvCreateDeviceBitmap),
|
|
DC_STRUCT2( INDEX_DrvDeleteDeviceBitmap, (PFN)DrvDeleteDeviceBitmap),
|
|
|
|
// Mouse pointer related functions.
|
|
DC_STRUCT2( INDEX_DrvMovePointer, (PFN)DrvMovePointer ),
|
|
DC_STRUCT2( INDEX_DrvSetPointerShape, (PFN)DrvSetPointerShape ),
|
|
|
|
// Ouput functions.
|
|
DC_STRUCT2( INDEX_DrvCopyBits, (PFN)DrvCopyBits ),
|
|
DC_STRUCT2( INDEX_DrvStrokePath, (PFN)DrvStrokePath ),
|
|
DC_STRUCT2( INDEX_DrvTextOut, (PFN)DrvTextOut ),
|
|
DC_STRUCT2( INDEX_DrvBitBlt, (PFN)DrvBitBlt ),
|
|
DC_STRUCT2( INDEX_DrvLineTo, (PFN)DrvLineTo ),
|
|
DC_STRUCT2( INDEX_DrvStretchBlt, (PFN)DrvStretchBlt ),
|
|
DC_STRUCT2( INDEX_DrvFillPath, (PFN)DrvFillPath ),
|
|
DC_STRUCT2( INDEX_DrvPaint, (PFN)DrvPaint ),
|
|
DC_STRUCT2( INDEX_DrvSaveScreenBits, (PFN)DrvSaveScreenBits ),
|
|
DC_STRUCT2( INDEX_DrvDrawEscape, (PFN)DrvDrawEscape ),
|
|
|
|
// Support functions.
|
|
DC_STRUCT2( INDEX_DrvDestroyFont, (PFN)DrvDestroyFont ),
|
|
DC_STRUCT2( INDEX_DrvSetPalette, (PFN)DrvSetPalette ),
|
|
DC_STRUCT2( INDEX_DrvRealizeBrush, (PFN)DrvRealizeBrush ),
|
|
DC_STRUCT2( INDEX_DrvEscape, (PFN)DrvEscape ),
|
|
DC_STRUCT2( INDEX_DrvDitherColor, (PFN)DrvDitherColor ),
|
|
|
|
// TS-specfic entry points.
|
|
DC_STRUCT2( INDEX_DrvConnect, (PFN)DrvConnect ),
|
|
DC_STRUCT2( INDEX_DrvDisconnect, (PFN)DrvDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvReconnect, (PFN)DrvReconnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowConnect, (PFN)DrvShadowConnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowDisconnect, (PFN)DrvShadowDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvMovePointerEx, (PFN)DrvMovePointerEx ),
|
|
|
|
// For Direct Draw.
|
|
DC_STRUCT2( INDEX_DrvGetDirectDrawInfo, (PFN) DrvGetDirectDrawInfo),
|
|
DC_STRUCT2( INDEX_DrvEnableDirectDraw, (PFN) DrvEnableDirectDraw ),
|
|
DC_STRUCT2( INDEX_DrvDisableDirectDraw, (PFN) DrvDisableDirectDraw)
|
|
)
|
|
);
|
|
#endif // DRAW_NINEGRID
|
|
#else // DRAW_GDIPLUS
|
|
#ifdef DRAW_NINEGRID
|
|
DC_CONST_DATA_ARRAY(DRVFN, ddDriverFns, DD_NUM_DRIVER_INTERCEPTS,
|
|
DC_STRUCT37(
|
|
// Required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvEnablePDEV, (PFN)DrvEnablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvCompletePDEV, (PFN)DrvCompletePDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisablePDEV, (PFN)DrvDisablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvEnableSurface, (PFN)DrvEnableSurface ),
|
|
DC_STRUCT2( INDEX_DrvDisableSurface, (PFN)DrvDisableSurface ),
|
|
|
|
// Non-required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvAssertMode, (PFN)DrvAssertMode ),
|
|
DC_STRUCT2( INDEX_DrvResetPDEV, (PFN)DrvResetPDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisableDriver, (PFN)DrvDisableDriver ),
|
|
DC_STRUCT2( INDEX_DrvGetModes, (PFN)DrvGetModes ),
|
|
DC_STRUCT2( INDEX_DrvCreateDeviceBitmap, (PFN)DrvCreateDeviceBitmap),
|
|
DC_STRUCT2( INDEX_DrvDeleteDeviceBitmap, (PFN)DrvDeleteDeviceBitmap),
|
|
|
|
// Mouse pointer related functions.
|
|
DC_STRUCT2( INDEX_DrvMovePointer, (PFN)DrvMovePointer ),
|
|
DC_STRUCT2( INDEX_DrvSetPointerShape, (PFN)DrvSetPointerShape ),
|
|
|
|
// Ouput functions.
|
|
DC_STRUCT2( INDEX_DrvCopyBits, (PFN)DrvCopyBits ),
|
|
DC_STRUCT2( INDEX_DrvStrokePath, (PFN)DrvStrokePath ),
|
|
DC_STRUCT2( INDEX_DrvTextOut, (PFN)DrvTextOut ),
|
|
DC_STRUCT2( INDEX_DrvBitBlt, (PFN)DrvBitBlt ),
|
|
DC_STRUCT2( INDEX_DrvLineTo, (PFN)DrvLineTo ),
|
|
DC_STRUCT2( INDEX_DrvStretchBlt, (PFN)DrvStretchBlt ),
|
|
DC_STRUCT2( INDEX_DrvFillPath, (PFN)DrvFillPath ),
|
|
DC_STRUCT2( INDEX_DrvPaint, (PFN)DrvPaint ),
|
|
DC_STRUCT2( INDEX_DrvSaveScreenBits, (PFN)DrvSaveScreenBits ),
|
|
DC_STRUCT2( INDEX_DrvNineGrid, (PFN)DrvNineGrid ),
|
|
|
|
// Support functions.
|
|
DC_STRUCT2( INDEX_DrvDestroyFont, (PFN)DrvDestroyFont ),
|
|
DC_STRUCT2( INDEX_DrvSetPalette, (PFN)DrvSetPalette ),
|
|
DC_STRUCT2( INDEX_DrvRealizeBrush, (PFN)DrvRealizeBrush ),
|
|
DC_STRUCT2( INDEX_DrvEscape, (PFN)DrvEscape ),
|
|
DC_STRUCT2( INDEX_DrvDitherColor, (PFN)DrvDitherColor ),
|
|
|
|
// TS-specfic entry points.
|
|
DC_STRUCT2( INDEX_DrvConnect, (PFN)DrvConnect ),
|
|
DC_STRUCT2( INDEX_DrvDisconnect, (PFN)DrvDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvReconnect, (PFN)DrvReconnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowConnect, (PFN)DrvShadowConnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowDisconnect, (PFN)DrvShadowDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvMovePointerEx, (PFN)DrvMovePointerEx ),
|
|
|
|
// For Direct Draw.
|
|
DC_STRUCT2( INDEX_DrvGetDirectDrawInfo, (PFN) DrvGetDirectDrawInfo),
|
|
DC_STRUCT2( INDEX_DrvEnableDirectDraw, (PFN) DrvEnableDirectDraw ),
|
|
DC_STRUCT2( INDEX_DrvDisableDirectDraw, (PFN) DrvDisableDirectDraw)
|
|
)
|
|
);
|
|
#else // DRAW_NINEGRID
|
|
DC_CONST_DATA_ARRAY(DRVFN, ddDriverFns, DD_NUM_DRIVER_INTERCEPTS,
|
|
DC_STRUCT36(
|
|
// Required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvEnablePDEV, (PFN)DrvEnablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvCompletePDEV, (PFN)DrvCompletePDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisablePDEV, (PFN)DrvDisablePDEV ),
|
|
DC_STRUCT2( INDEX_DrvEnableSurface, (PFN)DrvEnableSurface ),
|
|
DC_STRUCT2( INDEX_DrvDisableSurface, (PFN)DrvDisableSurface ),
|
|
|
|
// Non-required display driver functions.
|
|
DC_STRUCT2( INDEX_DrvAssertMode, (PFN)DrvAssertMode ),
|
|
DC_STRUCT2( INDEX_DrvResetPDEV, (PFN)DrvResetPDEV ),
|
|
DC_STRUCT2( INDEX_DrvDisableDriver, (PFN)DrvDisableDriver ),
|
|
DC_STRUCT2( INDEX_DrvGetModes, (PFN)DrvGetModes ),
|
|
DC_STRUCT2( INDEX_DrvCreateDeviceBitmap, (PFN)DrvCreateDeviceBitmap),
|
|
DC_STRUCT2( INDEX_DrvDeleteDeviceBitmap, (PFN)DrvDeleteDeviceBitmap),
|
|
|
|
// Mouse pointer related functions.
|
|
DC_STRUCT2( INDEX_DrvMovePointer, (PFN)DrvMovePointer ),
|
|
DC_STRUCT2( INDEX_DrvSetPointerShape, (PFN)DrvSetPointerShape ),
|
|
|
|
// Ouput functions.
|
|
DC_STRUCT2( INDEX_DrvCopyBits, (PFN)DrvCopyBits ),
|
|
DC_STRUCT2( INDEX_DrvStrokePath, (PFN)DrvStrokePath ),
|
|
DC_STRUCT2( INDEX_DrvTextOut, (PFN)DrvTextOut ),
|
|
DC_STRUCT2( INDEX_DrvBitBlt, (PFN)DrvBitBlt ),
|
|
DC_STRUCT2( INDEX_DrvLineTo, (PFN)DrvLineTo ),
|
|
DC_STRUCT2( INDEX_DrvStretchBlt, (PFN)DrvStretchBlt ),
|
|
DC_STRUCT2( INDEX_DrvFillPath, (PFN)DrvFillPath ),
|
|
DC_STRUCT2( INDEX_DrvPaint, (PFN)DrvPaint ),
|
|
DC_STRUCT2( INDEX_DrvSaveScreenBits, (PFN)DrvSaveScreenBits ),
|
|
|
|
// Support functions.
|
|
DC_STRUCT2( INDEX_DrvDestroyFont, (PFN)DrvDestroyFont ),
|
|
DC_STRUCT2( INDEX_DrvSetPalette, (PFN)DrvSetPalette ),
|
|
DC_STRUCT2( INDEX_DrvRealizeBrush, (PFN)DrvRealizeBrush ),
|
|
DC_STRUCT2( INDEX_DrvEscape, (PFN)DrvEscape ),
|
|
DC_STRUCT2( INDEX_DrvDitherColor, (PFN)DrvDitherColor ),
|
|
|
|
// TS-specfic entry points.
|
|
DC_STRUCT2( INDEX_DrvConnect, (PFN)DrvConnect ),
|
|
DC_STRUCT2( INDEX_DrvDisconnect, (PFN)DrvDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvReconnect, (PFN)DrvReconnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowConnect, (PFN)DrvShadowConnect ),
|
|
DC_STRUCT2( INDEX_DrvShadowDisconnect, (PFN)DrvShadowDisconnect ),
|
|
DC_STRUCT2( INDEX_DrvMovePointerEx, (PFN)DrvMovePointerEx ),
|
|
|
|
// For Direct Draw.
|
|
DC_STRUCT2( INDEX_DrvGetDirectDrawInfo, (PFN) DrvGetDirectDrawInfo),
|
|
DC_STRUCT2( INDEX_DrvEnableDirectDraw, (PFN) DrvEnableDirectDraw ),
|
|
DC_STRUCT2( INDEX_DrvDisableDirectDraw, (PFN) DrvDisableDirectDraw)
|
|
)
|
|
);
|
|
#endif // DRAW_NINEGRID
|
|
#endif // DRAW_GDIPLUS
|
|
|
|
/****************************************************************************/
|
|
/* Global Table defining the 20 Windows default colours. For 256 colour */
|
|
/* palettes the first 10 must be put at the beginning of the palette and */
|
|
/* the last 10 at the end of the palette. */
|
|
/****************************************************************************/
|
|
DC_CONST_DATA_ARRAY(PALETTEENTRY, ddDefaultPalette, 20,
|
|
DC_STRUCT20(
|
|
DC_STRUCT4( 0, 0, 0, 0 ), /* 0 */
|
|
DC_STRUCT4( 0x80,0, 0, 0 ), /* 1 */
|
|
DC_STRUCT4( 0, 0x80,0, 0 ), /* 2 */
|
|
DC_STRUCT4( 0x80,0x80,0, 0 ), /* 3 */
|
|
DC_STRUCT4( 0, 0, 0x80,0 ), /* 4 */
|
|
DC_STRUCT4( 0x80,0, 0x80,0 ), /* 5 */
|
|
DC_STRUCT4( 0, 0x80,0x80,0 ), /* 6 */
|
|
DC_STRUCT4( 0xC0,0xC0,0xC0,0 ), /* 7 */
|
|
DC_STRUCT4( 192, 220, 192, 0 ), /* 8 */
|
|
DC_STRUCT4( 166, 202, 240, 0 ), /* 9 */
|
|
DC_STRUCT4( 255, 251, 240, 0 ), /* 10 */
|
|
DC_STRUCT4( 160, 160, 164, 0 ), /* 11 */
|
|
DC_STRUCT4( 0x80,0x80,0x80,0 ), /* 12 */
|
|
DC_STRUCT4( 0xFF,0, 0 ,0 ), /* 13 */
|
|
DC_STRUCT4( 0, 0xFF,0 ,0 ), /* 14 */
|
|
DC_STRUCT4( 0xFF,0xFF,0 ,0 ), /* 15 */
|
|
DC_STRUCT4( 0 ,0, 0xFF,0 ), /* 16 */
|
|
DC_STRUCT4( 0xFF,0, 0xFF,0 ), /* 17 */
|
|
DC_STRUCT4( 0, 0xFF,0xFF,0 ), /* 18 */
|
|
DC_STRUCT4( 0xFF,0xFF,0xFF,0 ) /* 19 */
|
|
));
|
|
|
|
|
|
/****************************************************************************/
|
|
/* Global Table defining the 16 Windows default VGA colours. */
|
|
/****************************************************************************/
|
|
DC_CONST_DATA_ARRAY(PALETTEENTRY, ddDefaultVgaPalette, 16,
|
|
DC_STRUCT16(
|
|
DC_STRUCT4( 0, 0, 0, 0 ), /* 0 */
|
|
DC_STRUCT4( 0x80,0, 0, 0 ), /* 1 */
|
|
DC_STRUCT4( 0, 0x80,0, 0 ), /* 2 */
|
|
DC_STRUCT4( 0x80,0x80,0, 0 ), /* 3 */
|
|
DC_STRUCT4( 0, 0, 0x80,0 ), /* 4 */
|
|
DC_STRUCT4( 0x80,0, 0x80,0 ), /* 5 */
|
|
DC_STRUCT4( 0, 0x80,0x80,0 ), /* 6 */
|
|
DC_STRUCT4( 0x80,0x80,0x80,0 ), /* 7 */
|
|
DC_STRUCT4( 0xC0,0xC0,0xC0,0 ), /* 8 */
|
|
DC_STRUCT4( 0xFF,0, 0, 0 ), /* 9 */
|
|
DC_STRUCT4( 0, 0xFF,0, 0 ), /* 10 */
|
|
DC_STRUCT4( 0xFF,0xFF,0, 0 ), /* 11 */
|
|
DC_STRUCT4( 0, 0, 0xFF,0 ), /* 12 */
|
|
DC_STRUCT4( 0xFF,0, 0xFF,0 ), /* 13 */
|
|
DC_STRUCT4( 0, 0xFF,0xFF,0 ), /* 14 */
|
|
DC_STRUCT4( 0xFF,0xFF,0xFF,0 ) /* 15 */
|
|
));
|
|
|
|
|
|
/****************************************************************************/
|
|
/* ddDefaultGdi */
|
|
/* */
|
|
/* This contains the default GDIINFO fields that are passed back to GDI */
|
|
/* during DrvEnablePDEV. */
|
|
/* */
|
|
/* NOTE: This structure defaults to values for an 8bpp palette device. */
|
|
/* Some fields are overwritten for different colour depths. */
|
|
/* */
|
|
/* It is expected that DDML ignores a lot of these parameters and */
|
|
/* uses the values from the primary driver instead */
|
|
/****************************************************************************/
|
|
DC_CONST_DATA(GDIINFO, ddDefaultGdi,
|
|
DC_STRUCT35(
|
|
GDI_DRIVER_VERSION,
|
|
DT_RASDISPLAY, /* ulTechnology */
|
|
320, /* ulHorzSize (display width: mm) */
|
|
240, /* ulVertSize (display height: mm) */
|
|
|
|
0, /* ulHorzRes (filled in later) */
|
|
0, /* ulVertRes (filled in later) */
|
|
0, /* cBitsPixel (filled in later) */
|
|
0, /* cPlanes (filled in later) */
|
|
20, /* ulNumColors (palette managed) */
|
|
0, /* flRaster (DDI reserved field) */
|
|
|
|
0, /* ulLogPixelsX (filled in later) */
|
|
0, /* ulLogPixelsY (filled in later) */
|
|
|
|
TC_RA_ABLE, /* flTextCaps - If we had wanted console windows*/
|
|
|
|
/* to scroll by repainting the entire window, */
|
|
/* instead of doing a screen-to-screen blt, we */
|
|
/* would have set TC_SCROLLBLT (yes, the flag */
|
|
/* is backwards). */
|
|
|
|
0, /* ulDACRed (filled in later) */
|
|
0, /* ulDACGreen (filled in later) */
|
|
0, /* ulDACBlue (filled in later) */
|
|
|
|
0x24, /* ulAspectX */
|
|
0x24, /* ulAspectY */
|
|
0x33, /* ulAspectXY (one-to-one aspect ratio) */
|
|
|
|
1, /* xStyleStep */
|
|
1, /* yStyleStep */
|
|
3, /* denStyleStep -- Styles have a one-to-one */
|
|
|
|
/* aspect ratio, and every dot is 3 pixels long */
|
|
|
|
DC_STRUCT2( 0, 0 ), /* ptlPhysOffset */
|
|
DC_STRUCT2( 0, 0 ), /* szlPhysSize */
|
|
|
|
256, /* ulNumPalReg */
|
|
|
|
DC_STRUCT16( /* ciDevice */
|
|
DC_STRUCT3( 6700, 3300, 0 ), /* Red */
|
|
DC_STRUCT3( 2100, 7100, 0 ), /* Green */
|
|
DC_STRUCT3( 1400, 800, 0 ), /* Blue */
|
|
DC_STRUCT3( 1750, 3950, 0 ), /* Cyan */
|
|
DC_STRUCT3( 4050, 2050, 0 ), /* Magenta */
|
|
DC_STRUCT3( 4400, 5200, 0 ), /* Yellow */
|
|
DC_STRUCT3( 3127, 3290, 0 ), /* AlignmentWhite */
|
|
20000, /* RedGamma */
|
|
20000, /* GreenGamma */
|
|
20000, /* BlueGamma */
|
|
0, 0, 0, 0, 0, 0 /* No dye correction for raster displays */
|
|
),
|
|
|
|
0, /* ulDevicePelsDPI (for printers only) */
|
|
PRIMARY_ORDER_CBA, /* ulPrimaryOrder */
|
|
HT_PATSIZE_4x4_M, /* ulHTPatternSize */
|
|
HT_FORMAT_8BPP, /* ulHTOutputFormat */
|
|
HT_FLAG_ADDITIVE_PRIMS, /* flHTFlags */
|
|
0, /* ulVRefresh */
|
|
1, /* ulBltAlignment */
|
|
800, /* ulPanningHorzRes */
|
|
600 /* ulPanningVertRes */
|
|
|
|
/* */
|
|
/* NOTE: */
|
|
/* NT 5 has added these fields post SP-3, if we care */
|
|
/* */
|
|
/* 0, /* xPanningAlignment */
|
|
/* 0, /* yPanningAlignment */
|
|
/* */
|
|
));
|
|
|
|
|
|
/****************************************************************************/
|
|
/* ddDefaultDevInfo */
|
|
/* */
|
|
/* This contains the default DEVINFO fields that are passed back to GDI */
|
|
/* during DrvEnablePDEV. */
|
|
/* */
|
|
/* NOTE: This structure defaults to values for an 8bpp palette device. */
|
|
/* Some fields are overwritten for different colour depths. */
|
|
/****************************************************************************/
|
|
#ifdef DRAW_NINEGRID
|
|
DC_CONST_DATA(DEVINFO, ddDefaultDevInfo,
|
|
DC_STRUCT10(
|
|
DC_STRUCT1(
|
|
GCAPS_OPAQUERECT |
|
|
GCAPS_PALMANAGED |
|
|
GCAPS_COLOR_DITHER |
|
|
GCAPS_MONO_DITHER |
|
|
GCAPS_ALTERNATEFILL |
|
|
GCAPS_WINDINGFILL
|
|
), /* NOTE: Only enable ASYNCMOVE if your code */
|
|
/* and hardware can handle DrvMovePointer */
|
|
/* calls at any time, even while another */
|
|
/* thread is in the middle of a drawing */
|
|
/* call such as DrvBitBlt. */
|
|
/* flGraphicsFlags */
|
|
|
|
DC_STRUCT14(
|
|
16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
|
|
VARIABLE_PITCH | FF_DONTCARE,L"System"),
|
|
/* lfDefaultFont */
|
|
|
|
DC_STRUCT14(
|
|
12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_STROKE_PRECIS,PROOF_QUALITY,
|
|
VARIABLE_PITCH | FF_DONTCARE,L"MS Sans Serif"),
|
|
/* lfAnsiVarFont */
|
|
|
|
DC_STRUCT14(
|
|
12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_STROKE_PRECIS,PROOF_QUALITY,
|
|
FIXED_PITCH | FF_DONTCARE, L"Courier"),
|
|
/* lfAnsiFixFont */
|
|
|
|
0, /* cFonts */
|
|
BMF_8BPP, /* iDitherFormat */
|
|
8, /* cxDither */
|
|
8, /* cyDither */
|
|
0, /* hpalDefault (filled in later) */
|
|
GCAPS2_REMOTEDRIVER /* this is to advertise as remote driver */
|
|
) );
|
|
#else
|
|
DC_CONST_DATA(DEVINFO, ddDefaultDevInfo,
|
|
DC_STRUCT9(
|
|
DC_STRUCT1(
|
|
GCAPS_OPAQUERECT |
|
|
GCAPS_PALMANAGED |
|
|
GCAPS_COLOR_DITHER |
|
|
GCAPS_MONO_DITHER |
|
|
GCAPS_ALTERNATEFILL |
|
|
GCAPS_WINDINGFILL
|
|
), /* NOTE: Only enable ASYNCMOVE if your code */
|
|
/* and hardware can handle DrvMovePointer */
|
|
/* calls at any time, even while another */
|
|
/* thread is in the middle of a drawing */
|
|
/* call such as DrvBitBlt. */
|
|
/* flGraphicsFlags */
|
|
|
|
DC_STRUCT14(
|
|
16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
|
|
VARIABLE_PITCH | FF_DONTCARE,L"System"),
|
|
/* lfDefaultFont */
|
|
|
|
DC_STRUCT14(
|
|
12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_STROKE_PRECIS,PROOF_QUALITY,
|
|
VARIABLE_PITCH | FF_DONTCARE,L"MS Sans Serif"),
|
|
/* lfAnsiVarFont */
|
|
|
|
DC_STRUCT14(
|
|
12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_STROKE_PRECIS,PROOF_QUALITY,
|
|
FIXED_PITCH | FF_DONTCARE, L"Courier"),
|
|
/* lfAnsiFixFont */
|
|
|
|
0, /* cFonts */
|
|
BMF_8BPP, /* iDitherFormat */
|
|
8, /* cxDither */
|
|
8, /* cyDither */
|
|
0 /* hpalDefault (filled in later) */
|
|
) );
|
|
|
|
#endif
|
|
|
|
// Flag for DDInit to set when it initializes correctly.
|
|
DC_DATA(BOOL, ddInitialised, FALSE);
|
|
|
|
// Flag to tell DrvEnableSurface that it's time to initialize.
|
|
DC_DATA(BOOL, ddInitPending, FALSE);
|
|
|
|
// Connection and reconnection flags. ddConnected is used to alter the
|
|
// behavior of the DD depending on whether we've been connected according to
|
|
// Win32K. Both are useful for debugging.
|
|
DC_DATA(BOOL, ddConnected, FALSE);
|
|
DC_DATA(BOOL, ddReconnected, FALSE);
|
|
|
|
// Flag to specify whether we're connected to a console.
|
|
DC_DATA(BOOL, ddConsole, FALSE);
|
|
|
|
// Temporary flag to aid in limiting the number of shadows per session to two
|
|
// It should go away when n-way shadowing is supported.
|
|
// TODO: Remove this when no longer needed.
|
|
DC_DATA(BOOL, ddIgnoreShadowDisconnect, FALSE);
|
|
|
|
// Pointer to the Shared Memory.
|
|
DC_DATA(PSHM_SHARED_MEMORY, pddShm, NULL);
|
|
|
|
// Handle to timer object for signalling the WD.
|
|
DC_DATA(PKTIMER, pddWdTimer, NULL);
|
|
|
|
// Handle to the WD channel - provided on DrvConnect.
|
|
DC_DATA(HANDLE, ddWdHandle, NULL);
|
|
|
|
// TSWDs - for diagnostic purposes.
|
|
DC_DATA(PVOID, pddTSWd, NULL);
|
|
DC_DATA(PVOID, pddTSWdShadow, NULL);
|
|
|
|
// Size of the current session's desktop.
|
|
DC_DATA(INT32, ddDesktopHeight, 0);
|
|
DC_DATA(INT32, ddDesktopWidth, 0);
|
|
|
|
// The cursor stamp the last time we IOCtl'd into the WD.
|
|
DC_DATA(UINT32, ddLastSentCursorStamp, 0);
|
|
|
|
// Current scheduler mode.
|
|
DC_DATA(UINT32, ddSchCurrentMode, SCH_MODE_ASLEEP);
|
|
DC_DATA(BOOL, ddSchInputKickMode, FALSE);
|
|
|
|
// Frame Buffer.
|
|
DC_DATA(BYTE *, pddFrameBuf, NULL);
|
|
DC_DATA(INT32, ddFrameBufX, 0);
|
|
DC_DATA(INT32, ddFrameBufY, 0);
|
|
DC_DATA(INT32, ddFrameBufBpp, 0);
|
|
DC_DATA(UINT32, ddFrameIFormat, 0);
|
|
|
|
// Section object for the frame buffer
|
|
DC_DATA(HANDLE, ddSectionObject, NULL);
|
|
|
|
// Record rectangle passed by DdLock
|
|
DC_DATA(INT32, ddLockAreaLeft, 0);
|
|
DC_DATA(INT32, ddLockAreaRight, 0);
|
|
DC_DATA(INT32, ddLockAreaTop, 0);
|
|
DC_DATA(INT32, ddLockAreaBottom, 0);
|
|
|
|
// Flag to record if DdLock/DdUnlock is called in pair
|
|
DC_DATA(BOOL, ddLocked, FALSE);
|
|
|
|
// Performance counters
|
|
DC_DATA(PTHINWIRECACHE, pddCacheStats, NULL);
|
|
#ifdef DC_COUNTERS
|
|
DC_DATA(PPROTOCOLSTATUS, pddProtStats, NULL);
|
|
#endif
|
|
|
|
#ifdef DC_DEBUG
|
|
#include "dbg_fncall_hist.h"
|
|
|
|
// NT BUG 539912 - track how many sections are allocated and how many are
|
|
// deleted
|
|
// This is a signed value to track possible excess deletion
|
|
DC_DATA(INT32, dbg_ddSectionAllocs, 0);
|
|
DC_DATA(BYTE, dbg_ddFnCallHistoryIndex, 0);
|
|
DC_DATA(BYTE, dbg_ddFnCallHistoryIndexMAX, DBG_DD_FNCALL_HIST_MAX);
|
|
DC_DATA_ARRAY(DBG_DD_FUNCALL_HISTORY, dbg_ddFnCallHistory, DBG_DD_FNCALL_HIST_MAX, 0);
|
|
#endif // DC_DEBUG
|
|
|
|
/****************************************************************************/
|
|
/* Flag to tell debugger extensions whether this is a debug build */
|
|
/****************************************************************************/
|
|
#ifdef DC_DEBUG
|
|
DC_DATA(BOOL, ddDebug, TRUE);
|
|
#else
|
|
DC_DATA(BOOL, ddDebug, FALSE);
|
|
#endif
|
|
|
|
#ifdef DC_DEBUG
|
|
/****************************************************************************/
|
|
/* Trace data (explicitly initialized in DrvEnableDriver) */
|
|
/****************************************************************************/
|
|
DC_DATA(unsigned, ddTrcType, 0);
|
|
DC_DATA(BOOL, ddTrcToWD, 0);
|
|
|
|
/****************************************************************************/
|
|
/* State data for debugging */
|
|
/****************************************************************************/
|
|
#define DD_SET_STATE(a) ddState = a
|
|
#define DD_UPD_STATE(a) ddState |= a
|
|
#define DD_CLR_STATE(a) ddState &= ~a
|
|
|
|
#define DD_ENABLE_DRIVER 0x00000001
|
|
#define DD_CONNECT 0x00000002
|
|
#define DD_RECONNECT_IN 0x00000004
|
|
#define DD_RECONNECT_OUT 0x00000008
|
|
#define DD_ENABLE_PDEV 0x00000010
|
|
#define DD_ENABLE_PDEV_ERR 0x00000020
|
|
#define DD_COMPLETE_PDEV 0x00000040
|
|
#define DD_ENABLE_SURFACE_IN 0x00000080
|
|
#define DD_ENABLE_SURFACE_OUT 0x00000100
|
|
#define DD_ENABLE_SURFACE_ERR 0x00000200
|
|
#define DD_INIT_IN 0x00000400
|
|
#define DD_INIT_OUT 0x00000800
|
|
#define DD_INIT_FAIL1 0x00001000
|
|
#define DD_INIT_FAIL2 0x00002000
|
|
#define DD_INIT_OK1 0x00004000
|
|
#define DD_INIT_OK_ALL 0x00008000
|
|
#define DD_INIT_IOCTL_IN 0x00010000
|
|
#define DD_INIT_IOCTL_OUT 0x00020000
|
|
#define DD_INIT_SHM_OUT 0x00040000
|
|
#define DD_INIT_CONNECT 0x00080000
|
|
#define DD_REINIT 0x00100000
|
|
#define DD_DISCONNECT_IN 0x00200000
|
|
#define DD_DISCONNECT_OUT 0x00400000
|
|
#define DD_DISCONNECT_ERR 0x00800000
|
|
#define DD_TIMEROBJ 0x01000000
|
|
#define DD_WAS_DISCONNECTED 0x02000000
|
|
#define DD_SHADOW_SETUP 0x04000000
|
|
#define DD_SHADOW_FAIL 0x08000000
|
|
|
|
#define DD_BITBLT 0x80000000
|
|
|
|
DC_DATA(unsigned, ddState, 0);
|
|
|
|
|
|
// Trace string.
|
|
DC_DATA_ARRAY(char, ddTraceString, TRC_BUFFER_SIZE, 0);
|
|
|
|
#else
|
|
#define DD_SET_STATE(a)
|
|
#define DD_UPD_STATE(a)
|
|
#define DD_CLR_STATE(a)
|
|
#endif
|
|
|
|
|