view ddk/gdidefs.h @ 0:20b4ed4eebe3

Checked in Windows 9x display minidriver for VirtualBox.
author Michal Necasek <mnecasek@yahoo.com>
date Sun, 19 Jun 2022 17:39:17 +0200
parents
children
line wrap: on
line source


/* Definitions for GDI drivers. */

/* Physical Bitmap structure. */
typedef struct {
    short int           bmType;
    unsigned short int  bmWidth;
    unsigned short int  bmHeight;
    unsigned short int  bmWidthBytes;
    BYTE                bmPlanes;
    BYTE                bmBitsPixel;
    BYTE FAR            *bmBits;
    unsigned long int   bmWidthPlanes;
    BYTE FAR            *bmlpPDevice;
    unsigned short int  bmSegmentIndex;
    unsigned short int  bmScanSegment;
    unsigned short int  bmFillBytes;
    unsigned short int  futureUse4;
    unsigned short int  futureUse5;
} BITMAP;

/* DIB structs also defined in windows.h. */
typedef struct {
    DWORD   bcSize;
    WORD    bcWidth;
    WORD    bcHeight;
    WORD    bcPlanes;
    WORD    bcBitCount;
} BITMAPCOREHEADER;
typedef BITMAPCOREHEADER FAR *LPBITMAPCOREHEADER;
typedef BITMAPCOREHEADER *PBITMAPCOREHEADER;

typedef struct {
    DWORD   biSize;
    DWORD   biWidth;
    DWORD   biHeight;
    WORD    biPlanes;
    WORD    biBitCount;
    DWORD   biCompression;
    DWORD   biSizeImage;
    DWORD   biXPelsPerMeter;
    DWORD   biYPelsPerMeter;
    DWORD   biClrUsed;
    DWORD   biClrImportant;
} BITMAPINFOHEADER;

typedef BITMAPINFOHEADER FAR *LPBITMAPINFOHEADER;
typedef BITMAPINFOHEADER *PBITMAPINFOHEADER;

typedef struct {
    BYTE    rgbtBlue;
    BYTE    rgbtGreen;
    BYTE    rgbtRed;
} RGBTRIPLE;

typedef struct {
    BYTE    rgbBlue;
    BYTE    rgbGreen;
    BYTE    rgbRed;
    BYTE    rgbReserved;
} RGBQUAD;

/* ICM Color Definitions */
typedef long    FXPT16DOT16, FAR *LPFXPT16DOT16;
typedef long    FXPT2DOT30,  FAR *LPFXPT2DOT30;

typedef struct tagCIEXYZ
{
    FXPT2DOT30  ciexyzX;
    FXPT2DOT30  ciexyzY;
    FXPT2DOT30  ciexyzZ;
} CIEXYZ;
typedef CIEXYZ  FAR *LPCIEXYZ;

typedef struct tagICEXYZTRIPLE
{
    CIEXYZ  ciexyzRed;
    CIEXYZ  ciexyzGreen;
    CIEXYZ  ciexyzBlue;
} CIEXYZTRIPLE;
typedef CIEXYZTRIPLE FAR    *LPCIEXYZTRIPLE;

typedef struct { 
    BITMAPCOREHEADER    bmciHeader;
    RGBQUAD             bmciColors[1];
} BITMAPCOREINFO;

typedef BITMAPCOREINFO FAR *LPBITMAPCOREINFO;
typedef BITMAPCOREINFO *PBITMAPCOREINFO;

typedef struct { 
    BITMAPINFOHEADER    bmiHeader;
    RGBQUAD             bmiColors[1];
} BITMAPINFO;

typedef BITMAPINFO FAR *LPBITMAPINFO;
typedef BITMAPINFO *PBITMAPINFO;

typedef struct {
    DWORD           bV4Size;
    LONG            bV4Width;
    LONG            bV4Height;
    WORD            bV4Planes;
    WORD            bV4BitCount;
    DWORD           bV4V4Compression;
    DWORD           bV4SizeImage;
    LONG            bV4XPelsPerMeter;
    LONG            bV4YPelsPerMeter;
    DWORD           bV4ClrUsed;
    DWORD           bV4ClrImportant;
    DWORD           bV4RedMask;
    DWORD           bV4GreenMask;
    DWORD           bV4BlueMask;
    DWORD           bV4AlphaMask;
    DWORD           bV4CSType;
    CIEXYZTRIPLE    bV4Endpoints;
    DWORD           bV4GammaRed;
    DWORD           bV4GammaGreen;
    DWORD           bV4GammaBlue;
} BITMAPV4HEADER, FAR *LPBITMAPV4HEADER, *PBITMAPV4HEADER;

typedef struct { 
    BITMAPV4HEADER  bmv4Header;
    RGBQUAD         bmv4Colors[1];
} BITMAPV4INFO;

typedef BITMAPV4INFO FAR *LPBITMAPV4INFO;
typedef BITMAPV4INFO *PBITMAPV4INFO;

/* currently, if the low byte of biCompression is non zero, 
 * it must be one of following */

#define BI_RGB              0x00
#define BI_RLE8             0x01
#define BI_RLE4             0x02
#define BI_BITFIELDS        0x03

#define BITMAP_SELECTED     0x01
#define BITMAP_64K          0x01

#define DIBSIGNATURE        0x4944

/* Point types are optional. */
#ifndef NOPTRC

typedef     struct {
    short int xcoord;
    short int ycoord;
} PTTYPE;
typedef PTTYPE *PPOINT;
typedef PTTYPE FAR *LPPOINT;

#define     POINT   PTTYPE

typedef struct {
    short int   left;
    short int   top;
    short int   right;
    short int   bottom;
} RECT;
typedef RECT    *PRECT;

#endif

typedef struct {
    PTTYPE  min;
    PTTYPE  ext;
} BOXTYPE;
typedef RECT FAR    *LPRECT;

/* Object definitions used by GDI support routines written in C */

#define OBJ_PEN         1
#define OBJ_BRUSH       2
#define OBJ_FONT        3

typedef struct {
    unsigned short int  lbStyle;
    unsigned long int   lbColor;
    unsigned short int  lbHatch;
    unsigned long int   lbBkColor;
    unsigned long int   lbhcmXform;
} LOGBRUSH;

#define lbPattern       lbColor

/* Brush Style definitions. */
#define     BS_SOLID            0
#define     BS_HOLLOW           1
#define     BS_HATCHED          2
#define     BS_PATTERN          3

#define     MaxBrushStyle       3

/* Hatch Style definitions. */
#define     HS_HORIZONTAL       0       /* ----- */
#define     HS_VERTICAL         1       /* ||||| */
#define     HS_FDIAGONAL        2       /* ///// */
#define     HS_BDIAGONAL        3       /* \\\\\ */
#define     HS_CROSS            4       /* +++++ */
#define     HS_DIAGCROSS        5       /* xxxxx */

#define     MaxHatchStyle       5


/* Logical Pen Structure. */
typedef struct {
    unsigned short int lopnStyle;
    PTTYPE             lopnWidth;
    unsigned long int  lopnColor;
    unsigned short int lopnStyle2;
    unsigned long int  lopnhcmXform;
} LOGPEN;

/* Line Style definitions. */
#define     LS_SOLID            0
#define     LS_DASHED           1
#define     LS_DOTTED           2
#define     LS_DOTDASHED        3
#define     LS_DASHDOTDOT       4
#define     LS_NOLINE           5
#define     LS_INSIDEFRAME      6
#define     MaxLineStyle        LS_NOLINE

#define     LS_ENDCAP_FLAT      0x01
#define     LS_ENDCAP_ROUND     0x02
#define     LS_ENDCAP_SQUARE    0x04
#define     LS_JOIN_BEVEL       0x08
#define     LS_JOIN_MITER       0x10
#define     LS_JOIN_ROUND       0x20


/* The size to allocate for the lfFaceName field in the logical font. */
#ifndef     LF_FACESIZE
#define     LF_FACESIZE     32
#endif

/* Various constants for defining a logical font. */
#define OUT_DEFAULT_PRECIS      0
#define OUT_STRING_PRECIS       1
#define OUT_CHARACTER_PRECIS    2
#define OUT_STROKE_PRECIS       3
#define OUT_TT_PRECIS           4
#define OUT_DEVICE_PRECIS       5
#define OUT_RASTER_PRECIS       6
#define OUT_TT_ONLY_PRECIS      7

#define CLIP_DEFAULT_PRECIS     0
#define CLIP_CHARACTER_PRECIS   1
#define CLIP_STROKE_PRECIS      2
#define CLIP_MASK               0x0F
#define CLIP_LH_ANGLES          0x10
#define CLIP_TT_ALWAYS          0x20
#define CLIP_EMBEDDED           0x80

#define DEFAULT_QUALITY         0
#define DRAFT_QUALITY           1
#define PROOF_QUALITY           2

#define DEFAULT_PITCH           0
#define FIXED_PITCH             1
#define VARIABLE_PITCH          2

#define ANSI_CHARSET            0
#define DEFAULT_CHARSET         1
#define SYMBOL_CHARSET          2
#define MAC_CHARSET             77
#define SHIFTJIS_CHARSET        128
#define HANGEUL_CHARSET         129
#define CHINESEBIG5_CHARSET     136
#define OEM_CHARSET             255


/*      GDI font families.                                              */
#define FF_DONTCARE     (0<<4)  /* Don't care or don't know.            */
#define FF_ROMAN        (1<<4)  /* Variable stroke width, serifed.      */
                                /* Times Roman, Century Schoolbook, etc.*/
#define FF_SWISS        (2<<4)  /* Variable stroke width, sans-serifed. */
                                /* Helvetica, Swiss, etc.               */
#define FF_MODERN       (3<<4)  /* Constant stroke width, serifed or sans-serifed. */
                                /* Pica, Elite, Courier, etc.           */
#define FF_SCRIPT       (4<<4)  /* Cursive, etc.                        */
#define FF_DECORATIVE   (5<<4)  /* Old English, etc.                    */


/* Font weights lightest to heaviest. */
#define FW_DONTCARE             0
#define FW_THIN                 100
#define FW_EXTRALIGHT           200
#define FW_LIGHT                300
#define FW_NORMAL               400
#define FW_MEDIUM               500
#define FW_SEMIBOLD             600
#define FW_BOLD                 700
#define FW_EXTRABOLD            800
#define FW_HEAVY                900

#define FW_ULTRALIGHT           FW_EXTRALIGHT
#define FW_REGULAR              FW_NORMAL
#define FW_DEMIBOLD             FW_SEMIBOLD
#define FW_ULTRABOLD            FW_EXTRABOLD
#define FW_BLACK                FW_HEAVY

/* Enumeration font types. */
#define     RASTER_FONTTYPE         1
#define     DEVICE_FONTTYPE         2



typedef     struct  {
    short int   lfHeight;
    short int   lfWidth;
    short int   lfEscapement;
    short int   lfOrientation;
    short int   lfWeight;
    BYTE        lfItalic;
    BYTE        lfUnderline;
    BYTE        lfStrikeOut;
    BYTE        lfCharSet;
    BYTE        lfOutPrecision;
    BYTE        lfClipPrecision;
    BYTE        lfQuality;
    BYTE        lfPitchAndFamily;
    BYTE        lfFaceName[LF_FACESIZE];
} LOGFONT;


#define     InquireInfo     0x01        /* Inquire Device GDI Info         */
#define     EnableDevice    0x00        /* Enable Device                   */
#define     InfoContext     0x8000      /* Inquire/Enable for info context */

/* Device Technology types */
#define     DT_PLOTTER          0       /* Vector plotter          */
#define     DT_RASDISPLAY       1       /* Raster display          */
#define     DT_RASPRINTER       2       /* Raster printer          */
#define     DT_RASCAMERA        3       /* Raster camera           */
#define     DT_CHARSTREAM       4       /* Character-stream, PLP   */
#define     DT_METAFILE         5       /* Metafile, VDM           */
#define     DT_DISPFILE         6       /* Display-file            */
#define     DT_JUMBO            11      /* SPAG LJ cool thing      */

/* Curve Capabilities */
#define     CC_NONE         0x0000      /* Curves not supported    */
#define     CC_CIRCLES      0x0001      /* Can do circles          */
#define     CC_PIE          0x0002      /* Can do pie wedges       */
#define     CC_CHORD        0x0004      /* Can do chord arcs       */
#define     CC_ELLIPSES     0x0008      /* Can do ellipese         */
#define     CC_WIDE         0x0010      /* Can do wide lines       */
#define     CC_STYLED       0x0020      /* Can do styled lines     */
#define     CC_WIDESTYLED   0x0040      /* Can do wide styled lines*/
#define     CC_INTERIORS    0x0080      /* Can do interiors        */
#define     CC_ROUNDRECT    0x0100      /* Can do round rectangles */
#define     CC_POLYBEZIER   0x0200      /* Can do polybeziers      */

/* Line Capabilities */
#define     LC_NONE         0x0000      /* Lines not supported     */
#define     LC_POLYSCANLINE 0x0001      /* Poly Scanlines supported*/
#define     LC_POLYLINE     0x0002      /* Can do polylines        */
#define     LC_MARKER       0x0004      /* Can do markers          */
#define     LC_POLYMARKER   0x0008      /* Can do polymarkers      */
#define     LC_WIDE         0x0010      /* Can do wide lines       */
#define     LC_STYLED       0x0020      /* Can do styled lines     */
#define     LC_WIDESTYLED   0x0040      /* Can do wide styled lines*/
#define     LC_INTERIORS    0x0080      /* Can do interiors        */

/* Polygonal Capabilities */
#define     PC_NONE         0x0000      /* Polygonals not supported*/
#define     PC_ALTPOLYGON   0x0001      /* Can do even odd polygons*/
#define     PC_POLYGON      0x0001      /* old name for ALTPOLYGON */
#define     PC_RECTANGLE    0x0002      /* Can do rectangles       */
#define     PC_WINDPOLYGON  0x0004      /* Can do winding polygons */
#define     PC_TRAPEZOID    0x0004      /* old name for WINDPOLYGON*/
#define     PC_SCANLINE     0x0008      /* Can do scanlines        */
#define     PC_WIDE         0x0010      /* Can do wide borders     */
#define     PC_STYLED       0x0020      /* Can do styled borders   */
#define     PC_WIDESTYLED   0x0040      /* Can do wide styled borders*/
#define     PC_INTERIORS    0x0080      /* Can do interiors        */
#define     PC_POLYPOLYGON  0x0100      /* Can do PolyPolygons     */

/* Clipping Capabilities */
#define     CP_NONE         0x0000      /* no clipping of Output   */
#define     CP_RECTANGLE    0x0001      /* Output clipped to Rects */
#define     CP_REGION       0x0002      /* not supported           */
#define     CP_REGION32     0x0004      /* Output clipped to regions */

/* Text Capabilities */
#define TC_OP_CHARACTER 0x0001          /* Can do OutputPrecision    CHARACTER      */
#define TC_OP_STROKE    0x0002          /* Can do OutputPrecision    STROKE         */
#define TC_CP_STROKE    0x0004          /* Can do ClipPrecision      STROKE         */
#define TC_CR_90        0x0008          /* Can do CharRotAbility     90             */
#define TC_CR_ANY       0x0010          /* Can do CharRotAbility     ANY            */
#define TC_SF_X_YINDEP  0x0020          /* Can do ScaleFreedom       X_YINDEPENDENT */
#define TC_SA_DOUBLE    0x0040          /* Can do ScaleAbility       DOUBLE         */
#define TC_SA_INTEGER   0x0080          /* Can do ScaleAbility       INTEGER        */
#define TC_SA_CONTIN    0x0100          /* Can do ScaleAbility       CONTINUOUS     */
#define TC_EA_DOUBLE    0x0200          /* Can do EmboldenAbility    DOUBLE         */
#define TC_IA_ABLE      0x0400          /* Can do ItalisizeAbility   ABLE           */
#define TC_UA_ABLE      0x0800          /* Can do UnderlineAbility   ABLE           */
#define TC_SO_ABLE      0x1000          /* Can do StrikeOutAbility   ABLE           */
#define TC_RA_ABLE      0x2000          /* Can do RasterFontAble     ABLE           */
#define TC_VA_ABLE      0x4000          /* Can do VectorFontAble     ABLE           */
#define TC_RESERVED     0x8000          /* Reserved. Must be returned zero.        */

/* Raster Capabilities */
#define RC_NONE         0x0000          /* No Raster Capabilities       */
#define RC_BITBLT       0x0001          /* Can do bitblt                */
#define RC_BANDING      0x0002          /* Requires banding support     */
#define RC_SCALING      0x0004          /* does scaling while banding   */
#define RC_BITMAP64     0x0008          /* supports >64k bitmaps        */
#define RC_GDI20_OUTPUT 0x0010          /* has 2.0 output calls         */
#define RC_GDI20_STATE  0x0020          /* dc has a state block         */
#define RC_SAVEBITMAP   0x0040          /* can save bitmaps locally     */
#define RC_DI_BITMAP    0x0080          /* can do DIBs                  */
#define RC_PALETTE      0x0100          /* can do color pal management  */
#define RC_DIBTODEV     0x0200          /* can do SetDIBitsToDevice     */
#define RC_BIGFONT      0x0400          /* can do BIGFONTs              */
#define RC_STRETCHBLT   0x0800          /* can do StretchBlt            */
#define RC_FLOODFILL    0x1000          /* can do FloodFill             */
#define RC_STRETCHDIB   0x2000          /* can do StretchDIBits         */
#define RC_OP_DX_OUTPUT 0x4000          /* can do smart ExtTextOut w/dx */
#define RC_DEVBITS      0x8000          /* supports device bitmaps      */

/* DC Management Flags */
#define DC_SPDevice     0000001     /* Seperate PDevice required per device/filename */
#define DC_1PDevice     0000002     /* Only 1 PDevice allowed per device/filename    */
#define DC_IgnoreDFNP   0000004     /* Ignore device/filename pairs when matching    */

/* dpCaps1 capability bits  */
#define C1_TRANSPARENT  0x0001      /* supports transparency                */
#define TC_TT_ABLE      0x0002      /* can do TT through DDI or brute       */
#define C1_TT_CR_ANY    0x0004      /* can do rotated TT fonts              */
#define C1_EMF_COMPLIANT 0x0008     /* Win95 - supports metafile spooling   */
#define C1_DIBENGINE    0x0010      /* DIB Engine compliant driver          */
#define C1_GAMMA_RAMP   0x0020      /* supports gamma ramp setting          */
#define C1_ICM          0x0040      /* does some form of ICM support        */
#define C1_REINIT_ABLE  0x0080      /* Driver supports ReEnable             */
#define C1_GLYPH_INDEX  0x0100      /* Driver supports glyph index fonts    */
#define C1_BIT_PACKED   0x0200      /* Supports bit-packed glyphs           */
#define C1_BYTE_PACKED  0x0400      /* Supports byte-packed glyphs          */
#define C1_COLORCURSOR  0x0800      /* Driver supports color_cursors and async SetCursor */
#define C1_CMYK_ABLE    0x1000      /* Driver supports CMYK ColorRefs       */
#define C1_SLOW_CARD    0x2000      /* Little or no acceleration (VGA, etc.)*/

/* dpCapsFE capability bits */
#define FEC_TT_DBCS     0x0020      /* can output DBCS TT fonts correctly   */
#define FEC_WIFE_ABLE   0x0080      /* can handle WIFE font as Engine font  */

typedef struct {
    short int           dpVersion;
    short int           dpTechnology;
    short int           dpHorzSize;
    short int           dpVertSize;
    short int           dpHorzRes;
    short int           dpVertRes;
    short int           dpBitsPixel;
    short int           dpPlanes;
    short int           dpNumBrushes;
    short int           dpNumPens;
    short int           dpCapsFE;
    short int           dpNumFonts;
    short int           dpNumColors;
    short int           dpDEVICEsize;
    unsigned short int  dpCurves;
    unsigned short int  dpLines;
    unsigned short int  dpPolygonals;
    unsigned short int  dpText;
    unsigned short int  dpClip;
    unsigned short int  dpRaster;
    short int           dpAspectX;
    short int           dpAspectY;
    short int           dpAspectXY;
    short int           dpStyleLen;
    PTTYPE              dpMLoWin;
    PTTYPE              dpMLoVpt;
    PTTYPE              dpMHiWin;
    PTTYPE              dpMHiVpt;
    PTTYPE              dpELoWin;
    PTTYPE              dpELoVpt;
    PTTYPE              dpEHiWin;
    PTTYPE              dpEHiVpt;
    PTTYPE              dpTwpWin;
    PTTYPE              dpTwpVpt;
    short int           dpLogPixelsX;
    short int           dpLogPixelsY;
    short int           dpDCManage;
    unsigned short int  dpCaps1;
    short int           futureuse4;
    short int           futureuse5;
    short int           futureuse6;
    short int           futureuse7;
    WORD                dpNumPalReg;
    WORD                dpPalReserved;
    WORD                dpColorRes;
} GDIINFO;

/* This bit in the dfType field signals that the dfBitsOffset field is an
   absolute memory address and should not be altered. */
#define PF_BITS_IS_ADDRESS  4

/* This bit in the dfType field signals that the font is device realized. */
#define PF_DEVICE_REALIZED  0x80

/* These bits in the dfType give the fonttype -
       raster, vector, other1, other2. */
#define PF_RASTER_TYPE      0
#define PF_VECTOR_TYPE      1
#define PF_OTHER1_TYPE      2
#define PF_OTHER2_TYPE      3
#define PF_GLYPH_INDEX   0x20
#define PF_WIFE_TYPE     0x08

/* Glyph types for EngineGetGlyphBmp */
#define EGB_BITMAP          1
#define EGB_OUTLINE         2
#define EGB_GRAY2_BITMAP    8
#define EGB_GRAY4_BITMAP    9
#define EGB_GRAY8_BITMAP   10


/* The size to allocate for the dfMaps field in the physical font. */
#ifndef     DF_MAPSIZE
#define     DF_MAPSIZE      1
#endif

/* Font structure. */
typedef     struct  {
    short int           dfType;
    short int           dfPoints;
    short int           dfVertRes;
    short int           dfHorizRes;
    short int           dfAscent;
    short int           dfInternalLeading;
    short int           dfExternalLeading;
    BYTE                dfItalic;
    BYTE                dfUnderline;
    BYTE                dfStrikeOut;
    short int           dfWeight;
    BYTE                dfCharSet;
    short int           dfPixWidth;
    short int           dfPixHeight;
    BYTE                dfPitchAndFamily;
    short int           dfAvgWidth;
    short int           dfMaxWidth;
    BYTE                dfFirstChar;
    BYTE                dfLastChar;
    BYTE                dfDefaultChar;
    BYTE                dfBreakChar;
    short int           dfWidthBytes;
    unsigned long int   dfDevice;
    unsigned long int   dfFace;
    unsigned long int   dfBitsPointer;
    unsigned long int   dfBitsOffset;
    BYTE                dfReservedByte;
    unsigned short      dfMaps[DF_MAPSIZE];
} FONTINFO;


typedef struct {
    short int           erType;
    short int           erPoints;
    short int           erVertRes;
    short int           erHorizRes;
    short int           erAscent;
    short int           erInternalLeading;
    short int           erExternalLeading;
    BYTE                erItalic;
    BYTE                erUnderline;
    BYTE                erStrikeOut;
    short int           erWeight;
    BYTE                erCharSet;
    short int           erPixWidth;
    short int           erPixHeight;
    BYTE                erPitchAndFamily;
    short int           erAvgWidth;
    short int           erMaxWidth;
    BYTE                erFirstChar;
    BYTE                erLastChar;
    BYTE                erDefaultChar;
    BYTE                erBreakChar;
    short int           erWidthBytes;
    unsigned long int   erDevice;
    unsigned long int   erFace;
    unsigned long int   erBitsPointer;
    unsigned long int   erBitsOffset;
    BYTE                erReservedByte;
    short int           erUnderlinePos;
    short int           erUnderlineThick;
    short int           erStrikeoutPos;
    short int           erStrikeoutThick;
} SCALABLEFONTINFO;


typedef struct {
    short int           ftHeight;
    short int           ftWidth;
    short int           ftEscapement;
    short int           ftOrientation;
    short int           ftWeight;
    BYTE                ftItalic;
    BYTE                ftUnderline;
    BYTE                ftStrikeOut;
    BYTE                ftOutPrecision;
    BYTE                ftClipPrecision;
    unsigned short int  ftAccelerator;
    short int           ftOverhang;
} TEXTXFORM;


typedef struct {
    short int   tmHeight;
    short int   tmAscent;
    short int   tmDescent;
    short int   tmInternalLeading;
    short int   tmExternalLeading;
    short int   tmAveCharWidth;
    short int   tmMaxCharWidth;
    short int   tmWeight;
    BYTE        tmItalic;
    BYTE        tmUnderlined;
    BYTE        tmStruckOut;
    BYTE        tmFirstChar;
    BYTE        tmLastChar;
    BYTE        tmDefaultChar;
    BYTE        tmBreakChar;
    BYTE        tmPitchAndFamily;
    BYTE        tmCharSet;
    short int   tmOverhang;
    short int   tmDigitizedAspectX;
    short int   tmDigitizedAspectY;
} TEXTMETRIC;

typedef struct {
    short int           Rop2;
    short int           bkMode;
    unsigned long int   bkColor;
    unsigned long int   TextColor;
    short int           TBreakExtra;
    short int           BreakExtra;
    short int           BreakErr;
    short int           BreakRem;
    short int           BreakCount;
    short int           CharExtra;
    unsigned long int   LbkColor;
    unsigned long int   LTextColor;
    DWORD               ICMCXform;
    short               StretchBltMode;
    DWORD               eMiterLimit;
} DRAWMODE;


/* Background Mode definitions. */
#define TRANSPARENT             1
#define OPAQUE                  2

#define BKMODE_TRANSPARENT      1
#define BKMODE_OPAQUE           2
#define BKMODE_LEVEL1           3
#define BKMODE_LEVEL2           4
#define BKMODE_LEVEL3           5
#define BKMODE_TRANSLATE        6

/* StretchBlt Mode definitions. */
#define STRETCH_ANDSCANS        1
#define STRETCH_ORSCANS         2
#define STRETCH_DELETESCANS     3
#define STRETCH_HALFTONE        4

#define SBM_BLACKONWHITE        STRETCH_ANDSCANS
#define SBM_WHITEONBLACK        STRETCH_ORSCANS
#define SBM_COLORONCOLOR        STRETCH_DELETESCANS
#define SBM_HALFTONE            STRETCH_HALFTONE

typedef struct {
    short int   scnPntCnt;
    short int   scnPntTop;
    short int   scnPntBottom;
    short int   scnPntX[2];
    short int   scnPntCntToo;
} SCAN, FAR* LPSCAN;

typedef struct {
    DWORD   cbSize;
    LPVOID  lpDestDev;
    DWORD   nEscape;
    DWORD   cbInput;
    LPVOID  lpInput;
    POINT   ptOrigin;
    DWORD   dwUniq;
    RECT    rcBBox;
    DWORD   cScans;
    LPSCAN  lpScan;
} DRAWESCAPE, FAR* LPDRAWESCAPE;

typedef struct {
    WORD    id;
    WORD    cbSize;
    LPRECT  lprcClip;
    DWORD   dwUniq;
    RECT    rcBBox;
    DWORD   cScans;
    LPSCAN  lpScan;
} REGION, FAR* LPREGION;


/* Output Style definitions. */

#define OS_POLYBEZIER       1
#define OS_ARC              3
#define OS_SCANLINES        4
#define OS_POLYSCANLINE     5
#define OS_RECTANGLE        6
#define OS_ELLIPSE          7
#define OS_MARKER           8
#define OS_POLYLINE         18
#define OS_TRAPEZOID        20
#define OS_WINDPOLYGON      OS_TRAPEZOID
#define OS_POLYGON          22
#define OS_ALTPOLYGON       OS_POLYGON
#define OS_PIE              23
#define OS_POLYMARKER       24
#define OS_CHORD            39
#define OS_CIRCLE           55

#define OS_POLYPOLYGON      0x4000  /* ORed with OS_WIND/ALTPOLYGON. */

#define OS_BEGINNSCAN       80
#define OS_ENDNSCAN         81

#define OEM_FAILED          0x80000000L

#define NEWFRAME                     1
#define ABORTDOC                     2
#define NEXTBAND                     3
#define SETCOLORTABLE                4
#define GETCOLORTABLE                5
#define FLUSHOUTPUT                  6
#define DRAFTMODE                    7
#define QUERYESCSUPPORT              8
#define SETPRINTERDC                 9          /* DDK: between GDI and Driver. */
#define SETABORTPROC                 9          /* SDK: between application and GDI. */
#define STARTDOC                     10
#define ENDDOC                       11
#define GETPHYSPAGESIZE              12
#define GETPRINTINGOFFSET            13
#define GETSCALINGFACTOR             14
#define MFCOMMENT                    15
#define GETPENWIDTH                  16
#define SETCOPYCOUNT                 17
#define SELECTPAPERSOURCE            18
#define DEVICEDATA                   19
#define PASSTHROUGH                  19
#define GETTECHNOLGY                 20
#define GETTECHNOLOGY                20
#define SETLINECAP                   21
#define SETLINEJOIN                  22
#define SETMITERLIMIT                23
#define BANDINFO                     24
#define DRAWPATTERNRECT              25
#define GETVECTORPENSIZE             26
#define GETVECTORBRUSHSIZE           27
#define ENABLEDUPLEX                 28
#define GETSETPAPERBINS              29
#define GETSETPRINTORIENT            30
#define ENUMPAPERBINS                31
#define SETDIBSCALING                32
#define EPSPRINTING                  33
#define ENUMPAPERMETRICS             34
#define GETSETPAPERMETRICS           35
#define GETVERSION                   36
#define POSTSCRIPT_DATA              37
#define POSTSCRIPT_IGNORE            38
#define QUERYROPSUPPORT              40
#define GETDEVICEUNITS               42
#define RESETDEVICE                  128
#define GETEXTENDEDTEXTMETRICS       256
#define GETEXTENTTABLE               257
#define GETPAIRKERNTABLE             258
#define GETTRACKKERNTABLE            259
#define EXTTEXTOUT                   512
#define GETFACENAME                  513
#define DOWNLOADFACE                 514
#define ENABLERELATIVEWIDTHS         768
#define ENABLEPAIRKERNING            769
#define SETKERNTRACK                 770
#define SETALLJUSTVALUES             771
#define SETCHARSET                   772
#define STRETCHBLT                   2048
#define QUERYDIBSUPPORT              3073
#define QDI_SETDIBITS                0x0001
#define QDI_GETDIBITS                0x0002
#define QDI_DIBTOSCREEN              0x0004
#define QDI_STRETCHDIB               0x0008
#define DCICOMMAND                   3075
#define BEGIN_PATH                   4096
#define CLIP_TO_PATH                 4097
#define END_PATH                     4098
#define EXT_DEVICE_CAPS              4099
#define RESTORE_CTM                  4100
#define SAVE_CTM                     4101
#define SET_ARC_DIRECTION            4102
#define SET_BACKGROUND_COLOR         4103
#define SET_POLY_MODE                4104
#define SET_SCREEN_ANGLE             4105
#define SET_SPREAD                   4106
#define TRANSFORM_CTM                4107
#define SET_CLIP_BOX                 4108
#define SET_BOUNDS                   4109
#define OPENCHANNEL                  4110
#define DOWNLOADHEADER               4111
#define CLOSECHANNEL                 4112
#define SETGDIXFORM                  4113
#define RESETPAGE                    4114
#define POSTSCRIPT_PASSTHROUGH       4115
#define ENCAPSULATED_POSTSCRIPT      4116   


typedef FONTINFO    FAR *LPFONTINFO;
typedef DRAWMODE    FAR *LPDRAWMODE;
typedef TEXTXFORM   FAR *LPTEXTXFORM;
typedef TEXTMETRIC  FAR *LPTEXTMETRIC;
typedef LOGFONT     FAR *LPLOGFONT;
typedef LOGPEN      FAR *LPLOGPEN;
typedef LOGBRUSH    FAR *LPLOGBRUSH;
typedef BITMAP      FAR *LPBITMAP;
typedef FARPROC     FAR *LPFARPROC;
typedef GDIINFO     FAR *LPGDIINFO;
typedef SCALABLEFONTINFO FAR * LPSCALABLEFONTINFO;