Jump to content

EnableDeviceContext

From EDM2
Revision as of 19:42, 12 December 2022 by Ak120 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

In response to OS2_PM_DRV_ENABLE: EnableDeviceContext, the driver reserves the memory it needs to support this instance of a DC and initializes the instance data.

Syntax

EnableDeviceContext(ulSubfunction, pParam1, pParam2);

Parameters

ulSubfunction (ULONG) - input
05h.
pParam1 (PULONG) - input
A pointer to a DENPARAMS structure:
ulStateInfo
Value returned by FillPhysicalDeviceBlock.
ulType
Type of device context. Defined values are:
  • OD_QUEUED
  • OD_DIRECT
  • OD_INFO
  • OD_MEMORY
For details, see DevOpenDC in the Presentation Manager Programming Reference.
ulHDC
Device context handle.
pParam2 (PLONG) - input
Not used.

Return Code

rc (LONG) - returns
Return codes.
The handling routine should return a LONG integer. Valid values are:
  • -1 Error.
  • other Pointer (pInstance) to the DC instance data.

Remarks

The value of the return code from this subfunction, if it is not -1, is saved by the system and passed back to the presentation driver on all future calls to this DC instance. This value is expected to be a pointer or handle to the instance data.

The handling routine initializes relevant fields in the instance data to their default values. For example, it calls WinQueryProcessCP to get the initial Code Page ID.

STARTDOC/ABORTDOC/ENDDOC (Hardcopy drivers only)

The hardcopy driver allows the following sequences to GreEscapes within the subfunctions EnableDeviceContext and BeginCloseDC brackets:

GreEscape DEVESC_STARTDOC
GreEscape DEVESC_ENDDOC - spools first job 
GreEscape DEVESC_STARTDOC
GreEscape DEVESC_ENDDOC - spools second job 
GreEscape DEVESC_STARTDOC
GreEscape DEVESC_ENDDOC
 
GreEscape DEVESC_STARTDOC
GreEscape DEVESC_ABORTDOC - terminates job 
GreEscape DEVESC_STARTDOC
GreEscape DEVESC_ENDDOC - spools first job 

Instance data refers to information (such as the name of a spool file and whether a bit map has been created) that applies to a specific instance of a device context. Global data, which applies to all instances of a device context that is using the same presentation driver, is held in the Physical Device Block (PDB). A pointer to this block is passed in the DENPARAMS structure to the EnableDeviceContext routine to be included in the instance data. See Instance Data. A typical example of instance data follows:

typedef struct _DC {
  USHORT            DCIIdentifier;     /* Contains DC_IDENTIFIER                */
  ULONG             DCIDCType;         /* DC type 0-8                           *
  HDC               DCIhdc;            /* DC handle                             */

  struct _DC *      DCINextEntry;      /* Next instance                         */
  LONG              DCISaveCount;      /* Number of saved DC states             */

  pBitmapHeader     DCISelListEntry;   /* Selected bit-map list entry           */
  USHORT            DCIBitmapType;     /* Current bit-map type                  */

  POINTL            DCICurrPos;        /* Current position                      */

  DCHARBUNDLE       DCICurTxtAts;      /* Current Text attributes bundle        */
  DLINEBUNDLE       DCICurLinAts;      /* Current Line attributes bundle        */
  DAREABUNDLE       DCICurPtnAts;      /* Current Pattern attributes bundle     */
  DIMAGEBUNDLE      DCICurImgAts;      /* Current Image attributes bundle       */
  DMARKERBUNDLE     DCICurMrkAts;      /* Current Marker attributes bundle      */

  USHORT            DCILinePatCnt;     /* Current line pattern count            */
  USHORT            DCILineTypMask;    /* Mask used for line types              */

  POINTL            DCIPatternOrigin;  /* Pattern origin                        */

  pBitmapHeader     DCIMarker;         /* Pointer to marker definition          */
  BOOL              DCIMarkerSimReq;   /* On, if simulation required            */

  USHORT            DCIFontType;       /* Type of current font                  */

  pRealizedFontType DCIRealizedFonts;  /* Font table array                      */
  USHORT            DCIFontTabNum;     /* Number of Font table entries          */
  BOOL              DCIPairKerning;    /* Enabled\disabled state                */

  ULONG             DCICodePage;       /* Currently selected code page          */

  BOOL              DCITextSim;        /* Set if text simulation required       */

  POINTL            DCIOrigin;         /* Current DC origin                     */

  PCOLORTABLE       DCIColorTable;     /* Pointer to color table                */
  BOOL              DCIBackgndDefined; /* Status of CLR_BACKGROUND               */
  BOOL              DCINeutralDefined; /* Status of CLR_NEUTRAL                 */
  USHORT            DCIColTabSize;     /* Color table size                      */
  USHORT            DCIColFormat;      /* Format of color table                 */
  USHORT            DCIColStatus;      /* Status of color table                 */
  USHORT            DCILowIndex;       /* Lowest index in table                 */
  USHORT            DCIHighIndex;      /* Highest index in table                */
  USHORT            DCISysColState;    /* Latest state of system colors         */

  COLORPAIR         DCILineColatts;    /* Line color indexes                    */
  COLORPAIR         DCIPattColatts;    /* Pattern colors indexes                */
  COLORPAIR         DCICharColatts;    /* Character colors indexes              */
  COLORPAIR         DCIImagColatts;    /* Image colors indexes                  */
  COLORPAIR         DCIMarkColatts;    /* Marker colors indexes                 */

  ClipRectangle     DCIClipRects[CACHED_CLIPS];
                                       /* Clip rectangles                       */
  BOOL              ClipChanged;       /*                                       */
  USHORT            DCIClipOrder;      /* Order of clip rectangles              */
  USHORT            DCIClipNum;        /* Number of clip rectangles             */
  RECTL             DCIBoundingClip;   /* Current screen/bit-map area           */
  USHORT            DCIEngineClips;    /* Clip regions in engine                */
  BOOL              DCIIsDirty;        /* Indicates when clip regions           */
                                       /* are invalid

  RECTL             DCIGPIBounds;      /* Current GPI bounds                    */
  BOOL              DCIDefGPIBounds;   /* On, if GPI bounds are default         */
  RECTL             DCIUserBounds;     /* Current user bounds                   */
  BOOL              DCIDefUserBounds;  /* On, if user bounds are default        */
  SHORT             DCIConvFactor;     /* For device, conversion                */

  BOOL              DCICorrInvalid;    /* Correlation rectangles invalid        */
  RECTL             DCIPickWindowPage; /* Pick window in page coordinates       */
  DevRect           DCIPickWindowDevice;
                                       /* Pick window in device coordinates     */
  PRECTL            DCICorrRects;      /* Current correlation rectangles        */
  USHORT            DCICorrNum;        /* Number of correlation rectangles      */
  USHORT            DCICorrSize;       /* Number of correlation rectangles for  */
                                       /* which storage has been allocated      */

  XFORM             DCITransform;      /* Transformation data                   */

  FONTDETAILS       DCIAvioFonts[CNT_LOADABLE_LCIDS + 1];
                                       /* AVIO loadable font definitions        */

  USHORT            DCIChanged;        /* Shows non-default bundles             */

  USHORT            DCISpacingType;    /* Spacing type of current font          */
  BOOL              DCIXFrmSimple;     /* Transform type                        */
  ULONG             StyleNumber;       /* Line style state and mask             */

  USHORT            DCICommandMask;    /* Used to mask command bits             */

  POINTL            DCICurrPosWorld;   /* Current world position                */
  pBitmapHeader     Pattern;           /* Pattern for direct DC                 */

  AVIOINFO          DCIAvioInfo;       /* Avioparms material                    */
  FONTDETAILS       CurrentFont;       /* Presentation Mgr. format current font */
  PDEVPAL           Palette;           /* Handle/pointer of palette             */
  PRGB2             DCIDeviceDefaultPalette;
                                       /* Device default palette that was       */
                                       /* current the last time color table     */
                                       /* indexes were calculated               */
} DC;